pax_global_header00006660000000000000000000000064141372223740014517gustar00rootroot0000000000000052 comment=9006af6a09cc334ac1a1af41b6e5cbdb10264149 DarkRadiant-2.14.0/000077500000000000000000000000001413722237400137675ustar00rootroot00000000000000DarkRadiant-2.14.0/.editorconfig000066400000000000000000000002231413722237400164410ustar00rootroot00000000000000# To learn more about .editorconfig see https://aka.ms/editorconfigdocs # All files [*] indent_style = space # Xml files [*.xml] indent_size = 4 DarkRadiant-2.14.0/.gitattributes000066400000000000000000000007431413722237400166660ustar00rootroot00000000000000# Auto detect text files and perform LF normalization * text=auto # Custom for Visual Studio *.cs diff=csharp *.sln merge=union *.csproj merge=union *.vbproj merge=union *.fsproj merge=union *.dbproj merge=union # Standard to msysgit *.doc diff=astextplain *.DOC diff=astextplain *.docx diff=astextplain *.DOCX diff=astextplain *.dot diff=astextplain *.DOT diff=astextplain *.pdf diff=astextplain *.PDF diff=astextplain *.rtf diff=astextplain *.RTF diff=astextplain DarkRadiant-2.14.0/.github/000077500000000000000000000000001413722237400153275ustar00rootroot00000000000000DarkRadiant-2.14.0/.github/workflows/000077500000000000000000000000001413722237400173645ustar00rootroot00000000000000DarkRadiant-2.14.0/.github/workflows/build.yml000066400000000000000000000073671413722237400212230ustar00rootroot00000000000000name: Build on: [push] jobs: Windows-Build: runs-on: windows-latest env: # Path to the solution file relative to the root of the project. SOLUTION_FILE_PATH: .\DarkRadiant.sln TESTS_FILE_PATH: .\install\Tests.exe BUILD_CONFIGURATION: Release steps: - uses: actions/checkout@v2 - name: Inject commit hash in version.h Header env: VERSION_HEADER_FILE: include\version.h SHA: ${{github.sha}} run: | $sha = $env:SHA.Substring(0, 7) Write-Host "Writing $sha to $env:VERSION_HEADER_FILE" $replaced = Get-Content $env:VERSION_HEADER_FILE | % { if ($_ -match '#define RADIANT_VERSION "((\d+.\d+.\d+)([\w\d]*))"') { $_.Replace($matches[1], $matches[2] + "_rev$sha") } else { $_ } }; $replaced | Out-File $env:VERSION_HEADER_FILE shell: powershell - name: Add MSBuild to PATH uses: microsoft/setup-msbuild@v1 - name: Restore NuGet packages working-directory: ${{env.GITHUB_WORKSPACE}} run: nuget restore ${{env.SOLUTION_FILE_PATH}} - name: Build working-directory: ${{env.GITHUB_WORKSPACE}} run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=x64 /maxcpucount:4 /nodeReuse:false /p:UseSharedConfiguration=false ${{env.SOLUTION_FILE_PATH}} - name: Setup VSTest.console.exe uses: darenm/Setup-VSTest@v1 - name: Run Unit Tests run: | FOR /F "tokens=* USEBACKQ" %%g IN (`powershell -Command "(Get-ChildItem -Recurse -Path 'C:\Program Files (x86)\Microsoft Visual Studio\' -Filter "GoogleTestAdapter.TestAdapter.dll" -ErrorAction SilentlyContinue).DirectoryName"`) do (SET "GTEST_ADAPTER_PATH=%%g") echo Test Adapter Path resolved to: %GTEST_ADAPTER_PATH% vstest.console.exe ${{env.TESTS_FILE_PATH}} /Platform:x64 /Logger:trx /TestAdapterPath:"%%GTEST_ADAPTER_PATH%%" shell: cmd - name: Generate Portable Package run: powershell -ExecutionPolicy ByPass .\compile_release_package.ps1 -Platform x64 -SkipBuild -GenerateSetupPackage:$false -GeneratePortablePackage:$false -OutputFolder ..\..\PortablePackage\ shell: cmd working-directory: .\tools\scripts - name: Upload Portable Package uses: actions/upload-artifact@v2 with: name: darkradiant-portable-package-x64 path: | tools/scripts/DarkRadiant_install.x64/**/* !tools/scripts/DarkRadiant_install.x64/**/*.pdb - name: Upload Portable Package PDBs uses: actions/upload-artifact@v2 with: name: darkradiant-pdb-files-x64 path: | tools/scripts/DarkRadiant_install.x64/**/*.pdb - name: Upload Test Results uses: actions/upload-artifact@v2 with: name: unit-test-results path: TestResults\*.trx Linux-Build: runs-on: ubuntu-latest env: BUILD_TYPE: Release steps: - uses: actions/checkout@v2 - name: Install Package Dependencies run: | sudo apt-get update sudo apt-get install -yq gettext pkg-config zlib1g-dev libjpeg-dev libxml2-dev libsigc++-2.0-dev sudo apt-get install -yq libgtest-dev libeigen3-dev libwxgtk3.0-gtk3-dev libpng-dev sudo apt-get install -yq libftgl-dev libglew-dev libalut-dev libvorbis-dev python3-dev libgit2-dev - name: Configure CMake # Use a bash shell so we can use the same syntax for environment variable # access regardless of the host operating system shell: bash run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - name: Build env: CMAKE_BUILD_PARALLEL_LEVEL: 3 CTEST_OUTPUT_ON_FAILURE: ON shell: bash run: cmake --build . --config $BUILD_TYPE --target installDarkRadiant-2.14.0/.gitignore000066400000000000000000000021171413722237400157600ustar00rootroot00000000000000# Linux build files Makefile CMakeFiles CMakeCache.txt cmake_install.cmake /config.h /install_manifest.txt /radiant/darkradiant /install/darkradiant.desktop /test/drtest *.o *.lo *.so *.a *.la .deps # Editor temporary files *.swp tags # Windows directories w32deps w64deps build # Windows build files *.dll *.pdb install/*.exe tools/msvc/*.exe /tools/innosetup/*.exe *.exp *.lib # Image Source Files *.psd # Windows Visual Studio stuff *.user DarkRadiant.opensdf DarkRadiant.sdf gtkrc testsuite.ilk # VS Code .vscode # VS /winbuild *.psess *.suo *.ipch *.dirstamp /tools/innosetup/*.7z *.vspx *.bak *.opendb *.iobj *.ipdb # Mac OS X Stuff .DS_Store xcuserdata Makefile.in /config.h.in /configure /ltmain.sh /aclocal.m4 /install/*.zip /tools/msvc/.vs /tools/msvc/DarkRadiant.VC.db /tools/innosetup/*.zip /tools/lwo_analyse/.vs /radiant/*.aps # Portable installation temp folders /tools/scripts/DarkRadiant_install.x64 /tools/scripts/DarkRadiant_install /install/*.ilk /tools/msvc/Tests/x64 /tools/msvc/x64 /tools/msvc/packages /install/*.testdurations *.ilk .vs/ windeps*.7z /packages /windeps DarkRadiant-2.14.0/.gitlab-ci.yml000066400000000000000000000004021413722237400164170ustar00rootroot00000000000000pages: stage: deploy script: - mkdir .public - cp doc/*.html .public - cp -r doc/img .public - mv .public/manual.html .public/index.html - gzip -k .public/index.html - mv .public public artifacts: paths: - public only: - master DarkRadiant-2.14.0/AUTHORS000066400000000000000000000032261413722237400150420ustar00rootroot00000000000000 OrbWeaver greebo STiFU mohij angua Crispy Gildoran Jesps (Bulge patch algorithm) GtkRadiant CONTRIBUTORS and CREDITS last update: 09/12/2004 ======================= Loki ---- Leonardo Zide leo@lokigames.com Mike Phillips (Loki QA) Bernd Kreimeier (overall coordination) QER.com ------- TTimo timo@idsoftware.com ^Fishman (Pablo Zurita) fish@gamedesign.net RR2DO2 rr2do2@q3f.com SmallPileofGibs spog@planetquake.com Curry plugin ------------ Mike "mickey" Jackman Tim "Maj" Rennie PrtView plugin, various bug fixes and q3map guru ------------------------------------------------ Geoffrey DeWan Gensurf plugin -------------- David Hyde PicoModel --------- seaw0lf with assist by ydnar Q3Map2 ------ Randy 'ydnar' Reddig Updated shader files, textures, entities.def, keyboard shortcut list overall testing and feedback ---------------------------- Jean-Francois "Eutectic" Groleau Improvements and bug fixing --------------------------- Jan Paul "MrElusive" van Waveren Robert Duffy Forest "LordHavoc" Wroncy-Hale Nurail AcidDeath Chronos Michael Schlueter Jamie Wilkinson Robert "Tr3B" Beckebans Web --- Dave "Bargle" Koenig Jason "Wolfen" Spencer Shawn "EvilTypeGuy" Walker Thanks to John Hutton, AstroCreep and W2k for web help FAQ --- Equim and Wex Testing/Feedback --- Black_Dog, d0nkey, Fjoggis, Jago, jetscreamer, gibbie, Godmil, Gom Jabbar, Mindlink, mslaf, necros, Promit, Ravo, RPG, scampie, sock, sponge, thiste, voodoochopsticks, Zwiffle Misc ---- Thanks to everyone on the beta mailing list and irc.telefragged.com #qeradiant for testing and feedback. Updated icons by AstroCreep! Bitch-slapping by RaYGunn! Last minute bugs by SPoG! (SPoG--) DarkRadiant-2.14.0/CMakeLists.txt000066400000000000000000000131331413722237400165300ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.12) # Project name and version project(darkradiant VERSION 2.14.0) # C++ standard set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) # GCC 8 and earlier require explicit linking against stdc++fs if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9) link_libraries(stdc++fs) endif() # Expose some build options option(ENABLE_DM_PLUGINS "Build Dark Mod specific plugins" ON) option(ENABLE_RELOCATION "Avoid hard-coded absolute paths to libraries or resources" ON) # Define GNU-style directory structure by default include(GNUInstallDirs) # Set up core build paths set(CORE_MODULE_LIBRARY "libradiantcore") set(PKGDATADIR "${CMAKE_INSTALL_FULL_DATADIR}/darkradiant") set(PKGLIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}/darkradiant") if (${ENABLE_RELOCATION}) set(RELATIVE_LIBDIR "../${CMAKE_INSTALL_LIBDIR}/darkradiant") else() set(HTMLDIR "${CMAKE_INSTALL_FULL_DATADIR}/doc/darkradiant") endif() # Build shared libraries by default option(BUILD_SHARED_LIBS "Build shared libraries" ON) if (${ENABLE_RELOCATION}) set(CMAKE_INSTALL_RPATH "$ORIGIN/${RELATIVE_LIBDIR}") else() set(CMAKE_INSTALL_RPATH "${PKGLIBDIR}") endif() # Debug or release mode if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() add_compile_definitions( $<$:_DEBUG> $<$:NDEBUG> ) # Locate system packages include(FindPkgConfig) pkg_check_modules(XML libxml-2.0 REQUIRED) pkg_check_modules(SIGC sigc++-2.0 REQUIRED) pkg_check_modules(FTGL ftgl REQUIRED) pkg_check_modules(FREETYPE freetype2 REQUIRED) pkg_check_modules(XML libxml-2.0 REQUIRED) pkg_check_modules(GL gl REQUIRED) pkg_check_modules(GLEW glew REQUIRED) pkg_check_modules(JPEG libjpeg REQUIRED) pkg_check_modules(PNG libpng REQUIRED) pkg_check_modules(AL openal REQUIRED) pkg_check_modules(OGG ogg REQUIRED) pkg_check_modules(VORBIS vorbisfile REQUIRED) pkg_check_modules(X11 x11 REQUIRED) pkg_check_modules(ZLIB zlib REQUIRED) pkg_check_modules(GLIB glib-2.0 REQUIRED) pkg_check_modules(EIGEN eigen3 REQUIRED) # Locate wxWidgets find_package(wxWidgets REQUIRED COMPONENTS base core stc adv gl xrc aui) include(${wxWidgets_USE_FILE}) # Locate Python find_package(Python REQUIRED COMPONENTS Development) # Global includes and flags include_directories(libs libs/libfmt include) add_compile_definitions(POSIX WXINTL_NO_GETTEXT_MACRO FMT_HEADER_ONLY HAVE_STD_FILESYSTEM) add_link_options(LINKER:-z,defs) # Generate config.h configure_file(config.h.in config.h) add_compile_definitions(HAVE_CONFIG_H) include_directories(${CMAKE_CURRENT_BINARY_DIR}) # Supporting libraries add_subdirectory(libs/math) add_subdirectory(libs/xmlutil) add_subdirectory(libs/scene) add_subdirectory(libs/wxutil) add_subdirectory(libs/module) # Mandatory modules add_subdirectory(plugins/script) add_subdirectory(plugins/sound) pkg_check_modules(LIBGIT libgit2) if (${LIBGIT_FOUND}) add_subdirectory(plugins/vcs) endif() # Dark Mod plugins if (${ENABLE_DM_PLUGINS}) add_subdirectory(plugins/dm.conversation) add_subdirectory(plugins/dm.stimresponse) add_subdirectory(plugins/dm.objectives) add_subdirectory(plugins/dm.difficulty) add_subdirectory(plugins/dm.editing) add_subdirectory(plugins/dm.gui) add_subdirectory(plugins/dm.gameconnection) endif() # Main radiant components add_subdirectory(radiantcore) add_subdirectory(radiant) # Tests pkg_check_modules(GTEST gtest) pkg_check_modules(GTEST_MAIN gtest_main) if (${GTEST_FOUND} AND ${GTEST_MAIN_FOUND}) include(CTest) add_subdirectory(test) endif() # Documentation find_program(ASCIIDOCTOR asciidoctor) if (ASCIIDOCTOR) add_subdirectory(doc) else() message(WARNING "asciidoctor not found; documentation will not be generated") endif() # Install main targets install(TARGETS darkradiant math xmlutil scenegraph wxutil RUNTIME DESTINATION bin LIBRARY DESTINATION ${PKGLIBDIR}) install(TARGETS radiantcore script sound LIBRARY DESTINATION ${PKGLIBDIR}/modules) # Install Dark Mod plugins if (${ENABLE_DM_PLUGINS}) install(TARGETS dm_stimresponse dm_objectives dm_difficulty dm_editing dm_gui dm_gameconnection dm_conversation LIBRARY DESTINATION ${PKGLIBDIR}/plugins) endif() if (${LIBGIT_FOUND}) install(TARGETS vcs LIBRARY DESTINATION ${PKGLIBDIR}/plugins) endif() # Generate and install the .desktop file configure_file(install/darkradiant.desktop.in install/darkradiant.desktop) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/install/darkradiant.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) # Install resources file(GLOB XML_FILES "${PROJECT_SOURCE_DIR}/install/*.xml") install(FILES ${XML_FILES} DESTINATION ${PKGDATADIR}) install(DIRECTORY install/games DESTINATION ${PKGDATADIR}) install(DIRECTORY install/bitmaps DESTINATION ${PKGDATADIR}) install(DIRECTORY install/gl DESTINATION ${PKGDATADIR}) install(DIRECTORY install/ui DESTINATION ${PKGDATADIR} FILES_MATCHING PATTERN "*.ttf" PATTERN "*.xrc") install(DIRECTORY install/resources DESTINATION ${PKGDATADIR}) # Install locale data if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14") # CMake 3.14 and above support TYPE LOCALE, they deduct DESTINATION themselves install(DIRECTORY install/i18n/de TYPE LOCALE FILES_MATCHING PATTERN "*.mo") else() install(DIRECTORY install/i18n/de DESTINATION ${CMAKE_INSTALL_LOCALEDIR} FILES_MATCHING PATTERN "*.mo") endif() # Install scripts install(DIRECTORY install/scripts DESTINATION ${PKGDATADIR} FILES_MATCHING PATTERN "*.py") DarkRadiant-2.14.0/DarkRadiant.sln000066400000000000000000000400231413722237400166700ustar00rootroot00000000000000Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29613.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DarkRadiant", "tools\msvc\DarkRadiant.vcxproj", "{8E70385C-223A-4DD1-9B99-28FF2331A2B5}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mathlib", "tools\msvc\mathlib.vcxproj", "{3C9FB5AA-7118-476E-B33D-D3AC1C8412BB}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xmlutillib", "tools\msvc\xmlutillib.vcxproj", "{A15EFB56-927F-411D-A57B-0328321456A2}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxutillib", "tools\msvc\wxutillib.vcxproj", "{B6D4B38A-0C39-42CD-8193-75979E1F4D68}" ProjectSection(ProjectDependencies) = postProject {F7408B46-E4A9-470C-9731-9A1564247385} = {F7408B46-E4A9-470C-9731-9A1564247385} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sound", "tools\msvc\sound.vcxproj", "{1482AAB4-40B6-44C0-9FD8-AF80C18A5E7F}" ProjectSection(ProjectDependencies) = postProject {B6D4B38A-0C39-42CD-8193-75979E1F4D68} = {B6D4B38A-0C39-42CD-8193-75979E1F4D68} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dm.stimresponse", "tools\msvc\dm.stimresponse.vcxproj", "{EE9A3B61-58E0-4AA4-8942-6CFCBFAACC3F}" ProjectSection(ProjectDependencies) = postProject {B6D4B38A-0C39-42CD-8193-75979E1F4D68} = {B6D4B38A-0C39-42CD-8193-75979E1F4D68} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dm.objectives", "tools\msvc\dm.objectives.vcxproj", "{05E9A613-2108-4843-A567-16B432DAC272}" ProjectSection(ProjectDependencies) = postProject {B6D4B38A-0C39-42CD-8193-75979E1F4D68} = {B6D4B38A-0C39-42CD-8193-75979E1F4D68} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dm.difficulty", "tools\msvc\dm.difficulty.vcxproj", "{68B95079-09DF-48F7-BAD9-81C33118BEFD}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} {3C9FB5AA-7118-476E-B33D-D3AC1C8412BB} = {3C9FB5AA-7118-476E-B33D-D3AC1C8412BB} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scenelib", "tools\msvc\scenelib.vcxproj", "{F7408B46-E4A9-470C-9731-9A1564247385}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "include", "tools\msvc\include.vcxproj", "{41CAAD78-9E48-4C6E-B8F8-A04A859C16F9}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dm.conversation", "tools\msvc\dm.conversation.vcxproj", "{435F29EA-7236-49AD-BF1A-5DB8AD566B5D}" ProjectSection(ProjectDependencies) = postProject {A15EFB56-927F-411D-A57B-0328321456A2} = {A15EFB56-927F-411D-A57B-0328321456A2} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "script", "tools\msvc\script.vcxproj", "{979A38FE-BE30-4121-845C-B705461BB1B0}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dm.editing", "tools\msvc\dm.editing.vcxproj", "{3552912C-32C9-4D59-9E65-357AD147A1FC}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dm.gui", "tools\msvc\dm.gui.vcxproj", "{586DBC32-C9D4-4720-B246-1E3D7D8C02B3}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libs", "tools\msvc\libs.vcxproj", "{5EB15BCF-2131-4DE3-B411-FC0D2DEF702F}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Static Libraries", "Static Libraries", "{026C3BBE-9A3B-4D21-A49D-12DD9DDF3CBA}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{3C3C0B81-D1B7-4EE4-9224-99ECA5774F25}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main Binary and Headers", "Main Binary and Headers", "{F0E8C46B-4F20-43B1-9A8D-13A9D0A3BA3D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DarkRadiantCore", "tools\msvc\DarkRadiantCore.vcxproj", "{83D79C71-4E8F-4F78-9D46-EF02D5D5CD89}" ProjectSection(ProjectDependencies) = postProject {76FF9B0F-B1FF-42BF-9E1D-8FBE2B3F6215} = {76FF9B0F-B1FF-42BF-9E1D-8FBE2B3F6215} {F7408B46-E4A9-470C-9731-9A1564247385} = {F7408B46-E4A9-470C-9731-9A1564247385} {A15EFB56-927F-411D-A57B-0328321456A2} = {A15EFB56-927F-411D-A57B-0328321456A2} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} {3C9FB5AA-7118-476E-B33D-D3AC1C8412BB} = {3C9FB5AA-7118-476E-B33D-D3AC1C8412BB} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "modulelib", "tools\msvc\modulelib.vcxproj", "{76FF9B0F-B1FF-42BF-9E1D-8FBE2B3F6215}" ProjectSection(ProjectDependencies) = postProject {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tests", "tools\msvc\Tests\Tests.vcxproj", "{20C43725-BD6F-4E90-8D8C-5AB2AFFBF957}" ProjectSection(ProjectDependencies) = postProject {83D79C71-4E8F-4F78-9D46-EF02D5D5CD89} = {83D79C71-4E8F-4F78-9D46-EF02D5D5CD89} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dm.gameconnection", "tools\msvc\dm.gameconnection.vcxproj", "{471AEAFE-68CE-4010-9B8F-3CB95810BEA5}" ProjectSection(ProjectDependencies) = postProject {F7408B46-E4A9-470C-9731-9A1564247385} = {F7408B46-E4A9-470C-9731-9A1564247385} {B6D4B38A-0C39-42CD-8193-75979E1F4D68} = {B6D4B38A-0C39-42CD-8193-75979E1F4D68} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DependencyCheck", "tools\DependencyCheck\DependencyCheck.vcxproj", "{0D4BE190-97F4-4DB9-BEAB-B0196868EC0A}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcs", "tools\msvc\vcs.vcxproj", "{6591C1E2-6BCF-4874-B724-CC87B8AA0DA4}" ProjectSection(ProjectDependencies) = postProject {A15EFB56-927F-411D-A57B-0328321456A2} = {A15EFB56-927F-411D-A57B-0328321456A2} {B6D4B38A-0C39-42CD-8193-75979E1F4D68} = {B6D4B38A-0C39-42CD-8193-75979E1F4D68} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8E70385C-223A-4DD1-9B99-28FF2331A2B5}.Debug|x64.ActiveCfg = Debug|x64 {8E70385C-223A-4DD1-9B99-28FF2331A2B5}.Debug|x64.Build.0 = Debug|x64 {8E70385C-223A-4DD1-9B99-28FF2331A2B5}.Release|x64.ActiveCfg = Release|x64 {8E70385C-223A-4DD1-9B99-28FF2331A2B5}.Release|x64.Build.0 = Release|x64 {3C9FB5AA-7118-476E-B33D-D3AC1C8412BB}.Debug|x64.ActiveCfg = Debug|x64 {3C9FB5AA-7118-476E-B33D-D3AC1C8412BB}.Debug|x64.Build.0 = Debug|x64 {3C9FB5AA-7118-476E-B33D-D3AC1C8412BB}.Release|x64.ActiveCfg = Release|x64 {3C9FB5AA-7118-476E-B33D-D3AC1C8412BB}.Release|x64.Build.0 = Release|x64 {A15EFB56-927F-411D-A57B-0328321456A2}.Debug|x64.ActiveCfg = Debug|x64 {A15EFB56-927F-411D-A57B-0328321456A2}.Debug|x64.Build.0 = Debug|x64 {A15EFB56-927F-411D-A57B-0328321456A2}.Release|x64.ActiveCfg = Release|x64 {A15EFB56-927F-411D-A57B-0328321456A2}.Release|x64.Build.0 = Release|x64 {B6D4B38A-0C39-42CD-8193-75979E1F4D68}.Debug|x64.ActiveCfg = Debug|x64 {B6D4B38A-0C39-42CD-8193-75979E1F4D68}.Debug|x64.Build.0 = Debug|x64 {B6D4B38A-0C39-42CD-8193-75979E1F4D68}.Release|x64.ActiveCfg = Release|x64 {B6D4B38A-0C39-42CD-8193-75979E1F4D68}.Release|x64.Build.0 = Release|x64 {1482AAB4-40B6-44C0-9FD8-AF80C18A5E7F}.Debug|x64.ActiveCfg = Debug|x64 {1482AAB4-40B6-44C0-9FD8-AF80C18A5E7F}.Debug|x64.Build.0 = Debug|x64 {1482AAB4-40B6-44C0-9FD8-AF80C18A5E7F}.Release|x64.ActiveCfg = Release|x64 {1482AAB4-40B6-44C0-9FD8-AF80C18A5E7F}.Release|x64.Build.0 = Release|x64 {EE9A3B61-58E0-4AA4-8942-6CFCBFAACC3F}.Debug|x64.ActiveCfg = Debug|x64 {EE9A3B61-58E0-4AA4-8942-6CFCBFAACC3F}.Debug|x64.Build.0 = Debug|x64 {EE9A3B61-58E0-4AA4-8942-6CFCBFAACC3F}.Release|x64.ActiveCfg = Release|x64 {EE9A3B61-58E0-4AA4-8942-6CFCBFAACC3F}.Release|x64.Build.0 = Release|x64 {05E9A613-2108-4843-A567-16B432DAC272}.Debug|x64.ActiveCfg = Debug|x64 {05E9A613-2108-4843-A567-16B432DAC272}.Debug|x64.Build.0 = Debug|x64 {05E9A613-2108-4843-A567-16B432DAC272}.Release|x64.ActiveCfg = Release|x64 {05E9A613-2108-4843-A567-16B432DAC272}.Release|x64.Build.0 = Release|x64 {68B95079-09DF-48F7-BAD9-81C33118BEFD}.Debug|x64.ActiveCfg = Debug|x64 {68B95079-09DF-48F7-BAD9-81C33118BEFD}.Debug|x64.Build.0 = Debug|x64 {68B95079-09DF-48F7-BAD9-81C33118BEFD}.Release|x64.ActiveCfg = Release|x64 {68B95079-09DF-48F7-BAD9-81C33118BEFD}.Release|x64.Build.0 = Release|x64 {F7408B46-E4A9-470C-9731-9A1564247385}.Debug|x64.ActiveCfg = Debug|x64 {F7408B46-E4A9-470C-9731-9A1564247385}.Debug|x64.Build.0 = Debug|x64 {F7408B46-E4A9-470C-9731-9A1564247385}.Release|x64.ActiveCfg = Release|x64 {F7408B46-E4A9-470C-9731-9A1564247385}.Release|x64.Build.0 = Release|x64 {41CAAD78-9E48-4C6E-B8F8-A04A859C16F9}.Debug|x64.ActiveCfg = Debug|x64 {41CAAD78-9E48-4C6E-B8F8-A04A859C16F9}.Debug|x64.Build.0 = Debug|x64 {41CAAD78-9E48-4C6E-B8F8-A04A859C16F9}.Release|x64.ActiveCfg = Release|x64 {41CAAD78-9E48-4C6E-B8F8-A04A859C16F9}.Release|x64.Build.0 = Release|x64 {435F29EA-7236-49AD-BF1A-5DB8AD566B5D}.Debug|x64.ActiveCfg = Debug|x64 {435F29EA-7236-49AD-BF1A-5DB8AD566B5D}.Debug|x64.Build.0 = Debug|x64 {435F29EA-7236-49AD-BF1A-5DB8AD566B5D}.Release|x64.ActiveCfg = Release|x64 {435F29EA-7236-49AD-BF1A-5DB8AD566B5D}.Release|x64.Build.0 = Release|x64 {979A38FE-BE30-4121-845C-B705461BB1B0}.Debug|x64.ActiveCfg = Debug|x64 {979A38FE-BE30-4121-845C-B705461BB1B0}.Debug|x64.Build.0 = Debug|x64 {979A38FE-BE30-4121-845C-B705461BB1B0}.Release|x64.ActiveCfg = Release|x64 {979A38FE-BE30-4121-845C-B705461BB1B0}.Release|x64.Build.0 = Release|x64 {3552912C-32C9-4D59-9E65-357AD147A1FC}.Debug|x64.ActiveCfg = Debug|x64 {3552912C-32C9-4D59-9E65-357AD147A1FC}.Debug|x64.Build.0 = Debug|x64 {3552912C-32C9-4D59-9E65-357AD147A1FC}.Release|x64.ActiveCfg = Release|x64 {3552912C-32C9-4D59-9E65-357AD147A1FC}.Release|x64.Build.0 = Release|x64 {586DBC32-C9D4-4720-B246-1E3D7D8C02B3}.Debug|x64.ActiveCfg = Debug|x64 {586DBC32-C9D4-4720-B246-1E3D7D8C02B3}.Debug|x64.Build.0 = Debug|x64 {586DBC32-C9D4-4720-B246-1E3D7D8C02B3}.Release|x64.ActiveCfg = Release|x64 {586DBC32-C9D4-4720-B246-1E3D7D8C02B3}.Release|x64.Build.0 = Release|x64 {5EB15BCF-2131-4DE3-B411-FC0D2DEF702F}.Debug|x64.ActiveCfg = Debug|x64 {5EB15BCF-2131-4DE3-B411-FC0D2DEF702F}.Debug|x64.Build.0 = Debug|x64 {5EB15BCF-2131-4DE3-B411-FC0D2DEF702F}.Release|x64.ActiveCfg = Release|x64 {5EB15BCF-2131-4DE3-B411-FC0D2DEF702F}.Release|x64.Build.0 = Release|x64 {83D79C71-4E8F-4F78-9D46-EF02D5D5CD89}.Debug|x64.ActiveCfg = Debug|x64 {83D79C71-4E8F-4F78-9D46-EF02D5D5CD89}.Debug|x64.Build.0 = Debug|x64 {83D79C71-4E8F-4F78-9D46-EF02D5D5CD89}.Release|x64.ActiveCfg = Release|x64 {83D79C71-4E8F-4F78-9D46-EF02D5D5CD89}.Release|x64.Build.0 = Release|x64 {76FF9B0F-B1FF-42BF-9E1D-8FBE2B3F6215}.Debug|x64.ActiveCfg = Debug|x64 {76FF9B0F-B1FF-42BF-9E1D-8FBE2B3F6215}.Debug|x64.Build.0 = Debug|x64 {76FF9B0F-B1FF-42BF-9E1D-8FBE2B3F6215}.Release|x64.ActiveCfg = Release|x64 {76FF9B0F-B1FF-42BF-9E1D-8FBE2B3F6215}.Release|x64.Build.0 = Release|x64 {20C43725-BD6F-4E90-8D8C-5AB2AFFBF957}.Debug|x64.ActiveCfg = Debug|x64 {20C43725-BD6F-4E90-8D8C-5AB2AFFBF957}.Debug|x64.Build.0 = Debug|x64 {20C43725-BD6F-4E90-8D8C-5AB2AFFBF957}.Release|x64.ActiveCfg = Release|x64 {20C43725-BD6F-4E90-8D8C-5AB2AFFBF957}.Release|x64.Build.0 = Release|x64 {471AEAFE-68CE-4010-9B8F-3CB95810BEA5}.Debug|x64.ActiveCfg = Debug|x64 {471AEAFE-68CE-4010-9B8F-3CB95810BEA5}.Debug|x64.Build.0 = Debug|x64 {471AEAFE-68CE-4010-9B8F-3CB95810BEA5}.Release|x64.ActiveCfg = Release|x64 {471AEAFE-68CE-4010-9B8F-3CB95810BEA5}.Release|x64.Build.0 = Release|x64 {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A}.Debug|x64.ActiveCfg = Debug|x64 {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A}.Debug|x64.Build.0 = Debug|x64 {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A}.Release|x64.ActiveCfg = Release|x64 {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A}.Release|x64.Build.0 = Release|x64 {6591C1E2-6BCF-4874-B724-CC87B8AA0DA4}.Debug|x64.ActiveCfg = Debug|x64 {6591C1E2-6BCF-4874-B724-CC87B8AA0DA4}.Debug|x64.Build.0 = Debug|x64 {6591C1E2-6BCF-4874-B724-CC87B8AA0DA4}.Release|x64.ActiveCfg = Release|x64 {6591C1E2-6BCF-4874-B724-CC87B8AA0DA4}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {8E70385C-223A-4DD1-9B99-28FF2331A2B5} = {F0E8C46B-4F20-43B1-9A8D-13A9D0A3BA3D} {3C9FB5AA-7118-476E-B33D-D3AC1C8412BB} = {026C3BBE-9A3B-4D21-A49D-12DD9DDF3CBA} {A15EFB56-927F-411D-A57B-0328321456A2} = {026C3BBE-9A3B-4D21-A49D-12DD9DDF3CBA} {B6D4B38A-0C39-42CD-8193-75979E1F4D68} = {026C3BBE-9A3B-4D21-A49D-12DD9DDF3CBA} {1482AAB4-40B6-44C0-9FD8-AF80C18A5E7F} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} {EE9A3B61-58E0-4AA4-8942-6CFCBFAACC3F} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} {05E9A613-2108-4843-A567-16B432DAC272} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} {68B95079-09DF-48F7-BAD9-81C33118BEFD} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} {F7408B46-E4A9-470C-9731-9A1564247385} = {026C3BBE-9A3B-4D21-A49D-12DD9DDF3CBA} {41CAAD78-9E48-4C6E-B8F8-A04A859C16F9} = {F0E8C46B-4F20-43B1-9A8D-13A9D0A3BA3D} {435F29EA-7236-49AD-BF1A-5DB8AD566B5D} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} {979A38FE-BE30-4121-845C-B705461BB1B0} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} {3552912C-32C9-4D59-9E65-357AD147A1FC} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} {586DBC32-C9D4-4720-B246-1E3D7D8C02B3} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} {5EB15BCF-2131-4DE3-B411-FC0D2DEF702F} = {F0E8C46B-4F20-43B1-9A8D-13A9D0A3BA3D} {83D79C71-4E8F-4F78-9D46-EF02D5D5CD89} = {F0E8C46B-4F20-43B1-9A8D-13A9D0A3BA3D} {76FF9B0F-B1FF-42BF-9E1D-8FBE2B3F6215} = {026C3BBE-9A3B-4D21-A49D-12DD9DDF3CBA} {471AEAFE-68CE-4010-9B8F-3CB95810BEA5} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} {0D4BE190-97F4-4DB9-BEAB-B0196868EC0A} = {F0E8C46B-4F20-43B1-9A8D-13A9D0A3BA3D} {6591C1E2-6BCF-4874-B724-CC87B8AA0DA4} = {3C3C0B81-D1B7-4EE4-9224-99ECA5774F25} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C7F73C9B-AFA1-4AF0-9F99-7C3A7F503A86} EndGlobalSection EndGlobal DarkRadiant-2.14.0/Doxyfile000066400000000000000000001515111413722237400155010ustar00rootroot00000000000000# Doxyfile 1.5.3 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file that # follow. The default is UTF-8 which is also the encoding used for all text before # the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into # libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of # possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = DarkRadiant # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = dox # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = YES # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, # Italian, Japanese, Japanese-en (Japanese with English messages), Korean, # Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, # Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to # include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be extracted # and appear in the documentation as a namespace called 'anonymous_namespace{file}', # where file will be replaced with the base name of the file that contains the anonymous # namespace. By default anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = NO # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = include libs radiant plugins # This tag can be used to specify the character encoding of the source files that # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default # input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. # See http://www.gnu.org/software/libiconv for the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = plugins/dm.d3hook/boost \ plugins/dm.d3hook/RCF \ plugins/dm.d3hook/SF # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the output. # The symbol name can be a fully qualified name, a word, or if the wildcard * is used, # a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH # then you must also enable this option. If you don't then doxygen will produce # a warning and turn it on anyway SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to # produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to # specify the directory where the mscgen tool resides. If left empty the tool is assumed to # be found in the default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = NO # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = NO # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = NO # If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will # generate a caller dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = NO # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the number # of direct children of the root node in a graph is already larger than # MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO DarkRadiant-2.14.0/GPL000066400000000000000000000431331413722237400143400ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 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 St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. DarkRadiant-2.14.0/LICENSE000066400000000000000000000044251413722237400150010ustar00rootroot00000000000000DarkRadiant License (last update: 2021-08-22) ---------------------------------------------------------------------------------------------- DarkRadiant is free software originally based on GtkRadiant, which has been licensed under the GNU General Public License (GPLv2) http://www.gnu.org/licenses/gpl-2.0.html Therefore all of the DarkRadiant source code (save a few exceptions noted below) is published under the same GPLv2 license. Unless stated otherwise in the source file header, the following applies to the DarkRadiant source code: DarkRadiant - Open Source Level Editor for Doom 3 and The Dark Mod Copyright (C) 2021 Matthias Baumann (on behalf of the DarkRadiant Team, see AUTHORS file) ========================================================================================== 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 St, Fifth Floor, Boston, MA 02110, USA ========================================================================================== Exceptions to the above ---------------------------------------------------------------------------------------------- PicoModel Library - published under the modified Berkeley Software Distribution (BSD) license DDS Library - published under the modified Berkeley Software Distribution (BSD) license pybind11 Library - see the LICENSE file in the libs/pybind folder fmtlib Library - see the LICENSE file in the libs/libfmt folder (BSD 2-clause "Simplified" License) OpenFBX library - see the LICENSE file in radiantcore/model/import/openfbx (MIT license) SHA256 implementation - by Brad Conte, released into the public domain, see this URL: (https://github.com/B-Con/crypto-algorithms/tree/master#readme)DarkRadiant-2.14.0/NEWS000066400000000000000000000000001413722237400144540ustar00rootroot00000000000000DarkRadiant-2.14.0/PKGBUILD000066400000000000000000000010071413722237400151110ustar00rootroot00000000000000# Maintainer: codereader pkgname=darkradiant pkgver=2.14.0 pkgrel=1 pkgdesc="Level Editor for Doom 3 (idTech4) and The Dark Mod" arch=("x86_64") url="https://www.darkradiant.net/" license=("GPL") depends=(wxgtk2 ftgl glew freealut libvorbis python libsigc++ eigen) makedepends=(cmake git) source=("$pkgname::git+https://github.com/codereader/DarkRadiant.git#tag=2.14.0") md5sums=("SKIP") build() { cd "$pkgname" cmake . make } package() { cd "$pkgname" make DESTDIR="$pkgdir/" install } DarkRadiant-2.14.0/README.md000066400000000000000000000147321413722237400152550ustar00rootroot00000000000000DarkRadiant Logo # DarkRadiant DarkRadiant is a level (map) editor for the **The Dark Mod**, an open-source Doom 3 modification which is available at www.thedarkmod.com. Its primary use is creating missions for The Dark Mod as well as maps for idTech4-based games like Doom 3, Quake 4 and Prey. ## Download Get the latest DarkRadiant binaries from the [releases page](https://github.com/codereader/DarkRadiant/releases/latest). We have binaries for Windows and macOS, plus [compilation instructions](https://wiki.thedarkmod.com/index.php?title=DarkRadiant_-_Compiling_in_Linux) for various Linux distributions. # Getting started DarkRadiant requires game resources to work with, these resources are not installed by this editor. You'll need to point DarkRadiant to one of these games (The Dark Mod, Doom 3, Quake 4, etc.) before you can start to work on your map. Visit [www.thedarkmod.com](https://www.thedarkmod.com) for download instructions, then proceed with one of the tutorials available on the web. For The Dark Mod mappers, there are a couple of [Video Tutorials](https://wiki.thedarkmod.com/index.php?title=DarkRadiant_Video_Tutorials) on the project's wiki, which should get you started. # Compiling on Windows ## Prerequisites DarkRadiant is built on Windows using *Microsoft Visual Studio*, the free Community Edition can be obtained here: *VC++ 2019:* https://visualstudio.microsoft.com/downloads/ (Choose Visual Studio Community) When installing Studio please make sure to enable the "Desktop Development with C++" workload. ## Build The main Visual C++ solution file is located in the root folder of this repository: `DarkRadiant.sln` Open this file with Visual Studio and start a build by right-clicking on the top-level "Solution 'DarkRadiant'" item and choosing Build Solution. The `DarkRadiant.exe` file will be placed in the `install/` folder. ### Windows Build Dependencies Since DarkRadiant requires a couple of open-source libraries that are not available on Windows by default, it will try to download and install the dependencies when the build starts. If it fails for some reason, you can try to run this script: `tools/scripts/download_windeps.ps1` or extract the tools manually, downloading the 7-Zip package containing the necessary files from the URL below ([Get 7-zip here](https://www.7-zip.org/)): https://github.com/codereader/DarkRadiant_WinDeps/releases/latest/ The dependencies packages need to be extracted into the main DarkRadiant source directory, i.e. alongside the `include/` and `radiant/` directories. Just drop the windeps.7z in the DarkRadiant folder and use 7-zip's "Extract to here" # Compiling on Linux ## Prerequisites To compile DarkRadiant a number of libraries (with development headers) and a standards-compliant C++17 compiler are required. On an Ubuntu system the requirements may include any or all of the following packages: * zlib1g-dev * libjpeg-dev * libwxgtk3.0-dev * libxml2-dev * libsigc++-2.0-dev * libpng-dev * libftgl-dev * libglew-dev * libalut-dev * libvorbis-dev * libgtest-dev * libeigen3-dev * libgit2-dev (optional) This does not include core development tools such as g++ or the git client to download the sources (use sudo apt-get install git for that). One possible set of packages might be: `sudo apt-get install git cmake g++ gettext pkg-config` More required package lists for various Linux distributions are [listed in the Wiki Article](https://wiki.thedarkmod.com/index.php?title=DarkRadiant_-_Compiling_in_Linux). ## Build To build DarkRadiant the standard CMake build process is used: ``` cmake . make sudo make install ``` To install somewhere other than the default of `/usr/local`, use the `CMAKE_INSTALL_PREFIX` variable. ``` cmake -DCMAKE_INSTALL_PREFIX=/opt/darkradiant make sudo make install ``` Other useful variables are `CMAKE_BUILD_TYPE` to choose Debug or Release builds, `ENABLE_DM_PLUGINS` to disable the building of Dark Mod specific plugins (enabled by default), and `ENABLE_RELOCATION` to control whether DarkRadiant uses hard-coded absolute paths like `/usr/lib` or paths relative to the binary (useful for certain package formats like Snappy or FlatPak). # Compiling on macOS ## Prerequisites You'll need an Xcode version supporting C++17 and the macOS 10.15 (Catalina) target at minimum. Xcode 11.3 should be working fine. You will need to install the Xcode command line tools to install MacPorts (run `xcode-select --install`) To compile DarkRadiant, a number of libraries (with development headers) are required. You can obtain them by using [MacPorts](https://distfiles.macports.org/MacPorts/): Install MacPorts, then open a fresh console and issue these commands: ``` sudo port install jpeg wxwidgets-3.0 pkgconfig libsigcxx2 freetype ftgl glew sudo port install libxml2 freealut libvorbis libogg openal-soft eigen3 ``` ## Build Start Xcode and open the project file in `tools/xcode/DarkRadiant.xcodeproj`. Hit CMD-B to start the build, the output files will be placed to a folder similar to this: `~/Library/Developer/Xcode/DerivedData/DarkRadiant-somethingsomething/Build/Products/Release` The `DarkRadiant.app` package in that folder can be launched right away or copied to some location of your preference. # More Build Information A more detailed compilation guide can be found on The Dark Mod's wiki: https://wiki.thedarkmod.com/index.php?title=DarkRadiant_-_Compilation_Guide # Contact / Discussion DarkRadiant Website: https://www.darkradiant.net All discussion is ongoing primarily at [The Dark Mod Forums](https://forums.thedarkmod.com/forum/51-darkradiant-feedback-and-development/), where you can get in touch with knowledgeable people and discuss changes or issues. If you happen to run into a bug, you're encouraged to report it to us, especially when running into application crashes (see also [How to record a crashdump](https://wiki.thedarkmod.com/index.php?title=Save_a_Memory_Dump_for_debugging_Crashes)). The issue tracker for DarkRadiant is also run by the Dark Mod folks: [DarkRadiant Bugtracker](https://bugs.thedarkmod.com/view_all_bug_page.php?project_id=1). # License The DarkRadiant source code is published under the [GNU General Public License 2.0 (GPLv2)](http://www.gnu.org/licenses/gpl-2.0.html ), except for a few libraries which are using the BSD or MIT licenses, see the [LICENSE](https://raw.githubusercontent.com/codereader/DarkRadiant/master/LICENSE) file for specifics. DarkRadiant-2.14.0/config.h.in000066400000000000000000000014221413722237400160110ustar00rootroot00000000000000 /* Core module file, e.g. "libradiantcore" */ #cmakedefine CORE_MODULE_LIBRARY "@CORE_MODULE_LIBRARY@" /* Project version */ #define PACKAGE_VERSION "@CMAKE_PROJECT_VERSION@" /* Defined if this is a relocatable build */ #cmakedefine ENABLE_RELOCATION /* Locale directory */ #define LOCALEDIR "@CMAKE_INSTALL_FULL_LOCALEDIR@" /* Package library directory (e.g. /usr/lib/darkradiant) */ #cmakedefine PKGLIBDIR "@PKGLIBDIR@" /* Relative library directory from binary (e.g. ../lib/darkradiant). Only * defined if ENABLE_RELOCATION is defined. */ #cmakedefine RELATIVE_LIBDIR "@RELATIVE_LIBDIR@" /* Package data directory (e.g. /usr/share/darkradiant) */ #cmakedefine PKGDATADIR "@PKGDATADIR@" /* HTML directory (e.g. /usr/share/doc/darkradiant) */ #cmakedefine HTMLDIR "@HTMLDIR@" DarkRadiant-2.14.0/darkradiant.spec000066400000000000000000000031151413722237400171270ustar00rootroot00000000000000Name: darkradiant Version: 0.9.12 Release: 2%{?dist} Summary: Level editor for Doom 3 and The Dark Mod Group: Applications/Editors License: GPLv2 and LGPLv2 and BSD URL: http://darkradiant.sourceforge.net/ Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: automake, autoconf, libtool, desktop-file-utils %description DarkRadiant is a 3D level editor for Doom 3 and The Dark Mod, based on the GPL release of GtkRadiant. %prep %setup -q %build %configure --enable-darkmod-plugins --enable-debug --prefix=/usr make %{?_smp_mflags} %install rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT desktop-file-install \ --dir=${RPM_BUILD_ROOT}%{_datadir}/applications \ ${RPM_BUILD_ROOT}%{_datadir}/applications/darkradiant.desktop %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %doc README %{_bindir}/* %{_libdir}/darkradiant/lib* %{_libdir}/darkradiant/modules %{_libdir}/darkradiant/scripts %{_libdir}/darkradiant/plugins/eclasstree* %{_datadir}/* %package plugins-darkmod Summary: DarkMod-specific plugins for DarkRadiant Group: Applications/Editors Requires: darkradiant %description plugins-darkmod These plugins are used for editing Dark Mod missions. %files plugins-darkmod %defattr(-,root,root,-) %doc README.linux %{_libdir}/darkradiant/plugins/dm_* %changelog * Tue Mar 26 2009 ibix - 0.9.12-2 - patches upstream. Removed here. * Tue Mar 24 2009 ibix - 0.9.12-1 - spec file. - patch for sound detection on fedora. - patch for valid desktop entry. DarkRadiant-2.14.0/debian/000077500000000000000000000000001413722237400152115ustar00rootroot00000000000000DarkRadiant-2.14.0/debian/README000066400000000000000000000002441413722237400160710ustar00rootroot00000000000000The Debian Package darkradiant ---------------------------- Comments regarding the Package -- orbweaver Sat, 21 Jun 2008 15:25:20 +0100 DarkRadiant-2.14.0/debian/changelog000066400000000000000000000162131413722237400170660ustar00rootroot00000000000000darkradiant (2.13.0~focal4) focal; urgency=medium * Fix for incorrect entity/brush colours in canvas windows. -- Matthew Mott Tue, 24 Aug 2021 19:45:54 +0100 darkradiant (2.13.0~focal1) focal; urgency=medium * New major release on all platforms. * Git integration with three-way map comparison and diffing. * Ability to choose between several different pointfiles. * Improved workflow for adjusting light brightness. * Entity Inspector can show editor_usage information. * BC5/RGTC normal map support. * Aspect ratio-preserving Fit Texture option. * Shader selector can show material definitions. * Restore texture browser ability to show variable size thumbnails. * Numerous other bug fixes and improvements. -- Matthew Mott Tue, 10 Aug 2021 19:41:21 +0100 darkradiant (2.12.0~focal3) focal; urgency=medium * Include resources needed by the Material Editor preview. -- Matthew Mott Tue, 04 May 2021 19:35:53 +0100 darkradiant (2.12.0~focal2) focal; urgency=medium * New major release on all platforms. * Add a customisable UI layout using wxAUI. * New material editor for visual editing of material definitions. * Renderer improvements: entities with attached lights now render as lights, and ambient lights display correctly regardless of surface orientation. * New 3D grid feature. * Add a script to detect duplicated objects. * Various bug fixes and improvements. -- Matthew Mott Mon, 03 May 2021 13:39:18 +0100 darkradiant (2.11.0~focal2) focal; urgency=medium * New favourites system for assets like entities, textures and sound shaders. * Improved text search in resource browsers. * Ability to list model definitions in model chooser. * Initial GUI improvements to game connection plugin. * Various bug fixes. -- Matthew Mott Fri, 29 Jan 2021 20:36:34 +0000 darkradiant (2.10.0~focal1) focal; urgency=medium * New major release on all platforms. * Introduce ability to merge/connect adjacent patches. * Maps can now be loaded from within PK4 resource packages. * Font family and size can be adjusted in 2D views (grid coordinates etc). * Colour scheme can override light volume colour (instead of using the _color spawnarg) in 2D views. * New warning if overwriting map file which has been modified since loading (e.g. by another DarkRadiant instance). * Numerous bug fixes and minor UI improvements. -- Matthew Mott Sat, 26 Dec 2020 19:39:52 +0000 darkradiant (2.9.1~focal5) focal; urgency=medium * First package built using the new CMake build system. * Fix an assertion failure on showing the Stim/Response editor. * Introduce preference to set the font and size of numeric text in the 2D view. * Maps can now be loaded directly from within the PK4 resource tree. -- Matthew Mott Thu, 10 Dec 2020 15:43:35 +0000 darkradiant (2.9.1~focal1) focal; urgency=medium * 2.9.1 release for Focal. * Includes the new GameConnection functionality for The Dark Mod, as well as numerous bug fixes and improvements. -- Matthew Mott Tue, 24 Nov 2020 19:36:02 +0000 darkradiant (2.7.0) bionic; urgency=medium * 2.7.0 release for Bionic. -- Matthew Mott Tue, 14 Jan 2020 21:37:34 +0000 darkradiant (2.6.0) bionic; urgency=medium * 2.6.0 release for Bionic. * This feature release is further improving on the Model Exporting capabilities and introduces smaller features like a mapping time stopwatch and the ability to define favourites in the Media Browser, making it more convenient to work with a large number of materials. -- Matthew Mott Fri, 18 Jan 2019 20:17:22 +0000 darkradiant (2.0.2-2~vivid1) vivid; urgency=medium * Entity list now shows entity names, and no longer crashes when an entity is selected. -- Matthew Mott Thu, 24 Sep 2015 22:58:44 +0100 darkradiant (2.0.2-1~vivid1) vivid; urgency=medium * 2.0.2 release for Vivid. -- Matthew Mott Fri, 28 Aug 2015 22:43:48 +0100 darkradiant (2.0.2) trusty; urgency=medium * New upstream release. -- Matthew Mott Mon, 12 Jan 2015 18:48:28 +0000 darkradiant (2.0.1-1~trusty1) trusty; urgency=medium * Fix for crash/assertion when trying to show Add Property dialog. * Added .game file for The Dark Mod standalone that does not include a base/ subdirectory. * Various other bugfixes. -- Matthew Mott Wed, 24 Dec 2014 14:41:12 +0000 darkradiant (2.0.1~trusty2) trusty; urgency=low * 2.0 series release for Linux, including the switch from GTK to wxWidgets. * 2.0.1 contains numerous bug-fixes over the original 2.0 version. -- Matthew Mott Mon, 17 Nov 2014 19:55:17 +0000 darkradiant (1.8.0~trusty1) trusty; urgency=low * This release contains numerous bug and stability fixes as well as one new feature for flooring objects. Some improvements have also been made to better support different game types. * Fix for patch mesh rendering on nVidia hardware with recent drivers. -- Matthew Mott Sat, 28 Jun 2014 10:02:35 +0100 darkradiant (1.7.3~raring1) raring; urgency=low * Fixed progressive corruption of non-worldspawn brush geometry over multiple save operations (#3272) -- Matthew Mott Sat, 02 Feb 2013 09:15:03 +0000 darkradiant (1.7.2~raring1) raring; urgency=low * Fixed incorrect renaming of entities when importing a map (#2733). -- Matthew Mott Mon, 22 Oct 2012 18:35:36 +0100 darkradiant (1.7.1~raring2) raring; urgency=low * Fixed black render artifacts in model preview window (#2939). * Fixed lighting view turning black when certain models are in view (#2969). * Fixed crash on exit after changing view layout (#2954). * Fixed sky box textures failing to render. * Fixed inability to move vertices with arrow keys in camera view (#2938). * Fixed crash after Save As in Particle Editor (now renamed to Copy to better reflect its behaviour). * Fixed crash in Readables editor if certain font resources were missing from the mod assets tree. * Re-designed model chooser allows control over visibility of model's component materials. * Improved performance of map loading and population of certain asset tree views (#2987). * Splitter position in certain dialogs is persistent. * Linux build does not fail if GtkSourceView is not available, this is now an optional dependency. * Updated GTK and related library versions on Windows (#2945) -- Matthew Mott Sun, 13 May 2012 11:25:18 +0100 darkradiant (1.7.0.1~raring1) raring; urgency=low * Fixed possible crash in displaying particle editor on Linux. * Fixed failure to find user-local mod assets in (e.g.) ~/.doom3/darkmod -- Matthew Mott Tue, 29 Nov 2011 19:51:12 +0000 darkradiant (1.7.0~raring1) raring; urgency=low * 1.7.0 release. -- Matthew Mott Mon, 14 Nov 2011 11:13:41 +0000 DarkRadiant-2.14.0/debian/compat000066400000000000000000000000031413722237400164100ustar00rootroot0000000000000010 DarkRadiant-2.14.0/debian/control000066400000000000000000000025601413722237400166170ustar00rootroot00000000000000Source: darkradiant Section: editors Priority: optional Maintainer: Matthew Mott Build-Depends: debhelper (>= 10), cmake (>= 3.12), pkg-config, libxml2-dev, libglew-dev, python-dev, libvorbis-dev, libopenal-dev, libalut-dev, libjpeg-dev, libftgl-dev, libwxbase3.0-dev, libwxgtk3.0-gtk3-dev, libsigc++-2.0-dev, libglib2.0-dev, libeigen3-dev, libgit2-dev Standards-Version: 4.5.1 Package: darkradiant Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Level editor for Doom 3 and The Dark Mod DarkRadiant is a 3D level editor for Doom 3 and The Dark Mod, based on the GPL release of GtkRadiant. Package: darkradiant-plugins-darkmod Architecture: any Depends: darkradiant, ${shlibs:Depends}, ${misc:Depends} Description: DarkMod-specific plugins for DarkRadiant These plugins are used for editing Dark Mod missions. Package: darkradiant-plugin-git Architecture: any Depends: darkradiant, ${shlibs:Depends}, ${misc:Depends} Description: Git integration plugin for DarkRadiant This plugin allows DarkRadiant to integrate with Git version control. Package: darkradiant-i18n Architecture: any Depends: darkradiant, ${misc:Depends} Description: Internationalisation files for DarkRadiant. This package includes the translated strings for localising DarkRadiant into different languages. The currently-available languages are: . de (German) DarkRadiant-2.14.0/debian/copyright000066400000000000000000000036551413722237400171550ustar00rootroot00000000000000Copyright Notice: © 2006 - 2010 OrbWeaver , greebo & other DarkRadiant authors listed below. © 2006 GtkRadiant authors listed below. Authors: DarkRadiant portions: OrbWeaver greebo STiFU mohij angua Crispy Gildoran Jesps (Bulge patch algorithm) GtkRadiant portions: Leonardo Zide leo@lokigames.com Mike Phillips (Loki QA) Bernd Kreimeier (overall coordination) TTimo timo@idsoftware.com ^Fishman (Pablo Zurita) fish@gamedesign.net RR2DO2 rr2do2@q3f.com SmallPileofGibs spog@planetquake.com Mike "mickey" Jackman Tim "Maj" Rennie Geoffrey DeWan David Hyde seaw0lf with assist by ydnar Randy 'ydnar' Reddig Jean-Francois "Eutectic" Groleau Jan Paul "MrElusive" van Waveren Robert Duffy Forest "LordHavoc" Wroncy-Hale Nurail AcidDeath Chronos Michael Schlueter Jamie Wilkinson Robert "Tr3B" Beckebans Licence: This package 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 package 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 package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. DarkRadiant-2.14.0/debian/darkradiant-i18n.install000066400000000000000000000000211413722237400216330ustar00rootroot00000000000000usr/share/locale DarkRadiant-2.14.0/debian/darkradiant-plugin-git.install000066400000000000000000000000461413722237400231420ustar00rootroot00000000000000usr/lib/*/darkradiant/plugins/libvcs* DarkRadiant-2.14.0/debian/darkradiant-plugins-darkmod.install000066400000000000000000000000461413722237400241630ustar00rootroot00000000000000usr/lib/*/darkradiant/plugins/libdm_* DarkRadiant-2.14.0/debian/darkradiant.install000066400000000000000000000002461413722237400210670ustar00rootroot00000000000000usr/bin usr/lib/*/darkradiant/lib* usr/lib/*/darkradiant/modules usr/share/darkradiant/scripts usr/share/darkradiant usr/share/doc/darkradiant usr/share/applications DarkRadiant-2.14.0/debian/darkradiant.manpages000066400000000000000000000000221413722237400212040ustar00rootroot00000000000000man/darkradiant.1 DarkRadiant-2.14.0/debian/dirs000066400000000000000000000000321413722237400160700ustar00rootroot00000000000000usr/bin usr/lib usr/share DarkRadiant-2.14.0/debian/docs000066400000000000000000000000121413722237400160550ustar00rootroot00000000000000README.md DarkRadiant-2.14.0/debian/rules000077500000000000000000000003071413722237400162710ustar00rootroot00000000000000#!/usr/bin/make -f %: dh $@ override_dh_auto_configure: dh_auto_configure -- -DENABLE_RELOCATION:BOOL=OFF override_dh_auto_test: true override_dh_shlibdeps: dh_shlibdeps -l/usr/lib/darkradiantDarkRadiant-2.14.0/debian/source/000077500000000000000000000000001413722237400165115ustar00rootroot00000000000000DarkRadiant-2.14.0/debian/source/format000066400000000000000000000000151413722237400177200ustar00rootroot000000000000003.0 (native) DarkRadiant-2.14.0/doc/000077500000000000000000000000001413722237400145345ustar00rootroot00000000000000DarkRadiant-2.14.0/doc/CMakeLists.txt000066400000000000000000000007311413722237400172750ustar00rootroot00000000000000add_custom_command(OUTPUT manual.html COMMAND ${ASCIIDOCTOR} ARGS -a stylesheet=manual.css -D ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/manual.adoc DEPENDS manual.adoc) add_custom_target(doc ALL DEPENDS manual.html) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/manual.html DESTINATION ${CMAKE_INSTALL_DOCDIR}) install(DIRECTORY img DESTINATION ${CMAKE_INSTALL_DOCDIR} FILES_MATCHING PATTERN "*.png") DarkRadiant-2.14.0/doc/img/000077500000000000000000000000001413722237400153105ustar00rootroot00000000000000DarkRadiant-2.14.0/doc/img/2DViewMarkedUp.png000066400000000000000000004056631413722237400205650ustar00rootroot00000000000000PNG  IHDR`GnsBIT|d pHYs a aJ%tEXtSoftwarewww.inkscape.org< IDATx}ytՙﯖVV,Y%ywdV-a -a2I༓ 3!1>22 >cӲaS}LyJi޽{ OMM)==='xB8.Q:;;MyVX5,sݦf%~ݴ#GrjkkkSBaY(R ˎ?|>òh49rĴv']8N9t)SqI%IR8`;qt: DQTA,ZC/s\jy444tK.9M:e8t*** ۍX`V^ EQݍݻwy^555g sBQ|>Xr~]$466i]Tصk|>q饗4dY֟MOOAe]ՅLNNb(((f;M>e(!޽GA(֭[N|BXv-*++ϫDB! 7p[D/oGyy9k.a,YgEQzЀC!'']wjjjt:Garr9TehooGYY233qa=z;0ӉwyKZ^ ^{5\xᅨLNNb׮]hllĊ+yfdffy/L6,ȑ#رcq܌x'gL*Ipq>@ _|===gX,G<3? |> hoo?=-x@>w.t###xGo~z0 ={N'(ocll ؾ};v}yZ8;w3<ł&JJJ?v(˥N8C'իqF)A0Qi&ĉzشi=DnVV~ 77p\yxwm6+),>غu+DAe뀺!i= b)Oe\{wrJKpHKK͛1;v HOOG^^oÁVZ ,)<vW45, My<.;uV|;ѹEEEaX˕8n ѣD"(**ƍ155ݻw7x#onVMhRfK~fs9KN8>/7MCƻヒ !77ӟEᣏ>²e 2au6R]4 sGӸ (ȑ#O@rssm6$:t/6}OF"PuM]7RBPaĽQSS{nbAX|9|>p=S[:`DR!b}t:(//G,BEEzzzt`.`&,պŲ,~\C~GZ[[2ڔ:g6(qY <׋Eaap8 ͆EappJX,n塹BcT$IF_Y[͸ @$Sľ} VZil.q BwMKKCEEۇ{" .0S)Rf<(#y8N#cXv->CDZZqFGGPYY ˅FH . IRIR{*^r2evqax<TVVYYYЭٕ IRp( h@ IepJ~dYF$1\|>qc~?vڅq]Gzz:.\6ַܹ+6tTrgd^sl()&(&ݏaݻEqqb ۈbxG jGf<#E^ ;>>kHii ^$EnQWW{}͵IdȝKXb?`08 hJlh"fs9hgzIPccc$, :vvm <ϛ; @e8q‚ H$+_בg}Ş={`X`QRR%KPUU?cccxNj/xGđ#Gֆ!455a͆SSS`YUUUNӐrL( , hƢEFzz:PPP477nfv,]/2?ݎ;v7Ė-[ (//745 r#Ly'NP; `gp.\ÁƑ#GPTT;+V@wwiaIδ<# 򺺺eY1B$8,|׃i8p. 7nDww7ʰrJG?BOOxpʤ/CyHKKCqqqR)oxxA̰|bb}Ek\x^,~X"{p- ###$ XtiBvQ]]m;ND"TWW'~S~mkl |>ƛittt ''. p8(,,7MXVbƍF[[t:؈nMwFQVVB! 5rc1,ŋ#;;{urQdddeY#++ p:Q[[ O.~~R{N8$EE~Ӷ`T~8<,㣏>b@nn., *++q7bŊxq܌ll۶ $944DLNNFGG!IX˅jCurrXL_fp BFF*++!Ip7k%\ cnATTT ---|^@I`0S^VVN'*++` "33K,A)a"+++,yCngg'TƲ,"i(..NzR-WSS2[oE}}=^}U;Xx1{ꟺ@JJJPXX18a8vz{{qUWnQ__ 6,]7t2"6 W\q I`Xf jGۍz 6 wy'-Z(ߏ C$# S-ºu됑qZ~xgp뭷⪫BZZIluuue6 N͸w^?~7nDUU&&& ˲n:ifZ:~Vz(--E(’%K/#!@eZ9%dgg+͛A4FGG QaX,V+6oތr($a΋>l6ף^N>( Hvaf9Q[[ 6 ݇hʕ(**EQ@ss4p 7 }휍E!''()7(2u_8א>@9998t֮]{޴`͚5x饗t (Z'O>==Ja~dgg,bpp 暈իW>?/} %%%())Z=t\RNHDVVVJ'A>| à?\s v܉|8qs*EQ|?0^/zeBQԌ-/{1ݺx;w#شiS\I]UU[{nl۶ hii>/?/ j_P\\ ˅|b1^]t\N+..F]]|M;v CCCذaC\ł n:"33G.mذEu~~>y䑤m›n E!. X~=,Y#G`ƍ _|1֭[dee9U:TWW#''[l_k֬Ammn;4-=77k׮a%袋099y[yf@Q.",Ά,X]W%K pHFOOdQ/$,AW_};XUU$| պW_}5XfCKKy]uuu`Yz`#._|9 ֯_qP-P+VnGvtt@e\~o~ W6ق6sp83XJ~^Zf#-- 3IDzz:SF\/lz\E[l[<YU$T0P,z>) gVUW,9v~~h~C#QQ(FEFEVVJKK q>evfo.n*v)IdY65ݻ\rI}5d.@*\O#wfܹ֞ÇcŊI>y+sqSNF~te UdֶȌ0<< ł[k'>r!Ii}LrhR`ʛ˲I[an7.]jknnƪU 1䶵b 1>>[+g˖-KD">4thD"ĪUʺ`Xna())Irj^pa…3˲&ߏL0zI-l^jpFZZ!7 0TIpgF˫4¡CP__oB$19rk֬1|i{^x^};{6v$Ѩصb_~N˗/O*;v e cxxuuuu=zI>X 'N0U;:: CyG{{;6l`A~~>hE%I,ybʕE ii"+'G8YqENNG va(hll4䎌(=Pk6ߟrݢiڐji8N= \<OMMMXnbvMS&`ʕ2nnz IDATnF]]]7 atttƹիEQa͚5ǏrjFaaa˲2]{-QڊzC^oo/,XG 500yP5LS>o%TSSjSӌq.x W~:m5ϬK>*oyssd暓2I;>)`irw) O@L , E4+PЉ%*מԧWl=sy6N3K}\YOZP)?Ú1yc6d$Ay _( e!sŔl9@w7wyc-Y|;wbUrQ(BTMDJ2`}DL۪ɀQT2; pϧՇT20 88r,eQ\Pk6m›|/m݊%PhDZHl(A9V4 ) ,) hu$i(C.td@㚭[xpش=u#'P(r~qCPJ$ .jdhI%NJf+s= = $(HEQݻ{;<1SIiVb( .̝!/u⋁ϣycI%MX@h4G_w=~k8HJ\S82Cg,ё;1~B$,;}G@Bo & NoY&0m-i !YV Og} @MD|ʴQ[e 89'ˆ.1ycYVV+H (OV0QT-` ZXV-ZZ s2\eB˲O ǁx~條%XfGkk= ͷtY~Ĺlw~;GnRgsb%79MH<8v=wv>|{f5IjY>yc+`,\ZìVb\{nO>,+*/Wx j B=S2*wsJR@fh?HdEӀժ.3TqL$.̚5.mYM20]q3#Sndl|L1mœk>&SS㊍͒>RzMS bzvöhNck&'ql>il0p$tuv< LO@FI3(Zz3"`p&.xK9}[ovV-R={`IZ#GG@uMKK34㧪al6C$IN3$Iy1P-WfT$ Xg`&ZaQMu%+H0hST\1amqS&CժtQVSX$A@!0kZz;0=v$9-&sK_K!Ih>|kj@ ncXHRi P/) xY-#65X n\byt<E!{:?';NNk Ѣr$I5*i8t!wbb,FO644/6,]VVի`Lt:q܌D>|ؐx L'ߏ$)ڰb Ca|Qw6|iALNNdoƍF2=ɾ4,`dd+VH*AQQQR.J}}}XjaXhQW?~9b…I/,Ŕ788 Ifj5`Frl6CnCC)oll AF^qN'x74WۍH$b=yZPq\FVX 'Sq Mرc5T\.jkk:::PQQaaa#Ǐ2{22P\\<:;;S@^^33u+gavtL{ ?Ok7^{-jaAitcyu5H E x|BNNrljs^6ؚ@A ?3sz1)n I>*V+^/ %% -$MMXY]l!ILLL"ϰAq ˗.UѬm:=H-2aaommŪdKIvG|---MR^/~?***-/[aYY~@HeeIlXRQ[ZZ" zQe"wGbiEGb1cҥ,x^ yܺDZz%.ޮ.!=-mY `lj 5UU곲XtŮo`)HX X^Q15PFFWT\M ƪgZGNn..\4n֭!8biff\:n7N- b?3Y,_f\ t.lEj.IZ\g*j\Z"iĨ3J.ϙIQaxFuj'ٟ*o h\:K55fXLGWF!'[lb\NMӾ`ONIN'#v]E2`ž(P_=><߃(| _" % JrJ:Q-IGIh5ޗۂͲrLe$A<<Ţ$Q%j[k5q $eul4m(ˠ% 'u&\e @DQ}V4=6 ,+A T㎯} "ǁf9jX$ cE 8@r:tEUW*s+~_RAG JQ,&, L߯֞% rlhۍL,[ۿL p^ٷoߏq(Ņpam-}'ۡCs( qņ Y==k6l5k} 119oQQ@Z,w"qŋ/ )PA=ԄII_jl^N<>,-Bff&ԄA1GuEs(,(@hrNV5E""^/Pr8Ǟ|GzH ~=8AP} % 6Y_a+Ik-[`٠}>(FYϽ>wv"h\f !:5( XV2 @D$A v|F5W'UT@q8 a ԭI^x2PD5B4hO;LՈ Tuj X05eٔnnVnVe)Os"qX5剢cz"=q\m7Zx7 <*sq93]DQ urӐe(X(֠)`֗N7$I&),&-RRʐW9UД̹dHc>CF\M'S*`F\? x<CI%d9&q e@9eCKe(QD|; ",m6OK7l_JKquu@4Ϙ3LvC@[,%)F!sA$V hgOuKN"ejQuvbQn.6`cu5,8b99 ;0˱dZH![C0 O`yaohk*+˗67q'X \WWCyFNsUE.+Å`Eʮ]h_*䞚O^|h[W 9:8Ty aE^]n7 v;Y"tNL@w v(V+XDAO({f'$FsAi&թ?Ȉ;:: YMsr\.:GFF()Y<#Y5MLLeY|^ǐ*o},[,)GSSjjj CO=ص`ɒ% @|D͆H$>SѣGQYY̤p8C٩:麺RNZx1rrrf\ymmm.#/H,hll4"++ Ie$ÆAXVӜ\f ⤲)S00e6i>/NMM! Xl"t:D y>|555i(<<iNC6IIKKK)wͦy|>&'' mmm2̅ 044dZgkk!7۔ގ\xرc)e0Q,CG{;Xojnuw#@vz:APbUR^dz/"+3Woڄ.yX|jEZlPvu*x>HŐp%TttvbOkɲ%((%K +A`IAя@Co?.Ă 8(Ͻ.\^/&Cb6BCj`QQdd),¬,8,,{C(_;“ loޖ\t).um[oooG(6stu2/70 u'p@͆lpᅀ$k  L VIB~f&^;p+pϏk}1nظ9$\`IKӕŅx7;8 6Q\N!;;$t-r, W,8HyAvZsePw^s |-|ڊ.c}=ܑ9|P?_ k**_^{ 'N஫FQn.A #- p{MM e}Xt)$Ӊ%W"+K łB%YxGkk!##0<1y@}hzzjbv8 *S02]jޗt:BH-:*873*:0ȧ30""ld鬝t;}K/յ}9UoƑz@.kpWc]/_į V._ ge˖ Xj@FV)I_YqߓO Y\~=6.YR+ilPE3u ][/|y9Vmgs)lvVt!3;xD'6ov\oތ]xy>\o$ ʃ]

d2).ZD+[Z  ՑF ya|G7\|1v9α9'p+79zealzk/F p/dZ-Zp[eRv(c!t9n-8:FF38)蚆ޱ1 ڳdbhkfY Ii䮷YI`ʛPJ\-ݻ}&l\i'ydIX*T UI4vk 4h>vb!"DF{UP<UW\5V!HYFVQeD Hd5 A!8דּm^| $B --7<xֈ߄%f p@R3? !+ˀmCsc9=w255 (H(/O؁G^|2|tF)F6_(Y zUu\>MF%X_VB ј=E*TE0'_Uce9(X |,* }$;ḹFq#n2ğ]v~_ߟ~W>6KHb_HA 8F:q( `d1asq1.p7܂7q 6jMM!oa:]X}}=>peqd|<,C_DCM gpWP)KA""VWctvx@Kahnhp5 )zJMssG 1װcRo!xj^t k}/޼jUXW۶at߾9ץUo mc*C]U as44szW"LB0Lb%PqPx @y\q#.t_&,%?m4&&&k&4])_tdS~σP6hwSt pa+c=>?sD"NL&S)DZ,h 41<=t+4&i3nقC¦&ǨyQAdMؘ ,S(SS0\]pxIR808 @4(Uߏ_"ݴi3 g,Z1Gtۻv}FrVy+Wb& (TI7Ys9CF89;3,. q4[ѭ[aXCu٢,-<CCNݤTiB bd|)OaF,ŲFq0 i0USlp\Ӷ1Ls/T \8zƁ!,wy$HJ1:54g2قWp0nZ|{]t*Xհc1Ȅ (*d<ʹLDO87i|| 03'cmhkkc:::|e~8;44DU6Mt9k:! mAuu5 )AŠ5kN@?-ĩ(@4Q 32?lۆǸKV(8ۋ^z 3@Us3uu0v8K %0кt)jnnFҥaݗ]<z.[0ŶGXt);SS(! 0m<\a`DQ矇ףqbQ|uy~s{ރ7]T&'n==xۆ شiScg  GÒ%#^Ӡc1\$sxs==Xa\e866ccs( ^>|Bkh@…C8 g尬3dp@(hhl nr/ VB}m-f=CCl 66Bpd|3Up…d2u˖;v gqڗ.I$j* ON"܌}'nލ eVHp8 QٔXT*۶}q0!1 ")֯gq ,YWgN[nqtYjXR5MC(!W(bL;}dau7;+FmP(Of8F8>D|A2ihp,,4M5 XR-Zfu}^cl۞W&k-<w~:iZeueB8cI2u|89Lӈ"n" =!p ikHF!LN"Lb8\a{d 眃O\w p"MMy("R8:mjH@'46^t2y_ϝ -ͰDѺb{,30ǝ`N{ƺ:| sN. ?I'䓸'9᫮Bbp\>vd2YwE"7cڵNI B 8"yo8ǠOYHu5X҂e~,?L6!h qw``l }##8-Ò6vqH$x?4epը)iSUnpކ t6.z[} Loy H9ŃwߍdgfM(7sEF''a[ڛpκuŤu_EgyWxqW$0Q -ľկbU8H˷ފtFF013Al* ="KV3'5g?> (WTBx4 16@Xr٤Qހu#9x,V4"p 8kݺ8546: =.yXP]xg77(a۰e%%I @"mc nqѓ.'PUD<ӶѨa8'?M pb.FFw `_WBP^G /;߹Z_˪r`N0ʺF/QK)Q8ك9jFƤq08Α![aCGw<b۰U)eXe lr@qz=,Wor{4 55eVq˲8 9z g1pcbsdy{0TUAY[ xcMA%DV>_|In(s֏iš-> ]ϙVWv dY@K C6mU*T ǛDBQCu\`-ING4͟%IY}[+0Bɲ\Ʒm;p}EQ|ojvkcAz>p^ ±EiYA:83˕eAG*33ɤ:`B?U$aZ-eYm8ZAS<5tiGs  #m3Mf !G+Sa"CSf 3Fpe4T\@u?2σpx@8y<MOzmшD\L2A Q(5^ qj&dJeHA/+SJw&=,`A:!mC Y,Ϝ-&xiBVUg3-? .H m8/W%C0 0׋t IDAT3pT&&6J1?Sm#h/,L}Z[3WvR*8͸7o\M|32 su7,͢iUUM2, X".+%4!2DYTf4-E\Zf+f&zt:>$I(̬TB2 S,yWdtu [b~8COR4MeYkjj|u H4jkkdNOOIgPlޙ EQ|{zGO? һ $IB̬ J8G+{ L5 n ,3yd9r;prL^&!~&V$o>_ÇI:.^UUg_\WWaEI&0 +-%Ä!F"IHYs?.o12r`={nw vu^Z%?dO&cddvBz{ 9vG{{'!$d2kNuK>;|CCA6NQ_&F.7(jp;;J1!+9޻cQٲN̐e(h 1RmF>MIZD~Ce蛂U<Ͽj{:=`RGjjje(h)t,^Oyb1_Ӂ 速ޝ̇Or l{9H!~k{t`>ΧwlDW\UUUz2Yz7l۶ {nZ?]X}k>J_aӻ *A88Z)p|| ߿?;99 ۶utt4773y )a %j6:;;}qèBccc/;66P(utFGGD\ ҁ p 0~ة)W5d2 Id&СCXr%>33Y#G@:Ʋe˘2;;;bŊs8uuuaٲe7bzz+W,` M$ƒ%K6thkk+` @oo/LEu?~B"`ւ, G988&6:t{Ͼ}Nk MNN²,,#=tAZi @Q,^y݃beߧR)d2_8|0VXQ0;;\.K=e˖[,l>Ąutt`ɒ%eWEQ044 .d=AV?{iocǎ@mm-afbGFFq|p8 Q}^L^*m۾8|ya7eY_#_<ŋ „@m(DðEUUU9iBxG<gnΫ ̍4Ae L+SEb1&y<+h4ZƷm;p}B!&p6?H$]׏dN 'Ioa`/e ~k[j¥e7Byųm{^|逦i:UUL7 tdB|a}j{^AcMR,+2r/bʰ@yue#E2GiweY9wC(o[W(ci@о{Dd k"Lx*lE05 zq2'+T UBP^zcnYV͛=I4ت ӷxU"+T UB@R( ,*mJ{ *⇝O^oOA2' @TtOfv> *⇝oٱc֯_,Cq::067a_ C$Y!'|u]Bz{{mF>ϐ[o ĶmL&ɚ5kH__mdpp#-[򆆆|۶mō>_֭[6>N'H!۵dl!ߓeGϒ̖-$k"rO?ɏ#"$Kӈedfjtuu۳gQUɛ۷HR)+rl6eYrA&ȑ#dvvɓ$ttt$T{Mݻ}q]]]dzz{˲Ȏ;|qɓLidΝL^?֭[}y}}}dll{饗|qdhhȗ?7֓'O^_܎;eYL9~8{ni7==M;+s׮]Dɣ> ,3yd9r;prL^&!~&V$o>_ÇI:.^UUg_\WWaEI&0 +O8AǙ<۶ۙA2<<{ݠ=d``0y~{!ξ500m߾ض䍏'N^;55E}q 1 ɛ$===L޽{(L 9zL}+NÇ~255U}>':td2&/h:z(I&L(d޽2-]ɮ]|q{$ٷǏ'L8io{۰i&tuu瞃(Xv-7{{ʳR[ UBD ۶mLG?Q===x駱b |cC[[6B^p(5k_N|{/|f4 '6,1$ 2 HݺcaV8p38]i^[^ם#S]+påFɘEq>|_^XKeP#{qs)ZV .1Z`Dqydp x #}*c|fc 1 %2]C\eHrيYyZVBk"pJ󷵵{8dY4/^;wĉ*f?v[m088mB!ٕWox?0[nـDl]wK= 31`83N 5z\ $;w 4װ`{:c`y\(q⽮8Yv]+&1 0GUzkFIq^Xע09F/I^Apزe ?|f d2iB$l6h4u Zt  +KI8/!W.4 Ø9d8 dѢEeOMMm,Xa#=f'T*勛뾞Y/^ ޶A, uNNB T[ m<tF\yS#,*`i"%Ihmh 9'Gd``<S2;;ep M3<#G*=mC$yt8 \wKAxZ6xa8)Ihoh8F.DR'퍍eZz$x<2dPn9D[5`0 z##h[W<oo&V,]wPXXS3w3qMs'3:K+9NkLBSu&NN:%G:(hclL㐝¦&;^jͺv^r91_LLW,.\Ȭ311ዓ$ ,RUN<+SQ&VUU l (/nhh5###fnLe! DF!t=y$xGKK dWɓ'!s [t,,LBUU3KNuiHR)%I| ,$IE"=gEQ`/N40WEQ066K9002#~a0I0 I;66X,4Dr9ضqT&!JA2Mv3uiiaouzy䗿mP1B!@ȶBX2 mX K0(6p8ɓc!lYڧ>U|m2яqn|/7]{-mQv6J "!kj\k%#lH"y䊢i{b"h{t Ų2MԆB#5z]CXQeY)=/!eފ<~ィ-ytޣ>j|Hr⑈3V]t2w}8:w8*3M<̝M˂(H:X`Y#gf|o؀:=R޶q3wrv8:W&NeC9Tչw-QR "DBm4 >rίk۶)ZF`&EW-5RB/NE0 )۶s=,\"`zxG2 *~P(D"Q _4@UUO;ZxSSS84ߟؠr2D<g !23Lx5@GKUUӴ@\mm-+Kﳰ q|zWK IDAT㸂G2NB)ːEQ]]u kF .HhoffWʟ:K%5 ۆ31߾6LMO?qm,؊N@dacRn \O ,٠_.`˶m}up.G@͛!222 Aep!{cTB.e=8$ ;HQ~.lԻ;GmZ0oN9O'[$pTMgdّG 1M @O88*V޽S|2 \lqΑn&3#uT 4p+lryク3wo l,w/" 5A{sq)1$8{dX؈.ʼnAtwuae޶2ߏk;elhoS095l1稐4,J{\)}Aq@sSxf M) A HhP:8Uu6|1L8ޘ\\$R3͢Hb~  YxHN#"C=^UӰ[sD"&IEt}Y$ꌇ`8ptΩFD8\̼& ĹGP*TWGo, (X`mpd`a`X`¡÷, `ppLUU𬍙YLO#1Ba'5EIBѣehoi3p| Gh$ϣ=ضs'OW^b6d*T Ugs0/pQy!![sx{/s'wc ‘(N0Q4 $!qi,뉰 mYs6zo{k)_ G{z K79iYQ{\Ÿq&k /0@薅=$#}+/m`mCVmx 9޳Hx?[n x-@5 Ǐ͟,FB,mm .CO<'_z _\{%iB$ػ}]]7܃a[*xc~SxgLyqW;*qÎ( m؀}T/2#6!*G/~hYHg2"! 4'BQ|o;<݇? 3cc`ðhش~=Y}öm?ztvh3,|t *6o>A,ki)x~_bGg'֬Zl߸5V UB)B idHghwp]3Hf%L:Lۆf,Zt`"|Ǖo}+>xLJn\~y/0% Z6 b Hĭ72,7=VxDZ3pݽX`Ay0[xn8,C[WKQ`e2$|g?CM,}#Xڊccgq߾e4uŽV54@E]aJ賳@8^xa\tlEA:ߏ: \:'_~Oڅ}\y%,ǭW]GMMhkh23;~55CO8ǓaV>ݲp?4_:QގQ_ j&x$ ! z&( ,$|+!v(t'?'&kg `&9Ԫ C #uƓsY?ף \S$,Yxކ&'M}CC'>K-º:|twU.lmo_049/\=좋Eݿ5n>= uL (upuuhH$HR!&t,]Iqڵ pg aN\$ex_xM/IdB>0իݍgw{/1,C0U]`2R'쁩嗣㐛D ??m|yX>Ł.\ffYؾw/45!-Iص?jlĔaزs'46d8I4 dشb² EUuwz:xCC0id$ S_|q7܀{\x#d#޶F^KQKޛIr:{E C$E[ԅ0-!YhKcؐ>a!RHJ^k)kI\ҊM333tOUUuy_o>*nQz/eV~g*<:8!CVU:$BP5MI貌\2 hrA;::`T^~y6V76eĒIȓO#ǏC)&p~@V"[/3gϞ4TY~ C)[ͪT*NF";/OqOB@!hF,I\_^6>SxTY\/׿]~ݗ^?t ى X6X --PMV}6.4M*uQ: 畕6ϣV1u,c}}jӹҴ(bcc6˦$IT\tx|,'2$IB:vq^ZYQՐ\!{lyݗiPdi8P]fY ij.'kljA|f*N۱=PkkkLΪR^#A| Q`^ZI( ]*McaTVMVQe#3P :'UիT,z-F\risssvbbKRPgΜ׮]j42Ν;󓊵gv-|@4luT D:;w~u2~WxE=}]GŇ.]BVC\ƣ.mjeD|+b+ŭ-TDZgu$ ~Bzzd0ގKNo %Aœ' i] ˏ?A(Pw7TEHJU2?s'O"V,l v5Mxj.t*4End+D8X_~.~,Rx'.]_H(χ㣁˗߯_G[G1WgMS[҂d0im0 ~==`?||> `^+ke|y 행0ME"A܏҂v2 |>eT?Ut=}> B!ZZ0:< z ~ŝž>|DS);@;2_On3jlOM۸t E>G>ǣ>J[n't@\fܹ/RPEloosq3338w EZE,åK6ݻSP,--1:??'NPP1u<(jWVVCe6KzݗֆѺ?!7nܠj8~??NݯW [q4M:u]~< u1 IpY~Y\.b .Pux'l6rGyMOO( d2x"x WJM<T .^誽&"VVVOSusss8u X[[SO=122B( ߿ϼ sմuw􁾾>j}9Mp=vmm r;'3q?!D LGM?xD|?}+XZ]>5X"wBTU>OCns'C.%ć/^,,Ncba.zNΏ-NiBEUwJ@yO+=ޚ%|gpwes]*᭙,onbq\~?{Kjitoi __[zZ`1v?Soo! 3/gѿ׆1⾝vر#oVRAGo$?IAI0mSuoOuNfiR.o5lPo<ޟ6wUVu͂~?FzzPaI*{ :H8`g-:* ,MC>I ooi|_|qKK836ݲ L؋PO?`,T% Auw >O;H?++83pr? N=Y:,5`_Y3Xu }=N$ bsmmx% BpoŋL(*>S6ֆ>->~ʼnn<}>( ڊe!/IP_ԏ 37'O~t Q|srҶ B|DA\<H7D;c6}>~?jm A`B;D" 0@goomG}?{j}}`ӏ<ַ29Dk+{ש$;gC?sn-|P Ǟ~zglF0 N˽Xo88888WV |ʳ EQdޙ(^ZlI`&4M;XEag>Xzb%kIQH)|ΚߏD=;I:lyu.;er-~7?'ΞimHV*;?@UסB) IυΡ'OBo-, -->30fx-ōx) @47Q|SV:mgABD*uخV(Pez}0!&diALc##x'qyv?=>裈b3* "iBE(ji|'q{k ooG*v|qoW{! b1ʺn_"htd7/ tcx)tvvs8y2~;|%c13¹sخȨh4bPߏT^n钢@dcec)ʠd2M (3u_efVqЙ\NKk<w%)4˂T*4h&S[V!IŢ,3;R@e\vtb+qC,4MTSjd0f>:5VQ~mmͥ4 (zƆ+)u8Xj ]יY^YZ lFLF`h^jZ=Al@d2Lβ,&NSr9Au&f\R$IL~i^?Z;<󝑳2|\_SUBN /vu•+PU?Ou`,cOF_pi ]] H׾?rgfssѳgAoOD§_~ /m{K$>Oct $X.m;?T>Q׾[Z057U\8~?|y|uu/?4_9'N`13a˿x- ƇϢFFo5o7ozQo?C/o1DFFv>şT{ IDAT)Ο 37H祗V??A\÷n߆EN◿ept@{? b .56A3 ?G:orQX,唙a]XD__+(P(ԕeP3/AiTӤ9椭lVUtwwBENEtww;hU*Netvv麎jJj6W%`KӦhoojˆa  2^ZKW[^:.+Q K`cZc ;nrEMVͥR$ 4nN-Ntuu|}]eV$tuuQu]GVcdiMD\fEa67 upތQ* ~\G~\-:=YI|_Wgvχl&X|tqq7s߇pu"tg;A~ \et?:?2zw%~4M$?.&EѝL&e($X$z{{e(* f"j%IB6e4zzze(S,CL&R.*gbfXdjjmmm{*$ ~_G[^)IWVV088H]@ Zn}}G}q2ZZ2u---rL6z{{e( U,CJ6,u:|@4lnnRJ*?? wy&:;避ݞ7v>DjqUrZΪTծW4avttwArNUa2ӳ?gQ 8/h89t?Unt} fjtű0:;-Pb̜X{xA: ðσ4{]]n{{On de SUhm=`ȱ)ɮ]]@_nR3 I ; 6-Bzzv w! ",Ȇc88Bc  Eᶧ {zM'Budgvu=OcfGHWOG+˶A ?~?HG==kJbsu{1,"Xs#ctZbkn@}$'{΢vt[9ڝef"30{;^wn=NY-ۭt5ba4Efwφ}   r<4ꯝ݅.8UqjiY*.v2׬HQ~'8q{ɞ;o mm{R?fݶFFgx ˂ngx: =ov>w EV5!vm=XlRK>},=Y9cuwl#`u{7kR,Է_G_cohHQz*2>ZMFk(=.zH]Ӏc\fᡍn}4զ&˰]?M3Zkp%aѱe#LZ?@ibJ%ΟC ܺ X ^ */R _%`Tk ~ǻ fi;˲@ziʲ{L%8s(>&AtfuH~wL5V_MyAgв0;cm83- KL{TqZ\|G]taiZUU :g26f4DB ^ZMP,XJqljjpn*4`_/ͣ@3Qu^wezT lnn2;xiUL^Ş$qW&{{^\%A+W777I,c._8S{5.Lu&UL&C^{ڞ"Swm( rL;w(TT*yiV{1u333ZRjJfffIXr(iyR*\UU%nbI.sm7M\~[YY!tAnܸA(I$!d2I~m.x' LU.S믓l6.{.S7;;K* [ P(P9Y&+niF&''%1b-vuulooS9QC_qpppppppwXEQ<в!Q}@$(´:666\t:2E T,bfHz(Tӟ}M岋3 y=*TUEVsqNƙל4A I#4MO4ߣ-:c:''>@:,nb1i,{c:F'2YqVR VrJL4cl-ː$ ( j'r>9@ɳrhA횦1ySa~?\RO1E"X::V,Mm6jjS[Ys8MvΝF4MO]RAkk'xjU׃5?$IB0<r,˲~YZM`ơuNf>@ >N\nkk.Eoڨ Þ@ H$B}!@Q\D"@ bSk6`0p8*Q9Vh\VC(:vaˢ(2mB6wڧWqt,CbL:z!,PUƸiUU=P; ڤŞV}>FUUUE0d򫫫Tιt+++Lιuι5*u~?FFF\B]יD"! =0 v{{ԋU.!2ӦQ+2Sf100NJ%ZjJEM03m iHRL]\Foo/*[X, . 84I*P(tyA$Sey88 Î3uAڭ- Q&{ŭd2!uPGVR(L]KK 188o((JL].(JVTB__\(fL:ɤ+K+":::0227`|`|@lwXqtw{^ex^#m^j8ÞWXߏcl}Xm8:j~Ewapoin|l~}:|5A$3" -hG5U祵, ڵkG>Dq-Q;Aj֌0 輴vtN&a&!v=/u>If~4,Q}K[,H$p%ʹGf6 ~wTҾ0njj \$xi^ Jxw'Y~ssb1Ϋ}<gj]%I^JUB^{5k{>'L+By}M岋3 y=*TUEVsqeAu9iS @$GeN4~Sb/q|Yai^Z'| q+{c:F'46VV!R?e|i2$I(..mmmT$!0yVQB;]4|>& ÀiMu˲iSDN fc 1 #SR9MlZ+,]Rڴ,j5B!*E`Ѷz.˲_VUUqh,#_|a5٨mmmˎR(œ,|FM}6}=XZ/pjlVU`eA:BQ}xSQ8:yPjvhԚ鯎` `j柪Mm6j}>DQlkpHO6 4A|e0 >T" 2U*g,bVVVsCLssekkkT)nBa0uDCCCԅT>gj144DXr,3mR)  R0ultqZ j-Goo$ |iP(===km\.[x< . 84I*P(tyA$Sey88 Î31lll`tts'4{&FFF\@Q9lЋ"TUj3 ]$:F~+GJby {vUUN=}.NQd2VCCC.0 $ j^,Iڨh4Q _6 2cqP`V2aP(@uϸ5<<[J(2uPܷ]EJ%.a``]]].+nJ%)l6˴Ɋ[#L6cJZQсǿx 0 xpNpuS 98888888&WD2=u=ܻw ^ܺu 122h4/W_~7x瘝9882${{(uܻw.\Z@T|K_"3׮]c$Y__gW^n*O!QUյ=ϓEUBrS{""+Jd~~iszz*O!333ZRjJfffO,CݽSQ󡽽---\l``(;)h\888888888 !x|gC O<|>]/brro,>9ETU4jT*BFYfZ ja0yV(9}{9Y:MӐL&+"JQ*IjSs+M:ġ}nmmLϓeu|ַu:ؖ}KN IDATMQf!3 ?Z Ce=GLdj˲,S5Y,ˢ+e~y({h3Nxݳi(0 lmmQ{z-'| q+Hbw$w(JԱZ h?eYut|UV( TUuqA&qyv .ҥK$ HdH VRn/⽶{z]#Xϣe4٤\ǣe/Ž׺Q9k߫|Ա6n_Xχw^q띜.~NÎG׃:ɠÉ',B08bT,bwccS dREaxeYe.㮧B'`?;vU<P|Ԃvr3mr9VԕJ%j5HDj5 yV)y@4r9NE b```v˲L&:UUE4MlooSi" رc`?ah49AL&iڡ}yd?N}O̹Nq1[|>|>ϴq\Mًb0bjr˲Y(ZIPTJatwwۮ* BSwq0CCC.0 iMYKzݗu]G[[FGG]!D%zŊYLdƴ'NP6h?r9EϘ6>>N},ƨ glfŭJUUVbpppvQQ՘rtuu8%E<:2V6j5MCGGFFF\`|`| "~-&''sQkqpp<\e$IO۷oEQ\.cjܹCDQrR3mNOOSZܻw!jUU233C߿O"ELOO3mϓRڮ*uSHrkiL IT0 r *FI"`5!d}}$I*o3uXq&D"A(Sk:&+++L׉iTn{{R[nQ},oN$EhoeY0MEi4M祭jGQ*|>ߡrRaL^^>JGM:}Mؘ}=Ǫi2 DQdfV.N6sKi4McEA>(TUuq3(²,L;Ҵ^eAi!.j ֱ8iJycl:}vZWrbOc}Ѧi >f6\.A\Cz?mHsK9'߉NUUj/84Ώfc%F4^m">x^i4`X&>hYq3Y:yuZ,osa ~?F>̦׼2 Mz]̙3TXUU˲pInkkisss6J1uT 0d2I圮,]0ĩS\OԅBl+ 8qÅ<`?r9\.z*ryT*Q xZcǎʩJʲQWWy~biS$gvMP*:UU188}-B&aVWWՅag&Znll  رcDQaM.ĉT?dӇk&AZe'N@N9ɓԷQ||i3ɓ'qw D".X,b{{VGGGuiRرc.$IEEccc޷]UU{BSJ5 ===r^CuR^uattB#z5w`&N:⶷qiBa{{$1r9E.ԩS7^qX,ĉ.P(x'Yqy҅acpppv"N;v ]]]TEt]GP􁾾>1vb]˵5ttt`ddo888888882!/888888882!/888888882|5A$3RI'U0 jQuʹtjjvz&&&ϻY3^Z/!ef3iY`1MyX6+xw|`zz|/CD5;onnX,yuLkטd2IיիW۽BkFTUumdqqcu'\.޹sHJgڜjB VTZ**O!(iyR*\UU%nbI.sm7M\~[YY!tAnܸA(I$!d2I~m.x' Lq˲RLffi믓l6ڟ ݻL{RP9@ eLMM1m▦idrr[ZZ#!vbiWWW6/8888888VCׁ ~ | a 菾#_qpppppp /H38y.p*@1qH ~?0< &66dh=[[k/nyDl6K%EQD `, ,:G {Vtd?JY:˲\=>U,a( ԬZ:hEQLX,xUcwx*rLit]gTUR*9-z K+3وf缙x/ϲY<TUU\v j3rS( 0HdY>5jUU=46j>К-;iZY3X>hYp^~'INf]#|V#K,l?_n3iD33M\z19ƃ]6mHkP8i|!}3pzU{-'A=fC[Nl/T*cvӴ$,jdojz೴,o3,>%IiLun,eY(ˮ L4MT*xi @Z:3lVUWs&$KgMBu P`΄ddiM94hQ]ǹt`7²,VQC+Ǧa̠9#˲9g$IWιֲ,Μ9Y6BӴO麾x ^Q4@ >^~a})ٟ։=G!,X△>hKK|><R Νs=x?jN>H$"S+IN<WVŘ6EQj%IS7??'N{vUU! )Qڕ`hh9esyyT}p}}mmmuq8~8u^s+nb`-4q)ܯi mHgRr9Ex"Ν;G]Hyŭj3g Byj[ ܾ LLx*~džҲ8N:݊98q]]].+n-..bdd}}}.NQܿit]GR􁾾> 8MPVڵ5ttt`ddo8888888\en! ~mg^z7|BK OO(%;Ʃ #/8888888\hm~^аYO?G8x3n xܟN';(LitNZ/m3ݕ+WK/Q,BԬ/^:˲`5KLi 5K#@4jNuyxu'.X Ap'H$bɒlˑ'r8G"eo(y3;xy{匼ʒ-QHb#bo{$d-¯Ouu>9<k~/e.omTwnTL8sM˩ ܴǟ%ۨ yٞSl# M֒$4͟y۳QymF8;; Qi/RmFyD"B5ҥKL"t]ŋd2|>OMygϞLdGzzzpq I̒ ׮]áCe(}LOOX,2ǮTf~߿Ybvv'NQ{Pccc8}4]188[nAKK 3hhGcc#5޲,\z9cccؼy3\BMM 5˗/SY… v ٭˗/[o:5PYҥKTn*B6er Ξ=KuիWqQln UFpqT&Y111SNQ bϞ=2,5<*wrruuuH"~y<3Y\Aq(lgo7ʫl__#K&k 'SvQh\UUAaw=,n9Emvx UMHrxm#3永eP(0뻘(P(T<Bxe")4MHDu ɒmX<0 r,p<0AWL˲F ꏪc)8]GqܨUr9s:wSX 0nH*ika@$ ;_oV|,W ztg6 k߬l6[_nt So7?zljP(m74ݨٞA:D㘵x!";77q2gggArWVVhFGZhܕr9yEQġCިt`<8@JL&\I~j\.D"Y,Vŕ$ L޵kMNNRعs'(PU)s``wﮪb"wuTbq'XlF6rFX pqj&off1g~~a0BGJp!!XZZ$IzD\FR)R)dYWD"GXjn $WQ۷Ylzz)Se*WQ 3yػw/$I:m۶Zxk`eYrGGGyfj-<бd zNLLZ œ333yZ!AvenٶM%?i"Eacq$2 ?LTG*n 8pZ,N>Xv+cvvߵYe2a޽:`,544۷3k 0ei:Lg ;>>zj-0,D!BF者"D!B!B"DW"D!B +J2> `q@}}=8c.I5ha ♦ q;~MozSU *N tܚjfWQqjm0 `9y IDATu3y"RՂdjH$B9MӨA2 !PjcrdYft]ܓ%0 /yf:Ft k&!7[O5HdYFmmM@7NczzYzc&Ub;耪L^q7ܨq_ aFn:$s:sY:Q ҁ?v??>f})}): 9?~g? Y!"w Fn83sTffuuu1y0 5i fعsp*rHR/8|0U,2 5kfppNB300*R3338z(7<<={P',˘rJ`4 5::۷WqM711 qMOOmrFٓ@ nTK_S$If@OO=JuNd)׮]Ñ#Gl6l6ZEGGGnffL9v8t0yP=_}Qڒ$!H*shh}*&''}Ν; 07>>[Ve~ddʝBCC5{2H,85{*w~~uT)syy ɬ9nYֺWe*w=bPU” 6L?KKKj-> dJ_ce{.CXdHӘeBlYet@QZ/ kaS"TyV7,_XRD10XUeֳ=KKKPbͲ@ǡ(JUW(J @顷g߿7*r$5%@4.K/qf Wuɬ 3::*c4M`\ܼy30]ש_r9lڴtiBQj->eA$j:ú:2q jjj?Q/FOK\#Ū.d2j<Ê ʲ4'Ձ Fu@4Xԁt:f 逮0 A\Yd6X:l.C}}=U;׶m@ۈ fv8T$ HⷞEDQ*w=!Ӹf,F.niج?Ag=`} fY4662mFV?yއݘ³2%5ֳ=,! l크ća$H9b"sssz|vvLOO3y=mff}y211l?w2a}QzT*ENi-L2Dej[6%L]]]TnX$W^ez{{IP Km L&2b'l긮LI&Um&.\`FGGͲ,/R&''I"`5!dbbS~0ydffҟD"A&''&o${Ko֚I?wy!gϒw%dr"'?!{fJ\+nA.]ľaBmu#Զ5lHY<5D!B3+mxn:c X@Y%p]h~QSh2FGY>!JY% ql=sf`.| (&?a.]>i "D!se, j۫͛7[ nRzy!Bg~|qNǭl[mVlWB"Dmp`Y?:]p ]{W EI3X!B rO|q 4]i5 zz%2`kcenLFSu]qZ=bk!Y,z܍򂸦i¶mf3<{*ܲ XeYfn`ĕexFQmCufYEQJW"jiJ8UU%X܍!e iAnTn}t@$QჸA:`&,beIP[[[vmTFn:ĵm1粢(M˱QXQX45MԹZӻ ٨q_ +@, tp blJ bx8|lCMC@)p:ujl_ks0"h;v`b ڮ]ǽ*6q(BDp1D"Q}vj+WE8̨|2S`ΝUm]]]L2 `bq4 O=R\.T*$>paC "Um8pH ,--ThooRJEQ033GRyسguʲY*wll Ԛ2a||yFGG}*ib&&&\Uq2yӨm}}}T(Z[[ A܍@w=`k*$IhkkzzzpQ=LBQ۷ڵk8rffq^tttT=$gffdc700CQh> :Tvu۷j($IB"@GGUڪbrrבܹha&o||[nu###Tt`=n"c۶mUmPy;v젞sCv+dq13L&*K=oww7?^u< 3m4$n3u aeegž;81=;??o?0 By.]zUCQLOO] ?l ϜADq k_xctt)sll ۶mifYIl޼Z+n̠ZN8=pKdE"8؋D" Pۃxh4P&z}tE 7U۶XLIɒ)8>\d @)ºyb_5 *߄8acv\ <4ΞŶ56g{/կ{:4 ̹ C"D pҧ{so?8<,~Ė,e~ٳO㿜m B,D!BǚG4x0 À8ħ>-77W?UY!B"0/wxǁc%MÀƓOhG]m-?!~j !ݽ7PZp[O&=i øi4@lۆ,0(iA\gvU(,k]\EQmԝדi&TU(h(Ӳ,(B8%3h>sҿ 8e:P,1`Az8dY7-q&Q(TUer}!Fd*RŽQm| ˆa0r϶uNӴ~.發Z6_O$I:~:@ WU)ӟ˦i;_$u2UKUA<'u$/iP@R2+TU!؞pWe:7@qEI&cTif5M fr9j,]Y2 ÀeYLC{U74MLuشisGz4B:ҙ ]יi,eYPU~],QSSCu$!Q|eHqI\CeD"N|9?|gݨ'3JzH}Hq7Ad2)u6?Ձ -Ft 2%I-)bz?_ ۳nT ׃W74 &1 @/uH>/cpb@qX@ݖ-(ΝÙ3grl{dk:!Y~vvLOO3yA;0/7??O&&&ΝUB}QzT*E<֮L&n"2-͒~̮.*X,W2yP(P v'YIWWSf?fUu]'/_f򆆆H2:n6p7::Jme_|699IyE!d~~ɛ&333v$ 299DFGG .۶mdllveי2/]D è:>99I{1&(BmKd``vUR,m|\v)ʕetww3y}}}$U4tvv2yCCC$JQTUerGFF24MrEa&7<>>NmSۦ,A6$nl!ݚ?8Cm[XX +++dxxɻx"1Md\BTU%Ķ$X$d9ed^%IH?$kF $3pzzH\{i3%Ru\$ük׮|>Om [$NSTU%W\ad-0ȥKa5-wll,..R !B6P[*]*?{+ I.<N* c_VCy[.aƊ1LӽNJH>Vy/\ZWaJj_oY{&ώbO={ꯂDG""𔕪G8!Bxmhu"xo5}dmQ :$響WVo˝  m/wMSA;oޟ2狫pv+C |h(+Q^ Jg̲-wht},k[ӗJn}o~ʹ]/e<:Zqey|Ԅ?G@4 @6H* "ī X2ooUuFu@UWo9]+wDqVTnH}rE7*Dѕ_QX7! ij_Dq]U8kPS`Vw|<`︖;'tr*Iq8ۦ;cpSh]Xޏ-W,1LJQ⊿)V Ml-3r4]K8/ EK(M@$>(8 W^"D*W&2'ӴOߕ\^bZ뫆Ybk?M;_^x]w?%9_E7wvՆq[c˜5}-'Ukxr.nKr^Ke;ϯH;tor!o<8}(Cc[矣bgcky<:o{GAӢ|9e&9o ox_ MF~[@\+a+ק?X!^;X3mSV$2Bux~) xUu:I c3^д5, 0M8˲@W o^U)|Yg;`cx$FRi;)1 p:NWs[Z2~f_grw|YY1u髼cܱ,p:h\ :Dqu\Ǡ%r|Ε_c媬9a~vW9ALĶA, 4Me<G>qt G;0:5.W|E"mO/[ J!W"h/W Ey*p%AieAӴ.CZMi(CJ⪪ZگY܍@ҁ g9F1FCM gݍ(bWs3 ?z5e͵apdG8Ϲ"1#ò50;vm>]@x"^[۫S#5: P@w_wz'yUQWWzm@b:G?Qh$Ț1aӠ( XRv_mC.ɗYIWU5:P>kc弱4 ǭ;|6v4 q3pz?M`Xlq`)X%{ϳwxo Ǖ,~fpWhҿ⭘Ijkjϸ閛U6? {ރ @$4QADB,w%Νٳgzen/f!( h 88p*paa(Rw*wyy0wf\ZZ!e$t]ݻW^r3 $Ibd/"ڪ=#0w޽{us,;<<={PoX2s _N*D"䍎b׮]TPeShiiNtM, IDAT055Ŕ9>>*2M###L%q000΢[ljmT<"SX bZZZڂt`qqavweeib׮]7t: Y:ׇST*UUgϞ۷rrhkk[뿞aώ PU7a :ffnxiܾm,:f |';>OƶmLfGEUE],D{='NpFImk[:b:hm-[ZV<`2;bג++8[T ./A'd `_l5opy_),t _} ޅǎyL$mWO=G~ eu'67/0ea|$aO{1>6۷CF{m2ȦӮڽۍ0۲0bgs3Du(VV藾DЇoB4 az~۴ |,DQH;mPc*O?/S_4WǠ?pIq`&LU]Oy(B4 G"ENYˆ8PD*!E8er p<ǁDpqpӶwH,|&M[ ii\!F ""T>x߰8.HdC4g w|!B6Qg ߎOӃwFӃ4:Ǐ qzZZj Y L6cBX 1}Dp aFt"Abǁ7M7l ||GQM^KE"(x[ނ--1ӋC KxwD ԀA"p^R_#Yg c~!BPXڶmÑ={pmh~ji"bzn_i~$-Hs5m;l$|i>ɪ$uP*+{XLǖ wUñ,R / ^ Xo8 !+>L%x=|'p b |A]' tBچnW|3n?z]3M\Cۇ|p|ۋ(wWcUL~q\e 55}o{uョ|U ˸ $^88g&"8 )M<~XWݲu4HuWV?#xwM{o;x߸&>w[::{E7㋏|=gH,UO?VW''O% ,?؊xa@|EQbW>/իhlhxQS_&R >whͶ0'z BJSYm~:44MRS5M iYV)=xeV;8?X<˒49{V{pw2u]tX,R?qȲ ݯZ$,P3M8@VU^,NUѶmZq}n3 i[`hqm݊+xA''q, ,/~(O>C--hllD4ɇƇ?9<'( ";߹(,-1M,Msw.?}2 }WniȎAg'ih8ۆ|0 ׿%w dIb̥K3gоsCzhM{&cnv@⽾vI 8ڊ?:n3đeD8>8E>PZq$QG! CQoN~ݍ۷΃mN@Kl]G%˰σy1=0vyoMMz7/ A`x7wK{;Fffp~hrPv$0$ NcbzãǹN(-[{_Dm]H!0y(B#]t7~/eqP4 t5MMn8s'L]G&M. a-غeq 'Nk=ƣGa&e!J u $2 WFF)ڐMVW8(B$IS[ 8XDa/?xewJ!xɓŹnlwՂFzeuf:4E@.YZeY24;wb_c#Vf^3X(Py|+! q[@2 "pB,Ézg[0@4 bT2!β`:8[;:̕+/;@lތ--,/q;u _yY\@ ֶpoق["Zo Z,`j48ǭ%aULI*IY(ls˸aX2KK{%sāVipL2:"ضixLKyY t`S]V~?" x:!]YqWX/Λ'mc6ZkPmہ*gʜ!=<MӘ5<^x*wee\~ɓUt+++8z(w;vZ"J!LR===蠖rH$8qUfww7+IǙcw58p&[,199IbΝԺ(Lؽ{wU=/0]~---U5UK1444ͶmtvvRSSSFZyNR<Ν;ڞ{9&off1rg~~a0kӱBCQy/"N:Eu I۫:;;qqjT*T*/V jaE9|,M݆sHqĦZIp3gTo/i>rw< lkmEZك;v`aa[n9t_9h-ywX̽~`>@ݦM 6oƎV7^ױˡ}.kgq8Ǟ}:Faqhk(XfCж{7`XY\D}M jc1(~a`{K ,Bs"3)9+˨-556bGk+++m۷C}IB rbhx=砱۶q[<EDh4?u񼛹d-;cgK `Yg2쮯Gs]r֭[^v؁U[ (hvl8;ށSرy3yݸY5zAA҆@Mxw(},8[иiƖ8ֶ/338} 8l߶ *!n(V9=}@"8(Aʷt ؾmp8qN9=;wp'&ZjDe,g8~ܭ/V)ڭb|8yd.,e>Fd}v4ˠi2Yv4M0y###hnnu4 W^rQ__Oƀޭ&N8naB$cbxqd|qy|gvSh{nEKS.ML߾Ǒ{QW_W"8wsJ<`M V/؛x\Cy^k%X[L*[,(~ pWJ%)ʯŻ?:E*p *s!LJJsqI*sn9x?rO]|;xy߿89"lϗvL~xKU~qe`8]3ByLGw|G;D-wHR )CPw` n=}@]^=^w,H<'b1'1Hsb~h  D"x 8H4 @֭x*wТQokCATW{7ѨhtɊD׽˹wJiLpGwx#Tc/Kssߏ^h Ga0e۫Eg-- _N6`Upe|0[믇#8?>l#.D,Ͷ B uo^:to"W.^gƑ!ߎM7ז> A!޾2&pq>As"O% {ރO_yb>1~ORF1 IDATaD`"t+-Ip$k 3]F Ӄxϝ<}}x[Zu_5t [yܼmJo2.LO~ bf~?$ruXՅBgf˸v&DR)@D087nSى,+u~@Z[Ad?e|+_Gn^|驧P,?!,[Z`'`%H' ?gA Ik,)!fS)0H$ ",hʿȮL(E{6>4z=I&D4ˍՕkY.^ACKy8]188܆a0 n s UU ֶm(UUp#Q*[.a&ffft@4nrccc(H^Pid2KHư6ef !e1cO~ S `a 'yuu=lƅ Qˊ4 \`ڝ i6GF Yw$T.CؾGϜu۶a\Ei(fHw c,a9LQ\B,?O>>L˰]$AP,/,,Yf$ ux۞=އvW}|kezڶ G1mi-tB02; 4!>O㟾mSOՖ:I|TT[boGOv#>{vF 01cLM^| =u[<<$'y[Я @FQlkX~=>󻿋?<>裵q*Caڵ4((b6"kL `tnd 4=X$Ȕp 0pynZZPf\i&=H0U.afݠ0[4T*Paid>o UE%&-Lfur9fT<\eF^ݻyB۠;Ȯ%74.?;6A4Vxo)w@\bժU5M^κ"r bHN+bz`8~3/tއBMê]7|)ǦQT]X@kkDEt[[m(rÞ]|t"J>Ef{MÉ3g}qGAV GP. j6-Pt{ժc'ظe VЊ** 388k{V(EX}:gttVbFqtvvrrCCCK#255T*mfbgff= PN# ,s<(p]q7 !L}NuHteڶ ۶8QJO\,hoog):Sʲ6Er9LZb~~D:榡rL,R7 EؙA:f{LdA.DQ<xÖJ%Dbxn,VېnɲwIk^_:+7_ #8Nm~ Kq- C z=3M Gߣ$M)M֔4?,{-]L ,႗ --\NA!GZZ0Bഴx `1ϗOjҺtޗ΂Im.p%dq#E7s :n?_ԒRm!_ҷ#g?I(*UņիW ֮Ey~#`R&piĀ.9jz[kG"ȲG( S#`--$D#DÌTH19^BU fIimrQ"UOh]=X n|IҔǓzg/[I+`Kc 4m KfFH SCx38Fg(9cϥ$7XKIE .U+""44XOy>ۼ};=yiDdm}}{ ^"X̛d77$`j5❝'>\S)"ah*`^=Gy{<) ñ c1G x r4mq<֑+.9opSӋ xXb6!\=kv-%a +3 gYVΫiWTWΰMK!,6<_IX08V =lu +¯n8\mZՇu9Xc2L:mJt]70]% p/ҮLΌH B u.lQ\2uׅTw_8~ FkeiY^*rf_[a) .k>mۋ ̜Z ۷l-: D`D`_+zːo6A'G>kF"#&$^wmA]9HG@\YM @,*L4@sp<=G?i.%X\XrEv>~80W{և4|mۡeY>*U\xYi/J4M`F?ÆfEa)Y^y{ 4zixQ---L êx11AƸ^{b8MOO˗/sg^d2d``H hȅ 7xs'N 0uB;w[ǙJBN:ŝ>}e\.ӧO3udaaS?~[sHPhn9z(w2??pqrA.npp1umC1u###djj{_޸"˗/iW_8Wϳ)222:77GqY244=zi;x6pEnG!i6\!?8wq*SI?!;uJL]P gN?(LRǎ1I=}:y7ʡ $2) yf=.^$iB E!R!$'$!9S2<;2B!33dA0òqr`߾6P$3SSβ<(-ɑ^0?D?x,{G?dr|\|{}~6S735EassR9|0, [ǎ#\?[&oErY.G!lzZ%'OΜ9CJSΟ?OύhJSҔ4)MiRo#m:^ Nmo>9a֭8}4zzz ;p5 K!\뺡zuㄖGqvkZ/am -Fv6.W&pa++X򮤍+W˕Nݕkv*XW֡?'iwWb;>_ii]ϫ+LBHXreɕhyMW J}KVjwW{+=+ Bϝeh6{/8^x<3$>Oo.KҰL^hh:aXb%c9 Rl@ub1Xa2y|>ItM\~n6V.gaeaWjavCp<caWjaW{°ѣGq7D+s6ql`vEeN!drr49qy 266ƽkՍs⦧˗3*O!_a sr=TyBbO8AEa 9wǏ3aBӧI\f29}4S;UBE!Ǐy9R(A=]p7\w>gjjpq͑A.qnvv 1uGe! \x[#Gi GFF??~yҾ{ IDATԝ:uT*T*3gp!d߾}\e^u.S733Ca,twabYS淎;F4s9^r@4e !fLrg9al oe23 !$)JmDŽ,Yיtvv2_rrY} ,,ׯs$f4)M)IY| X s|M"T$ P'^4Us$u!RKNJGٙ`9-W#vr=sB %%A@g-Oz/ 6RrVOuH׏/Fl{qfI *D]UdEkσEMsi9WMkX*I]_:%Ls85tI58$_ٰ4)?Ei7p:Sia$qUE~fyQD>/%6h].^#`TqHU h$\:V{~?׏18vˬ _RuSҔETr ҥ/CW8Æ! \uذa⬓;w_w"Fg,J شv-`d28wnغ108-۶ADO|g?ؾ~=J{x[pl޼ r9lٺջ!!m݊DGuo2&&{nԩSغu+3 ҥK曙saƍ(ȳg[nah / ܹsL ۹QǏ,s``Ll{hmme #СC뮻tEW !a~o9qw2,TUŖ-[a籰#G`޽(0uqڵdsNf\^R_R"KZJ%f;r٫k]E%ˋ˞d` ?IUrQB mc[Wvo؀!ƀ?#$KM~J%$vJ!}mL* jջe?/|Xw/$U-pߎ1+X\\R, m$b^eyzcSҔ4 ؛Q7bӍk ̮H xq 69G`rr xǒo۰q/C,'ջ-;wb`bO8{6\,2N=l>D<;wo}Gsa5 L{?.aڵO #GpY͡Rw|3~]Hx$ߋVm c !^>bTXݍo}Q~ie}n{!bUG?ģK%<?}:'A?/=@/^^~pT;֯Gaa1#j@-oݻq 7^||?7 A?m8* Y􏌀ݰcɤ<EfaOG8?< 0НJ/v}iLN"qipJx#޳ΝC(>BT>ISuOۇ.iHm:--g181׎׾=Lfho_\6fhIҔTIތR688YSzmVnIP0M|;$6uu:2x_ڷus/ɓ}Nk9O>aq,kޡCXى]}}/w=7Nz?D\ؼaeVURM뺺sǾGq%>X#%y"?7?'D>qE׿{o@4b,c`nO><>ѱ8[0 -A${0&GFߜu]#>SӰn121G> F&EŲ/O ظp]LMÇqϖ-D'_{U|AYFuF?#YƼ ~?/" /ۇ?A"* wk_ñ'ݻ>qz$[K!\ syzߍN@kÇ};^pQ+Sg 8h$>v yd)ë# wݵH3F. y7z A6^/< zE ɲ Ӄ͛qַT*ߏkىl}K똝կbǺu:ͶjBh<I|;v`jzk֭"%#4!&GP,|lw_<^9}_I|!nx;޽Xa VxOz)ܴ}w~D$QU,j7IA EY.FܚҔ4LSY*@-d [.ASwr尮rq]pmעjiEL3,U4꺎IApR^a`jj A6:DUS.0 @4^ $ $aϣ(^jAKYjbazBLwnڄLm@ 6ZE/(r$$ Z]l-vd2(C!gyhۮOﴏ;==hO&qY,qbxalF{$ى xZ +w .}T<v obhz (d2,4VXssrpfp؁JEBTp[_ yu,|<OAӅhCC5l 4MW*Rpϡ/msriJIu]XZeY\lQީqؒԢyd~+@=GGGjw<i fJa\xijj `°6ir9f]4Mcb*P,tm0 n`vvBal\.ò63aKR׋ *$aeY!qW]x 0uiQDBdñm=;6` ?,3*.]B$Db1RfAIDA$J 6ò$LLOCWUr $ׅ$HÑ}CN(kZͰEA$H@&YEp^'"pH| ɿheD!YY!025ö[XȆa ;XG ʲq]mpfh"H x- &I^[˽&g".NNb`zR$W""\ u!{oG.M`&'7ߌT gGF093k6lT6LsWw1fE !cۺuIٴoIV3%6&j1د`,@4]g΀."@$ R8F9G!E"@e?>A?ɯDn-* IDATq&8R !x>EKdxܳG/\A?Op|2/^n;A<[N2 ȶ (KWtDk"QsISn s@%uI/D~0A"ȗ^n1M|W_"tVt4xRBO V񾷽 v"N__n<{(@v/o !(,,xDSJۆnYp +/zm+Sr-H={K/(ݱpoقUxWqnr7nߎSg@pǎ^DlN?, T 3rLYRG$iĢQ4 .h,eeDc1o::;kLҐI LMyJjmMhimDT@իͽ&I*.O$'HwtT"}D RLI/Aoϫ%EHӈh"~E"Cŀx(b6C*D$A/НL΍-͡-Gk*)%t5|k{{dƁDQDqa===<`lkr]]]<`<(yeVUnyǙXx> <66u1 (PU{߱1] 7995kքcagggj*n0۶oJ6FQ2|>ߘKҗjrĖJ%tuuqr9nb<`64N"HqOq 7fj%螕@ o|؁†tBcxx߾c GU-u `X ]?}h`BIDs cgů݋ubx/]x=oOߏ_r4[keGhFIM-e,cd|e$R)Z'x4Gwq XXo@J& 6A b2\4OjC$[ 8V8wl0-/gjvX o*$2l<&Bu}K[k<|4! J.v?]}w$WuWazٝ9hVE2G`, X&H0$x&QzBfqfwr3=t\Q}{zﭞX۟us{Ꜿu9t0Gj~f6ϛ&t]-wRU8w/ۇÉÇd$. Heb K^pv^ Napxɓׇ|~*; Ⱥ.쪩"LO @ڔ\Z BE@p%%hرQUEuu|=JJ"4r%%V;~۾t,IV@W2;Ή 4`<oV2^h\kA\ fږKכN$ߏKcc8w/HwC :99[a$OV  {"i8ߟ mth^hhx<z9bPYRBJJ@<klJW3'SURgT|^/LZux@<WWCU9nHKؾeBn5J%D<|'>A߈A,?<$G? <3HD0% e"I0RCQ`ӑ8p]o9Er?v54{=?^kl:"6F膪*&&2*~982(B2kTT0@=ˁ ۠")iNNrM >6l4[Nd,_tvZ]KOlv5fQ龙>Are;NAwӧqqz$}H"RYx7XRU|)+o&OCy@dw 0EŲa>>=n(KJ2QV8|M~(!{2$E 2KJ_*_:60"dm޺y^gYZ 郎 [lM ~ 3}Yӧ(IxNQRE:?˕ 436rAx7?zOߡ {qo,Wp_@f:"LIZ+49p2 zDv &ZNj|o~?/>4XWY UבH x^[܂]]SOg/B0p}=$Fi)̦\VUU#*+twB`P\.HniؽoyO=HתܶiRpZ*=lP^Lru o$Ipx^+Zכq0Uypl݊`&߾}Uz a5R8v Ϸ`}=[֭uo^ ޽؈JYJXAD9|o޸D** VWZ E 9o 8 *|q[{;Dƍ(>AhllC݇Gm/Ynb,55g? &Nx#UW_gJw)- @݇kO:}[7ld YQ}կ؁Y+)QVf{^5}D)e}>^/Den79c7܀w`??4~3x]w|'*+ \>e-b+A(:8x 'difU*"~|Oy$UŦ eF։߶ R"J| _3g`ǶǏíh#G  t֊BUx JZ'FEȺux[jm_ uvaذ~=nؿ7o*+ת NqmSO̦7I[Q[_gѰg|()s~/-āV0wn`!;DmC. B'֯ǡ ZJ}߻ޅNZuQnzz[OoeE4#M-'Na>QUUMpM۶8q(;D޽\_)S>6|: ee߾;[_Z<raƍ8{ӄ?~ɳ" #8rPYy'vߏ|X_So|hDS|%؁[nCk|=ȻߍOϞ=>ar ut@' #e6;+al I|(䁆a0\+ĵB2GeDg!ޅ p< (4A j톙dzV'A`-"(}h1i`UfPd ZHzs9t: /LfuAl7=.כ{Ƈֆ-mm+!Cc4MoގW:7ihj9::Uq]\ZBRPаά8vcgdaR*:ׇ}'E,GX^^Fccu-gCzoo/8wnn^Usbph;wFIii)h<"ݛwoh{:JO^&bpp~듡hGQ[]G~w~ILkXR1}h]Za;wjfgi+^<{lݺgeneaxx6 Ekk+N<944MCa^MCqEoVlrr(y_;bx> a+s2 .\mtHRؽ{78~(LӄVc*|%=nt/zFIdeҕSn9\B%0++-gGI欜dP0`Zn @^v R}YfyJvgye6+h~Р^Xyub%;IH 7VX֗Lg%vOeVY5ف,[>4Dqe\i5$IaЀQV*<Xto^V)cTGV_% ),|Uzr4 +x*-X^Aϛn7LEmފ/}ⷾ?On듵!˙U iZ{z Nv";@ a1W#$R0w6R)0y3SaȖ-y+]DUL}b0lɿiBeFUm1X7ׯƎ 2];d\Vl:]9)-!OM;w]7^__U.(VAT΂رթXܜ͐eH7lj0h?qU7g m9Y\}D)M}x`*JfCغu+'4Q|ӟƫn6*LYM 7v*ORJkܥ Z_Rpq&|_āݻZ[3 כt[T@8pņiV'9])xe̎Gr4m۪:WqȲdd4 sss v\EQ0??,M+tzT\EQ( '2,IRV F[TUC4./LB+qlh7/Hd悖aqѨvnNb1R)e6<t\Y1X5M@67TQ0$Im o?9dzEQfReNOii`ai %.u2R`2D2hߏ?9|G> #@̩V(BeLMYEc JƳD"]ס(J0 ۹H$`&kgzµh4ʝ[*{x}Ym`~rD}:fff'c@2[,[,]/{2\ BH&>-0l}>ֳ}j's:z'qQZ5W^Ge,9fbx6=%v}Y,]q+;6W; vcNŲ;;U+cG$ҟn/`]3lbH**} }Q|啕^)0Da@WUkO/M*{!vX(jʚkGu]{x,̳b}ȵ׫F.bbrr-se pPLOOsy4 O>55Ŕg }/N~M|H2%&&&4W~)+rϝ;Β1ٳ dhh{Lj(y0._LdYfBF$SDzzz:[[[xYD IҪa@u.O$,--U'b<^2-jH$vu^D"EQjl@g6G4Z_01`oǥ +` y2I}㪪 UUR"}2uDeNMVr샶gii 2ϛT iΝT*A\;˶ 6[H$6[ Pbxv~JmrT3  wRób$Ik;=zZ}O2d EQm=pzȲ,0:s À,ĎKy,K~.> %#"eQ!v6[^ycGy1/d?$;vȓMOOsyL9oBUUܹںX,mvt@DɍD"hlldaSΝ;~ق6PZZ'[\\C8PQQ'b\XMRHRiMAYvG4% @UUlݺ6mʓɲ}X~=2r麎H$ذak^CYYoߎ_x1qN;99 QQWWǼ{v6Of7wad@wf:UyP(E./ aΝ̯(v~kii |yH$s<FaP__-[NWxd2ZTUU(ƍd,#suiXZZ7lEEEd=`G]pI_###B񶷽 ?qh\t2lz+{cgÀp7]9p3w܁<hmmũSp7[oEyy9wq8` X bpWG qz ~ OYve 7`-=s8s q]waϞ=H$044]QWW~?P^^O~%R8p_^رk^Zp¾}PQQB:::*nX,{^>8pu'*s-ya`&08pXخ]pwছn?Dž x IA@?y{クQVVF~x/#?֭z,,q 8`@'cEMsgAUU(N8>N799IǙ9gvvp{9&waa ryMMMDUU,p/_&T)+o---..' y8ioo򺺺2SŸ^T*EZZZ:y~KQ 0h~kdd1eny -[}vf>Ί2 /x!M+kZXN;Z{W[K?W:^>RikϪX/(w%+j-(Mo ۿ/t\iV^1su[;jZ\.Vbx\?f8p:Ň? ?33"UX^nGuK8xi 8p7>LMV{3J` 88Ȃ9powgFs;*]3SOO_8p҇AՁ~[gfEk۞!'gp7nBx<ŕX+Q;.,[ٳvsP10M L,W!Ln  2vŔ3`nڵ+obE"A.oii ())ɓaB!&7eeeyepuFQ&xduuu̓qh*;v`Æ yT*d2)2jjj~UUU}زe 6T5M;022*l۶-Of0;11׋ήb޼q|>ر#Of'''!rBUUܹںX,mO0ݻ/@ D"...cXsμ_.,hhh@)#"w PQQ'b\xMRHR\$IźuV]Wy `֭شiӪ=D">)4/ܳ"uּ{꺎EΡ!lذh(揍 ۷oB999 QQWWl[vsgzza1Oݻw3#JaPv0v1a緖ϗ'D"1~+0 .ٳǖ-[V]<^*Bmm-dv~KUUTWWc#Ă,w[aii6nܘGwttΓ98p:Ayw{09iO_\.<Á&|8PSs@_GsSO8vz!O[uW=^{:pr9pu]{>x"'Uk_ |3M7-]8xB')ySsxBBSNmNYkmII s㲮0 ɕe^+5M27eRa4 1v3ytȲDMyxBEV;.=U\kv$Icn@lD099'N0yO!ڀiPUUTʍ| ۶Yl੧jlG>2ney ;$%CxWlvbmN;S*d8|pA=vbm[)ĵ(8~8S4n7 ` :;774'/^9;; B{e./@QK.1pX{z… 8zhD_ZZB8޽{N:ti D"LnOO|h8pSgww7ݛM&>4440O% LNN2CCC;X<22G2uby\M}###شiS4MLLy0 ttt0SSSz,^I&fff %*$^CdKK ;|A$I&f:E`L$(w캺~K{yy ؿ(//ϓqLOOСCLعsgW$ȑ#LjjjN~[ؼy3(`rDZkW6oތ}7^C"LSGWW*ٟ>?GYG݅gV::\?n^(--e>&ɝ(d\.kǛa̓`( "J1OOߺG",//sOOȑ#LFN|O&`ruּSe8vSmۖu1:: 6>,~1Op#wŕ. pyv2e+wvC+n+MY+/ģ+WӎxIWbx|#V0EOM[Sߎ=q#4́^&{kg2 RVS|)Ox,O}= X[o ve7!p)E9yr7L4+Q.܎H$beˣ` j`X,S>k2N4M2<-*ƒIƅxX,:-IA6h=\RŎg'L$xx<I kP`m".dwa qѨ*| o9@'K &x)M}?(2bX^1azOυ6-a݀@`?U蓟z;fm#&d{?o x{Wưye"Լ1-{xYĚ|H.w6zgb1Rcmln*dQ5pߢU~)dwviuX\ZyȂ 0 &NduR).:#HބTv"EȲl봖KU5A.WӴ5{!#`9BF$iu`@FWڽ)Ʌ]F\ +s;؀6j΁Ȳ& ~E X6Phxla`"R9:+! IDATXOEE^gqZ}//~ƍRC>v~jﺵւC!cgk ri}!$i-ɔDx \3gקylrr=w7;;KƸg2/,,!.#]ä˻|2e) B\n[[I&Llmmer8:;;I,cbdz{{"SL&Ikk+WgOOYZZʻ( tOBPu0ȅ a2]ŋq233ý/o^BeN>~299ɕgffsy2<<]pϓҥKL!IJfjqOry$J1eH2e$3ehtuuqu3dqydyy9,\^? L$I\/BJ4988HĄu~'[%sssLiL'SSS;YX~kbb);<1M)#` ryMMMD4oIbp8L:y~kyytwwsyO< yioo򺺺H4eV__D"L$ITU%\ X~!Ĺ^&x׻ ڧ#WwHxq tU'rli%́^fx{~V|Da4+BCUsx_ض:pp 8pe?cA__Sn6ޯJqM֩GN/sgF {13c}>߱r{x*oϯ{88@Y(p(< |C+^|SV曭D_;p !H^deee/qu]i\ӧqԩc+<`=-))a!GRY\Y qMӄ|\4U%S6tȲtY444`%drP]]u$I=988۷q5MCoo/9`ӦMظqi˛@EE0 &wjj ^LNNɵ PUL^Cv䵴رcz0D2dr;::paC[\\"NNN"rǮ g?匊x8tSgoo/vܙǕ$ 8r700TUU*mm`ذaCLQ 0㨪͛d{]@Mzlߞ{/~b۶my2BZZZܙ;v0d\.kǛa˓v`0T*F}/_o1z$2v䵵ȑ#LFNI6PJZ}O.A(k4M[$)olU *O\]%I.ܹs\,Ϟ=˼nWUB{1(Jp8L<^UyB B\n[[I&LlmmerBHgg'bLY,#L ff~()TՕ$~0 I2<4*b[)nuqfN4MnuNs{Wy\4nD"rn%{7Lyk/++cq À,BÔǖT[4MHBL&a괛473!D-N^-bm[qـiu'o?{o&Q݋rzi͢Wi$ydaɒHfy`@?|隋}`0^0ŮAHY43R]]kVVȌꪈlMd/'MEDFsN$~4C펅}>6Zp x]יإEeH q X`W/菰az b@,OU!0=R,% I yχ7~ Æ=Ğ={k֬aH\4$3g0jܱ;wV\ɜj/_fb|j5\t… XlY ֶm rqBgg=É'1R)'O2P\|X }}}-ma6099 A|rf;;33۶bŊk.CZիcǎaƍ,t]gbO<3_}k׮e:RY_mppVbڀir 6m988իW8ZPX|yӲ, ϟnd264q&vttnisOfBCCPU*HV>a?ۿLBPUDPUd (Y(uEǎcx6py5ԕ+@lo/P4vjj [GŦMd֦[jGTš5k'N`Æ L177rĞ>}֭cb\.Ǵ[ׯo[JSSS\sQYf5 BcccϪI.\&q澊".^^b&344> ̙3\4Z8zc 2IxMUUx mSf{n:ipaNE$ RͲ祳!|/oO>Q ׅ*2DU(E:c8d<>Oh ǁyl/Jnju6@8 G8zd6@E6A'iYgpX?BjjNh[4! ' XK;q]GM$L<$$ b^WkYy,mE(m UEUu=mK;˲s9 I$D W?}sX D XZ/yq3t\w>Kd*ָB;uAL}fwUտ$`>yVAWjeۆ@۴"g3y2$Iku4ԉ %D,kQ2hۡ\w63M?4M.6tخ u[m<@Qjkg?QO v A q@U!)I, R` 4V*[@\ XL'? n" Q\vY`@1&4=o4͵qU*5MB兙iB[V Oסr _À3cR !&j \jw ۶fZq @Txxд2iV(@/Aj0ƕJ,$:X= ^Չ U*__0r96ܫ0ydsci۶ه0PѪdaa׮]_5lܸOɓ'aYR^dy B7-T*d 4bv b)a<ڵ wy' EXIJT*tZmsK!6MB\ո/TTjX,L:Eafօ͏ZIT*&6>ðK0Rmbv.Fϳ0l.nf&ne(4MC"j.<쎇],g<Imϯ:Yt<4 g!e?Mۋ6-oxVY;Ah-CѰziSyG#׶mx'-64M Dq[5KZEc?eqăL~?jɎ6ײ`޸K~@0.tE ~->Brq0 ־g&6͢X,rkwލ;v ,l:t۷og:\.Y&ѣؼy3IELLL`LG-[Zŋ'N`ڵSTp%ر̙3h) NbppN>+V[Ǐsqm)'y8 YNu]qSk IDATcM?!b> ŠdGOu6A$"'& 2VZUߎwԖ}wcƍT jt7~#t6] 5@RX6{o [֭[yyL{=~(lܸp*\.0/`-[Z Jvd_'N–+$Q岏mܞSU8s׬AU ffkgq`*R`zrI =06,[Lf:GGi u=Ȃf4 }mm(T*25mmcht?D~d$\EwW4X.a[c9qFoO:cU v\w݂QzϣYN²,;vi?/^D[[7q bbb.#{ڵkq!:twH"$H^"C3 ' !yΝO} O~]]p<@<8 OÀ5‚mAb ,T݂qN4Vo|۱k@ǏM|B5Ϳf_B W@|5[l}. adMaBo O+U@Q<B\϶!1}ɠO2 ^5H}T C(Z]ׅd}U 2TFig&.T/I~YX柼mb)iWQ3" ާDa﯍ǏԩSºuo>;v`׮]c"ARaSGI$D߸ R(@

~cN\G|Sssv |c8t$9iqtv[nx#H@4 >O(4M:zO]\uj]Y>> AГoHu"*2v= C7 tcM?VP$ m<{7DkwDvj +CQUQįnߎ $ ~{}O4TL=(GGa;V[nkY@8aoQ6MZo}r`% Xcy J^U yp]bll wF.C6ʼn'} 'OD.'?IYxwI$DK_F%~LBPȱg+Oў3 _}x7BVW!) ۗGݧBO:832]{brj zksoGER~XL":<Ÿ_#HŸw^zHͥO&dljn,._kyʝ;,C5 LO%eCOg'F.]C^cw*xmfг´mzY?L,˸禛+nn:$q6j5gfo~ލv[=4?'?At}]Ͽ]$<}>oㇻvIqq䩧m{((W<ܼ+ "Tp7CTUJ8>bi1<5s7C]we9jyJ a@r];\qȁ! /0/k8|:Wi⑧B\Ƨi6ЭuR-ב,X?)>s_ЖJu1CZ _xA$D_? Ai+_=0$9xַ7݄Y{zY~?ЇmOFېy8}tK2 c=+Wbƍx'˖-Ápwcxxx ʍ{ BSmaXuy:Fڶ3g0kڟs1iVu\po6jZرG$Yi@u&R4MLLL/|khkï|3~曱iZI I0lDQP)YgI @ j]xAu ׶qy|j6 КHO\ j ba@0 mWWӃ?;v FqOpﭷ;}n J2X 30sm/^d6!8 dDUImZ4~xjBٖ69,}jj g>L&6|ӟ2V\7- ,~=CjiVX$5a6$\\Vc ajSSS\fa`||m>ntt]]]̰˲0<<^|mmm̲1+O8bV,k'NOl3/CS) o~q)ط<q֭زq#cժUXAQ IY(Дe,[4dQutwwX@PUttw A\AWBEc|fuSӉ@$;:A 3Web1 A[,x:IX2.gN&qnrNJ~| @0nk) DA@g: ?H<l5tbiН@NS,@בe:I%/7(f dR)L|vt$Tտζ6ܰf ;Q]_}Golۆ|3VtudY4A%'4 d/m WaAͨ e'߿ÛF$ O [A08͞tx;fpDQϗt]\r k{zoyK=.M,l˖ߋ,ױ1Ax_{1sMcFlYD_Ok}>r |Fi4W W H&iVW4 vLDn>x?=r5>`]@<bH? `@Q{&$> D.!(:͋!I( 鵉߅Oih=I$D%(QQ/U[(~Xڷ,ȊR?H!Rpb@Z߈I²+ ɲQzu֪׽x +p^Ƭ^rs]<{8YAm@upL hI A-$'8p(8be?. gI+wDk+-D|R/sz;;[0*DY\wY51L:% Ϟ?u6MkyܰqjO"q 8xO2'JFs ]ے}qp[?A ͛fJ1<{b`ٲjx^$S*b1du6C,; H&{L$ \6٠,QU؂G ~ j"o> .8J$ wLQycbx'.%te,c_D+`DI$rL௄Y{>U&IQ@b1]-`Eڸy3ǟhkCOg'Z <ׅ'ظr%W}KyTU ONeP%@G 0$nX6 Stn*;l\{i{{сR\|H(s)Q$exi뮽5+W0 I %A [ Avױi d0blvV{^:\* Q~;obU?aeJ%Uw pb1|?ɡ!EO: V2xofuK@R)y?}lZ G>/EP[@:R)|moçm糟kE*aخ?^X(QUH@d'cmmQG X#zILn, q0-W0zP|ζ-: <G-lᮻyf[w J$`%;&0 mm0Imo݆Õ\a~w~N<#EƊkH!a?~|7lތÓ$<~0dixt/.8N=wEMC\Ɔk׽w܉YOt_s ك ;+nV:SU=p#Hww[n˶nEfrEP׼$PU8x+ׯ?18GRB|?@l@߲m*Z ]84:0 ),)JBBBbpyKjuڶ qYSk.y-/IqlF"ѧR)Ӳmm3!L2q%J:yXgexGLj'ѺB,CUUf|tb,!132NEQ=GV$Ǐuk %`ٶI H#iBдp@kk-x4 (\qA#I+VT, ǏR[<8pBGG8x ;22UUQ7 o^~x<ά˵{n.nll axsX5k\U_gffP.!,Î;fzza-mۙ/\.\.͛73u>sZ^v###( ܱ;rn$|SSSضm[KDZ~z&Y*_y1lذ:Ν;Sj*f'O@__-^pL}}}-m\ϟGgg'^F2[!طon1>#%i=O?w ڶ_e=QȂv1l2zQ@~ʁyr8so#H{vva}m#=yn6OL)jʚUAgOĆ믇DuimA * b͈)?&h"MC|~XzWMAUq%޸J"0rM033uѶ`NL`LP`'&nָ*Q :&&'atZxM̲m `u-<ϡ!#ٹsɳgqM7ǂ52_-±cǘvpE1kF1`DI$4$p2T^*嗌hooqn<,$KHetzEk~VGK6 '&AK6y_QMǤ5hB@cZq^"m$`T $}Dv25m06ny#±V5xvvM6\(4z %i̗x"I$D~i oX$~Tyļ=qS"Dbޡ7~$!d&>hb#ko%OQ̿"DWH[_𖒓qT'P5%`4 |AUă {p^^1VyH2% % 2S'` LXϋ __s(jZJZB˛4rPH"$H^  ̶&qU'5BH*yN {4QvJ\b1աd4ӴBkU1-X #Br@䂱Z'AM Rץl^m,Zp g#ly|ىfD典Kzύ,OD,"`DI$tiujH:@f $34GǓesFBI=XG2X$:T_ijm&? ׾]k_?+櫓бhYo^4enF-܆1o&ObPn56!/*AVxiBϖe*0*!b03,3\fa,n?WU-fp;/-ˡUeL=p, 3Āt:݂mJy5m1"$3qJ%fpwt [\Hg^:σ`۰ti}zA[d` HwwCjuhܞmTN)qPִPߓJVXD"m)l 0 32{ZMf2 p'$!$q_<;; B333ܶ0l.`vuYmbjE-\.W,M.JL,pi\,ny1j5Qzaw&a:|4:W'KGvGK(ux,yPK$yj1l dYu[(p X>i-л|yrJ5W(#T(Zl*U*J.IuQ)J^bH'?'(j[A ㎝mymsj}O XV8L5qPո} Vy(U*cd+ stuǙG\(s3V{H]Nu.'"/0},+Ŏqɐ$IT*\d22\@&aSU|FGG W4  /vϊ%t7x:/eRk}N_Njqpm^M;޽HNnJ0=j,"E۲/_EAPgbu] 799t:,CqP΁ f \.ņUj'pm< XMٟw̮.l\E,ǁֱu,KHb< :GƐBVoܞU<˖13 t6,(U*{Ζjl.7y;JX?&4MC4Ĥ̠=f{0pejlL߲mK0EwXmQ X$DI$uTx8B՗LN# SX:oǵA-|qgvM%"$H"$*B cj؜B$D#I$DI$D"KD"$H"$H^dqǩBȒuaWW۶HSb8`YdVb:yXzHb}ea<\saƆfyvGK2~Gj&=j*T*<{>DV)p`iYp:UNLln:'wђB\g@q#YŘYú ˲a5( ap̓Zƭe&$IjyK-] ,] a_(uD"†ᖪ3a||7tf?a6[ՠ*bwK/8Ę7 À,̹] ,] B:awaSVL&°-Շ,o-f[2jTg ,?^sOFFF˗O?4q2::޽666ٳr ?3gff繸}s4͖s9{,wAbmvv=rV̶B@N:ya&RcǎqqǏ'rV.ǙmO&|VVÇ:O:E Bi{;{,mu]w^.… dzz8ٷoҥKdbb{]޼"arfSO=ō1n;~&&&ȥK8^_Ʌ {umSSSdhhs1m:8@,jҥK.wa:mnn>}v1RTmR8qѣLlZ%GNl%0Y~kddmŋl;wۿ?m:Dj5_r̙3\feYuFL%qT*a4Y۶iKemb!Xӯ !rZT( 3: 0Rm ؀m`vv===tZq\.0l6ŋq뭷2q<P(iwa6mqe@ ͳ AWkal+ VUpվX݅,wllXrf]6ba'|;wlb6{°R DE=a6 C$I&,!p°\mۡeETU.NEdM.W'/Z0jN Kuj5d2 4qapi"N:5q$ u].<(5f޼Z fl p_v1#}a~+ 7;;˝P>#ðR JEVT@\fVZ }(|m{%,f_J_/}~_f_Å5 v|j_t.ӹ\jzRrR+/Ktc)> /~{dŀ=_cŀ-e^-E|R$嗒 JN8T.00?bإ°t`Xgz-] g6dYflv0,!Oc_Dgq ^L'T>?paؗ\~l /\, `<._;v0q/-~N_ ,^b8A^>d6hwKˇ֭[[2z_JX B`6jwU}j:!?Y~||rqa'ُq{\B< SޙQmqH؄ذBl,RK,d"Ra) c;!vvw繺:oѯL::n !SU}O:x 4M30l6帮򈈍FeP4k۸$ٰ;;;( );;;uGD4 777٘ni:b+++,w||j^&bWtKݽ{,r9X,b&a9\* KzJONNHo}}~Ǫz"@,i8s<#Y]4M@:l5 z˙ fA)\&l&X۶xh|BkY{BTf0ؘBXF̸y`YVp3߭t5B^VQbr 2i?(L$}.4Muq l:,RUm$kYۯF\L˲ Z60,?a9:yreYic倦iP,^?3n3IQpZV ceY0@y9i$\NJv!a$7l WUUuTcmېN>g4!Ͳg5(tV{4MB@۶sv.HW?_r#2hv\Zq 0?X,k6xwaυG"s][9%$(LMMHlfFSSSd!c[LNN2alLIH0 PU:LNN[ MHVQ [,1eY&Y?8x1"5`ll=cY0 _x^DɁ0qpœ@jK/X?w9Ƭ$(J!I\v&&&uz -EQ9m4uϚ S cDdY4!UCذs [jT{*.VلI2[,`rr2 n7P9^sc9vP lpuKu%x$E2_|8qGGGgY "R)< `]p\4F$m r sssY*HVUUt:,W`vv ndY&YI`zz:Ui4lf 333pg-˂Rrv._ sssό{,vҥK& pIDAT\ׅ\.G~sGdLӄ/=H$\&Xd<ϓ_&8rpʕ@u@oZ3ZQ.Rlzl6Yh ό J%4avv6jdE˗/Õ+W8P(ؘ,lsY4 }DL&Cz"jVЯ[ܜLӰȾ04친Naaa!b:faaaV"ϓ_&$I }FpuKePUFFF`nn4 ZuK.j`zzfffaPؘ$Lnٶ bq`F~XUUajj^1 X ` VϝLO<󰲲W^>?B4 n߾ nwhP}0?l<3<5: ;06:|sa 96 y{s Anع6?gؼ+\́A11sy˅{mɃb@4%w ɱr# cMsʁseY022`[ x뭷HȻayX, 0| " ˃6nعof0| "ضMytmBBBBBBBBBAp5t`kk묙i,z*,..>\vM,Sq wvv۶4Mx7^~_7o{'''tWNOOɠ\lyɲ @|!n @>'|>iia@\&94aii)3Fu4 jɕePQlRIa(.OV+ZVYeA݆v ml63,u]VHlMY#jZ0::J6oED(J`ft:.p||,ܻwd2O=kys4 LӄRDrB?yzJtVdRvu:h4콫T*gt]UUhj z4@"cVUh4EQH^C\s]jhFrf,q$+I9ye0 Ɔ=6=6s˶,D N\X t:F!JEQ~ݢVD́8Ndll >cf ssspuxW>x<_~%Y| D$=<(?^48yE"#_CaYVhQ2 \۶IvddFGGB022 H$2% 95Z =ϽI$o1lޅyD́04Mpœmۡ9Wj/x{G@st6H@,Q_`<4C2O_ Ql4j.;:?.M$,b "~4(&W 80_kmCuWCD"rOxNIENDB`DarkRadiant-2.14.0/doc/img/6Cone.png000066400000000000000000000404411413722237400167730ustar00rootroot00000000000000PNG  IHDR@&=IbKGD pHYs  tIMEUk IDATxYlTiz?j\ޱ,64̾oMI24$#e)3r"EDJ2LFJ4MC tnhihc6V};ilRUTU{yu֩ } @BH$, @BH$, @BH$, @BH$, @BH$, @BH$, @BH$( 2H$eZqޗB 1^G?|*I?^ A(ذa>#H#Avg 0Ǐ~#|> $}i$QCQUbɸv>S?F,`v"L&1qD_x`4(a,h4˗ v^Ğ={Dg(a, ͆I&Ç텪(++0/ 1~ܹo߆nܸӧÇXl8 I @b @QTWW6 ,l68\t $m(A,âE ,]ǏGII p8s@E/ @;UU!ImۆBUU0 nX,TWWطoޗL ѝ(Zpp0y>?FII f3 $iA"h4ݻwɓp:(//GWWK_ò,^x AXI @+A 2,X'ObƍS].>C|F8t}xCȸQ0 `0EӧOGGGA0PUVDnW^E]], dYG 9FQ]vСCpݐ$ a$ԜnǍ7tR$I. @EQp8`2ׇrƍPUf(++jʼn'qFA1H$FvwQTT`0ٜZ"nyoEg b bɒ%oH$qF\pv=UO;!b,AŋuVb3 @~\7nE^@ǥF$j̙3غu+<nܸZ<5'cGHt!"mۆGr477Voo9Ciii\$A[[hHƄd(**,B8$r! VłD"łvQ2f$A4Ů]g'NOd2=ͨ$IW^Eee%˩@ @UZ X 6l `Z_i+<ϧlQ__X,ABFdU0իqu0 e,~?<kOwpݸx".\QiA ŰuV;v EEE8& 3f_ HN>fΜUUxX eeetLFd$I@<G$m2jE2v1nҥKXjK!fǎþ}RIHQ`Pvӧa2( (f͚aOvȲ)1f3ZZZ0m4jNFdVy֬Yy&, A8Ɯ9sѣ 8tvvR8\~ ECȈQSU(xl6=j18Cww7\.WQ(pΜ9T  8ٌ>ڵ rjĉѶ|6l6ƍp86mZj7$1i$D"W H$.ڂV ǏcF9H$ ~?~Q^<֭[q9X)qiٳ*08va1zcYUUUHi9"Lj.ˈI̞=BȈPe˗/ǝ;wL&S'="sիWGp+;hhh六 y#zy]]]رcaRswAEc```DarpL:5?vO!! @1huuu[W-G|WQHq`q5lڴBd6~>|@CCn߾ QG\Ϗy Xz5bעweq^/_m[llѢEX~=+L&QSSC!(IFq^---Bxǂ pyq0ÍTUdggjdX$XE?֮]jD"m 5> PLZ$jkkFٳW& lذW\qH&#~lq%̛7 }F dnɐ(IZ,p8ݻwĉ(..~e0 DQdS0ɲ2,(--l޼HE!QP=DQĴip1w[f::::t:QQQRpQ Bشiݻk Ν[nt˲8s ʙZqzWmP4FX`_9װ,X,29e8s:8}4.\8d9B(I(I&AUU555'H&4i=z4ʮ$ Ó'OƽOk$*J+R|رcDQ`BHNEL:& --- 5Dv;TZzD#:UUS9 1 0G}}=nܸ< P(-[رcp\i [nhtDt:ga5GHD9s&.^Rӣ*XVH֢& D,ˎqM&>|I&EHFaqlܸ| 8{-h2Duu5k7-/Ul6ÇXpሶѐEHFaaաBI(JQ4UUvqi,_haEEx<ܹsC4ŐF<x<9s޽;m-tVYF{̑,1cƌJ2)LdԴlmm}P"~m8pi-F0 f3Ο?-[ SӤEHFeTOF7eiQ_M6! hw&OcB  1m/_}}=޽:b޼yF0LHK : Gtvv0 @2*HK,իWxWUUp?lRcԋ+ӧOc׮]%Qю͜9㍋ZܹsV+a`Zq[.rpZj\ I$#"كr10o555iO>EEETU+Ӊ&,ZhDMH~$#( L&\.GWevbT6S.hl6عs'BИEHF$ atEH)b޼yBJKcYΝ;X|, EQPTTD{  H$k(++,Hn/UUE(q8kcGG-[F!3g:::FY Lb׮]8x 3r9s+VW{(kq߿Gdj(p\[ϟ?GEEŘ @ .,Zn  y-I`a2?MÓ'OF,CBE+u%,]Xl6̚5 p $zkB!޽ϟ,#>2-NLP6 (Ɵb_~S& @2,… qUx~,mmm0LW2~?TO N̘1#meQaɲsٳgb#իW_e|o0Fx9fϞ=R8z(6mQ@B$C߿GbkESMht( $h\$PU,fH$P[[ #XW>o߯( $IzmLPUv&ȑ#:T !QW|>8z(Fl6Y;V&28>|ŋk㵪8qoQ Ӊ ߟ|=L&U@WߏSR @Y_Ǣ(D"i!IEEEdM cgT@QXVl67RU8pvQ} cǎ>gϨZtW,x<%Kի(--ӭ$Ip8())Çu;>5mJL&tuuptRϐsjl6#`ҥoƽ@,nzבevh4#+NW^E]]L&s`իىqZ 3gĭ[t=m6̲,$ (s`zΜ9---iD":u*:::TC0XEWWE)S\Q89rwN5b"^=(//Ovʕ+q֭Կ,`&cq0e&Pd( ,˘5k߿:$JaIe*A@cc#vލ< q֮]/f9-kZ1o<|xIq}j?y>#+qׯcܹH&N^ew.UUSt/^H@:hnGBk~9lذ!gvA I̙b$3( W_}Ǔ)UUDi&\| ;z?]ef4iaˌ%y^ܼy3XE(JK5L =nlj'c CSxSNӧO:qE%K_rw,h4 `63ɓ6̟?$wC(Me۶m8x ^oeYߟ:{`6l6L0!EKUUv9r{ࠡH `^J$hhh͛7L&: FFZmL8> r$# G}ǓIxmķd\xpEPbY lasD"̜93GƎ0<p8~A[\I&톟.aS6VeIǬY WѫG0֯_;wH&Xn_EQrCͲ,߿ۍ\ ͆ӧOc޼yp:߇H&7X-[TtҊ+X,\ ֢ q|4i3( i+ d2ȑ#x󬄑(`Y.+g "y@x^d&Hx lXZYQȲ .`Νt>؀(@ ;p =ǚ5kё5R-fo̙33z Mn+A,K5U!c0 DQݻ2P|7hhh@(,n8N3 gt q`Y6o7CV@UU,c׮]o>h-­[`22|ph4'7@jŃPZZ[I/ՊԀeٜ=Y(sViΜ9pBƏUb$IDѼj-2KJJ`2t7LgP__OtDCMMM8.GTU?eMyȲ|(p:hjj¼y IR^L/xW pBܼy3㷿 à.:2[z6\6eA圪O(sD$ёVF>dሢӉFرpXszFs]9@+z:c g||{=w\tuuE;><ӉÇcy(sf؈/~,@ ә 0F0ͺν UUQTTL… ?B5?ڴi>sp2 Ap%̝;<%I\.\|W֙:pk֬_|ݞVj===Y6Xma<_gc I0|A<{,+a( l6[ ~,|lD" qhkkÚ5kDmTƲ,(ŒVkPT|U/R+zZhkkC]]x68ٌn!n퇑aD"8N]7իWQ^^o֗[#ߏw}| <OV3۾a]o;%IlFKK .\H$wn4x<۷(++ʲ Áp8#@UUp8_b`YVB n?GCCCV{w a0uTB!|} AMM $s қȲlV#r^.1ƫO^²,~?-Z;wdwiEQl$IN0 L& qi6qQݻh4ݎٳgܹsky},"cܹ{nF-Ma=~3fнW6'ގZᅭ ( (cڴiC,HaB!,^MMMy`ܹF&Iܸq7oޗ( aȲ;v?FuuuVC8ԞC#BhMB!UUEEE>޽;M :y ˲(|Y㨮DKKK^UfCSSf̘V$Iy?Fmmmގ@X֮]+Wd`6 bl6UUU @EQR'pLBբ3@DQƴipE><Ǟ={p!x^CB&iQXV|gXv-U0 @I&Aoo/DQ(H$ly~64,Ӄ   }Iy [nšCP^^*pdžXA_co25RgϞŪULVƻv؁?.+ϟL&Q\\j:cq,C<~'OxBeWraɸ|r[P2 ^ܹ5 ׃lW_}%K Lb3g}v& Fu0 &M/^<b@QÜ hMPWWD"Q0PgBEܹd2Jڵkp8Y}~ɲ~TWW*TU'|{`P#|@3I`rA> a&U!ji LXl~~100ÑͩFh4{fSkg>|XkГvޙT8fb1477cƍD"z_N^ԑl ō7~M(JjHl`d2VZ;pݸtz-8 @0 @ ٳgC=hZQPǃϟßiSf$*(q\EUUg|Y},d2#Ia @(Ap,^~Ĥ uDZrJttt  :(Jjm!RU552Jkt,Yԁ:|455rׇ8rH6Ԅ5kqBb25" @<Պ &Ν;vApgXߥ( qرE `1 n/qhZQUU۷ogQh PVXkx<0L;eN}˲2e uCM`7ڪ ɄK.>UhTUE47|;wb``יK(aqZ =B0mmhhKv z^8<}45f`1͸>jkkGexӧOG[[Vy(}:a6#I8P[[kQ mhcΜ92 l2}ŋD)EQ`ڊZZd(..'|m۶龲5={6`2rbmj,93M`6qE#0aH$Z8$ n( v;Ѩnǂaa…m ӎW>|۷o׵$I(**ҵ)˅SNaÆ Fy^ۍbϞ=bz_NNOAiS`2G0 n:477#L] At5K(al69rn8 }UoZy|EQrZN2lFcc#o߮s.UUap TVV@ڑիWɓ())0A? f͚+݊+i (D$\.;v `:ۍ@ @=e@T\-kwlڴ ~_+26 ,_z())ImEQPQQ>pG{ໍs6R{/EQTVVb`` gpBE C~BAeY̙3ɓTB2<Պ̘1GGB778w}Jp8pVX[JA(Bmm-^ ˕Sz2UUp8p-VaŸv(p8H$91] 2o>+***(FPNp\U x<F#0 087|rQ@E<Ǐgڵkڊ@ @# PQQ a'?SYMGP'VǏ֭[3~4M;k[:u3"0ؼy3"]M#Q D">VZZ @Q̝;׮]i;N$6mjkkG- #4Ӵip}C,f?*yOS׿?lc`W% Hv,]4#nUU Fs2X6p`XE?oկrho(u0 v;8ݻw#(X`?p8l,#bYD,vM`ׯG(½{hQk(u<(Z[[ЀH$ʥapG#Q0L,˨3H0so[Ѩ~(u( q[.ն2:۷oX( !keo CJs IPUUTI IV+}XƀyLV__7 <mvN @())cǰc{gh4:ǒ$ a26E+nww8x YP ˲hiiAii)<Ϙ?tdՈb47N& d2+ʕ+188v*c!d vuuCUyPgXsX,O;L(fϞE7[p}2 t(--ŤIL&GP?(..Ud2 3> 8(b޽?a$2*++qql߾HdԣQ( !N$Ȳ ˲x9~_෿-$M]dA1 G F=XUUh4 Oq2lJ,˲͛3tvv,4ASlٲ$ ;Z$ ^f 81jM IRf#> ,8"HlP;Yifӧc>mv޹s'ܹ/^d2# ( N'=# 2Ȳ,JKK,zzzteZq9l޼yLm (Ѐwp43 "rPYY9䉄x<7Fhtպ?a9DUU\(/5w0 ^xw}ǎ[ d:^,ˢ/GAe*Qf*Ӊ[ntVEen(++CIIɈ, χMMMx 0 H$vq1ٳ~,"Lbʔ)TI$XQY,uR#wjjd,9a7o2-#f(ol[0LȺupIP avcFH&Xt)^ E EnǏ;3}ք//0`RUv0ax$I={6ݻN!ZeI=j9ػw/._d2Ig 0GiʚfT c,m47T>a yf8:t 0Gi:?`0(..Fkk+g0yj}Vg6rJ:t&L[_aڹԦ&^ fvrl64e `YF~Gr((**‡~'Og?f61?㔔 9WUUOhM&"v;oG}}}'N@Ejfu+06n܈;v```cZZc;wV> Dba3˲=y²kGxk֬8}4 oYq xޜ ٳgq!ϨFQ\'N| qF>dȱ, Qqʕ!yx/_raH4dyUU( ^km8a…PX nV~3TWWh'XvS "&CHQL&[nFݒ$ K,\d£GJ2 }jֆ0aYVU(-Lb6m>C8'?pм_`Peu(bjsYG %$c:u*B+_L&C^0hmmMuPh|>>!۴*rv9088Án?#HFd^̲,"bؘ*0 ˗}EQDQQQoiC>䍍r̲u8Cww7>D"ɓ'QRRB9MwÍ'"jjjPWWh͚5jf~?TUUQ @ 7$ey±GC-h#̷zk8>>FIDAT^0$9a,ske׶z >6Umꑼ{m+/otR( !R( !R( !R( !R( !R( !R( !R( !R0f߸IENDB`DarkRadiant-2.14.0/doc/img/6Prism.png000066400000000000000000000407571413722237400172130ustar00rootroot00000000000000PNG  IHDR@0ƲkbKGD pHYs  tIMEFt IDATxyxTg}$$RDXeڅZVmoﵶ}Z"*"j#`Xd&>sc,Y̜3yӧa7y2e <  Ay Ay Ay Ay Ay Ay Ay Ay Ay Ay Ay Ay Ay Ay݇8<`0UUuyi$ NSgti4ZXЄhYֆ[nN,YMMMxa۳*>A\iE d}-D#a/4 ~$aȐ!9r$&MZ$I|=,r_~H$8.,$!`ٲep:YM`Zg k8E1hː硪*TUE  `׮]B)L( ͆b(*dEEEXh.oW(H&xpi\.lKd@*qXV(Sbܸq(**?ߏN3#2EQR>l^~e>}@ hʿww ƍ۱yfաAAA(4 +w06mڄ:Ȳ Qt:n9)Bi|wcx7q:t }B3o( ~? t:1w\AeG(Bss3aZuIi!(hjjnٳ1tPȲe˖СClp:0@4 Hmmmp8x<;w.W^y8pqx<_J K\ W(8TUŬY0qDTWWc׮]8~8l6L `'a VQZZ. sE4$IH$Ffez $IBKK o㡪*]h4`0 Ih" 2OڵkԄ:iL0 B8p .\Ӊkރ((((& 8 BPU6lF#GW^Xjn Qp8``ZRAzc 4̓Amm-y455)C8ǏGQQN–-[ yDvyx@Cŵ^#FVӧQ\\LK4-ASU,%%%6m&Ocǎ!㥗^(b`m$H0#!8tM6m=[ R3b* 7o$IBMM v؁@ d2I EPU'OƴiӐL&}vl۶ v)y$ LoÇG~ڊkɓ(**@yx+lii0k, 06lF ̙3{A}}=֯_p\t#H$R)S_*/رc())I1k;+(eƠAPUU'OP(DF|a 1~x̜9`˗/G[[zShrS =EQRQ/Պ3gbРAZ8|06n܈`0`02 `0D"#F{A"իWC4+ghL#̟!B,3f nVWF]]jkkav '8HVL&܌2TUUaԨQxwb@N0@62CQB!̘1:u*>lذ555(**JX` r"L*|>^/O[o{nfҘC ihii#0rH3hjjªUR-N'DydpDÇٳ˗/Gmm-;`bHy`v? I0v܉ݻw#@jEq B:F"1sx饗ֆFn8d.nV,^_ס*="fcX :t(.\8|0/_x< @H&(--ŪU0uTnSA "PMMM(,,ԩSq7?ʕ+Suod?E \^^~d$ѭ q(..ػw/n݊Qo>fX7!P4n 8ӟO୷ނ!#łO>o?;gӧq$ɔ __~'O?M6a,v;l6۱}v.0!8FaȐ!(--ݻv $ 8(p:شi8X, bRly<0d\.qm (f{A\)--Ecc#>:?0T`Đi$IqH&4 eee!CoD04? />{W^4gHΆ].WفiG|_G,R70 qFyy9N>V4*΃¶m0aȲp8WBPN#D (~'OƓO> A ui1:ٳW^y*?N'N:e˖GE{{aNg8Ù3g0x`Fuu5~vkvØP4T/CUUbϞ=b4i|>D`73gkEUU~iTWWe<ϣǎ3TAa@jA4-/Lo߾o~'bر|t$ #8~?~`ԩ χ^zAUU(Q1~xlܸ.0eVP(}aʔ)B_j( dr-H~%%%x8+j,R!Ұw ^3`0`,K/CŦMPPP`(14/ | /ࡇBCCnk$\8qcѢEx衇d9s[ ,T,#ahd~3gt ,R˖-ŋ@Ab  v㗿%qfr()!4@ p8?****rJ466@ccr(cǎaя~>k׮{4HUUX,T!_ۥ3,2n: <}A$1IDـ ---}xGG87 ,]NpE @ N&݊ ݎ'x/T@ r ԄgSO=ۍ^zEObah4 z֭[1x`u iDQXd |AD ~? 7x7uV\"!a -YۃXI](¦Mo~!APWWcΜ9xW{n9jTK;]: /jNHuΝ8|0ĉ$D<37n}Qա89MӐL&1dl6ٳ'U g$ /y_izx!.\oS BE/ꫯ駟Fqq1v. ַ6@EQt:/`+V`ҤIl!r&B'OĤI=׫kj q_hD /,r$rf O<{ L9r~ ׾5Z'|jtʼn'`Xt{VO0㸴0l8G^z ?D {r y<=xCK6qW#H$t)acB駟bϞ=wCap 4K,Auu5֭[ CE1l'˕2*2l޼oO ~wyN3g k^mB2Xx`ȺZfϞ?(,,.ibKR)( V+׿bժUx<,M 2ƌQӾH$1c੧J'Vש( ,֯_粹$6ǧ+ ۝e-[t{ ׭[b1y())I{TReL0w_ZTUEYY֭[ ^װ&ﹰ}z /@UUv3z_ǟ'_<vC!Gp۴i.ubwt3,Y/"p8lؽv>E$Iꪫn:vCT|qy6lt3z=-HUմ4 "pK(EDmm-JKK mNeYFSS*++I2\#;rKϘ}fOas.{ObXVlDQ|'u s1zsl00Ņtql6[SK&vpބ`7@3ǹp`0;۷oC L_]]nmmmb sgL2vJF2Dee%&kʷeg2ۇѣG# %;555$ɔ*A0;b*4 n:T,S8NB!S; q#CeȲl8I(,K#,ˌyi2 8۶mQT0ZI֐1A\I`j KtƼQu6F37o1@kʕ7N7oѷo_DQݟIL<̚fźE f H @qq1v㞓u{+r"mZt* `nӄ06]hƽ*GY. @I9I̚@a${yfxOL4 o6뗚 IYΎ.#وZV|3f b)N8, 3)g͚0ر7|3Ѩ)`\t.lM߾}!tYnL) D0̘9ʞID8Pn%dR`2@6mÆ B[[Uͼ;vZ\l/pp8 eL*l#Gp#ge X/Ǒ#Gt aĉxwum@2`X3ZsBf:q8,iă!"bƍ]v 2fa޽ÇG<'s{XP2qv;8+H$2\fn&=yX $.?\;q$gmR9q> 477Tic. afX q,YEæK3@jx I"),}d„ 8x $I2b3[+/ 8q}(?ZL&`͹֌`=hX1* b u]B$Ig\.,_sA(2iG`d>g[Q̘1+WDaaa%L+يY2!F(ԩSݻN;MPZZӧO.$)fe iZMg›ZYy[[OD՘nf؈QF!LtDnrn'3 I2Dyy9Z[[M>Z-AF3b}ɓ)w(V)̷s`d2#"n,b&s0.x6TkL`Mv]wݕ 3nD:PU$.ÇMfk= nve6 Çǎ;p8L;^7)e l4Avq/ 2rB#9@MPPP-[`ҤIA]DQLs3477f$DQ;~Zy #|+_b1 28K5"13rBY.ヒ Wwgp: f ڱ R3bEX,Z% !;DcXi4MC2ĕW^ MӰ~l/jj+Ia2.>snj:+"L$I2Mddݎh41Qlm٥@!3 @v >|8a[kWi Ƽ3g~n"̉iPUġC [R0\.;vԢggh֊bf!zi[~zÏdMP%I2Eĺ;oH$Ryzo8VN&0q>xG86?- bĉ8~8|>_ 9/. F$1ctOS1Nd3N&(--E(ҽHy옔wpe .ْCnV_6 I/qZ8qJJJ _Dd3F8C,XcLne (--(f;vW^ ݞ&}HJ7`ڴixWQTTBο f͚h4 EQp8&L& ή>/g-@VUPHw4 q>X>݌3w^~Xl/$IH:/@TWLL#at3㸔}=!oPh4o.`N!zqH$ׯMaw@ߏÇoF[[.ϐeoϟF ߨ8C{{;NT!A.7(2( t ͦhgL[V vOΚ%IL&) HnPHTUE<0ɫ7TESa|EQvTVVO?H }zX|9M{ PU")Xȫ ;Ȳ Á6-Kҍ@Fu?xG{{;$IJ#!JˌnvݰBF̘vvByy9*++uBM 3tyP#Kѝ@@afAejOf)M<~){BiP}FH$kwhօ F4ŸqPSSQsz'|' fYXi <`0ә8ofΦ\.ݟCYQ\\@ \UUUX,\N˅u֡ p8Ms~̙3oEEQлwo(̎H3+tMM өKUq$ G)B"jUUvad 'g[֢_~dbIfhqEE)y%ǡV¼yuM!5LYm۶+n~F'`32]ox,ʵi&s=hiiIʞ /Ҩ Y X ,/lwر_~9 (J6%Bwq=h|yBEE>SC P(df $_1{lG@at:QQQng{IY.0Ge^6lQPP/F".H&5+EAaa!dYF0 Ot<̙3J75Bwzjd2aÆ!?7.R^k֬رcaڻO48ND"{NL&lX~=͛Lq4 vƍS:IԄ|;kkӉ7bԨQ(((@<g^{-8 `qx*hB<˖-˫K!* rJu]B=ngߒ0`QV͆bdm-ǡӧOGmm-N>3?. 9XV|kRUU8b1 )d$ gΜIKQw8pV-3<כW)/dYŠ+0k,Dn >~ 80 $ iZVT/E̕D"#Gvk:3lق & Acݺu8zhF^7o^rDc χo~{۔AxX3"bĈ=!#E4СCqw<_H/@Ckkk? ˹`2 9s&^{5ff"vaFB p}CQQQƞrZo?ݻ ;$^Qq)dK 6 _-0'lJ`"qjc͚5(--jAxEAII /_[n(vkBM"8f,/^'xVǑrH/qmۆ[8Q3z cliiEkyHD> @ f\:]\xGo7= `'`#47mڄ磱3SHe:L|, W\q֭[2K@ XY͛1zh\Nu$ ---pnybAw3T$466⩧/~ L\Y[o{cW^ؼy3j 01cqI! }(ձjRGz `78V{jСC/h=iUU3 (9 ׋-`JnΝ;QRR\T( \$Icjf sH{ n>|+H A?$IP|yB:n<ϣW]ujjjv&H{Kr~饗p}]IVv<|F~pwOՠ>J$ipСC=z4yOLF'3c Ԡ$uΜ9oXl 3zD^b ̛7@_rTUF0;e^`0P+pV,^[lѣGp8tZmB4MnǡC0z t8l۶ 7xyDn:tghooѣQYY+Wn:@&EA^zjTUU=Uql6>c\s5T't;(,,DUU|Iߟ:AF pUW!8{Cdh4J~@f̛7;wD$ЛF<n݊~hnn>2e6&8` ,@SS6n܈*u4q$IQ\\$/  |nӦMs=G-2 `EAUUZ[[S&/{płn ˗/Gaa%oq,?!~a'B!0h"_^{-TUbC 1n8D" 0!Hj^ǎc=e˖!/C+_ڻw/O6_x[`Íy477cطo:A#CꀪzxWq7B/1&0k0nܸTAh}f̘\X¼<Q1c (--@eX|9nVpaȹ\j ߏZ=zvnP'$c̜9`СCS܃yD" vL8$aƍ(++|,@3Xf n\.曘2eʿ~ˊD"p:ַp\T%HuFUUȲ۷c֬YT ? v|;_Qidΰ7nĸq`XL&pznP}}={1ر2$@D"{; q'jxÆ bK~?@oa4 ?~<8$`s>7ï~+x,BE9sǎq<yD.-!̏ǰ,п?rH8<裝BF1vTS y,㗿%$I@YVٳ͗{\Ν;;*udhәy[oEQQ#LBGRЕqD"H&&|1#nD?qeaذab\(BX؜4dIDATzuKVcNTUn?rA_ǎÊ+ $D $BW: @&P˲ ۍ v󶪪:ekۍ7b2\4/̙3qEDv!$BW)i8کCQTVVv: qma_v;wĺuPVVF tJ6kjLfl6Pʋ tζQcs(7=                  1IENDB`DarkRadiant-2.14.0/doc/img/6Sphere.png000066400000000000000000000746641413722237400173530ustar00rootroot00000000000000PNG  IHDR@FFbKGD pHYs  tIME)%E IDATxwT_Nߙٙe;G I&1&5c|c DDE`^fvzsؾ3u'ǰΝ}iM7$zM&-M544Z,^FFdY&!ph4 dBez&"dQRR`W^`6)))a߾}$%%QPP@FF FUШ j4( t:x<3*:uČ3ꫯFp L>ٳgs]wqYΜ9hdʕDQz=,c61jFuP^P(%Ю];Lqq1'77k2p@xꩧ8pF &m6f͚ũS(((t /`ؼy3@CqIZj,FDQԄPZFueAt@,# B!$IW^X, cƌݻ7PY9|0 j*0~nݺ1}t͛GZZhRnvnV͛h4rwJVV,YQꫯp$''c0tL&bzj\ŅD"r$ JΝq\xۍrٺu+ wޜ?]v%NUU{̝;Ӊ,Ȳ``6yGXz5G%Dp8 &M^jt:O8v>saXHNNFE׬Ė&CDQDE~?UUUȲLZZ:u*(bZl]m۶q5p!Φ}ٳ/NǙ3gT2ȲL8&55_̚5 ݮ|Hܹs9s /&))I說*":t@$nZ<]'vl85QUE$<zovӶm[l6$"I9sI:t(7pZ"==իWSPP_|nWh4"I{A… ̙3[W_a~2S֝Ù2e oV Txiii >p8̝wIaa!Ga׮]bXEͦH.^… <|]j;4iZ=Nd !:@ @8 ΰaÈFx㍈)..O?%))Iuj$.6#'PQQA>}HNN&0qDt:.'O֭[oHJJ" ⣈gv;f_xFB!RRR0 UAP,Ŋ+ɹwk0`~ogѺu9N#rEH8fĉ8Ntcf 0CMRnM%J+IvnfN~~>$ZMfOJJ`0 frrr2dݺuAXb%%%x^A^$b:z!ΝKrrrDө| /P.@Mqzw}aN'V+WRZZJYYdee}O5AL 4L@S,Ӯ];M^ԩSlذ˥|arsszL:͆dÆ 8q@ @aa!jP31%0p89s&/" |u'n^z1|p,X@("99V,˔9 2vXrss|z#2eeeAl6& @XD10PS(2~xIKKwߥ"ex^5dtڕt, %%%|פa6U7>6rnf4o/NSšP;㏳pB6mD֭\&@DQrԩN'b69{,:;v_c0 P34s.jTUUrӧ=zwlݺ|>3v;& ݎ,TUUFzՋ~ټy3OfϞ=Fv;h^EIipy|I:ĶmTo/++G`ѢEb1l6[AdYF!PQjoL&}{>}o*֬YjU뗕D"-Dh(B$ .~1vX<f۶mDQ 6`0$I&77#FpaN8AUU[lQV[[t:w}~{=222ER.:6liժU.W]SNʮ]())ٳjbm+ Zըʡ}(\M?:t(Nb՜(*~?Lzz:cǎ^gҥDQN:'%%X,bzQ74lbz=^MJJ 'O&33H$¢E|j%==s[ree%n g4Ś3gSMqE6mկ~ FF[byH$^ONL<ٌ$I|>.\jܹsjPs&Mb (S Biݺ5k֬h4JRRzѣGtpB\.'Nl6hTB[YxWD"j5ES"UUUfF$I,\VZ*.\^Le~*2220apgbXjȲL(b`U˺q" `# ϐ!C9<9wVm6#G$--k`0Ç)(( 55Um#o9f$Dxgyz$%%q1|p}YHKKVD.nA&IUUUH7L(brQJKK9w;vPM&Xr M%:x$#Gdܹ>ӧO##Fu 2Ǯ]8w{%%%EvÁL&gΜ+/. (RYYbgΝl۶ ^EkAT Qi۷o_:uDZZdڵD"83gX,j ExM辪 Q2dcƌM6j*zׯ}ef l6c q(,,d8NVXqV񀒟F$IM$%%Q V>@ѣGciݺ5ڵСC|۷O F8 &Ѻuk&MDFFw%77֭[3uTΝ;``޽޽[Ms8ZHII yyyo[v RK]PPoɓ'kݤBtD"5k[o%E(R.\vn" `Ps*++IKKS#tʵJgٳgJ3&*˭2c ^~e.q<^~޽{9{~ .`΅1> /@,_T,sO_sNf3={dРA+ddd4su(C222꫹;| [n%==I0Lj-!2`G}˗sf#~|eeeۗg\p˫6J`'l۶VZPVV5@vvvu۷ԋgz=ۗ7|^s=?ǩ ==^lF5e}ٱcZjvw16o2ON4ɓjJJ|]w'|TkT_x Ei4tPzȑ#)**d .F'Æ bzjMrKtb)))|w[nGBdgg_3fЮ] {<v;?Oիh{GMt!Bz-~i5% 0c wΓO>I,k %!k׮;y/>JÎ~~f(?@E<=ڮAMUZ{<FԩSF?~\WZUŃT]ϳh"e[s@E}# o>Vk$]tf$''jrI8{,կXbE riԃnΝ9}tS;N-J"Q3f }aΝ_MfffH5{5kpС(+**{e+W=V,.]0n8͛GJJJR<7|3;vd4;es=NJ+8zZQ.rX,3X,ƒ%K8z(Ƹ1AMlPsAyr=Я_?^~e\. YFΝ;3~xΝsfN#??ロL|Ff՘hͮxgYj'NSVVFFFɓ'DX|9=t:tޝ;3s6MҼ@E5l0{td*++'##A>g}_|;LŐ!C2e /".\yҩS'&NȜ9s%Q4 <裼 -~B0бcGFծMo)//cǎL:^O~~>˗/rt:jV}X+<Ν;ՁRAb49s&k׮jR|ۗq1|v{B!rss/O.]nvJuiqh0(..f…L4чbW%F)C[[9|0tKTV˙1cGa˖-*o($^g}ūl xN'Tc[aJYwމ`wޡu SOxb^:b2Aiii<\wux<?N$Qpf#(iǏGe-[0ÌQ1ͬ\>ȅ 8y$.c=ӧYd 6I+L&wf'?a޽jt;*Z(<3ڵ{*ѹ)P\@ cǎ?d<ȧ~JYY`ꈡ |>ɤ憖3ϰm6>쳸8Dʕ+ʊ;r Pf͚ŧ~>D ~c4~oΙ3gر#F};v"z'33￟^z4tmht:(V@RRݻ=z0|pl٢֥?Sl߾}UzYINNf۶mqX,N8P3a4*-((`ܹ}%|92[$*++[4he˖w^z=jńav;</%,?e d]!I`ޮxj(..ꫯLj#8|0׿HIIVC/⥡h)..Ge߾}ٳ'($f3'O&;;>_DQrP,^9sjVUh[EEHN׋bfڶm[g- j-(z$ӧ/[oѩS}nHjj*?0G'Dt@Aj۶-SLᩧuͶUE($QQQAnn.'Ojxw(++#==RxΞ=˖-[p:?%g>RnbZ\"*H.3X `0PZZʊ+DTE|>qkqZ׿5/V5 T*%n޼ySΥAqq1]v%==qqY1cxxчT~;v,iiiuzyȲL4K.$%%ɚeƚ5k())ӹ^vsFcD^룑N{M6gkrck׮L>x:ĵ6;Tʎڶm˴iӘ;w.6-z,h4cȐ!;ݻc/pb1شinN)C `2رcuN?e^6g,HWf͢UVq fڴi\puudY ő͟jwy[gΜa9sݻwsK.G}*e$H^ IDATx (y6lɓ'"*<#;vדgJ#FٳgN͋k(n7oӦM]vBjn,c29s&?8qkM](裏r6mS͡w=Gw,0`Krr8>h A(((rѻwo<OZ#Iټ\wup TTTڛ裏r)6oތf6`Ϟ=9vHA#1HKKcѢEL4 w"c(G'Zb9In(XB u+))a̙9s?͖J0$''\>3-;wbLUUUB|ʠ1o<<OS/{$ 1cgϞeݺuZ!ΦBIHIIaѢEzXք8Νcٲe̞=IIUmx^V^Mzw%999!c2(..5*a;ONNɓ|̛7Dž6 jR5\Vh|0h4rFQQb1rrrXv-={bąT%ovsM79>Hn0Jw/ hK>|8ǎ G(/xϠAؽ{7V5a^hʙ-[6mH'N4gHW߹s@o[y$IjBDC׿K>%8 `Zٴi]wvH$Pߩ(jՊ3tPn2k6aPj٘9sv'ހ,˄azIII ժЈl6~!'N<efddK/1tPud@b/#vu0m۶U\Ȳbaǎ\uUq#J@rr2-bڴiMIE|>6l@( f㣏>jv}[2J3a妔gtRΝKaaa#PE.\38u{ѪX,Ƙ1cTK>h2qwСC$ȿxCM6mصkVH^gݺuL8҄s)f=z 77W/"$wy'۷3 jJ$I"-- O(JȲ(ر]t:59PW_}~Q/9KAp-ЩS'^u4˯L&6m/&===b5j"6mbܸqTTT4h`g^OAAƍԩS>|4M S?{ 2IIIlܸѣGX|ٳ'6FPQVVСCq:\RkjHDn8t!Pp:[޽{,C~(\.V\̙3k4WAPQQQApݻSYYF;>H 4i DSUUP"(..nc$''Y(6|h4RQQo~zEVz uIh߾=OX-IlZP(P[8pлwo6n܈l- vyyIOOoVIҥ $qԩ>hZL&Ν~zzI&bZ1͔}T\.Lqq1_׿5m۶UghY;8pzkk+VG$INE<SNw!=={Z#ڃ:X>,2Fϟό3Ղk?IJJ\5j,˘fN>W^ QDh׮vC}HΞ=bx<+^VDCjeƌ|<#& >r ^o354~H4%--e˖1f̘p].SLaٲeX,4%IBj*cZb"ڶmˆ 8rO=T5.M,#++rbvO5 L& ٳg\weNd$QX,0.R5h >vwXL6mĞ={xGiӦ n kL nQFrJӵ?zA$Xp!Ǐvmni0dȐ!9s 4P+3B$jcX233/x':u*:uԦ2w9rY?zܹsTVVҿtF#@QFh"t:\IHNN&559s0zhz!eY;!~Ν;SVVp9[,ˤxb&Nl.C`0xI#@$պndY<㔔 3jnFV^h%i4Cz=qFA  &?ƢE7n\3kB$뭖+HJJbժUٳ瓛۳x"!h B,j|rƍFdffҹsg6mtY#@NJJJooZ7IYDNN>`\{ieE*Fg}&yjh4fsQ\\zM^ " 6ݻwcX×y%R`Ђ  15ڌ$ɓ'5kvzܹsUs V:tG44T}M>l+]_8pY6Թ&b1, tM̟?-8r t:;wNk~ѠȲhT#}6t?WKOE" CAHMM7`Νwٵ4 R+2=ze˖pBuFiiih4JNNZwFEXb#G$ 5zRE3f ~!R,P/FJ$I&PXd 4i bȐ!ب^[/Шoz='O$УG~nܶM6dgggϞVVHٿIIIBY1LnݚW^y={2zh^o(С^W i4&?qݍbB`<@ 7C TdddꫯO/{i L&ѧO~Gw}7K.W"ay~$I5 j1L ޒ)a(((ׯ~;EEEf@ @׮]OBeXt)SLA%IRk}nw Q ժEQjҽ{wn(3iR0СFԩSj,˄B!nf֬YՈ DQC`Asmo>~~RV#(ڎʲb6m4z-BHYY3339{l8Ԉb= Y  6?fPD"FQ-_`O?4$5ނ>W#nA-?~<^] W^>|Xj[N#4iGYIII 3ϐT볂xB۴iñcǴ/qreQz=^<֯_l hjF ફt&ۜX Ʉ^cg?(-&^O(_~޽ͦ F\!z>I&Q^^^oBٓp8_]_ ٹs'cƌ?[-پ};I(o#I2e N)Spj7B7O> Do5\fKE***馛ؽ{7V^J?#&BZ#VM-2J}7 (^/?Rp8LNNm۶e۶ml:/$VZc=ƤI~zJ4`00tP>f6\#Qnذk,h#IHOOGJKKuH,3@%/D$5}dz> zi$$??^V(Vڎ;q\5 1a}^ Yiժk֬aKfDez=& rxpBv PUUń X|9qf3uٳ'v3}"^{-XÇ:AW4(=l8V\I~~>.ALrr2EEEt:Ht:(yfFU r@R\\[unx<~lذ՚0"Fb֭<cbq!2p<.]lur]vɓ^\W` _ ӤÆAuz~ih4&,c6Ynw}7w^Çs~?A:[J82sd2/3n8MFaaaJ=z_'܋ECC!55O>^za0g2vmdff_&S(y xG8{,?8Νk_>}(--%??h_C> F>c&MgJϿmR^^N$iG/zj&MDii+ ` [nF: TΝ;vZg/2g֬Y5H#;`大h ׫g$⣌|8vr—jP ٹsg@F9nʮ]TD"B!jΞ={7F"dl۶<<jHx<޽{¿K.dddhۮj=QW2233ٻw/6mߦ]v˹rҷo_N8kh4L7nG$%%tv;n?AUY|K9$4?=C^^!hLnرcGBjhT%oXo߮.))aʔ)|GLFyWT(4T^<02o@ .QxZtcRSSygȂT:t&[Py<_(VrU?SQQA$aٲe_zF=VJx/^1#&55,Ӷm[=ӟ޽{ȨV;`0ȵ^ˑ#G0ZC{d] |+^_ibX.l* zzH~l=پ}{8"--P/_δi_k*]`go*gO_{l6}vrrr.;^E>|8+V`0\黻 :^(TUUU=T+! ҡC&LG"rssر#PW~e׫*H$rɜK $(vZZn_@С,s̙(?jJBrφj{]ve7HjjeEw>vR~v߿T(ܯ@ СC@)..V[;0dee3g2bf͚ERR<9jzz:@χno/PgOyTTu~^$n+G߾}ٳ'`5 >}R%X,F6mx7)..vP:A;Ivvvgc:8IOOo*@|4L/~ 7ߤSN̙3cX0 Cd4ge'U]tjhB%2.?0]}WLݒe/KҮ @qqBel6{aҥW$_qB,#99Ysۚ9$a4FMrX 4T.}o3{lx ***HII! i߾=. 7VtMpq=Pgy+ndIHII+mz̙3D"W\GM6jeɒ%3ogfr_M'GA< "+". Oz<(Ǫ+x.CD""+VTD[h%MzN&3z%zziL&' ٬EEĽ"&JE Ln|H{ Uw8bX . W]u<(=+**x'fl߾6 >yyy1 q0 ->$x:t=*08sjWu( =z&ډ]`JːYCA>07xbF&{Cb%ZMχ/k6{M_%tF,9rnڢۧRp19r*sabd}snMHH>HY]`Q,rss+oǟg! ɓr,$@0 z_uU-3Rb_5N8Ѭ'"t:y׷k>8RD^Z J+\ Dx뭷0aؿ? Nc1&f}G.{Vc:XiEQDJJ ckuQ$dNW@B=4,4ñu֘ӄaddd`ӦMp8{r~ wuL&SLRWW둘XzzzL'RAT( "L$cРAMj# %uYm"u$n2p7ɋc CL$!5552X2Jg" V\[oK.f/KA |0NTaCE< R)le,Р;%!ή%&IĩS⥗^X Bt_m;AFkѬ:BμXE  #>&CV+FQ(]zp1D4 0p:Hu)=64;8<#//ڙEQۡh8L 0  jvxHaTWWkjH4@瑕Ç&COr? {oBh4;v j٭.o-Ĉ B-TT6S̥ ԊhaQc#G_FcF @cmϐBJ͆^xf5\I8h4\xزe V+)=Qa6n:L>uuu_`6 v=&-j`03<|rx`W< Y($It#$!77F%%%"I8`_29YYY1{(tt1ƺ"61 Z2h4|g9s&j5~?u[ B caYr bĴ"i0Xf ƎxGEP( ˲ò֬?q*** 0x`lfjϰ4iMP(NE$L&8G_EU QXXɄ_|]tƌAEn0q0 ׋'oju}rP$ l߾b0HOOSO=|wy:M|P(EZݖ`0R1[]CD>@aa!N:e5k`ڴip\=v)x(jE^^>s >% %!t8pSnK(JB!L06llnuUJ\wFnn.l6\*SZZcѢEȉu)1 رcF.'N},ްafϞSNaX,#@BO~ʙ.F}}=7}{Rt:݋^z!33@ jb׮]P(5jjkk{T0= %2$):A@8;&eh4(..u]'/ }O?csE}}}A ұ0 ш!C`֭HII8q$Iػw/zFNl6|IL:}mOChB=nmY&"$I͛q6j$ x'`Դ奒ҔZݒCPbCPɓ[~zh4*mKSRRsNuYHMMOj˗/?ʶ\BCI}_X qmZa2T*p8l'A d2aXd jkkR&۷ދndY'NĶm۠H4  f]& aZzmV"IT*xߣuuuEQDFFBAABP#Z?</^QCP0EFZUUUmBnO>cƌA8ق$ `CFYYZmϩCP4 N8#GFM'8r PWWsdQ؋dL]F8 Fii)F@ *+WL&,X<3,1GMcJd0XΝ;1yF d\ff&jkk;*!y5\qJ%j5֭[n ՝(!nG޽eo/B9rS@aP(vq\zx<>N.#G`ܹ(//ON C H3yGNNnw=xHe V\B,"'رc{P]]M]R %!Xv-RRR:|z pX~=N8+f?ĠAߡ" ;K(DaAhZN1ZJ͛7 .@ZZZ[AL윜<裸a6cB,CPQXJ+hxonL<w r/%2220|̝;F15x$AT⩧w!Uχ#GNP(ݑ3p8 ^p83-@FiF%K`ѢExvڅYf*._{n̝;[Y0 R(1`4駟sAZZxJBff&~u& )"0 ӧ&I, ֭[`0믿>FS(= 2XygFQQFcۋUc#;;k֬A~~>4 `\AkbjP(i8 xGw}HJK.?,h4ǣ> BR(Cz- /^?3gDeee\-n$ s˲qg1i{PbxziiizJ 裏 IM긓":N9{R5IPWWٳgcհX,%$Dӱ|ra̘1BEXVڵ v8uT\R*yj*l6jR(4hN? 8NKKCQQ&MP(P(ױDQf;# \qq $I`P*JӧOt:|wDTH_… 41d-['"''')4(JlWƬY,|TF#~Gbܸqm/z^xr A4`%deeǢE oŵm6^|E{Xt)4M \\SrH=O?4f3}Y7222b>v4%w[Dۛ0 <Or a0v؈ @c„ M4ݻwG<7ZcǎaϞ=&I2Vl]aԠǫP33d $իWΝ;Q]] ^Hfx޽PT뮻ꫯʅm+Ă"SyGnnn%  뮃Zn""E=zhP À8x<{vD˂G" A4JC2۹3f z!dgg'߷[ pZ郅 b޼yXlYbXgٰe1FBuu\#Ʋ,@l`8dB~" ŵ^DZDz,^/^o8F+9Cmmm-S^\ѬDtwu>Ƅ? 7ѻヒŋcΜ98묳c4!8w\ 0& cƌ^ڤ]d"kiӦViKr8c9ڂv"m !` ZFIIIBnlM6 ǡ6M@ 'ZJJJT*a0PRRv{"WP(*ٖZbR(T*Q]]_śjܕN[UUU[QSSO>MH àӧOGYY>st:hڈ `b݆PzL2jk֬AjjjB^I9:^Є~SLJMBÁaÆ!%%0 P*Zq̐s~~>6mڄ{?c?>BPܱ@I[nԫMBP2"nضmBPB_=ND*޽͋у z=6mڄ뮻ٞBI$~?rrr0|p\2bWO"#T}ǎx<0aB1H-Az&)JGP(PYY;:%S[C@ഋj /!xFCЧO(JQ`NQZZ%[ZK@t<033>,.x޸R 4N7S(]m+J\~X~}đaH@tjEE֭[|0XPTطocZIt N'L}1zɄo&M҇x?P3@Æ C^^VXΤ pZ{ꅷz ۪x )Yr%:~+B$@ӧOڵkJd `8~ߎǏ\$MFرǏGMMMRP(ϙ3%%%8zh!3 >3X,\xᅨ&CE~?~W1^7)(b41tPlٲђd `VŲe0c \0 6n܈)S $MI à3gDqqqBwz(0 R_|<*++chL貲2ddd㸤@(- B߾}i&X,rܿtI$** ^W.ܻwoL(" BVs GPFr,^˖-{v@-f kmFpT$m4K/˲IUEDavvmv#PlA~FBzz:`n-fۣ.@Pp8 >1FcWRg%KPWW7۷Ǐs)I ٩3c |P(I#j<ϣsS4Ijq/*)#??z}RRRƌ$IX,X~=~?zf]aoW_ ՉgL .bTVVɓPT{*<ϣO>x'q 74[,IF#JJJ`2зonsP?Z B4i֮];>Z 8`<^_W?~z@ Эɔv=`r ^TIqTUUaҤIp:.sdڵTJB `0:؎f :u* * +"KJGA6M6 ~!t:]oMiiiX|9nfx,..áJB, {1,X iw|z3D8'Nkʼn'2%f֭:u*)=aPSSp\=L ` "ӱ~zddd`Ĉj5`ZjAI|XE~~>6nܭ A0 N'|w$I]oyyyP(8\pĂ8TUUaxwz{T:OY,wߍJp@ Tcԩ=$|8묳q:^΄ `"It:pIpF۷Fzz: ; DDz,B Bf̘UVd2(jvt0 ==wȑ#1x`/Zr1dn )M Hqb2-ڒ:(JH$f G0ĨQt:qAdff8dƎ۳q@6Ĺn,Zo,RSSqM7aȜ)b$8\&EDȴZ-Dxǝw JBUUz-}s ;-T*SOa(,,D^?C$ <'OJqJ}Òuuu(JL&,"??C ieQ__+*`0ѣذaf3DQ@eqQapTw= jv" /F^^^{5h4̘1N;wVqD2"d-*eYx<&(r dÄ 0!T*,JN|g^+w())'|Y9QR`2h$ JR(|* ˲8y$աxqmW^=H?0~ϜanahZ9z#55 B^ ѫW/ŗ_~)[(BѠ_~سgOA toi"tʁ?Eh40L1n7 &󡮮,[nn. >GNk$_|= V+n,fD'uT$+H?1g3'gIKɖʮJ 2~_0j5 [liԚRP(f͚Fn)x<~FeR)[gZ͉ .FPѣx嗱rJp Xp!,KxbH"7>{If6,HIIUW]%g9oD>}PVVp8 &OY~lQ*( 5+Q!I8Sh3JC&$ARnZƊ+P__(x&ѬɀH|NOiPFbchQXXP({"J2_|1֯_m۶TDPAnlj'dkaB!9f4.nlsN[l(30 `0Ob۶mX,G, χP(# .iiirlR0Ĝ9spF5? _K. nHDQNAB3e + pJy睘BID& nn!Cpcp\M,=J+V5J$(B QGAJTh -PL0H`0 G!b4YZe L8H flcB9 JC'BS( @ c?Ȣ|`:IENDB`DarkRadiant-2.14.0/doc/img/BlackGreenTheme.png000066400000000000000000000040621413722237400210000ustar00rootroot00000000000000PNG  IHDR!obKGD pHYs  tIME )~)ZIDATxݽ$yOh$džb  3)fjbx ʶ'"hv,hu;]M$Zk^׎}ʳm6pv[co @uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uWu2#syq1,X"oxγm|6pNh:Nh:Nh:Nh:Nh:Nh:Nh:Nh:Nh:Vzzw~ˋ`!:߆Flkγm6pv[coN@ЌIrMgv$H$?>$_H򮩆>W4cK%jo{)גvؾI^L$oOI'z!j!8B3!G*?|"ɿ')Dñu|/rgH%yO&xw&^Qۮlߒ|,7=g:M.ۣ~$yC^I]{[pn=/PX[xzIilBo$@&a_$_qE3;Go?gW6J$?O$/'s&u|8;|c/&ykOUX*[vmԷ%yGW4'%4'Al79b| IIhN0?BsĆy%6̇М4a E%4!6LGhEl,0>Y$a\BXbxfĆq }BCĆ6aKl:Ćn!66Nh:n^}93syq1,XZۈryf}3nk Nh:Nh:Nh:Nh:Nh:Nh:Nh:Nh:Nh:[a!y./.|ZkY9vL>1ofmq:uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uz=L=;?ccoCkm#656g8l17['Nh:Nh:Nh:Nh:Nh:Nh:Nh:Nh:Nh:nu Suا<6\s~̶|uNh:Nh:Nh:Nh:Nh:Nh:gcIENDB`DarkRadiant-2.14.0/doc/img/CameraSync.png000066400000000000000000000007531413722237400200500ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<xIDAT8ѱKq;ƶ;f hI pGTh@"hjHrrڂӠw ||?ԳRj)^\¹/l%kX޾؃FA\p*wQmOXnf"6/S| Fg2c*jvUeq3? F{}?:6qSQ~E@BVvl_cWw>>cF9!2?шGE X_y? ߮g6qW #kMNJw!K 7՚^lo9[=0&(sA-MDFVԮ9hSgVJK_p{Wh#.ű)0L~V߁jr_ڶf4T-/IAN<G$Kbj<x~T߂BKW0 4+z@S\=Q=m`*eXZLLDw!)S~q YZUsPD.xJX/F < |;tzOa_\>.~Tw~!x>%"zeIENDB`DarkRadiant-2.14.0/doc/img/ClipTool3D.png000066400000000000000000007501171413722237400177450ustar00rootroot00000000000000PNG  IHDR3 pHYs  tIME/9Ml IDATxg%U=ҬZ; &5HCT$KhAT1c J@x=ף*9 (MV$n{;cy{6MKZkլs?pZPSSSSSSSSSSPSSSSS%@T"kjj^Oflf> ⚑RwkCk *"oھW#/fmB뫗Ck,V\!o#鸏o~Cg /^e!2s~¯oEQ)I,_U,##xQzp0SYWWSdn/˕CCGۇ>/v<#O};uo`˭x]LKfOCCG\d1׏T_ZlrQGyXxdhhՊSօfN1ȶ;Ѫe0{ixd3s"ju1˲僃Slˮ?¾>x޼ˇ~ 68;.Xbdd…S@]4Y@2!}55(+V7gE_<v['fx͈Ģ$7omu[vGzms曫j5y#",v;{:¡UNw 0 %ӄ`f fL)ˁ=>zl߮]uwpUfnQRyB*c|Ǜf٣ :f,01#RspGs7OZd== bqxll]v9hwȍ($1!˚en^ww+{::BHYw1piwAYw;;%hHdbt{N=#n g_C9"jt34U@tvs9jꭇorιx|e6ݴ,zaԬCdYl6V|o<#6yɧt炧hcBAbD6wD7d]TX1km{tϯstS"J)XS3IëWOh~{o}mc]x75S7#DRwwwSps@W5U" !`&9k\λl~;}߹{9Ԭ-  z۟/ u[o|htw3#;[BBBJR6V|λnΣ9]<' ͜5(j9wʕ+?/m?’gDPmirWpU3w0@Mϗ%~хΜ)f]qppp7ሣg'] ;Uf3p0s050bf$.X9Sv}ckv%EUBUY|{}fC|9e7@2M%d,ܔj!"" Ţ$rb=:9eI%KO?}zXpܱSNlO;S `j)!R@b@"t7l;1& Ly}dO=Wuj62<׿wg_yݻ;zc`HHf8 890;@RMew=-Qǜy}챉"\Cw)'25xՕ]STHdnfL;anI%%f#78s~?Y96]wj 8::yg32ӿ2erse F,$f.! ;T/dfDX d1Bp@  vCwC^?h :;;UPJSZwOw3O~OwrK0E@$ ̈ TbLK{~߾ɞ{O?o}γ>\3R%֬H1{޳w itf]JHm/A$d`nfH5{WN]3p}sp5===uDzͫ i6_<:uctNL!@VU \MX McCϼ[lADpv>{~󁩑I* p@u7Xѝ$8LVYcY0 A!cHB̳{籟ɍ}}fϞ|oԼ-\0{sЇ:k~^N7mw Y@` ݈ 3!q)ҋV}}=|Ƃh7MW|w}Mk_9io>;cCd)*IȈMV0u7"r7w"`nJKnC?ه yt4 5̬,Vk}>5q 6E!g沌HBpD4q5Fr$i"RTի~ι_v:__dIB^JS7_>KwO.-<'tO%;TN/Cup@"TFG&5$ ¤ bFj)!80Ke!K+8q-]_?TdѨ_ 5,MLpʩtv-_FggXX!ա„, e8 iR3 , @nRwuϣ?lͯn6".]h-~co\ccFF{o`UQV!DjuYO=v}lT[J)Fj]%`n4Ųp3"ǐm- DGb$ycw-YOv]zy~qukg]]] )U' ``N@@Icb!t`;+!X*9RYȂYl6GkKp{9s&Ө`K/~?uJ_=aP!#ƲLe;rMdރ0g!$Uӈn$B,HdF4ӐgMM"o/_dɴiwV366>{pywt"4:yBwbp@&Y032;8d]0Bd@DS*C"A"fO1yL9":TVQIn7>j-MnSSfF`1:8PȲLj fU;= YB4 ̟&o|={|UWM Sk^i5kt={]7u-$a$ٲT3yU[V)(HfnP<$@@HD *}iLYCB#!!5#lϜuƙg5GFv^5hx>W~l DT 3c&@F# Y]R#)g:Q &fu3UKܫV < HHX96f)fY 8Wlwp&HmOGU~/xqƖ["ƤHȅ&K6"R-,#08xY1FpB2AHX4),}h]z&{y[=kkfpec>zuã}D M1( m3 y&Ln U"#y,0q`d" 5F1ksDfDʲlNOݡo#rӭyNj>5!˖ w'kA10A5vO/_見f 64Ddd('w8فZ"+ Rլr s&∪U4!"d.Y ;;NL4VSFNn˗M}#mzg.]$7>w {mݓ9kޣL|;,c:WHDeʢDr"DIMRrSD@jn@H,ZL,\'"pwwfFD j"nݘeK)GvryGO-5;v;u',[|ߢI)pU\c2FGC1EB A D,f)L)9R"Y*M5-pdF.z=y ަwym~unqlc?w%?t?p ʲlM4]*dY (T^a$DBU$d"ĀI4F`X(; Y&! #"Zny 󞟉~ʅ M4W]8Z-WߤJ>Yxλ?_uuݒ[EَH’wt$L|tDD4Uaf"vGSjVA"ASA%d 1wFydd޳9mvuѪ _xk\/͚=og/7{t- pD +aʗN+\UctճɡJmPmvA0Y;%4B8;D=bF Fo zͣ<7]Ʋ=LUa}_9wv=rYYWx7sTZJ&TĂD !HK!t=&K1U WYD`F,RtUt@$t@&joVPu5mꇮ{q{nVZS?_Us_x?qv}?_oųm|䚯YPլс`R4RY#ZRp0MU?3Btt1OF\UT EAnnT]hZ!R@$7*9+jjDLfZԴvhhW?|EgXwڤ:=.a]<}{O?+9TjU?VmŒ˲PU !d9qвp- %v'BCO;39&""!dJ{Raffvw^5="b< uu[~晃^ooMvQPy.S,UX8H5E* `fHĮn5MLeHBhfDĎRy&4U;M$'8e&{ȩo;{jʲ'?fq}\m^.-fT#SL)e$%,/,U3tղ,bJD,Y,3n$T%3G$$$F``ռ w3"cc(fn|Yg6Gᚿ}S|oe3OMx31XDX5d9!BuLw:"hn8EUH3Wt@B7p DDHhLZf |# ./k g!t D:z(+G)]es"erdmj\\kCD3EDf ,DniHE"bC,jF69/U Q1#:K^x޾^<}35 IDAT@PD&hn`NDNQ1%&$%/YÝC8Ƙ1He5D4I3k*<H@ 2RT1q`@=U$$fkAHn(P*[dƷ\n6Ed-=c8竧+~yEC@ yJ)%5wAiLjfLHL)VjtVKB DIY83E #0u3CW uhDpHd2>7w_o~nV!2zm/ico׏fC+~O/_nčnrpbq`wlVfc*g#* 0+Z ffL#13MRYSY`UQSBdb T`kb7uTsY9,w^zю:`}8<իݬ^!l/mjώHjwL&¦(J2n1|!,]XlVU'oNpuu^K x, @ \U5B5-RUӲI]$Tc0M d8 'jY^zGz[TU%cԼv($Ͻohzg-6Y*u8QRTU$p6J%Qg&&$E ]c"XJjK)!V(D覚4IʩUcYjhq4 emz﹧c-=1 7z7{_{z%U#EcZ&YΒWrsdE  dlR9T490! 3k2UUZ?kr7azH ebٚe6vY;a|?|{^?u/|jxxg@Ț!TbT=SL1` BA988@jƢPM:1$D 4(1 r nd n@fVɐԔI TBkHf+ W_+oG)r-5jI9`X@S,*ݦ:i* W#jL! DzV"TsӘLk¼Ag|;O=nm;@l۟;M26z8́H\59%2S-V5Q8ARUmz<YsbQ2%0EPdEM5ww" nU#@uy @nn)!#@f/6K/Lkp ҥK?:hfzy￷1ugeLMF9zX@RY8 I=YaneQ9Ln2:TQ?"l,"ci) >URU7TT,H :;qIf޹x7\=6,KzđvXσw?pM`2XXJ!GJIRl7'D,ivS sJ)FBnELj8X# ;!TqLD@nZvC`6G$2ղB4B$53 $4veof)"mk6ǧ+1<4h4%`lttV[q1y먳C0LD,K@!IS9"XV[ thf,́Y݉\DA,I:E,"蠱JMT%d2!XX %j%\X"x%X2@b!/9'xkW&&&Lo?g5׿~9fDL)Ʋ(r+W^sW"r͉@RD,XUiLfjʾ Y@E|T2q[2MUhC%$"7SSj)jtSD2d =5O=3/wMόIҪYpM}/_yfST*#;1:X)%wp$s4R*cJDD8TA'Վhve BBSd@4mpVx%p$|YUBK,8yXLB@os}쁟dx\7ga?w_l5'1q͚?}~w7̜UEӺ'f)*!)0"24Ar"23wPbDF7Oc@$He @n8 u033V#偪2qȈ3PU "DDZYJb2,Hg$G-+t#<^9}OtfnzyͱXVP 0fl{ڇ?xh;L!, S5U]ݘ8dYJDH((L&t!HebDB$lkRG'*݁DJiYcd$, Y Dy˗NYpkWyтϿw+?p{_Lo +W͔R\vY9A,Xj8 ̠*[ERYw1;Ʋ u705tڕ˒$wuORe @$dt{"HR* ٽPXy<;v|OBҲekWy !Nw{W肧oeO̘nN?mwMcnOL RL!p( !,ca@BbpTJ&2vTF-ʤȁZ(1 LĄB$!SuW>T!r .4Am5fsSypكs˧vƹuOr\s}}@AeVC>p_xQ~ӏp2ݜe] L4OV)l"B,X5uљP T5.āIln B7GYhdY96Rba$RR(p07U%X$1sYoֻό 3Wk.fy{<;oƛzDVCHn/_wGC}^s@SKISb"3'fGLI3*|R0" ̅EcJFRBtg\-i,V, Uf*\)˲jF$!d" :Z5+2%HniV?ΫHv[IoĚ<n?L)vm+1 8dZ"U*d'nI,XlG@ @LHY h)OL9ƛfv4ٚ+Zf"D\ 0DLtWBLEȉ%#sp)f5%+׬_0s5uGyk}O>tp#CYxλ\~S'iUu=9ߵ]M!DP@0t&x4`h$jL1MTF=Q FSz)A骊w;c|?[%*brQת]uz9xt5p7EDDHaJ)Z4B!*B XSצ֚q,c%Kʉ%B@LL('$J@*֗܌s7N0#d&rZr#+Vz5ҍ@0L+Wy^ N?㘓Nk}n>.[ ~["⡏}|}_vmL fjUC )!PsmD-\5h!W.9q$k_̝Zki13!'׾N1!P׍hHDy߽n/_⨛[35Q!ޚYܼޚ" #1  [-j͡_.xD11uH6FfVGbgI)`bku4x2tIU[C VMM%#;xf,!(u-qVDhcٛov3_{eϿCܜKߡ{rcW-ݻw/.<D EZ!DjZZ) 45hi}ss$ĒND i Bi툒RU+Rw)wت$!$e"r"&3ubԽx{_~yםiv[NŅk^{=]a7rG>1_y_#at^ԍdfM 3j ڬ1$A@ĒS-S7m͐U=,@@HL,"i9w>L|%ds$@Bȉ8j-K]GHLBdI) #6ܥ2Um=" [CwO'۷zobί~_ p,~JU7lO>cYy2^F3~q* ݸcf !'.ҫL C6S5v'6NVzH;G֐߱VJ%B@YU檈nq>ipvy0ŽG=Խ8}}yspk~^6wz;th^6'0 r;X54s X *'/ $F!hF"F&br@DJ)1b4FsY2!J(f"tVztHFk+jrJII8n I)w]9Zo_wU+K:WOiu֗T?dEŮ]df{o|ދ<塡EbF@Dd5a34=ѦH}jRC/\3n $N$BrLDƄ_:@M[,$DB!!眺j"JB֗Vk# ;s<E$!Ņ#~;ivw#aJMk^?CO;|}[ھ} /[X~ӦMǟ{s9 i܉HJ[ZShjĒ,Έ@ZM# j! !׾7H@GUXDZk NDr"۷5CpDhg }o}Ŕ` | @f0B\cӽ__r;z%_d~ko>v𮭻ifffJI9܆$)XRFDDp ZR %KlJ1rM"Rs {k2xZ%0'Aa!.p43mnJO@]9 .層Hq ̊G>7.`0'G,sV{ws^ LM$B JḚY$~~UW+g?tu_ssss˗x_%"#~٧ї^۷c>DK`D \Z=n戔 jVub)qkj10qǵ9$uFu%{D#i͈H8TC}qĮnȍj) ô7thjh6D4jM+Î:vkǮ΂ZXt=IC0"5FYzU.~Wkg>Ѓ%QЏDdxx~裏~؁Evlkv3 ?RW7Inq,Eik9$ȭWDA㜻j)Uk%LQR'9 @fBZ)g!3cmHĄ `upۀ"(d;90#i]sw_hŊʨ IDATkc,S? @<׶n~#ֳ/~Mo<3KȌl""Baj3#""K$݆ ; L[m QmJ̄)xFUKT5A53&9.dƒ:5-T( ؐZ~`BILI.1 #1hh݃ MM533k 3sJ]ր6sx~ '⋾>??Kum󙧞||^q )9F\^@-V@9HJK6WڷIEwDbf3'&"[k5S!06w  557#B'wBL!cSeFU#~~סO>IY[vsr=bb"a".9rS|'|ʋ^{x7F.4g]|l炷ջ.b1Tm0d!ʔ\(.Gr9w1Ĝ6"¦HpZ0p9u! 1332œWU%PNj55(D rZ0!N$)g2rD vl\>k݈,D$ 1:!;i7;]_|?j=nXaW۶c98n҅_8؍%gk[@4D]D5  BNACu #h3pāZݓZR̜90fČD4F/8MEdsS-L V'o6}G:7]ם\rBdK!?\\޷i#usx_|㼿|ם{csǮ `4 ,\['ZW2'!&A0YVJ\D@a;e3'Nّ98T L 1̈IxAeV 2]lDjmxT@}wb #+.t5;~O߶O=wy-K9߲i!>e/}!wz]S2mMisxZUT]D$ {),NZT@MB1'B(=#"]E$CRQA $fDDtDR2u5^NNL@T$xZ}a!Ogf8_KUfJSDpS7Zf]7]n?^W~wm7ضm"`UuvXfr-w>u޷Sx2Wf0 Ȓ)FDqqD `+DR rRb63D0Bbb(C"pWׂHn0,a"#9""#:DBL"DLKR [nO?ěz~01hh0Um5 6$[+L&s1ٽ{M_zѲ{W'xq;.[t<@u}bG>'syM+kŦ;e1Wsw$93En")uu"ҍFZ$$eG*"#33;`FD,’#FYCZswf n9wl'!`̬,B8a`V$NydfUhʹ9x,H#8YIUTP\(HΣwV8噿tү%W\O&e"Q^jg|%~cžV] "ܑ9 ܘk 91ỷ%   )e4w.ƫĄG~ufUTU< ,$"J\͐"þWhn= g]#/[!@"S7w`l^jr؁#koڼeKq~~;~nYfڬYmfUskhB{nf*>V:E-=p [h4St(>h" i?E22qb BB,BBHt$ȉA8.}=EK3G" H3VZzQe_yhnQ 8pYRDD+e% S?g뒿W=O.,,,޽d+Lw۷oǮ;䧜uY3W]>q+֬͌ja־w %1戱#ik A1VF"IpD+(t7ֆ]XZK)6 wT֊LH0CQ-.,Nɔs$HLY5 Z[ ۶]M߽2^&Gp@č7쳯;07w &ck֔R?RtS~W_ӎ{Wws+ɂkAtD,u"AH/4_a o1"U"wˑ5IbLuC#`9 a L+sx |@:`(&# Zi-FH>jT9j֬je&"4ժ}_&#$U߿Mߺ|޷iEfUD#{P*׭_i}/w?}+.Z5^ UoWu5b c IKpxZ8B$5D@ 3Us$V5J"H̩Q7MXZSAdwiMHXtP9a&XJt "6@OS <@Rj5@30U:Y|޹=Ct'}12B$2kk{2/N'jܶ@Uٹ鞍k+_~+_yӹ<?]'+|No{?s{ka'39PlLT̈́[F26NHBæX1 Kʉ"QF eD)I]vwkby!L "";0:!ZЀXI_&Gdbd!>}+_)\%#шSFNH3 R˗}{fo֔RJmޜ> /y:ݵ2;gnI틤nn`f(dhM# RI}3%HUuf*j%CCTRkB"̡̒5^"µV*91 Ԧז33QD͡k|)@DqSr??g_5oɣ?Z?c}+/L'3V/y7/_#Eg,tKƀX= 7Og%}ͧ?aD-6j8Κsj%j1=pT/NÊ $9g"NyxsZe X$cz]!'%fE8!BPm2 |ޠ4Z~с(kZr'3HNL)! $P3KߴaC$@1O1300{$>Q,Hb_u]N"N{wN7FnnD$Xr"F8@%$)XI0N/[}SNzo·o,?iիu^tY`P!U!1 ,B $C` MHc2.sYR0 ⦡t3$l$4V*HxTg $NY(XyFNπTjXmʈH.{Mk,.RIRr -Z633=!LMK7++ўOkXtpִ6t,8wcfNČq$K1,/Nl#D"(Cl#ӠwIQ3]31F= s&@7CB7s"I$PD8K;Bz ƫVk^{ܽ^'oo~筷rKhm@>gk\}ALf]k# B9aBw #tqX! ,9P)ĥ9"DQ( Vuus;b2U0%p@ pXrN@]ݴу>(CQ~kkaf}_ݳvM_M$9k-m~WцtVp@ژ=LQǒX\dH`vm>7}҉'=gm7oߺuٲeKSDe˖u: o?zk~0;O& LV]\f$aH B nDD$ILza`!D@aܬEk t~ ],4,NK-,4%ΣQ_DVU#HJv\rN]1w72's HL <\4 ᝰ ЦnMr$gTvn۶{mvշp/tGp6:s!{Yfc~Gv7~_ۿYw]MQE2 1!#sa Ώ־901L[ w]LZkX[-wkD,!0D2kn4S 36sU.ӅBN(L܍<( #© 9.nhJ)xkOk(huqpws?#oznCIΌDesi4sg>~_~xvժM;w[FQJiՏCB۷/{3W.~g_<񣕫|fM%eP ][I: Y9PLDLڬL{teB c0im-N bZbD.-xadDp5kh:D(ǣD {NL$:~"NX`7T:=%ET}:,w#cm`$pSkZ唐Y4kNM%%׶jCTm_OK6>44K-w;ڋ{Oww_[^lJk=@CJ$ExnnFm8=4;sZk&4H_=r2H!iif# PXhLBSB+}1mi ؍"I$u3s΂Df`e:$`ԾN}k*``i>o,LlDn4$#6ٵkO}~gں$NjND永{7癎9AUR$$IݍPGnȒs+W!ko|w+./_8`𿫾o?'{%ed"dZR]ie!2$NP'Z$r~RF] i+ ) c)^=OQ'v@,1^Ed&7(4 ":arM2U$hi2; qUsaС{Cw5DxӞqmn] 7`Gu/zȹg^;ȭ57uD3)!.{߻oݧvůڧc}k֬Y:֏f׼U/zae_…+}=]{/|_}+W]wuҽ{{W^/h; `1@m0U,,xVra\iD#BʉEcF%}j $a7-%1D@NC vs$H9'""X8&.VKR9gI"괸6w}$-Uk1U O' P-D̒8'II i-5ؓc_W]uߧ(C9DBg{G_D;\iy7=y{Oy ۙ {_8pY.2]qZuF.7vC Q%U=}1vuk=]nTʥlj7O$p(9G #D.ԁ1Gajf( I"h\kQ3 /3*LLuX/6.6׫??k;l؞#saj*E Ij䜙Xa^YJ֩Mg ~Uzȉ?tsom} K)/"j~M7%/}ӟv·ˎ]R$?3 $cG*@tSw'"P7w, t!ԚΘ0D$.JzP# *@ð(Ü"'mZ[SmKbK|""8bR2+DYTIb@SjĒ81oILt3#Bnmx=O>F|Ke s… #Le(uu d34!NH.9k6H4,t׎| { 栊ꪛ']Gow_mm4@P;0q{20NPtD,-f5ZW Zʢ"!DĘ*3"ăBhp`2Ԥ[!"A9wƵwnj&҇yxZi'LO:NR7 B@5#J,)ޙ J8fF$5[T!3EYxNX.j-T9,"u\r)i&b)}e;guvM]qe~o^^tW-|[ˍ]b&z5`ac#l(CR/¥HaJgm [[܌5#KQL(LLᤈxzZA8, D{Y5H朌ڤ"$D`{"BJZ }ơ?)O}];hXL_; rr:M"Io"eeR%)^jRL+ p3 ywo\u#;민z|7c+<G?cқp/yD@`F@AfpUM ͝<#0ILT"#&0zSk@RVK) I3qL hof9xEJRÚHݵ7gH0KZCU#@Hg"T#z:w?}{aXUcN 2\,7D8 aM%%=b^ 0WZ^s /{ŗ_ouz6_}w=WwnasF K7y9 3CĚ\]; s)nF"Rr{R"0" <+Fi3Kv9`bni½ktZk89"wf&֡2-p#ѼRhRlGrCij==OJ9iuNݻl@:D$Έi$Du]to˫]}~?رz[tᩧ;qWg7 ;1N>a11QUdA ^RTHZ 6buHg~Sm)' 9@wkmU-Ϗ!K}xLjRܢ.. Hq aHk&-qDPZJ)X?gafndg^&BMUF*K""x22rلAD$H9"0 mD?G>?>68\7x㑷O?֯tOUͽH1qܵ.J#osUk@YH֦5@J!{8HPb!R̲ 7Oyi*3fZƦsF&YLB8igQ$_("7Onfw HCVij!Ls7<;;zޗGQvڿ)pz3Y-%fڛ [[!',D"">""N? i_~7ƿo|es`sY/?ԑG7~މ".[R.%+^@szwI;!K)3)1iZ&ٝaMDH㓌$03S%DX:' zo5^,4GC{bӎF0>MzR0qBR4ܲZW'=/xӏ<;މ%=d]õ2vtd2@O,uQEv$͉=4d3t0"Mm\c(E}> p[8A8a$mKR@hnagG_f@a0p$f"[:^r k7 '{Z 浓{a12ryD)I^m 63'.QjY,#pBHmZ6o1'Ryzaw븹9_U;o9ſu^?Gte b0Tm@ :!tWBpUڴO=Oݴ/=_M[ 7Lnw{rĥ_>]!vS`ܒ~>?(߁y m"iyc\1:XaD̲<"s XdNM1s5'"݃wn,\35"8ENmӔ!p5ӈLjj/mM Uv3w,&&srƾ:d24a"XbO yf‹Cr`?xο`}}7-y!8[/7^#is>06˗\r[(ᘪ!OAnGqI#Ac/|+#~Ktm0c׫U7K_ 'g卻n%a0Gnަ6.Rܼ-U f3=64|Y[@f"HIgK3#5UMIfvz.`#LCGf7k H9新"4"1:,waڦR@!1qQ2q#BJ6C&pDh5>%?{f.iztEVG 0a E:#wN䐩Rۨ@i" QIījԚ$}ww~ޫ_s=W_{큽{o}[>鲱O|u{>|7f 1g$ E`ne!<"D$n] M !\1LTJ-'A/#B< 9>J\Ĝ=#{3'X d1LsO?"TʰX 0S!QJYz֑Rߺy ឈRqkؓ Zt%Mi ylEʧԭk[J"\p>7u;O)}ӟVۦE[jڷwc~)~Aŗt AXj@g"ET)"܃T2L^y*a!Uw"iTka LƎY aSa ޻#K)%íuhOU"AW  ZfޛY R6# ͤ0 c+39(u"3!zD I͂DJ!i"NN4*b[mTM^ܱq^u|Î8bccCUu7?w9񤓞7>qȡD`(0ãAJEF6d ʹYA A`G7H"2RK)9jE" M)))MH$yppGS: 6 u6M]M$ f]hn;vV;8iM^\/xR.$MI hmZJkEJDj"{7'L @Cdl > XV}\Wƒ9>O>N}˙:g^wUw8Ytws׿tOxڣ~/uå fH7O{4ː◬q\Ĝ @>O'L;awwC3#RJ6"UeUc鐹.c9+><H-IاږԆa8 RlJJB0"ZWD"nnn6Ka=܉EX- z/ {rfZC@Tw@(2a۰Xro͵wu@3 25"RMK)̒Cuh[].}W瘟r衷o|?>ُyԹ{_|o?;ԙ02У}S^o?ⓟ9w<Hen!Wԃ=o@dXZ fb`@JZD.m͂m-="0R@&)c9"",9vppդ$'<\^nf Ĉ@pLbdF0lef1%4 S*)»z.^ݴi"D̜}$n96 7PEDdNݴ!ri}l*_y8я9?w{"b^w_?.wõWX802ú2bcɅ-ܐ  !qK $iru ij773mIkPLCdA̼J`dN2&#s]{D̸7Dfkb,E(R89BHTR̈́@6`La-30<Ԭ{}"$HW4i\kRJ)TRuk,PTѻ! ?n摝@ v8j¬:M ڥ&8,H~eO|N_p+V[[=^{//x#{|x瑷6 vZs}Kʹ4m% A殪iDf& w'0aHD{>ڧ %0 1( y"ж1"g$!!nR 3#δJF:,eXEx[f]9,,[nbC-E X̄y!FIzSg}KEd+?n8b)J:J0ɵ)2I2"ӑkC"@U{ZI[7&"XlZ=_w^{ߴwU^D[ٸ("n޿?S~Kz}ou9>.wGRمq ʩ3  i Mj˹%"vw3@ZPYDib)u an-T2];qinni40(D`$rНM#xժMkaawh[ZHE>i=O]vzUJ3ouX+`a hYSQDϏ & 0BDFsWwcBɻāX"aTIBD݇] _nT}g5Muz s!6wԗcA3b䧾q'AGx@[mwî-6^{Ɏgk?."1M$=H$\ Tf ٶ yt/y/-X ju7œO9xln.:,f)XOgzzKla 8"(b o)-܄@}1]:j/A%a110S]Ȭ")!|4M! Y9~-C[X+zoSC#<i?"RJ 6$!zkD\Kpn]܂<2-j[Luhw5ER它nگ}[_‹|}h箏;wfp.>x;ċz$W7:"4ƚiBf f :M- e6\0ô2`*) kT `ʜ ,=̭&D>ZDg\f0S)daEoMnz {7mi#LY`!#)5eצzޅ@q`K"uUY# S):fE%a OiJ-86D/:y`o?}S8;Y^J7~Fq3{\+o u٨Txfanڧr2ҮڻjO[[UXF RKa\LݦnfmL瓇 0Ēm\3"kSLNRfb&E'3\q4Kk} wBPq!Epnwۧ>qk=xaB8,갬,"T( pG] R #lO&f@FN0:d\1ڣMS=,)R$"ާY.ed^4)20\U}^}绞N;z._9o_4:"$ޛ2s.N4ԥ"\OS&1SN=YHPAJ]j00wA@x0=".BH,=J)R S{Lv1{6m'Z+2F,{oĔ{ZJ*DɏJOc7z}i]-c@hs.> vwwEW#B.dAȄan d =D\>]}[IO/7vy+ mmmc__Ĺ_zן}ޱcҶ!ja %ks6tk!$vBuE@E'rpoԊĥa So[C )>Dfa%SIhfjn\"Rik1&mDDmHALy7\ûvMa%Xw5yR zzZ@Rj)…XǩCww7pㄉT%E|<\Y73 *q di"R3"eW[}󛎩{m"4:E[_vGO SfP Gݝ#h6Bd0 1'69R $IqQ)B8b]{p ! D,i/B4>>N$D`NZtUFf R.>-W}m='%<֫N-v{SK/}cZ8YϹTBk9;@f#u; ! 1)SL;2yDLT$`ާ01 "uZ_>GW,̼^~;yחj"TdN6nmizTkn>t%Q!EJM?r֧n P%uǦf@Isb99$A"DG7JA$jfuQKa&.@LaHDnmDnnenc&pgd+Ųa- V7|O?rww W` *RDXQUE,0cC9,5˦ֻeF8 0mrvЍ{SM]Q:)CJ;Gl<Ц J76w}/W\ru0ۿonpʋ^C|(5kĴ3e", &3eLTTWsrW!O5FNie>[[ E0s۔mCݭIގwlY &K(H @nSXiʯz[M{W ErҸ8MÎ8]].0C#"Q~ %/ߺ Ts.ZH-mۻfu%LW=cǞ|}'qgߕmjk(SB>E(aTLf#l֒tr 57wbpB(lXp)'$uˍ a&ʿw.J8ǭDDWkS @&N#]5P]V̫{W[UǵkrgaȘZ@,AIgI;~_%" )hP=haBa`Bs zZG&ާH`zj8Ԓ7K'fD>**=X %0,H۳p]qÕW\zg.w?|ϘێSq7N8zл?_;\D[ӄɊ!$j&f2j PĔShckoZu"Z 1}fY:)ꪍ琡TbV pco4lK W$yD>b3P2[8)YXkueR!o=JB?6 t\{iW+ ]s/򵷿i!΀oC2pZ޷؊,Lަ K #@ju&ܨ;v\rWݫW5tqpȡzOưsW *3sUBP mrRny-5<6 Fz<B-(sL2$ dSe-ns65'yDLa)R5*Dg@nKu8Mt?15b$BSs<۹-!E,\H*t @^|Y R(R/RWnjbԳi#ҡ=Z2^x^)Hxm=>7֏=|\s?Wh޻w]r·rIKsk6>T mڧ->6aR*1HEd]8$"Dqj% !3S)37ÕEpEpp"d "v-PKɄ @ɩ+QA@nᐸDS8\HB\ w@*e'b<,}{g>:# }QG!H=܆:0T93z,5"q&*#fXR!UO@ͭ{6kw2T sv{~я9яӱǝ[U;] G= uMu#,gDn "X$ J-zj=ܤH <,RCLT1 "(̄D69cs ⒱'TfRi 700U]0J(iχMò̏$1wT%:&.&"l%Y 1;q?w)BPkCŌKz),L Z2nٴMA^*: FH@"%3"I0a)ܙ8NnTEC-U1AJqJZ')ן|ח| ?O{_p"ZEXnJa`K" BX& `vޒAGnX  ہ6`n:琷A2TJ"<0]լ9; B-Y3 xɧ|͓伏FB8`!<ER! aĜBYR"Ib)C@e"߼d7N8?x>iJпN8)x!/Cv{ki'tFM+B,u@3MRExZ712cۍNAHfZCX&ZMf@f"H̅EX bμuS'a$ M㚈Jݛmzuv]oU*D  K6A$elmkbv:".c-C7آ*1dK6@H^+UI*Jmu.c4S}ꭧ:F @da!an殉eD tIhO:3$1 H @G0jiѴw)2ׁ2pZ9k ZoiX9 ";DWdi!h0!tb SEj*Bޗr# 0b{w38mom,"\._y=7o{v=랺^HJDZ+XpB oLXam$)Vg@ H[SaS}cEuL HA2i@,~Z莮Xe $b8rD{6M(5_a<%"u=s&FI2 D^nKNꬿ&nThO/av3 WBtUpK191#}jHEM֚{p-dDֻY!̻4dAb@$R0|b:պNRɳ[nz_O{}?r"WwyUg_k=|ol[ݕ !]sc2?r,AT@6idG4Z!kfr,*zWWk\AD q:۴]=e,j 2vZ+fR-vV IDATIɮ3-K-V"qӪ% "rHu'=mO?+\-Wˍ "\UssRMmeǫ-WD +dxVᄃB3Y.2uԑa@&ny )T)"ʥ dS8E !13BUkME*Y7V%UT'u}}v/}#?3O>ԧ;Vէ{IO?s>)O+\~˸KuȓPCئi3 3*Z) ך'^/B0DA+J}ZN@0,< 1p ,/Rr#‰ج[F K@I"C,F3pFGG Xk&wSoSKuoe ssUG0M;^EZK]m;HjV깫r.ʈ$[7s)"ERFަ>M̀DDE̜ 2bnLpD@MS{IaԵG?/O{ݿ㎻s/bq>}~uR=p |i]|ށ= ["\$Y[wSHyO  ";"! ;!JeD@&553 ;]=aV9`b<MK ,ak򎇡{Ұs\Lf6ƤCqbu_yXfeN2Y1>S_Oґm/|qXC䘿ϴ5g'՚@DM L5C#M`v´$)"1Z$D"fۊԦI#=QRJ>~}])1WӮ3('UtE/L:%6fe⢚٘ա @DkÇ3mRp@tmri3E<c¬P8xs, 0: 9{\MLl{G 07њz $2lu川kZ4g0ԃHL?w1'~]n="ªo}-;vbt=87\o[F#%Mڧ&j5Y%Bs7p 7&4PavS&I'aH dÛs]=HqmM$峔TC{WN*Ob)B@0w#'z*jR2 q}r$^>#W!ڥbBGnpn.J@M ##AH)i4""%͝Vd6!r:8+4!E%өIG@~}dˑ߾emkpnhmE\qG[aܶ-ƒ9"j\c@ \k M11T æeLZ"<`-8P PB"b "$$YkNDfnAv0wW 5k}Ge%'\qÇe1c2p#f, "ZEԻZj9Xճ4! mZ9dX*=5Wnhp<%b68GL@m妑t#HAP<OڦYH6npFHG!x.NIٳjИ%D\JF*rѻY7=EJ02SZ8]}R?V q#$ms_fy9;mK誯{}bQw~۾z{?|cO8?Ӭ!W DD@TJ "aZ cu\,J0"I hС0[M݇qy:́Jr3OoyηǗ/88sy`Crէ$%fa $D0'&[B"*ZIӶ:9& wGB(:m)f$AJ~Ffc)Q p2mP?ٽkOig|\];>s tg<ΝeC8j]ѧ۞oX;ɿrϴ f2H0r3kmrsUYdǠyC&KZgfn:BflJ >09 s Dl8g"5p;"{c4S1MDfX`R w4u *0xҾ{}Ӎ<EIƊã-7?`fێy_~{ˎa=Ry""57Ba EܠZU͍q; ѧ<.)\6K"[nEXzeox, z 4MY~媃o}1s95ʾ;vJxJOEX[iPñjA ^x̒Hq:hHG.5h$ZJ$ #מ~K_~BDE (ZNFT9H(UDS D7ӬwW%30QDdG8^$W4 L]!B-XO3Q#{ؼ9GsY%_s#BfNg?eӟqjֶߺ)OӟZ߱cXd]ὀ⟃nΥaA\ a=Ù%<+!Zi~!5'@Z'$YDH9Ʌ g"yڒ2Mksg}i쵯{N RgD[nyʋ_|-_ZkƱtg^s{zٟRAjLY=-Iãp>(y&:M; 0@BPfȒwKJ]qF{xGM+ih7FpbZ !'ƄfIʟY$aBNpӞ;w&sB0F^ٳET DHE5̔pm={~3+WZs)CYU:Ԅ JgLJ,,\9=ݼ+%&4-WaB}2mPjEt7c}X1@SvQp@LC]ÿ>;;\!~?%^X׶)DҲeyrǗ.aDdiFbBn̙E"0UR,!d6U( sJ@ꖯCO8af!")Cô\n>/U"eR;>뤓+. sZ|w\}ێ:걼.jt^{v}<2D^ƾZ}E{o!-X*sԂ(̥I+ #OFiZ65"ab$% T{[MR@}&" BȮp5"6m+1ZWՒid+Yr5`"ED !#D:2Zje. qRo?۽k8qIo7MPz'0$u@[q@fa 55|@P6["9 aˆ[70GPՈ`&7@)Rp5ˇݣqX ܹ0[ݳgߕ#GpjO!n `n֜OÉ eauQHKD'9nnbx>H,uŒ,$BA,Rvk>뿢e.kaZn+wlRz__9g~r8h"fs"[װpL) 1T$"0"u$[_*10H?1Fڢ0ZS[~⃷s-z)n}{_`X,?D{}O/;.\>,{Z?쓐65,K[V h\=O- R0wa::>&HJ!e=p̫+3P, RtnʢD+uS3Pwsd>TA=jHfZ.7ii&HdW,+LLi< D "ZK ަi5 LU; DdZrK"!Ecg&FlC;hw&mwG"d0K$cxaD$ΰRjMLz mk۷/g|&g}}/'em-Ղ׶׽_?%'Gf́fyoƄdv>M@0E"#%"=Du\2 Eӕ!K{An`@% TU[33 \xqVn="aaӫ" $\J2i,"bq@"sw"wj[>{7oc q2Zj tݺm>@̗edf*Jl\2Ǚ00ϸkC א8}`EL b3E$,w7Ӥg>,qÇnZjA $mћ`*DHZ6I8ͳ&c #r$a k R+'–MݥM 77Ͷm ԭ'(0۷ҵPja4WT"gj)pp"p "*:2R#M-,qӿ[1HB5T. ,Jhi*׈BU(1I0UbܴVD\*JD"沅cD@gbFmf, ƺWs?o }󮃏wA'"bSOo."/H" q[/: y?tDd3[&wA܀pf@(IB ɠ6rbvi hC)IQ/&*!Ie@dj\.!%/6Qۜ@{/r? e0ZZk)UjAj}kNO0N ~U)79vۊ 1gʗR0DSxlwMdd/|:DFj)Rjxw @mks%g)<7AknoY_x+_yٕWM73߶+Zt3ƭ=>؟{rٍDmz2Bgt%Ч8s3kIf/jnՈ-rK 3J]HP+0cd1[r HE(g~!TI~!Q%"kp i$:ێy57pa۶|_h=\nh^oR`9r@Rkw^'?9'|`1sֳL#{ie !4GlZBhmLX<#b@]8k]͍S`k+x[o矓=tr3iL|b_.?|@ݻvv[1|j}ydCۊ!`}5M`=-{΢>UiF@jFL2DIyZ2 %Jl8p}|D~b~^u'&a6SG޻o:Ozֳ3lɋ5USu5g,VY=H!O?‡{o=hF"&j*4YG%i>.Y3u7 '3N[#AO֗B lS&'f &0L"J$4QFVUI7c0kupZŬ\K09d:)Dd305!\m^fIuuUDmER)ba <"Ք궚m=1`mڳR  лU1ll浵m1]"F4iOg1 bK R_Ģm]Cô5J\򖄈dK'UzDLP`K)⑺y=4MG6"2,v^}_艺_[?\tuG? ? pΝo?O+L%r)>(X߱}_'3xx<1ӗ.⪥p%YKy3ѭP3l!"D"$L@'"o&s쪫'A{7s@L[KyB us&mSԡ&$לWN\B$&0T2l'ⴡ jsĜ ;gbҴ\i1EPE"lu&x٤VKP GX1eD "BL41b`1 םaԦI[p."R6[`rHm!fDo>LLNڕeڴ!"{duYd|~E`V:d!fdfoCPB ~Y8{tаueX[GFkaH(j0?!!ewm69 )81g 12&a)jͫYtu" R2)"ޥ0fKX]#V $F@ꓭ,C;= `q- COx;[ I)0Y P7aA"U2aƌ̂es/"BX 0ZWNRԳ̃$x{kfjfMq^9bZD $ 6$@!.RM5w2jvW|Y^}itF[kO8z՟:{mT92(njbq1<}ɧq]O"7mRraicõaͺ3dA q)R +}Z!PJzu V-ID*R @ "cϧ% WbnXK`1T F’J@מ^Ki*| Ts磶ZWf:ן gA$a2 Tj)ËjaB\Oyf# 4m7D 3g&0St%5cG E~葃VK t>-kyۭwy'FcEPw}Ϋ{hΪs^ߵ{k="W!\VQ %( CK[UװF吶[۲H $$r#'$'$?̵ӗ:FwA<2;K}-wsر<ԼGϴǍ7+È,h 9@>|:{Û9}{tƸfz-e^,,{&Dηu @LR`fNiJ\H9Cbv!O ! KU$ax?Zo:x_}?|-N9U=tzkoD-RHy#K|әo;ہn߈ j}&f֒H~%k>ͺ> < LBH-;9Q"L)߳ qs#LKH0;02 I^{ySu]@!iOvѦc==?|Dew.\a8/?9~Ǯs% XɎx iRn0J1m﬷v܍6Sd"u|Bo(nlBHE0;r`V@Ir"qR)™C=>o3[o?rέG)"-,@~^d%<)g1ll0}_C>3oE\]ưZY6 FBa`d3'D(B{xGnisX*b-fEL+ph!)/Tsun}y#"O;yH3K 9$`!-6OV>H$=BDeq5a*Z@`q.խzrw&.x4g?#ZyZC:`PUwm ;;@)0 H Le@DȎ$`dn u']?CI/"fGrQ 2Y޽]_?ϼ}KN{ԧ.=٧ڧzXm[y;ջ8L'Or7O}~Yo%<2?G7Ba͝%9TsQF @N  rzs̚HVRiֵF- `31#xg'nzE\8Z==`Z6M[qLzrӱofw^yŰg1|2>ֱcopjHΕgQ] /XX"T%KI3<2q3pGcxd;#w(Hȋ,RJq=Φ\aw+@1bPwjq|H}K>~dz/gX+QDEg{D bޭ#!0"G.@%(m=S)?TcSfH,NYNʁ 0 z6DҺ"+rHB @x]/~;| ?<:55bj=EUh覆jwOfӦ c0B'Cp2(9݁<%*EU[k^JQ"v@Bpdµ[unT:qM7~O;~__tw "xyxλo,0lzfHGƉ{_o}+^y/9y}z%ݬUgw_h7ll0vv@ 0ni^+s%Fyes'@>޵s`B~p>CR " E)^oo#̽D@̒MV+bB0"(EE%aL{)z:G,{^k7 {FD)؍r 0dRDZs#)Y'Onq37g ~=][[wD[ .{ֳyI3!չQewNn]}yzAz.^rYƒDX3{8͐=K|Z{™F wP)*BHLAsу׵[0P2cW3upL~Z&fx/ 8-#Z*,Z`bUAJ37fpCbw)DhkàE"WY!j;SC2("(1DY 3Rfk!82ޭ5 @p֬[4Km^f,,H)D1X$RX1DsZ!Qr*O9ʻox[}.\{U>]עHZi&fI-jCV.^>ox (qýϵbթsϞp1!k"DE(PdFah@jY|S À6[M/<') XOsQm:)EU=Yau8y/ma4Mڰg_ئLm`3ku+]Ur,[0)"w7Ut1=nnݭ1#@X0[E K yVaQe2b`8&ZDR<W$|㗾x䒋;gD#bܳ zJx얣Amrpv$B޽߼?}3_ګwz)o댘YC EVTU@xމna޵8 av#zAظtA66a5&n5jL)hXUY#fdAFUH"Ta{կXO_셸n=;Ep E1^ >A?QV NU@iչy[;SoZSFkmڙ{YPV Q$)ybaiuꃔ#aϭMUEU&AZ.P TLyԶnw_t|ϼ]}Ga3{N;}=_NHv|c^IȖ^G}|#|ѯ_q9Z,EAZs!SrөJ,8q3e!"@t $E&@lYa@Jw"!QyqA'7cs=,"E+h̄da=ٟs߻;, ))ێ$mgg]}/Nr2 +anug -.sJw=QLȢEJ:$w1e!Lb>\0޻yȗex#}5v٥G/Lw"&$ G02BbOޛ*ePXom mz'2ZjdrB"RkMTUf-zO?B@ѡ@X|gdksP֯'sozg>K>Ec~#[qhEՠ`j-n`zB[S_7~zZ ̅0<17op2וVFK\UX̣f>\D2;[:H y=Gڈ:1,v*070~IK)sQѦ5a %P_Sա `ir3[ru2F<[rȄd!<081B"{k5{G$W !к[f=PHX04~󁝓'f2E'sסd:#ץ"@o͐y\ =>?W»_po'#WnnmwֻYaF'XuĔY)N^i=M`k:*avD8s)Cl9eDA$"n{ bû/nu d޻~a&|^{=x0fX+91{d933R1zwVu7$7 w"5Ht! z3Q#YC BZ(08d;2K9!d"҈$1dΑ½ :EMf@@Ī@"d{j߾7\rU|k_oSDx}]x;뽷~#ɯOog.K VT,E+8{X Z2")kR^3Sz-`#D bf-8pw[r:7Z‹@$a7 L@k\Ƹ!w."C+)mۀH}~7,iAd-^DUՌH:-C>WzZ֢5?Oz{ ` L0,JIG aof(̬p4"zq:Ca5aVK {o['N{#½F7n噧K9zر{>x6`9ox+.۴!#XmI6yDjt_SwvXX;;nofVZB@iٺH BiFZM%"EZ'\|VY[6WL8סY<{(/HALnZz17 Ӣy"YOݿoe1xe@zxkɓNY[~(HG}IYEikgN.ezDD2,m@8 U.lmZYP"*8܉ٛCȄLXr8(瑴 ) 6ĉ[ow&"|p{>+XN 1"PpkLƪmsex+[/α7~thֳQki)06hlֺ"% m^W IMW9Ƅ{:Pܺ2 BjZ: a52˼^[3b]܏ag>oǟ𩧪,m@umkBW+fMBF4[nzmD6W̄IE{<,%lf Vpd4w@ATDv>"["aB\ RX#,lD2#.-C}{|#~7÷1"-?_eJe'R&.֭3SW}Oʿ˾y j24{}[nUZQ٭$>q )dH[k_(xy߿֍MbfB+ ,$_#"neG.8Ε8/z2a {Y>ka:(2/2xXpf!DœZct^$|v?qNvuk9'kqCfNuH/wo6gXпZT}͗~;/OM'ig{'FVɬ#nPxcat "wvjm"qc2D sHZksdV0ˌ dFa("zg~,Ykn>Vfi'8VTz`" 9m#`8Z -4v+6Bopp w#̾:@0#Ġ\ЌndR:30ss s1zmX jRDA6 GH;!hHb6D0.DWCQΦ2Dpˋ%"Uٸo~?'_ĹO>n׿3ZyaYL q$6WP,`k=Я} Ըw_I)bd&Fݺnu$Ңfj0N"H:Yz-K{'R H[uF$(Jscq!T-7]tAYm Ofh꼶ވI0εE"XTD"zoiM٬#> H,'J 4AK7w!^?dKTais8dY/V7Ū[t5 s>_Gi:/xU?lpȖ|bhhZ]\՞>|?/ =$HhB$x5DskMDz^H:%y}κ['BF($%}@& 'bbM~W(NK|D$eT,$R*#/{c`ygKw|ώ" @7kNH8RtвrܭgaK7쾀HS5*ZTչ0$ ; LiY\ ,Vak̈[f)VdW@q @1,"g$(2)"πu%@sl<H7SW~uػC7xoD8N{ow]'}0 |O\p\d$Fs{ zk=:|Շj빯k02͔ CDZVZl&$fVh+2juLE h{=w&\<ISk5}@2nAXde `&L%tAAs=w[@:RJx0H4 868ҢNh0}ý{-Y$ |} 1 B[(Uf:L&> <8PD,1"eEͣlzk-(#g D^8-͍a\|s%w㽿{ocD'q\{O "0P97лj! w7a*E΍̭So-),3dΐ(z@EnbP[׍h}]\}8)O~/{s#wyNOyԣOaܳ£wcάn-q, K'&ɤԺy͗~OCklspy 449ARϭ5Qũv멛0MA@䬖KI"fnwB5;{F1,?ooOr[@|r嗰֗Dg>bWSfu/{aPk}3gco|iH$B2ѽ5 !$nD'ش/L24rQ$&dam6-c4 kZzZYo}AQ.)/H|ᒜp6ooyάа7K_7SѽZ dV]HXT2IGHӵ53LyO<0@f>NSn݌jnH,9ppk c0)I)eT)ŵ ޭSd:/G脻b"G;^?K.w,<͵ w.Fc$ ŰF,lVl)-)-K. QKJr%$@I sr;9ךKΝrtcQDjqs<Dh=|>!IDK)֊^ucoG|?9qQR L88y]#k"L{&Цẁ #`޻*F?I 4@g)̒*1#bLNH$,RXj D"V.0J =A}M(R3鮪Y:z%TN8,f*ɌyRPJ5mZ,`jH(pFe< E !"ۄׄClfHf1#2"l򜛲 a*n١ԗ*d4QC }W>[8ygy+>GDx.wq-$,π@.6ZJ*y^TsYO],3W^u^C'9ʋGea# "\ BMtfUg3'\4]!]YHhԑ3R #ϲ,O9pu>IMMz6[ 1f"X?xȑ/7矼ڗ{ηeuK.$﹯i̼zյ)ˋdd5UŒwS橰CpgWk?}V}")΀,Dlm"Qk!bM]E 6fΉ[W@ILB.y1sbĺb q%|ό>MRR)v*EL묳^uC@T ԺeZtaXpȦ8Łjw͇~<{Xݓ]-?bFb*BD@p uHe;.MgIy .ك! 1ï2L\JY:,j c&h:{ĥ΍[-?1|cw*ZMMIE $Y1k} mew#q)ԚߎurEs֛r8t[{2,Or=W{mD.3 4H#z=^D0c*+8v3GǓ'ws0a@{0촞} }1wvv) ԈT uBH0 <;z>Xq&ap3MPB[cf;T1OOÇ|w.i2_$̶Onb1dʳN,66U{JP) SUdR!!Z aXnnc%y5Y'C'aD\2,p\7wg*ajhq &w"Ƀ.PӨiq̐w2_$"9\-eFϬX3y^"|Yon{3?}װ`;nucwwç.Fb|dO { Yb"nw⋎o~+7[ug&n٬*C sb,U IPF@a$-]Y(ݸ"Hɖ RXj0#7fN}2t툄}si{y~?ʵF.%8H?ё>z7wckk^)"jg~_|;R@F435cSJ&K)a866#D@ aH>lRZK),wEXd"#a& f@)GlhnYa\$ȌEĉ||܍v쾣w9?iSNy)|g2Lݺ{~ YKfX,Y`ϻY,G<3_W_u+_YC<Ã#"2X!{dv3LS31$S&͓0qۭ ] O~q\ѴbBJH911 IP Epwe*d,6抛wO T #0DaMJ>]s 07%6TS%I,\ưi"pd] 1f8-#Tʹ\g;L$-|Wg~m'Yz_u&~j./6"tl2ϩFDp-Ǐ>y9os)bbiq5 %iMQ* RUD,_CDD${@H|(j%nL,B*sX" `ڻMA1au'=\aM)& @J}j:}{۟ݷ~;뵯XIU9Og}^CD5i̠N!alR-R " ̦R9RC4T.N$PYt#zv @ (.J\BD`Ѱyw7}=Y?O "j\O/)==5q`` ü I> <&OE[{?Ͼ3}{ӧ6ٓr_@lsI/ys@d^@NHb<0VD-[BŹ[X`S! S8_3L!RJF®HP<ŊppSPE'P bA!pz`EDdHUiHpGDDN4u"x(V!?oxϿc.Zi 0SrO}UY," y7qf  r߾[.֏s6XpN"g`5;HwƱaĜpΎ1KM n 8qw, pjZfD0 C./fi~f%&?=#9A@̈,LucM78N;;;CXF3acsm0K{i ID: z,e\`n|637W"l4)K@|'RKƆ@Ae!5WXPӠaMoڛkGdB"ȧ}ƃ Habݠ6=y .f.>g˹]HU X,n ͉#<23D\)Ol뉊DJucӴ7/KK}Lj]ٻGJ֧6 KL7{ &YR . jJos#Ĵi*E"EjK$nSssf aP7ԉ9M2TbaX [^/fS#@ 2V왧?_G0f̎c=BM iΤR6WuwsWH,{W PeN8QilL[!Y SjfaaAp3BB")Y過Dz^Vjkppv #1qj`z#v,$3'w4/PKֻNkئKu!ɴ]#Rwykŏ3}/+%r$ N0qXv $ 놄R&Hs/}_ԧx榝 轫vw<6{' 1),뵛sF"0"払&@MKð("B$Ύ&"<Y? $λ,g-8l3ۧ[kN9g`cc~=uK\y-ZkHnBHf"I(juc@ZdĕAJ H!)nE JSV;;a"\DLtض1A&qWc zt+<1IiLD Nӈn"1;%Jwѧ??oۿ|'O־}9Ͼ}EjfMLdf[HTHqj }wk?x?G}0&U#r)uȩ+)+Df}ji@HzvkZ0KEp={D}%E ͵2LUz!tkHPP:34Wn)S IDATH,k=mrE찻&CD*a"Yo^"J&2ӑeX,76am\YDYO= ]ij!"'33ȠmVۂ,uQz&s pS7wTԊu(uPLI4fTIۄ(HdDLYv3ur?9t&:r׃?y;0$)yB@̌z"B j\"̬yM7}>|/ؿ<"ʰXllF~RJbIJֻ[~LM!~t}qf7NԚHB3oN[RkLaNv슈[B\NՍW\*u@<] 0Ox~C6U ,&ٟ*GrD [#]wg ⤋ȅ2:GBXд1,2n7"=H泰CL"JWD\k&[:-ܺm It#ۮֈĀn DN!Œr!i]lm Wc0"T Kd,,TZ’P0$ 4 {wI4o qS~߾N9%w JnȀ "i:?[?|DWzEGn2a aIƑ"rZ͍V9[ Ј="=WN"A>2T4,*3J-j $Zj齻kjRi-AJP*1'^H* "p;no/{_؞7~s@D /?KG\DXdy.L=X#,pf껅+aaƵm\O{lE#&,R˺XnMJ-DX!ZHDnrBd77Se^b,n6W$;bkO0D}kwmi74R[[q23P=L,Tb wwYi6bHϰ(\ vM+{HO>#r3湌)NsK3D#xg H[ "PJH$H46.7D_z7\u unc aC=I?i@ē'N<#Hr! Y Y;PY~/$1mX, #1 GD @:qo$y$9$L7O3 ta\땻 C@ tH}To m^k7HLh̛k51#Vs#R޴84fV .\H.StU :$ @eia,3 VxJTn:#&}*X93~N;mB{`w> ⻾뚿3^,v0AJA%{Fp@4|`Bc{7?;_t#r 3rI # 4!@{ 7U5伙ghX))2@vvvvvvBK5B5 -$w w<#(Kg52qX2SFBfm @H}yMę U [iNڴFR"L>Ga&#l,K-)L9r9`DP5@k BX0p%X`VR0p ޺Bz\+ƛq#&RAjoKٟXnnu{?|mwj䎏}tĉRk@sDh+WԐR ]5q=`Re)Y|%!i/zI],o&̥2%s`֤m̼fp: Q5‰waa0ZrѦƵ 0ΉܥbuEp#ig^W>^cARr{"wЧ~ԯ2L?>]: P{mg=n@ Nll)%fnbs ɇJ-mw Bpަ&Xa(u@Rd dlCF\D#c}rmAM ER N8y}j'C ps矸/=ܳeK/$UدGD{mkyg~.Jq@jT$b6qJy- bDͽiB}G?' |˥uu.7M+V_zX3,ub:#3ayfVk J,]@)}jJ=: ,Eb*3v$#EנPoԧLyψhv~jgaVl Ϗv nމBKLa4T0G>G/E"`!NS^vv4 3%'Qyj:6u[W4}sl4A", !!LbN- ; oඓ_xȩ>CW.sݧ=g<7~Sucs K)Z.",! D1N {nO|lX>䝇wܵ+ZaI=ZGF8dm % ke`"ާș0{X DS#))HSK-,6DvS5eX>9ϽN2,|0&ŴiK$D`LD.{K[dE`Pq> # G 3@H$V;>u$PLv_} \=S:fP$ԫ)yfyd`E37aI5+ShDXRCզƌĔ{ywq{?c|q1Df/TF k`BDĥST%u$f yoOSI/x/}(K$!3w$)!(]YXR¡MBRX 8W} w $@զmZ!Q.DdnU)KIlen{R}GԚ]})NĽψ@0 fjj-<>o׿oxݽ7G==~w^C{z\g>*;d!B듛0nE|0n[bq5YAzy{WoO{Yn֧՚!Ͳs ͣu5.r!7n6ǜ"ݔd A=*Zk :'aâab p@^,~g n C | y~,?W>n 2H3]d֧pC"w̟IɪcDn{&\ugg=62J=~pKxˡg< 7}wckϞ{<{.67un NELbcFd$#HT \ѿx vmW^$Rwfy&wkČkSN Ù &J=нOZ \Z"aqj Q7ˊ7)Rcz\[+>5MCSsZ[j b0d {n)pGa$5OkZiEXD<@j#)<;kmPEdiL䪅@ =l !3Ha0"*ER۾ܳO$gjM)yb)ԹunaQK,]=L{9'9o߿\ _'"4M?9mCW_UKp& ("+r6:ed6" SH9?#ГG@{|[&na!0LG7)!R0+6Б֫j\Ӹ\Yjԛj4eH-ܳk~N}-_>ѺhT5UMB` Ǽe\}U[o3c)[rqD1z>Mc?nWԁfhU3o ĵio4^T).3lJpf\,,F Rk) 1H$""$e({ !pM@*b$D80s:Nnf7a*E=oޗ? ;U?pcar~ݭo]8l,#jg.A,NdHs+S"IN1tg~=yȑSSz̭NB.ĦݴcDؽuDt*48/vu^H,g@2$!̃~`Sqg>ayPu@RbYSaR̔vKV{w@DY[ÈR# n> i]{&zI93(,'⮊ s ̵ ]CZC2 R=EJaH=!ݻ/~׼]8O؇?`03u*_{8'1S֍Qa~! G98eikЇ=_vM;۞Q.vCݙ c8X޺"%1o(e`-0vV'׫m"w)LșؚN]\{S< O8^@ғ,ݺ8{PGpoJ12ÈLP" ^fM:"mfhnRHœߤ&Wm/e91))e/ .<0: pMYŀ 'HEH0$`jL-yAqmEHi{[J׼NU?𶷾W>w_-z~g<+‘5Ĕy{ R a+ȺWȥelYItήÞ=|֣{ïv5_ٓ YM"R|ָzq0m=YĄS[שּׂu Q1ڴ?E @Z %03Q =fn9eO{gZre˽{BU;1DFBqXaW]َaze2nIPt\ bڍY0 kEf",̑8҄;#Lkg! "\Rkf,,ðDI@y& ;_a&Zq{m@hA  |6,ڰCxO^weQ䁟GUG>яozgfr €LA$ PwH r\s fQ(vܻs-zϽ3W'QJikk=sM\EDpeX&4 )< Y֛ .\ E)@RK\%:tnDłv ps-\~>]F:N p2C'fֺ#bQdX !B!ԏ=viW328‪ʴK0c!b.(`UODY7o2V+]"RJEbWOcn!"qe(uTadl&t뽫'Ӧ1^LMwFrReX?v/w^?^8 ax_$\.3?]W CsȀ.$D_ɭw8 kl&kY7b"pOn_/}cVK,v̚f Yj] rvAԭoF>Eƾ TŰXR6 c}/r/!sksTRrU֏_*ܕLԵw+KKش7{:NZұDu!ǩyK!aaQzon DRKrDJ oᰏ&"HDJ"`&)YfR8sZ7 ,yTU IlfPZ#3؀$P|_~Q[hUUA dc$@ p{=={ ^W-N圽Z= :7A4KȲ\zSw;<7~뮿NSV`f{7W\ b֟mP{zQJ@@dN$`.fokw#GWr| Xp$Ԓ[EW6z$Z\+,}j:TY(GY2k8zO AH͉$w֎Z_7@CB3$QE")"D&M)Rs@2c)UHMVDJEXJ]B,3p`zqrnV YR )F Uum&5U) ,DE*X\2xHiZa!pdȉŴ23fr'U29U@ !zD2Hi{ߓ^߮w%e|O7궛b~h IDATO:v$7ZpN6 $QwH|!BL(fh}u>OǞ~}sO'e(i w"NqzݧH:&. u\7°B!C0%ST\ b1qY@sΜwijRjAakn~k =<AR JMWGuÝ\a9K `)BªݵnFL5"IH,u=M][RMͽk>)`$"J,`'"@ج7;ͦ;0* ;ED&s2T!I{lV:7r8r?|CmG{?wz=7~)t93TDȜOOU Dr*r4>A`D5D1f:"0ƫror_#[ZXz0LH6K fv caJlmjzWd$LxR,OUiGbmn X8׫mz)z]罿S]>u 0yN_cˆh=P@@bnh^E;C QcԶH(@*S7(2@"aHXǰZrk)"Ƅ5;fPYJ>iECj63L2T!`$.""DMm0 v6[lC)Et}c˿X~V!86J@֓w+O?,H`jH;"Ŭc#өDkMu;ύ.3Si]gznx'~=|xc>sU'?=qGS.R Ό\EÒXݽ}G?/~3^oBl#Oa:'=k{:s:pĩG::MSh# B,tf)TH(A˧gN)D2j Eg1e R`w mS#Z 7HCQT1$[b.ca!u(SyKt0tx5E_<ù{zc7 ̹i;C:Ԍ 6֤A״1$rVHZ~ Ce*2 }ƿOӉR!8 7mpY+EJ)HͯCYϜ 2ZP i֚u(,% S)hsoy{7nwYm~O;՟i3;tn;W^Qc16t]#^FrȺ.5*(E$D@7Z !BP27eN|z޹cדּ>v[ #Y0NӤ84#&&Sq6U%FAijn"ZJgЯOSsOՄhey'Ns2S?3&v0sU=_4;;;=~GNxJmRGDZJADnfᮭπD@)K-m#&5-"\Dn.S=@ "lڭw$Pn@!Sj=m "޷H 2!-E3n{͐ Y26a~7W=a{Г\\SVG>rK9""0Z1L{G\p/`~b"“fyL[```& K[#G8v'|cuD$7oٛLe\HwwsB,jYtJ s2K:$ C P2E7⃗/r1]w93R+3UK,!1'i`DZ,X]B xgS 85Wx7ހõ|s!2Qomv! *eH6-!`pf)V@6kS*! &dAP ˟jBjډ\UuCdZrG]&{#$p: RJ_!{kanL~ KgZ ƧCdB@dTl(KchiI|<p&*YRG@V޻'( gXza*\8.#ykK! VO>^z]o^b{ }f#DDHDRdCX"!=l=3.ElfÞǮïs~UxU'>>=Mj9=3oE0f*"EKar2!,YyBsR 27SD$ůMpͽ\ۊź>~?g{ 4@x:yF-í  E@D7\^OS@yD7;D""WH$D?W5s@*zc!BF޵mZԪO{o}gg$7B I_n{`gH|9H4$fU0&s\QDHzanM|n;KpfY-trWK%n^ɓ짾nw_[t[iN^>zɛn*[[4M-̈#D<JG BYO;ۛ1%& Dw Pj 2DW: ;S;aN[H"f:mrB 6Ţ @9"d$PR[t0a v@p1*L:y:Ȁ]S3 &f@%ΏnrLḀԄиS>GbX@J1dšGĴY"8Rꈜp*oRJ!&جVNL檭{WmN,u(>u~wcs?+E3և<솭}蟾ZSX{۟.ENw`GxZ9 iνc8J$@]#4۳vu}:O/:.L:q@O15R sI%]YaiBr@RK-2N.Lel)-fou˱'5pA{|?1t"#qbך[.KwC!,fL!B,D'~?wU/꡻ ̥,!bWH]7Oz=M a 98fzD+v$Ftu!$B,!\0ͿijYw~w<;nrsSGZa\-p.\Kw{d. $HyfBi:[3 2m^j8'fJa( ћbt>mPsȱt}ub)BTH1m][4 [k 45D0"$+ :z~Osa>Gu۾nw/aD WfvW`ٕueD pOzxD =b䁹G @Ch鲏|u~}ݣ%ۄ4DzMIIE95ՆPK6u5B\eyo= 6W\m<}K_#2nflΕ@Ӽ2k>%>n7۷_M5>;#nn̖kx!b:nm1 #s*y3w5nMzKw.$sGC65= 䈰wm=(T UuE etktS"HOO=3qK._H_3{ڧqc^!\])>m"@" wCOh#[4BٵT{H( p}.}_=_y]foS#aͳ>*"@ Kl"R'=B'I8$ V RC}Q"[ aa\ZjU'> Bӝ|&%b.{~ufu#̺H;lK\ Dx`^AuV8 vq/|mþoW>}:!x),A`bw9Pj%b"ZaQKYl-2b ;fXJ{۬H"5ϊdQ<wYLC}du南X!31LX9Ю5z"/of*$#ޭ7 pfiIMߪ̰R:.Hڔ tlFsELm x0"y^+ O܍`jsloF@": >y /{}:v˰7պ~sǯzCwO骏s$Bs&䝜qBTw7i$|[[Lꯘ;$IBwN|],zOij{{W}z8ee432_ea35]X;%ʼnO).,[ R( r| `"$Ej)JCX;pP=d]- n^iذkf3r}Vn{lZZJ"~H k7^ "#'MC8fZh 3gPx2m1 D:T>eg1Do|yy7/=|8LfTr>W9w}߶~M;+~a],EaQbfP `@D-5 T5F0Y1;BfI Dݙ'+jERlz` כPKj#0LiggHRV]J ^u+M/|2IyD2 )X&a:ynp'uO]. dsrG7>u"T3bbw s♶j}LPj],1n--(jX0APEnV6Wl^sHR+B(C&5Dk+')k2jju&O75[[< kN{}UW/eij| xO]B2D:fF JD3:o D, c 6ه3*X?~?\ u8'~z iJnӗF"PPơZJ)] Hn)aLxekmlF-HXAʀi<XƁfTk۬VH5ڧ!F)uFpp פRq0p=\7ڻSjM, AW7KL"L'7]GLyH)uIz3mS-R);煥EaY聽$3>m6'V ,BE r^w~ue>=굯~m?a\?'}af]pGZ!u!Ǐy_X'H,dDȴL{NO!4@P E"7ڲi0"S5̵5ϜS "$BJ8.2!jVb"K'x]J Gt׫|HaMMfGAD*:Sn{}2\ 4H8gf@ڵwF- |ԯ~^sS~8x[(H%0/[Rw'YEzW9H.7KPI{#R g8'3ozi]~[;vg.'6#<n1{DĹh%!94]uCg>{],?[n^VADy2J`B,4 J\ KMң%D C3t5yn9fd&GR }bR%ڴi)u#ٴ8WVB,%]~ߴo9|Cg{=}ZkL D${YPk'8psSkmKt)B,؋F2 Ud:`6aNޣ1{0<,@!'rf28 [R[z ˥#Y8xhSw) 5RLڻZ2ykDl&J@T{fa10Dg`%C-<UѽwW!:r(ULmz^֋gFpOc{Dl;UZ7 zu.DFzKLBКz{W|%3U!EL{n!ԥ$saj4yzzX# tD0S,Œ558uH}j&Ě\Iy'"${ΉvI_O_Sǽۭo_Cl” I)g+#$ՀHpq]005EaX @Z+E6}4*ѣ%zΎZYyvuX&` s " \{ P@JC3Q# ",P,S4p曞wsyڞ:.<'߿7?С݋,aTO)1۴i>\TͥPմmę{Y@A1w!df,E,R*[kRB$6Yb)E#JaB^hwNzu`!F$hL{Rl'1]AS@^ @hz'&!,b{,!BM=QC,Rmڸ5*W֞[3s۬wXrZz}Eȵb **f=Ch]wi{6qBy?L XO Y,Ƥt˰,(=cMRJITn8,J zG092=v;V;Owv9gf$0 wx?83{vYzm8Q@83TB {"fR y̥Y[ 1>"8?x3=0o>vp;t UGA,&tU0B0Stj\* SNى8`W"5F &X. "y7ko8vt\i7(:#"SOeja LgK"eG`Y8 A$03HJVԨb9@4s)0\Ji3+ddYbˎ$LDܬ XX,|@p@&ilR8a`Q0K[nY̔]Eg @ ػnXv"\F@i'ÕCME]=RU ԒAH8.k޵Z6Lˆ $d}ڬB S!!fFq:MN,ni[eStkjJfQ> PvkΔḀ.fUZ w]m?|kď9_}}{/)E`jH蘇"s 04ZC*BrlL"։=`Igi ~ӭw.w%\ ]<\̼7%a`FH*i,g/  L&Bl\Z3 H#r { !֑OHLBaSou5zJs1,xnM)C/ c#I-e671mRA͢cM0TZ9@kaBXPe7@zkbtT*!5g=K~u/DK#puB1ϲ<"2So=o_Gi@ :|zo+"vN79/ҿ;guYS DZIu*HTjk.?y{xۮwtsε>vInnBh!h)6(bSR@Q'(` X)JШ`iT&$$777Zs1c7Zk}Vaof}j܅ msUqppR0sHmÃ1p3%mf"nݝB?q׿vX~P{4GvDn$pS}D$4LD\VznHt݅ #c 6"ى7I.`;vubtP^zG;/hA܀=倻0YZK.V/o_mo잛i 'v3!nCkq8zV;TX սU1' KPAbD0Y@+"бӧoӅM9eڃ0H€!/ptp,̈́9B0E55V[)2-Jui&0X}C[/N&6IaTP݈A հDWrJ!h%6HiH8]%K~, Ұww_-¹hB7Cfn8VΟ__~8}/ϼCu d[9Zoø S`vRh kr<D/!t3^YSAFiu۞_???ş:veR@ : <ݬ0tD{r;TuBG:盪; # WZ\8w3={O3m] ]z0?!nI]&0sS}<}%jjpwtF&Dg߸2rZHkӎ  6VݬM:m=@Nݠͳ)[]8dDN@Vǒzp͉<$$HܡL[`d\9T%-4 Q.u'baCTG{A~X"@juE ,% |xا7=Ug~ǽ5^oxヾI! k$&psL<:a@[ oos3JYNdf'YoDu +8t5DV{u}x_#<]ͺJ.ɴ9("0BfrSf"lUj5^-rp’rA]Xb_2#<<{*yZ!D@c-I01NSJ\+YWqySwu\]k ] `]VՎY(WZ$jXOø>q:8ՊKi]LXֶlz$9SJ@CS1ZVkk{S&){")4Լ %vڪ2pDZ$&3>1?sg Ijiq,2 )gnj Ac,!Ly-ESL|%=Jd0ZxYoG<4{|{mݺT7E!z"9Ua^81, |M#3XSJ0q,ջY)'IZUV/|(>Z_-w= Ї\ESŀд9*uU9"! (ucƔn^"c'Z0JNH,EPi7[3UЦ% S}BSĮ}AԹάwչV3 `JbUARAN)Cs*w| |{_{i|n氹##@}/?Ӆ"" Zo_ౖ1:MIIP9rJ,,^@4/oU3tJ'.'qCm*Yqb<ފ%kNjMԬ* ;ڴ5ꭒ+@Skjun6U8׹j.EƱ:;fԝ%\VS[ִW\uXriSwf0ծ֨'ŋlk0C$!ZMS!lXv\J΅SV{{N;yjX4MN̤j]ݜvU\ҰP[c9 /Qg[6'0i)?{n}陇?o@A3d1t7Lu^45pDRdZ(恫)g=bV;qje|G1Q[t݀%g.'O~~ƃG?ޫp(y+][mXIq04mv!90'IP)O{s˱3C@ ?YJq,N ~+'|\nԵvDfIʰ>?q+y&ZP:7&J4=^Yޭ[szm}Mp+HY˸.uʃ;y״y]sb)z5j%8 8qș KcyndAcނ{SP ̹$C$}jf;ϳM&G>0c}[7Ē%m}5o~WA_qo?]b8.\HeHZJIk'b$ָ)IMːN 숢"1u:L)6fMEQMEVfs WW?we \zfH00u2 > fK:mv8WIb>Xtw3,$Ka.aEִ=19Z3ct'tm[$ݵad>oѻ 0]((RLdN\S][霰H+Bf C{<5X'N99 `;^y7+0s:7U0v5,M4ubʃKx\uG$ȜzC?+'s}?an,iyYtt77_+6Gwϥ{kxT@Lh&qo0#0@[] 1b_&F T;ݎ-a%!{^7/y;zß{ núyI7mA)M{)g"T@0 Ԭ3e"a,hOсA;/+Uj좐pD<~<[\nsg&:8ccS#0u,̮9xJ)u IDATt,> Z, u#PPӲ=fj!!R33XO,y7rb#5O3!Hm Rq==d8cPV{C*R33$w|>ɋ_ _;_8?NS*C2 ùv=y׾aA@}J=O^kYDx!\TL Zk 1IrPظL%NLyǔ3uI^%Gs;qy'^qg|&0"JWs\^mA7 t)Ī=)m4ER!ppc! {?ß\ D$BxuW6 k3C]Mb],o,ITAl]`G@<{m:{Iz͒ )0S֖YJ ,L9GA)9d𾙺2v9tYB,,B=qA[w=<<~)\v 朗r4/?x%܍="^='{kAlB]; $4 Ѓah!Qh sҚ*4^ڎτ݂ @$xA[zinef>9?kWަi6m%gDh[vDKLĖJ@ՙQ:jHXRH9`N})ĩުE]c<}\yڠB QgϽ}?am3ރ1HBh(ITmf&fd " @HIdjZ#XcqtޚJn(l h֚J"@:zw9mm"P`%#u5uv`W#'kuETRJ wqp0UUSd1L8׹Dc jd v>{Sfsx䅛ojKGߔO:r:ϒ ":ޣF * ]<ǒ`U;O0pE..Hc/={?Mo??S&f ܺYk]}Ps%(Vijvr)aWwU(! 8O%^,%WTZ ͕Eqn;o7֦6o{oZpRP))gI%P(vmmHL@`FIXzYZ܌_JJ)gcT$%.9 j{5ڗ"L6ꦪP{wqowl?'RH#2|yDy_?s>_u8~D FdiF]៩ w7^_%6"k@Kqd$p 0,.(LB)M pͼwm(T}pn<<^g,j\ ) 'cCQik[&=NɁݱF][udhfQ:n#/z,k);d1.c΀ Aͺj]Ӊnk.eXi:pv!\uʃ*;>50w0n6@tJRJLH2;qj Ivcֺ_8HS6Վ &fXz*9KIx%'a`2ǮVkn@Mqww5B|{@}S"W~y;on]- m4Ydž!q,0G\ƲbYan5wުYkmn?7o8&:eaȬ;a܋pT[nI7\rCfn[m>7HB,0u層SI"K\MrMg?q綇MEЂ̒DݑHRN HVՂPIzm=g"=aȋ:~ox' |݇?|E⏽=G:s!=u'_@ hH$*`n!^B6i_\U[ww"?WN~oG?v8y}ۇ2FIY* .^{JⰬ<;n!!"6OuU=`]; v\!#b9B$ɦHrmBljmA|":9 "/cf86[p#zR00*{^ sW Jk-åB-5O)/􇁛\D(US 7x17|yGyo_rػ;I$$}v\>6`$-r4aI!b0"6GJ`ZiZUiD|E/}_?Wk_ט000SyjfI%B5bv+x7Z/ .a@ "G_#)EL06VW a{p?eS]U]{zCֺ1sc{ynN HZa\SʈH0ItUMU2)GCCND)h&yM;&! V Y(|ٷgk󬓧/ @[# ҂ qǗ~+_җVnwIW|?C%Z"@ :)4Q H {&U[EgL] %'AtGOihևqk#@<-xマd n֛\*4ݘ#Y\M]紝܌thN…xˏ>CODӰLS<" )\@ADœ% !Fr0jM""eKFլ'@%A-LGL{[so`K)d{#kp0s)RsIIj9{S9im~w_yJŹ"Xf{W/^hqG $:)Xĉe p#ZA9-#vwG oA8%s1?[>On,⮭X90NE8Fv=6s 0{}oz{t%Y=RADf`@Km3K/A~W?oK[@,߮YD{>G^M]YJGI ( $ rAZPQw{7m6Yx׉+<,)⹖,bc;JЩHY5GiKYHO?qW  X=rt+sw''iz_t͛v?P "ب2ɴ ##hBֻv&v5UGCF׺joH0MS@(Dj#epkܷ}w=7a\?%yensppX,BF8:R)rı#0mYC!bvbCWei>^7m!C kT5<`]ukZy {ΧUtu5BȬݬ e^qi4H)N6sxiM{G ꪉUn>WuswU]0q;ޏxM7~Ï?翽wO:Enm!Nф B,LI0yunZ??b!&nD`qnKkoj[_zK_~᛾y/pDѤj)"{bI0GP~msw:A(`Z,K 0ƏHïzԣy-o~k@ @Lna[j x)yW$Aڻqĉձ_"Ikw!28.wUtyl۴uj9a?"&ɒSgOLuѻi3U3"d&{ s[F !vwt7"ʫ,N,e$޵ޔԹvZ*B0e%\|3{γ\"\wU_c{{Oط_sBHb 12F{lƜH:3 2wwr5dfeFĔ˴u zWokEIIUL̽5"=N rǮGO""Jv uޭVfT28dm_!{5%6,`tIz,NfQdĀV͹Pm}E8,]3s\J@45A\F]: U4C!JBA`zpY`>OIЀ6Py>R҆ eNy@̳mf;XX#H9Zk R0F!{JI!!0 `\~G񎷾%g>튾=k5_LsfwrzxpbD'qX+0 af֧FeŒP#b*Ԉ i,ImuTdBMڍ!w$%KJu63Eԧ}[eo;{ձ?mɸp $gNqR>Ĕ,)=F L;:zT"vwզ;Pr. H/\^b*뵴h @L fh9:L ʹ*imE T}ܗ % ښƂ䦆cD*!sݮfZKy24B`$%@r*ᢩ7g0<{>_ڟKA7 ZUSZ1Y\2[K9j ,[mv%"}];:FgʊjAQ500 ÿGvJ"&M{8RK4='O~K^P1'0?ߺ2;N Tt7o\: q- ~3b}s!F7()3YMsΔ9%pl\%sGV:zzHȉ1P3nrDH@H" =h2h>ϓ˿ k[z,i Q<)gƜ k 괌C21"v֙dm DwO"A5a'&2B@ڃ*Lp]{zϽcg5mr">q\$@+$yn㊻vԶ[D;(#"?7B,ZDim`\s՜@2ż< 1pHE0B}ZcnHT 8RdݐRNV5l)gpgfDdbFFj6n;ރJG?BRkFLX:HʒX[^; hYQ*ZmID"0X4>^O׼ꫮ:yO,#qKoD]tLӧ?nwܣw{+"$!&bkDxXG7АI8M rf{x;qՎO~puf.$x d"q$X_w& ^4h9^òwMXKk 8lEqLc'zh2* 2e'%Gmb .&jH"QpZ3X*84MxFWcp@©fS( y0ZJ0AD ­7o~ɋ/ o\wdFS!g=a^8-wէs7??7Yb&xx3``#Ahڙ \$nQ bfkUH]{ӈS.t1>!:IJ, ;_wק.wI ! AG!i@d6DM݁%-/ AD8INe(=vw[2 1 2Sv!:Q\~Ž;nx1aEd_3#BU ZW\CA, H Fsbfn[H`#j)91#38ܚJI)'BoZY",w"s'>O꽁Y$V?K/T vg,-]IYGwSs$N∔- IDATUE \)s'閭(p(6ƦF`R0s}ufB$?p;^9<[L!y@@*!HX㐼di9< %3h~ӹ~[~Nzk^)ǢBf4:(Dr8DKcg. ^K`cg0(18xMb6S\rɃW{ӗjk4Dr9\Ve\0!v$)Zu2 (1z%.  8!tCĔ(@A.cfF׮ޛ z 9ޘ( 4 #pi-J##8@̍XrssI)j*2;!̜D8Ip?i(5G;oKy7ϰ'͹K~7ѯyů}խ7`ִgAjM\rެ9#h$B$4l/Smm\2n)S<]ABNb@qǡ׽߼tyO], cQ|_ye !jjm$H2ɥVZWf^STυ`U0 Rms@̜M?{hۮ̷Ƙs3'$A*-y( DX( (O,A(W"(BI@y( $!1'99{5qsZ׺7s5޿1iBjT*9Ds{O?Yg~/jOgx\k`#G ӳ4yj*2anT3֫T^13rf>Wp@v6:,e3wBh=(?-b:iAɰMqsSM݊,pwrpޚb@`ADD6E 7S箽 Hf#0Pz45`)9uSmzy0O]u_u?|Ṣv#b쏕᎑N̘HwRJRne^we?͝o:Bw3D0v;a<2DHRE,ORH}S佯|>zHކ"=ą1V `(ho۽=Vjg7̼φwyc EMz't$"n:W,8=CDڵݨT@v6nu&fdDPWPuPz0BvU+%[BR 0DuPWkrjjT0y63^bٙ:$",x};wrOvX-E2W9Um`gaak >'7.L" #1En&׽>yzwo'\yeο20hָTp3puf:F^_ DmN#E 00SYq,!(i4x=ۼ2ayn>(x>y;/~)zY}^TrDjn7Mֲʪ:XxA5' yP0mfWc aͱ`Xo[nar2a@Y JѵA9̌ G@-w $L%r`d!6C\8XF 0 9@*vcİEJ ADaPPеmsJQw 𮳮vvyRxݽ~uY {ωF@jȴeަ-z\ڸݺܐ)գʅ$޵8 bAPm#cs7p!cKa@ fř/P^adaa:O{5q)j擯O}>>cGTnxZF75G,U6I-J*f%,(afmj0Px׾>zŏ|L3D`67޷szOcE`;-&SDh[H23km"@Ŋǥ 2 \TŵZ"@ rAsxQ `"j]Cmڧ$ >c[e;T J\d{w^#OF{v[Lդ& Ñ4]>n`qX8~#9}_uu@j*%̔J_N "KLNw$*Ps7GB0#m ަ.Pʸy @a@q@J!pa r=zҗ`}w 휫?AlqgW{ӹf}j̬s(Z!;AN\ "[ι=ٝ }hv7bgB6mֵ23cF&a.prGHQ2E0Msrajv`Lܦf]K cumMm3mއq#$z#աJ S\i6!wу~7}=+`xDW5-hn$B*$K+0)֭wF,LLHњ֣$& 0NUz-Rʐk0@B=$KsЭ"-a $J efCBdZĜ#$b-,-G \dRjso me*0"y%aO_=;ox3y&ѺyI8[A@,խ[w~P5|ىϾáC}Sy IEL{zp0,c1K2 @0uΑ7BiTG"AEO)D@JfՖԡڼrgww?Kݝy}۴⫹E2z v@@ T07|7]}UEj0"õX@0/']η:q|\Tj>w O$*轋HE@p6/ׂ˜@jZ8K)He{n>|kKRȈp)R4eS:Ƅɕ. HDr i?n^ygFRtY@@n|~gvyZ{C| EԡY:(5D)YLJ4 +,(BD`f@G53H*A@2S̔Q[3FC֮|/~]pߋ?KZcS /3Ӗ{cj,[ 1 U+!3I`z\ɛon&M3QBu{mnٰFR}HH`:'`fȩjPJEioHE DLwR*"tv2H˅ѧ:O67\'}e\>mVwaX :Oad .!I2:axW|WVxץx3=u 0WKhuu_Ya٠a)ܴΜ(eȲ2kiehImDW_co}Gx_^9HK"#E`'(§Sλ={'/9/qDpSz4mK-iXXnڍmHRJʌ{odjFE{Z%[o!€jDuTUHS]{Sf(@B(HS_{yS?\p̹i{v e"BGzzoi4C$ByjwL\O3rYĺw /,L(!+B 16͘_战̓*AoN|m&nhZnK";20pޭw3,]05)uhm~=i 4&yj4r_YF !*"a7o|cWf[# g" DB@3P ;@pӈ .DTjAu9"&"a9X:!: 7N<=3-oawp)"_&,9ӈ@U0-w)(::ؚZ]ZaaDAi u3Fv -_*Us%RQ[=v?b@, rt]=~]~/}+y?__w'zܟvvHhn3a"*='P6Ub,ê흾Q~G/f 7VCRKZQaB$O;\pv]HMlܣb"blyl}RR@r@ ޶ڶ:T| q4{s(x"q):m29K)%#ljFdAZ ZӤ?<\98Aj Hi)ԬZC m "ϳXKy;="fqJp7 DFkCϽտoy,WÇG~ᗮxkjaZK9B".Q\ !DK%ڈHi$d n)4pZ"̜xǢ0DH~` 38u3/#77t>ƫZRƬ ޭzkOSLg"v#Wox-3{dڔryb FRd !!}ge IDATS3U"R%nN6%7Sd*oRJ))7#ZjA". a "%ZjI|zF1@ 0㘆4ɠϖkI=͍7g<';rd iw"(p hW3"(%@I)M|^%aT];}6_H̹G /Z @yM#UeNR)tafH̄^iLcpaN^ G9'ϫcǬ^ ݂FDf |s"X2y$/ރ}ѕa E$3!"&11YIe /AD<쐆Es<,ݲ.̢ݙC[3A&:rιyKҗ~ׯox{ׇQYKzouL) "|C!]WR/|?i3c7AZ}RлQftW=;xcg8 : x@P $d)ݝn0d zwU!'" YTGalmFf*%U i UY R @. ' gG5z1o*#a@`ffk}=:~;4 Y$!"*f\%,<?3õ;~+-;k0Bq)] Ejy6RJf<2r WX((橔"{fahY,SoBhh "2t7:Ս̒Įtݯ{p'g< Xh \B[ECF"\H7=[f[GK"IR NE8TpۿTa(1Sf\. :g×C M;CRX MtmVHDhnsz9MP7OeaaI[ZxؼmAFtu[O^&U[^1!m= Hٞ<^7Vvկ?wG.P5¬Z46p k3C0,`aj,JL NքfBn nRb\ C]7q'xoa(f IDD};}wj= X!=<spN)bRC`9dp~u7tG wdBa177@t/ ա 0y 7ǎ,R*"LG:H-Lnx!"PZUÒ!#0!#01fU8;̭a@Ux{T tWaȑ:.wdB"f}HQ{yp}__{W^>p\ioR0q@Bɛ"8_ ${~ݗ"eT" 1B'@F$dBls,YD$L=}Sp9&򘋷r5Ona%;8 l3퀒=  WUw]~cǰbRL9ϨnڭuS35HHRTzðtHQL$mѺa@"paAN,E8u P"cy>q;>Y?Ɵ+Cg;vCq5JaPUU^D&2׌V"7w_O/f ߽p ?5ׁHam&"cnHwĀ%&EB 3 Q,(Ӭֵ[NW A?mu5"߽o{]9r>E=9\vu0o9Ֆf6:"pԝ$2!Bs:zHS3&ͭM'Oѿ);  "@ʐ<BRs,44xZ$ C 2TN5bj2Cdla):WMV8dr|3"M,_8HN{ɻ^>#VR3<0E"o!0nO Toǯ ~/y2{_&䗙/]KSR Tr>}awp2bYe,"ѭϳ~x2] ]5 >r/|ۛ?zux 6RQ" [)I%.Cq\+"]RJ-ȌAֹZ@lk) n=<3-B/ / E, LK I,<5OLK"s'9awHѺrq;wo:z{ [w<ကU a5E2@HP(ʸ"S]zUMy$5AKKN/1XD3"/Ra)A)\ls\ RKxq\H 53LIqo bv_ĕW]p|o>]s e0!vvj̰B{k~YR<%<``w=o۽>CPk읶>38Cf3Z88V>Msl@f2`XKXYH # eRk]XfͭC3'ֱq& ÝHv9|hjHaD,HkWP(!K;湅C?q ~ NݹhwM4,l-"D숩)tǎѿ\<ﵶ{xNޢ &HE)B<1BX"; -5D\[bpޅ˂@Ю-ˀ- Ĵ#sRe ?\/g~駾p5qȥ"R]pea"lO{ϻB~u?uJtJRSW*E,i;;`:dڎҚEшR#iӜQ@,2 uUz:\HI=M uWպiּPeZ HF )7jja2x6p̴m9ҕg!sr)W~W}G TXh=4uoov̲GD@8rhg Cw+[(Q"B C $ Ftedk)6$wK՚Aj8Ł1ZFvLv;{ϩ6q\V;g'?='nUD f4F4}usD"ͧpoR,լwmn)dEb]c= Kxd12m9EXIH*FN! sJAf;7B\b@2BRnhCtӁ"%eyK!0yR!iI*!Kv6'o{Wi3p\cqiLdM@koDDuiř6?~+@;;g)naFan.:7k@  : eܔPXp RVąD>S[&@b> H:G" :r~Eoxw?E/+øsΨ]#E߻;\w?!ceB B4 TՌ8vnB AOv5A^{[DGXMM۴,SOlikBnmzx d$a$sΑ\W+4mo9}z;O 1D$!59:$80Э-f?ݙiuqTpJ]:}mkcG7"W 7H 91̈́&"{ƕ0#If{uלw<97݁fTJE PD4k: xֹo! Ji{ynM.V(;kn ,pڑ8 ں0cq\E( l AJA\"T=6U!:Lnۻ%/8q?^\kT-gc#] so2."Rqg7^|v0jwCq16~U0Z"!ʉwx?KVg&)jn ' iTe-R£dً:bo&}RGB2f:a6mDtP K֔„ ɔ7aÊ];y?L% ޻gPE^h$'BRH_ęg~V~{xecHi3%,CpTK!Lz%kd*.=ʐXIh!( Bp ku5W|쯾]ud Woٿi疏a rw"RR=Yܦ⑏~{՟?5V{^TfrwRsL{_lBn"fŸ OHBD%)5ĩCbfyĒMaC%, R{cѥǁ|oZ_v/ycn+qfw7/zN2u  vSˀHOy;^fYpp$6n1 0Rp .%yT+" 3/9?ė>)׽}goyLsKƔLHd%tvzcon|vCNlDF)*Va0W!=3XPsk<"HymГYG)C;Q@nfDTPTiy6$dEcDY+"jo;3%G>y㟴72PS] nj,e0v]i;ݴ.CVc:ãͳ ø"Z&<ϦmNۤ ߈){Ui~bf .sZԑRgҞu 30W p5k =Gbp3f"Yq2=wTEaXa}{Oŋ:G@),"2>w 0c:@%}CMٮX4eઘ0@"8\CoɤF n;㞔E(<ţHJeMyڦE۴KPomkR{6w~xٯ~#?Gb}ˎ_ `$Iӫ3;n;{"2]vO]gnyZdN w5s5/RV{Rŏ]ws29/`ͦfDPRTpOn)w0"q*(8Xvm, ,@2q9{7^?覆u=ux]@Beຒ: Ca"a>U7u6n7 Rm[#+"D Di6mT 5[v-7ʹ D>50w3)uX#\*qsDk6OE~qXgΜ&rV;#._}o~ԋgחҺ"`W55W"$8vӾ&K)ԵM[W_x|zǯiJ #WL`6_ H)͋F"Y +:X s#)KeEnuun̔8)dB! K5\~)W==Goq}}͉xÉ s qӌ 97-a$cWV IDATi;p/qee5P!к 202 [$suu@ ʟDIz&5!fԛ8:s˸20J]C0 3᪽nA\0?+w0nC\]  X{q,L,eNDyČЗkO{ru?[~%iA0T?uݣOk^{ǯ ϢpaQΓ/ܳ)ɥ0CWSM/H`Jy7a>:X H$)df9M-=jPkijf6KvЛ]_Gܑ(<qsDym̼,H]6eure0 @8Drc5Fi\g0 ơ0yWkGGI"uyqA;:c(x>[ԯKFBf;su8YI)냃:ywtwCE 95HdF2px!/vYAn#MyRwpD."0,bq5w J!D590QYkFpe@fBrU=r4n@E]vdp]kU(:#W  Ps9EDo{0flYHJ1>wvsg^}ǟ?a@AP*Exwxv[VKY#m珧ݜh$2Ϻ9Mj`&|a@4dI<)G6 ""ueDKj}fLryCt wgX"\ִjMwx]:Ͻ+bxU杠,Ӯau77,b]M|Þ>yKZ:w[ksB)sC'h̺‚Lg!oϣ3~s\,<$1Xh]:͑!PX B5W@D""N`H9$Ffr,Q/b5[Ȳ0d6 /c"%шp'>? uh`RD$"0nڧ֛ <)XJ)j 0… 1Ln=0gƚIR3"Nfbjvy:@<-e"aP䋎RP5%"C>>9ose͵<7B"$iNLw׾?gF3:V]I@Y{mrWfd){OIqoDz "$Y"("Ĺ3i3Cv]hIn 14ED]}uk>??sn߫iZ˸:jY]qXrijd??{ T5 vx,"y"^.DXȽͩ^_z 7{؛{,Ė>kí.pCk-t"1jkQ-I*$a"sr8 Zny4n3{ZWt8y? ym O,t?8}m^oz^-_:uzكӧK|vA7\S^g !p{۶i0Lje$="Rd0f"D4yC @0RH Q"EI &[& LZ RК+EO{ݿ[>χZPIYDx(;=؟vD)CEuiމOeA~xˀ8A|{|Q;xOPZsv X{sk>VdA`%_z>@iyθBXX `zo%C1G}ڴ&3 b8:H@RD /x a}ksUp@.uV:uXN C pepu5S`L9ܭW~WT U=λtW OWyxַrMT+{&2@Ύw3m_5/9ugOsDOM "Ԇ#C)B=4z :hMд#S!*f]KRCD4>dϳn\9A\-H1$q Xl"nuW>ӏ_z‹i:sIZۚ"B M\) ]M0u,f:M[̀wWDhj9w۶ ”@ZE>SHq ӺVp5 Bpj!@&.\ 3{`+Y ܴ&IpzӪ<2ҋj'j>::.>D)@ᡌ=[񱷼ԭoݻ35BG2dTY½T!.WJqf뽔ʛ )0B8z7"D֤ƕ,6@gAm<,pɇ{ ԭ 8fR䒍jZ[Ҷ*q X:B2NzY*[l:%z}%i}@T)EXE,X Fu&I '1Vz`DꎉpaK~s]:hG@fgWWG$K dR[> cy͑{½S8232t)~3DܻYnV7]>UCOk/8s+{eMfRe Sw'S:p`Ywͅ ~ʋ~n "8m )t5EKH";a){I."hk)@d4`Q5)HDRh0NnݻRA+:s˟]U}ILv|" tm00?_>׼yu^HHnhqԛu#L=7Zk9F tpP67>$6Rif~D@k}s|BXyh\8J){A3a2A!`r3 @7:ے{Kȉ8$B)"4#ư7Hmjy֟>YWߞsº.Z0jmHDJq5d ˠtIG"tB-;PЙ8Ez>ϻ +$b9DKppϻYJ9G@8 (5Yb>q"R1L De$ GD udao⧟rp4:NT%ie BH LGK_psVWoy;Dt1'*ƽ}k$qʚCPv.}VM&2 ff$XlnIzW*BT+ S)Rgֵm7mT1ĵ[{a-[-G:,# JXW5'e|\~G/^w^Kgos qU.5RPFDc_Nyag!5snykZhDaay+g~27N*"gJ2`$D DL[ 1A2SR/9\$e8YeDEeLܬ¢s?_? C=Y$S T(%)=v"fŞ\$ -L(Oh88E$03C[;7cGQ%@0N\$.Ybõy˰Oڛj˅ 1BYbR&w.xPSzD9'Q C2!~_5^jnm2r\]{ S& U:*' R syWCy?8?{~_z|"N&z="9R6U"B sy @p &$F)6MRj&`~3R‘%zⶄH`d>kDV>^H S^o;_{{} R t'^/a%&!rsߙ5Hò &_1}/'uZ]( [3iLJdHV"u(C*bS3 t$z C `Ln]O$nfN y7cpVJaDt fq_w/7=>7ůpK{#SM@myX)0:\R펎׼§?-u|tu:"aBWݴ!I)")nIZKszft!)Tœ[*c. @jf*$k~zog",'5@}v {n4cy6: Y`2Nis|,̒Xǡ»㭵^DXjLՊKE`fRd{osku5:K "ֵOsBd/d#bxN#s?7oT2Ɯ)M)lD%[/*|O79";<.s%/y~J 0uڙGF'$w.vM5+"TM*򏉠LA` $)` Y8KMH)HAR23gYFiG&{kllm~_p`SH6 hgYGv^iޥ/Y f̘SKs >ϻPy{{k V:T  3z7ud= [X޶,aHR55s@Ξ̬m0`",̙K}Vw]{ IDAT^ ^Ԕ܃Dep6%]7R\a ?-&3R6R`JHD2R8Y \Lr,!(pf\:&9{GnHj@a$R$@Lpo|w<'na@ʌiUǽj5@ G[83v5HoD"DoswW?{|:'\q,wS_Ͷ3zԡ x+ڴ5#j>O];ec +4D)zctn4]B/i\ ȅrpt_o>;ؿ2 S j 009Ѷj$;<,$ h+g_=|i j`i;1k'[C.53E\ f){½JE G3%q`jfP+mi{{ke&Wo "Axa )~@dަ07گ|~wOzrE:^QQ9܉!,)DZۣ & ͵,fTHD08^LP`Gp2Aa’., E2ƗY39#՗: 1SFapaXso7 r׹99:8sӳO;GSgLZ vp!X»drfP 8#"\{)%t]v[+^ʿ{-e 0@wH[')\27OpG 2,(BƕԗRW9>%`qUی=]2HppKΖ"ZIüO +|3/w>vH'.O%9 |ۆ|Yy,^K.|T +:mJ"D\NfǴ@XNbR-4F:Ĉs"VJT0nfTM/@bǾtffVd@Sga6Gj>wU#@M[CF`p;#C)UG|9թK.s3s/  Q .H}o{ʆ볳қb[Dd7u&lK-i"hhfuN"*xBZ^E)@Fȓ &aֱ0!R ڴknK4.ydDy @|MM5Iu,\zw67^x+_}}Hojfȥ0/5.%Jj}k ȺMMsx8aۣf;7͉KV2T&flCͺ-֬75P W 3;N0[omfixϙ D7uFv E긷wwA*!E} BlΝ~<#oy%gܻEX'=uR ;T$svsV7EDiQFngE=ڶ!0;Ҥnyi`PF`r-F}>3g0t 5 @ڻkca"ў9d#-xXۋ/-~n?8x_{NwT2G !Ao@LںAaaj}n}A%I{wXl"Kqdn}Tlw݅ Dlh!L; HdyF6!PDjII)@,,"m2");L,XHus= Eɴ {ոZ׃0+20!.0O(gIHG0"joow|` guTJ9FHrkG5$ H" H]!0KaR%hIPIW qo5Wj5aH(p‘0{`*H^HY|,z=CqV 3C.I=X1$C-yUl>E?SuoϺ4~h A"3aa.?6՞>8/]~ygp@7u@ЎXbf.c2h`wsRD# -taRd6}V#qIjZs5Gi;6)JT7 0455JD1b:%ДBs):/{ۋ)wy7wkjdF IOۍyooVB#(,HRźj baR*8 ̽yvgYyO}/$ P`H9UZN8C Zbm]]jɢETҥ EL "9Cqj.Os޽s<ԌTWs ve?B)NSME8ܥ6^4k~ULj)ƄP@ƳyFZ0̅Q$O@;nzLxѕeqH%CxY %FL'C+]@`"BZIZRŃ JTI<ºejz) RA%2רD]54 l> J/a (yl?쳞O+ūM {fq15Ak$ U : @JRS4uwp5xlwtnA wC"fQUd$`a'fc,#Z ^HJڇaHIyVS%~8FrgN#&CN**DRRBPY*YYx! up^oGt؟"ڇZ BT JbucKt,$3XމJJFDHcfya"C"5D{Ti3mv2ȇfVsDHdj=B\d{xlgCp[o{7= Ϻre}I(o@yZM E A?Ĕ D2du\p[#{/Cv0k_я{[^uw!=hE"1KRm e&p ^UVHx P `0p b.Y_LHXQ\aҗR 3F1rjNRn(88thkSdfƺ uHMqz} #"`◳N^,EuC+/d1&mj-9lΆ P<D\s҄ 7u".e#%BR Y2Q:` ,AdFA*`c^rI}7<#s˟ztI1H@Xam 13<0M4<376 00 |m#kbydIe!-ƒ=BmN$n#M`jjH7^ Um@z'&Ʀ~ :|\""MC~)F nH7Vrp\ GxBL\klU2:9py$:̳9掄Llja)ܦڦmkaLu23S21E&N}"i'p}AUW|{#>S|ﻗ˗_{̳娠UH> nwhlp M}_£cSSU1Ka*6m6ݶvTij-aDp|t!s)¥"X͆0 DT&.ujc.|8> MRy.ZVÔ?vt@'lE1\u"s}uMY.<+3+[9.#eaDM`n049aXRiB`:vj%kXK )Hl@"4θ1v4rE$R%jy m_nw0V ZjjH&P6KW&j}aRfPk%ZiŒ0ˢ2 ܺlXԦъZ !{ #I)]c7>o>7,}a aa̙nԤh2wQ p̤n& G琙{/=[#}r& X\Tbf?`Rki?Xө4W}XNU'&)u s0W' 3sFfcNMM< H--+'͗Q21%7Vv~+p͹|>_}PJmY?,ٰ^[6S) MM]4p6S̵5%]39Auju MpӈVچf :̆BAX!Yסnp("-M;wձ&M3k+B8FEiC(:,vY=A}˿)u˭~-7`Ĝg꫈8Iv5 ‡;/}]mn?};Kx7#6II 2670BfujU(\mw:fWPD1ܬLMX" !X-]A"r 3ZZmS5@ꮀE|jAs3"vwr%nmHLn{ɋ?c7=[]=ncX52M>hD4!3º(XܣI-fM,mnvW5 hN$, Nw݃c-"Y@(<;m`60T|J-nQk2å{'p-{ug̔(W7] h_HDF)N3"1 f&*$N{)}ԛvwh."ڶ65EDXCұvL\ 96!X_H"D[ȵ `˘t"\m}$qX\sKE'T)an&ő)}Rlb sYš;~?W1O}7\måV2B :aDPad!LW5ą@C;=^e2bi44p!wԈ)eςE56ӄABxc>0e |ڦ bD-n ,B޵l.+/2m?.^|}tt6@fi c!fQ1LǐBj0`^%9/]}pk> O݁R+9Ͻv1="gku;! iݽ&˼)\<pRZ2*L!N+>#"dV02#hE*(@Gv|Λn?'<;>˞ A˂j5A `}t)5"5 "J"7:{0vj&+t>k)"DlKQH*]1a-sT)Զɔ~EH Ju"XqE?pӟu?z)f*MG̟$b ϒSn:" @0(! @M/^{Ro~{?8''R&8$$"X0i"[;V]y=;! 3i5{avt7GN)tYe R[f`L*"$#Tv5fJa&Qr&B6`Xj+"ړv|F* -UcYοiڐ0/y`ZxaHf`YhBGё8x XR rNBg0IYRtW wA dʄN) ,: '._:1L $R[DE2>T6S ^N;n|zr6H-0 ~n:v,SmD®} c<|^b @>][n?u/{+O @ pRjG#W" !HaµyEjh{tt\c]'7a|t[@%1%PJaA#"lX$ EGr D"n+R=—D02uLp/X Pq1OU  ""% BLP Zip_!{7L?+^7)fK-6Wf>!L@p~sa}<0twwRai*"ijLu,1{W\E:3}~>YdnTܴ0 ڒ*Bv[J˷ Ox ^g7|tB-gQ>Ãk5U99O2#g׸ZsϽԚއV"!މMuُe黙Ԓ& }@̵߰ 2 IDAT qr3zWpwbDfɄI7 Y`:"}̦D"ja6"c> f{t݇#.>+pnMK)fӶ ajSt-Rmn'9;6R0F&@84`y>t;3AUJDM DiqQ4M.W*cK'?pSO 3Evp U7# FduXxxJ"݁ +Ln ̹6t "U#ra:QJmdc^ fIj@T/,֟ݙM>Fe"DsKRPX4}IkfZwBkox3sOv@Uݵ4"' $UUHXqv·|ڣz/mX  k]\?rgf@P93 SBJ}A(0Qk!3pryF<̝ֈ2sy/p9}/%4'"&ᣫ7?~|?pشGNͻF1Z&iP"E W@5/T`L 1 <ҍC;K-UncYLj fY' lE|4M5w™ln5j+m+ew~%_swW Hi@C@Ȣ#c?P /*JaHO@6$yK~UZ;W)oy\{FY_f=}տ`)y3F I!W8%9-6ƪsxVy˸(D\AxJ!laIn!ĥ"qfJbsLT67'?=Ⓨ~͕W223 "'Ă 03'&8?C$.&ꊫh)a!$RJ)AfZXA)_&I"Tj-TR0AXX0?nfHL,U,ڏq͓^}^~-+¬RH%zOY7IL5p˔+"5Y DU]>an6w׳eGWE斩^b@htdBf4~XRY, CuGR S#lMf",E%Ca!|++e w20]wNbnD|H+'vy۫_o~z!7=;y@}ppXzWf$ѻW]e$&@RJNjnC475pg&1Ӂ!iမD5(eI@i$$EҦ֚zr|ڿM-Un,kb., @ɽ4"q"/QvDcǵ}~mwt!ۙG^W["a呔5 &3lnrݭVb8DG](ĀaL;stIK`X3}>,",( &pָOXgMgS\}5^raŵ8""3x4g)YOT=9y@32"TGwRYh>XCjݼ1u'p1':9KSw\U13FDC0҂aHU0= D2KiHRW"8Tvt=g9zv{\af}@`7 "5< </V)%ojkl'nUpwd8yKRMn@1TKk9nJkq)%ϧ,c\IaOWt7S&Bxbb0ӑ8`$2w5 q9,h]w0&.ׁ=\qœ{}G$.`cyc <m 1lt:T#Zlvv-v;mvliFJb`R+jXgT[\0ěʹn8Ӵs!.Vt,,M?ӓռNlHY.]zcI_/{4'3qdM)Y[N\0z%f4`bn2`r=w^ZaS":ūVcNY}'7-9M$ OX_(0w3Wևy8!q)3uwdBF"ʓkzn &uVJJasp LG&!R-M= XK~ ?m/w?/K7ݘ"B "4Ef6y'Z"A)Lh@x"WA Du0BUB(BD*0Cl"X<%(XMvޟ?n.#0ga`b5sa'ĭ#iamӘ݆g"M\._zw_+.\[?w],|4Me2LJit$U<2J)4]! pɌ]L2\p|cE&cQOq]!f<|4303O\>Dr@`i7f,80SD"fy_|/z³?.pۢ 7H=2S]Gw3Bre^T{T9iӶ;glvgsCE)+j6(]lwq8Er"EbSXa*֊VJK5 \KwM}OyF@6&aA"EXjXE(,Xm#"TG·^cYc.^e+ZFI0U3T,)dM賛Ps8T{7@Č{O}DSI*t0u ,0q b8Omڨ! )KU!&)rOU]dX9s ЊVY7?/+Qk1t>ϳKkW^YyE]GפXLO/ :$; DdsDm;x?l6@7aaFd7 4n3mZ+aLUbS$V?Ƿ$B\K4s 1fXǬ1R76$EL,"Btsy~hǪ6,< SctbZ K)HC~+37 "ւ/@Bt݈lОPsRPa<YjAR mtĕRT=tnFGL0"&֍x0 K)zZK=gFZy_ĥe.LnL8Ḟe9D!ԣ{]k/=/y|z2_Lf3 Ws" /c9h_4] > RIMka0, b8a 8FB cYpf}ƌ5Ĥ,@2M l8m6TmNjja,}Fiڵi2[ӛo~#?_/oRxD $yѭ7ITòggsrSU?XK c8nv\'b0UrF°`#^_#BUi7V4iS>LGkdϤg}Q\) ,9 6JTaDLdt~1xQ:FOYE_e>@Kw7 3}o_yuOcYdb)C5`ope^N}YB.pv7_q{ԗjl(iv;p}Ej$lf!R'g G#r:yZiem(J-ds.J۴6ݚ8W]wx3.礼$h N@n`9tBi)2") %`c= w]Dt7u_Շ;TŲ0r}Kr3 9fP[Ef$B7ˑPYw@cGuAR" IΦ@N1XBRs)!„;!MF]5*̥AYn?|g?5/{}SOnm>; mv0 kWUAѡ j_HAї˗Dz c)\E"uPYwG*,Ǣ܁jHZnUsu,MdZT sk nw#p>?OW=! +\[%+ҊV9 #B!rgv'K_zŋw zZݘ9B:I[fqs=K$$!0Ei}4Rx6=]@nDg Iy֣,nR2tUk-Øg' W>!; KL֢]#(T}tpehD>\s?x;  !,z9-E$3"4PHEBEd^\s|^?qXT0wfEa$%)F|,)@w_BU۰Dʦ :z,Ē#vM42e3!Gpf*nnsSrm "Fj0wC:Ezj12.io|| !W]( ܗrwSWe?;Y2XjOtmWץi*bi47#BAT糰Q 3Jš}X7S+MC$)mmWϋ嫚!e]E$SV:mN Ƨ OT*Ky E1\`"fjH@,001DsxhNlpvʋp?w]n~ttl=6\@(J:%%Q>FPMN\Q xE5Ԇ.CsJgLpǹ&j&a2{XD(…j&Jt,:a$X^Xſz_m2ϼ᷿=T6X ;ͤ 9!:|nIiEJmmi+]W؟~2t.""!RJk̅lG1 !yjaӴ)e(e$4Hd]~ 3.tS^]U/vO#3ϚB IjfK-Bw,?]޶?;{ 0u}I%esh Hsp0ӲVڇ~ܥ>P/Hlb!ZkE*8,lӦ)4܎v:5Dtǥy?gv#&Xyb8LiۖRF>ȶjݕZԘ{@r}7}}~Suݸe X+`fNК@`j4 3L" fD`R/owGGw誫ˣ=l3`CDuZc=W+% druC?- LUC ΃,RJmJ 2J-RLAH,)1 O@Ò3ܞsV L'?OFRX֪y>u VT CP[A!"p]lYþ/sNN.͕AUpL#4Iݖ}{Z+aGJ$,u,S=5$G_ njkp8nv[[Cc^ҥG=[Ϲtf3< uTtӑ%R3{/17ۭ%R*SlWb"E8ESDZ:5'lֺǍ%Da @$"AJNCJ?i^K)aL:AMVpDXÀ̌EjtW%|"htE- ~?G?'5Nnm)*R0eP˲Jmda#"$CCJ\ʴ2i_Q[[8Kfx6l,!­Z[U2IUD6_|ss͵gRuA{б(`-riQ&)&TDĜ3aj ɥ^owݽʋ_3>s3mr\%$pd^Dt7fuwdd~ # s" !h @s CD@5sRT3`2(XJ:5Ex=i0sj-%IggᱹpW_|?smM+EJa@O0X*fVK(}Ѓ <= 1A8/zi}vnnjFw 7ptA aD A2"""9I$;Bw>櫿o馻@f3NBj+02Gm4q\Px=/ 1uj+:l!䖦1¡"E47qʥbH Y;ZZ7M9G &;|5a]cQEt JC$ O|7=K7ݼeѮ >!U:>ljmYvW^Qj, ~%Ka 2ii3B0Au}ozg眞x *(54jpR* 8VRUo4z((<$r@w}߽zpWSvVUw>}^{=|mӓLBD >lpcq"cP}{~G~˿G+\]s ac5'{R˴0R .sM@c( RXE׮|%ӕDUe7K ":TqU$,rɅLs$aQEJ?p5y(*P&7@.c3BTڲI!Dt F64/ר2 75@ 1:s:mY_ʹWP@~vZ66UBA}˼97Ec ~1PEN/kW._OlhE{d]I Unj6l;g٩e^>#.;̓~WcXD KSm࠵@`/؟A(B+W~?}oۭN~tWC33(gV<ü̈{ۈiz/[u5 IDATc>[op "RJcyԳ,Fp}&`mD3H el,S&t_Cfp Ҥ@kZ2fAfĕD7/­pR#T!,sH{o߼a辿2@t0թD 5U;}QAd>/ "cwzrz!ʶՃ8B`=_D u0nӡiS[NV Vje$_ٲ㻞Sxyi,zf,T*̒Gb)tEi5"\"Ow{l^]qab$D4tlU~$# I@ yw#֙'x*!5%'"M8#ܘ%+{ ꁥ 31JB,t%LKƬk7Pz|69o/^r_g/{3}?nimd+TRKo//yMCljɡ΋>eoztxW[0RJi9qvjjT[n7! 0"jm6[ &*hGM}ҝwBD]u\Z{b<Ӏ"0\AIԶE3P # pi,f@Sk9Bx"!*O SaLxVmxm_}˟뮳 (c,(<"2@4U 2y#*"LH3͉ᣋ0 c??˯}y6ۃvLa!Dh\8 ]"D9-ɮw/>z.="p_L{/Ģ0L?[͞4: AIA y>P8U )fjMlvÖ> Ҵ*ˆp=ß/~w\~ے)}"{\e.|1Wޏp8M"nj+*hj:ԆB "ZEJ2fL( 3xZ2w3@F0¼#굳ݞpD4$$M+*ms0R0!#0k:33bLum4@UF(+,ywwٯ_sS]p ʩ3 nNs~/^0xor0˗0k>&F!l2É%"2ݲ FBaW 7lD`aD(PĬ(Uce@]XH JB"LN$զ p,,' u KC`J/Ѓ?ُC./]J r "֪H>C Be)}yΊHx۟\=Ѯ٨R AZ£%b%̨݇ff!NȄj H)-060M 1컿v׻zDyfѓKq3DyjRM 5@f 'ff"bf+7\t;N))=oSA5Oy8`_ru]ǀ}0NZ{rp)" Š$jEQmmDm3*H`avzr-Xj̵aݖyxnk@X>V2F1F ?Eo__x7jsafz^C!RÆ0 $hMZ@LLh\l ׾T ozZk_{~Ki`)fbfyۏ1R 2 [7Wf)9qIb&dAb&1T|"FW ~+ .DJSB""1R[d}?G p<peoeݘg@%7_ ?i_|ӟswZUiF rvz6F#%Է4Mf6p7|/6/Zx{jP O{yրL$5 mMή?Yv;~O: BI'bj% >" 0@ax F_AJ.0}z믻?nu;EDExT!bJNareBRIՈ \ut})LE*2k"qm<1݈ņYuVl6$~CԡY{0<&b ҞsUЋ"ˇ7w;!#ky88O !!EAZ*mK$戀D15iSNRej2+ $fV3ä*"$TFڄ\H*)xYHZ)pityaDٮ:Ԭ> Gi.y/?}k^uxӑ~WsUH\Iu{  j 0= $ȶqzEZJĄئʅ,BڧVH.#b6;'e˞]-{5OofȥbNc..L*EK `p"\&%Wn> g>@X7QH6w޷q 1?/CC,CbjrxX[̥ֆH04MGTXnwR+Zd=a FNimS%h1WyDw݇ m̾)2Pc9vx/xwϸc$q)K TM/jcnj-`DR(6MW c66AyH<?u…v󽬒qa".jJ)dc @O5'2"xs@GO:HIrFp чt$p6pl0kZ KMjI2! & 'tcR)ڑ%-t=K+]xyy'ٴ=t2tGcGSnvs̋.}nĐ2eYܝT0få0$\ zv'ԑϋaaMDGLJ__}͟o e"$`5xVK'2QJɡ9 p, IxG|ԕov}mjfyQ1qU-X%DZ X3 Rdu;m D9-81ط2ڦHAױߍeaDˌ«Ha)f,u*cU^)!1z*Aa aR _wo_PysOfʔR9zPvl6"66懈*HWj}eB>bc>ۘ:r.B\ pu)u=mC];OƧ)_3ģnV(ݽGDV^N"(-N( @Χ`p/ޗ{/g7#…zɋ?=^Up!JkRsϒnY 4z1Gx-BT S6оh_l>/f{cyWpBN '3anu*f6t41 X"{!"#sP^a}o&2/>Nu< B!z߶ K}S-r)%ƨ˼&'̔XuTAD`\k@tgie&Cuw7KU7} _/HG mZ гݼ!!يWH7CiZ[B-SR¥iZrIb} "FH- J)5R&.F,f#TL LJGGY|302f2=ampyeƒg2!Y2^H 0Ѕ|ܐSz!RAӾth#"JmHCGn !c@/!R#XT )"A4+Nb\Do=YZgt[=8:G}S.f7eR٤֩U&n^އ!"xpwY)My RMbCpw0X:ZPj+: ©&f¥T)52ꈉ<3.`){_X_٘ ,ݓsgvm^}#?oOzٕͯwF"mMf Iq*bw4(Uӹlϵ41iР':~V5SQz~Vu  HRiڊ}?z'=u7cErnĥHg浇$0 ϬeSp"b C@#)eVk)zGwL5,T[-e,9 )c)*34sZ*i{XڄH}ypaf61Fe Q#ԉ)dTZ%ewbS gX=}ˆӮd:Ơ G۽OG=ǷONrt=:nmk c0 aI $$pghٮ/e]XgF5[bjL$łS ilJ?_I[nӡ$ 1$Q-,\{jN2&Ŵ sZߓM:LLJ~/^Ļo//~})"Z"[-`4!9éRSIODa@Lf#CFN# p.ڴnA& a "j|c LkGR1QL"BnDkeajz IkO^7k?K_gym/_wI~p-Z>ϽHS8m)F R"R6a$d*eׁDwDjp;\wg>?_"6z洘jjK880DT&DKz)KTߤVME٫o+kĥZth"11M [h_lfsdyD~):f<%ҐH*8Ce˒tfVv8R'@6wpW4 "Hzx⠒pMX) sBx4DFpkMu aN<"ԃYXP12z &TA殺t&0kEZMe!KyeքL wW|z?;e Dapv+`v_U7|Gx[n%2X3mXصgcYk@fr'MDU~_*w?:<_"R%GLS6{j%c_5X,#頶 jP \9IiB SWB0˞P ,Zښ !cfHXE2+>2`O R(>zzhT5ݹc~r<k.SZkVHxh tifyE@$E!eXTM!ۂI2:]BL <"(J: d­MӴw㳞w[⫾͛Kכ* FPG:o=YVB2MEop3!_Xpc),5{9"6 3wO}<<nx`7Zwl3Dke:8LB`aFD0XLSSDc9J$c}g2 ʄ(>y>~,3nA)b:U˜Oe0Ҷ 0F-m'B Vk14eap~׫|UJ!rx$IJ+5)DV[9pTZ.)lN7bnׇZ0OËGf 9cZdf'ͦoATP{_5[_xf a,F9f."6Re*ڹa1(HipRrDZ @>Q+Bã__S]J"633!eJ;0{ %jwSH;V"33Eudd'yA61l@XWK]Y 1Hd{pP@NRH-D fW@*Y H)#>LtYR3UtWS>6iɍr|es v#,Z>8_D )G_%E, oqt~?,!J9K4i3LrmBijīsjm;6MʹJڪ01:l*LĀ,"GGf,\tpxDf.\jke?"Ĉ}?\;Y-.6l\}=w=PDj8@1"V"!1sёHsj",c{ҕw}uC>t lDsR= Z!aDrၴ6TM ES9MkfnPs2MA1 Jʹ0mQk$u{?rfy%3*"ǃ(ѡ) Ym$ R"1"$ SwU5Ze!B 8wϻr~#k;#C(ER7RFsXXV~va@49=/Rj)%!4`fY5eRME &,HpnP":B8pZ<!ns0I =GBdν&!f1] q7:vgx||qz㋗.]W&"NN ]цpX>5B€DWIeJx2!Ċ')\j@ݵlD XȈtq]O[ʻqr;y8F0>3s1KXsGp$yҼQZCHz(kZM jkk',<3;::'TZˬƜ `lAtrܑ07:zD0Kfp3DZ֚~SeH3j Et\#ԉYMeF"ar9 U@ OME D QdcN6ݙ"nU/zc3@"61QAfZM/_m4fA tRkʊaE7!r}f pE4mT[IPR`Gx7=6S!;!#ޕ-hU'VJB\d]"e@"yF W0$H֖"G=vD|J@ {Z}'i HjL6Ƽ} DPSRjl\k 6p'iTiDĄp 0,|m5.VS T|=ɏ#߰iNM yKpǢcdiGAHLDaJ;hGGGljHZ-n=tyw69b0&R&b&ZL9[.~h$R'W[n@abdvD#m dd$P@6ͽ!+EW%b/}  ^֗rERdQ)XJ%dHmYk;MZn7V J飙2:jI]7E>t snˈbdqvkZ᥋?}7~Sl>n& )j僃v g~*fkkH_̺:rmH#l3JFJ@,P Pµ8;~~NJȴݸtw`5F_VSgQ8`C簸01_WvW;;w~ߝNOzcزX Vset|YwZ1B(̻4L kNfCÇEt)ӄRJ&mQ몪AAE}u 2MSkQi|vß5M73vxau2Xn6"p RN3 9}鳳fk}|ߝi)-PD#G&*)SUM|FMY)!H,TJ!f)ca֦EvsLNb!f:R%wBHHXKiE-<9F 1'O0 1]{?җ#>uCOV@nJ2ONNOONOzHm f́l,a",Ri{"EK:Z*vv|+zƥoDnJ@gYqMzul!RTbH-(4e`%"SKĥNL/uomYVn9ވȈȌLIO$ETDT@PD@(A鱡)$!!L(R,>E$1iI/"U Dܸs^k9sx0F>1{^k9dvD,?_r?f.|k􂋷H@X%fd-1"tS!h-2;Z˰nTA#X81,]!*&)%a-fDUb#N$w!%Qj&5͐1K?Ô#/9X[Ztyr^VAXlб璗{=+˓'aZE XDa<,ݬ, ,B)^3k)m=Q(KYMqXܽ_?^ceb,Z& bCxMXj؁RXsL3I`!uG4%4psGx|AY֫{_g3=߽7r&d-&opY1u}{HM [uDJ90aݛV4P:S8]57Ǧ##y+ij1GKSqff(hZ!TxJ0v[O~Ń7/xigMǂ3! Vx ZOusSP)U-b\ 8̄9\ #aW=[-6n8SOB Ph4`FHA,=1].BqlsYT먪Z5mkUp7, sH{I Q# #Nj)qU'4$ TV Q{+5ؗ5 RfIXjV榌(;vMO|Ͽy_{;nqǏkK)q{{ZVufZ]Uz)j9tp5Ir vq4* Xu*LqsZ}Mo.:vպ 2HS6$Zkm\Gӡ˩u"YT$u,ReL>iD2Xsk * juȒ7%%T %iF@EH#A"kKTm,mvDSUC74E=ZS\1JupbD1'"#&LȠ)剔?ٖL,ffN6 "Ifn%at(c ,ݢM0Uq?eҍ ==9MXjS+c-C\:<0mX-[)($ !! kt18W0SBfNȭ8VgfB)sJVPڨnU8 %Y]A#"sG$f꺮Kڼ9xon9\BDZkZX0|64lb)RHbff$L"S׍ŪXM8u9ZJażϒ$Dy)QA)!1R6~ t~K>lk†S7s2۴SJ0 Ct#p z fqmZ]C_M&!z QCl!C?)wkn𕒙)G8k-ws5ЦLf(]1 yYR攐zDS-ØrJ}O%K, 2b T$Et2NSC| x[vw[-hm>ys?yC_}U8bHDicsС)'mg0gA&uY{k`I]vwaΒ10xY3ST348q)e$R鷾]79Сc@  L@r5Ӡ An DEr5@liIE +bܕ" @[5m{'WG>w\q; PYk$b1YGRJ\ %{N*|"Ɣш00s$-i`߃`VW%ScF9w97j7sYx*9# Y0Y9R3'IH("qX2%Y!3nqOg/R9q `zͬ0NU-:B52:ap܁ro]Z[ѭc2ua&wO6z7_wCS)5`0NHDf`q$]N,3#NO,шqRADnnn '.o M)]w5:.fī) ĝ8!YU-@aK" +z=Iԓ8GE<8HN"oS/~?$>g2V&i""SfHP7_k eBv0%5G}_oyo.}3{yܓӎ.wv``ԥ% JWu#V6՞n.YEvv˵5u3Bə9G ]KCQ @fnnhtSJLk,\r N])?G&O.дb$`ָir .u}H4"@$R594KHj$ɸZ&oW _" 9kidB( C}-)O"2;q,eP3$V05s Ddjf~ n NS'GDDa4ˁL/8u($JL_f@6'&I8M B7bcafDfj SvUӏ׋/~ V6>l "bc{ "䣪]-BfQX ,DJ+뵖I;QPo|ܟ~Ϟ3B1, ^2 IDATA\ ,ekU׻;wuxbWwa66BĄ”Uĉ"" E8Krpf łYZ *0 7mjSbjVP@W`RyIRàq趱ȅP 1upHyVZ-5Σ{SD̤ic9w/֡f~WE_l9~\ڄj=Vujcy3mqs0i6>]ʙ % lǁMІbeDkH஫'oO|,ww⥩' kk5g.rD@ɀmmbm`J>"3->F1ͭ.ސ "_s޾jQm4=8 sŀ9HHyLn9* so%;q0 P M]5BĜm LO,e4jS&.O,k6kZH48,I<MմvvwLܼܧO:vs,뮝/B[^^q0ˈn )F "JiolJQbN"St*sU'~MoeFA#4CZ-vrA^~\|= A $z I\r$12y)e1aEb[oDZ m|UN#ͪȺBwla͒HJBqlĉS?g涵DEMX"(vw?|+ꄇ!v7^D~E/9v]8l.}͍w$"RZڥnu蠤4YLzmnIH)vy&YN"$w׭j ݫ:\Dd6yOMdvB0d7 @65)X#!0nTҒe6 3EL:6ŧզ-Zr6?'BLmHTmepJKD`L$!f$ sR07𔒈]Z }P,jx[S怿E`RR 3H"sx"CǖH  wHaplMUָLK e2$@J9dd69"҃oq{zccc>Qkq,u,uąi1 ckDZtޚ͒0DDf>ՆL8X-sVе;/~֙g]!|[,i@,>@2sP7&BNƯ)&Ր$bVu4Hn__}]6ftcϿ/z$,]w]-05,ݽkjL%.)Iɝr%9-6DjY|1cVk]/ ?t]ط<1f34W+eq2)AD‚(H"a =90AqQoAcg;zؿ:Oĵ>/s.:묳[X1\R3A4IRD,́բjNHuU8c$Z!>0cZekQm, 6- 6/mFuogAki qm^rcB7cdD~5ڴ5U'"fVj)m(f7o~_q _<쵱n&)l9:t@wBGWm:`]&KĒ;svؙl\[L$ bcd_vcaWFDsEBޯc1#x C j`"b8>oN;12ݰ$#_xWܧ_K0L &EY㭵XD, jifS?=_S#8U|2`|aSpDVtu뺔3g7?SPDl;L~d!"]]pǯڵF <إ/}}~7~j>yx7S|S6> U ce^/WQW5#"F`P&p0!:38 JUSM"DPpM)uZ[-}ѳ#GOv$jBDa$\|Z;&Ȝ͐Y$& !NW+9 w)㢗>)O9z ?{[ޤ/~ƢI 1 $D1̜&;Uec MgдcG#DA@5V 8#`NCXO=[D$Z;? M`J5}͂66ιncNࠕ~:pY?s{W]pqh + aƱUjѬiDDS!f)t!qJT/8?Ʀ7mut,Y9t@ )eqwօ,STO]qgLI$F04< qa+_yȑߠ\]/QDPRVJHk5 U69dW@"$uRT][k=Vtn^k Se0D )bgi'lQY 1ѣj?p缘olVpV"HC/'g BLIXBT̡%f8|x>r>Z?p$w) 0gW ܼȶsm͚Z $ >Ah,uoqOgpsX7~>!ЩSSwI294M]f"p(PsDDM[8DTU ;jC$e f\.۾KN=q;>_y3>Op@Lo( =i [Y|m * 1"Ntq6)gIYBl+F+7RJz|˛|έE:q-%Wc06#3Y(%"Գ@ 1uz6e@$6DGv1Ig4fjџЦ6@DpD35 slo2L``M Rk0d|&„diN+wV ܵ~w/۞{zzI̳%fZkVvv{;.zZ-Xݑl8ph)]8!i6qqxo_퍣GVG}R7M6zp6nVH)RUXRtq$'dID" <H0C=ϻˏ//?N,vjD̡$IVaIPD"usN I̬SXU-e b1kZ-`1$^f`JNBYDϥM[&ֻeXȭqtj#!ᦦ28PY@\PVERo:pstX mf8z.mOyWnv ,IҬ; {Z8i1nu-p8 eۆr .zk_T)fe=q4KL86aݴEf)F!*|@0t@w;zg5 60.W3oky/s/K^=83 :q?J}TZm̨k+?H$;,&92"gʹ8VM b"Y y:uIմ$IkLjpB@:&3kPZơzXH:,}꺔3!6S'0N|oϽwz/l˝aLS è]VCrXtXw0hc<~ݽuCgPKswg ج#$3'$lZedAnX@8dDdڈS4MU[s͗zSFT YW<{nvzrc+cd1:0A][%9'&+UMUkL"pS?kS$I-%4Du~ dvLˆF4ka`My$^iBZ-$4oDZ?TBLPk΅;77 -VqsN?pk_u=kL}1g}1gܡQV-1%uI I:pVZthH^qXXjZY#ZbnM$l. rΘnQ 0?`J11s4pH(<6`qL>ҪTr&I[n]}9+*||j NVkq+gt#z=97H]/ga3CJ^T10Äεj'n 8 󔞩Za01*Z:8@J]ؤ6)jZvpVɁi㵩֮մjwJ_VhU!=O+DP(}sc.+r766g]G\<(dZK)+j,9~62qɽ{G'~?8tPMgI 'g"bD$"VLL Ѕݛi3fnc>fv 󳮿wÏnnA[͔$ղ^#86AwS$N]ϜL0 -ő$eSdp2j02{m- 3QJ-Z!.#8M-0( 4:!^*!iMST 8播K)RZnoLޚO;tⓟw[T)~8y`IX.9ZAkVncCmMy:Uaθ\yjij0S3)F NBI@fFUp >X 5 ,`j:}<%:q/|>Aa>ߺ/z͇e8\S?EG1%fIXJhPRB"zD+(ͪk n,NXk+VY#+DssZ[D'lC`<ő Lhm\/vb!2N}q4D?x֙G͎%uHSrxfɄ^qSTzWN;O}\z뵻ps]Ԧt b̒Y7'1 ~o"{P)Ji=L]ݴ9"/ifSi]smoAlk|=a@w0UU"P ܴv4B]77" k3mqDGj^(Ԙ9 38:9&G/Ƒ(Z-D҃'ѲI4#B N :D*Q|ZSfG>t+{G%(Df|~_!:bZ֚תMkS^b03KYpDɴZ8 S#'&H$Yܻ<~ZD,,ɴVxAhDZF)dሳagΏ|ԛ@ܴ":1A"B6:So'o}w~{>y/W{H EC(9t1Ԏ$ %VP UPLYVk[y%(BQ ܴ_ܽgnWY1|Z{^ -4"Hr8E8(%!RP)Wi* ]Q#EH $H;}O9]1+Zsq?Uy͇5_m=91 -3E2 0r+,ֈpRH"!A,@L;>fַyTo o_v響7Ϟz;ɏy6=ÃXMO"!Y2anF̀aI aǔy&RQ#v]-Σj,nLDF,ZPf6=i:f0O HD9f$pKCx$ CjP0j_th),afmRl;_%/剧KwfdTrޗp6RpaDGh?~ϳ\;m MܻH)9Ν RqUޣ Zg3EjGbfW"H8GEdOP,ou׻ov| D)+_Ǿ%+/d}p')Ӿ(1R>8]\0 5@^5KLcGTE9`NRoyfȟ"8pڋ"9 S+ED$I#LM8雓R#a3",B=QMn8xധ}Aw㱀Ν;s{|㘓xƳ_sYeS"`{dK ѵAj8,ty6;qn,þaH|b S)di[c8Db0ZfFˣFr:1ԓJN4wg?~rS~Ʊ5Uwk#@ 0|aj٬}+ʗΎ;k@~LYjr濒1!jRzG Z}_" $b@Ra"}/gbS+w6F"̙So wkcYmpO M`M_kD0JC1|/ao%.S^];wW\| O:8].ZY&J%+M"jWvu ŹMgƔ!=ٰXDE#Y"u5Cb7" HB){Fӟ-̄&a6, RN`9oA`܃Yr |u]-L]#Fht '^vsy`Fo͇ika5jc Sas'mj7U,dvH1Q1pFD ^UB[sdyڷ,H(RYh¨$DZFbJ-\>umo~6[8WW9sp-rI)/k'V@%s Ø\Y#3CLI&,7QTpkacB9GDL# !Y𐗟{O/?[v1G"7[;ǎө.J ,9f=bŰXdpM8jWw_γ~G>oaq 3dn6kp:|ck9س^%aIAx'ryp?L5EV$ȾSpSm=׾K@D F蝂UCA[#B"چQ%QKI1jҩ(`8ET*Y8KM21)'Tj3& q›:4m#!&&AB0m&nRba'$wHZj16,=S3|',=N/?X<+ƅ|k?{߯w]ArHj- 2CT sa+Lhؚ#bȌo6#6_0",rT@&fwblcCHG4e 96$p!$uJnVj"0p;յ?|c_nz{ Yj]\w͗ 4s7s(UH$;䎧1-G +|ys_{'ƵWpuu6u Q<(+,{.ig?׮:"q&pSc@DZhĂ\ G)%#yfL`j:Ku%ք | ǟr•뇯;wVV]YN{n~rsߥ5:Je7EFS%iK$KhA"Dl88`4 !`byk׉gR1 6 7;ԋ\o\8^OC=ל|;n\LHSd $̎@)s K޹`RQu<'6[˲TB|5) HKptc$r"dXnCkȟ7@, G`Jx`j؆ѬI펽W|;{mApoˡ6h6ssPre۲RwR=E "@ðlS[&{NO[= u9jks7LC3BY[̳f})K 7(Ӭq\+ 9+G(Ynq+<&O~ƭxJ ',F"e&@ƈp0Q'G?|eD#o;^^O=SzA"@È OYFdXYqa0L_yT)5ɓe(̥T.bȢa!63 VAw wb"ĵHA" 3""n~+岶~׿㤫-[??Dn, )3,8iSLDJ%$0՝諟xooӟi8fPSkT`meV|K|m94ΙCIa@OND`ƁkR+TRj%.!r+ð6 R89{MwKRID7t!J<_~ғA3c[j`pw"n˅BC.Y51ܬ֚eg<9Z b\n,6m9o`K)ܡ Ck R[B$Qe@0KDŽ_ @66a3 n*HiU|>q9$" a\6)@0 IDAT1e"=ֲG=}/39wZ[n݌yVx>;Q&UJ&]1 Mz8r ڦ DJ1 dg璑>wu]'Rrj454lbrD3A)ݸq?{_+ 裎;kz99 [nYf!@$*H2a }"c9KLY.'Fk̥vI/D*~[kcf=$ӄ QMW!"PBxSZ( d/Lgpw i),e}Gs^򁗾~~CRe=ub?茇_|[ifޚ~o3HQx @@nMj b+~RDj%*oWEDY R rpP1\k 'lR Fd{]?( o.w߶}E_ҙO{S^BrlDf H2rquϊp-2tArIazj kZNKֈ9\ݚkB|{My b愀+j+!@&)ی|O;~n"%HJuwmz;Wׯ7_{7'o.lfZۺu۶:[wO{~ ޭ5kØ<wͦbr 0m\R;B")Yv(@ð4⒖!kf@z6jkc'#xӃVy|+_Lz ?{ ~0O|'$ۘRdX́0"H[+u tӱY[`S#ʬnwwSqin9 ͂pBֆL711_d6G6ňIDܼiwk-Y-|~a@p"g@DNf5" ʣp M4b#?~ܣϝyι7ǽ6텈>ʗ_KvM-Z˭X44mq#yGfj$ORQke)*KMQ1&9D@ |PSFD`u}غƹ3۹kէ?YŇ<;t&'/Dظ$R+8 JH"U M@bPݓP=577m8xN%-NDI08)#/oEaiIĚP ^Lvu˯zˎȭᮓuE7=@ Dl,֖*L!ڨZk憘Ru\JKk6bXL8 m/{IB,|fJ,0'\u Em_puD:'nߖѷU_<6]lGm_xb P""mCkH(aԦ~aL[=m'z'ٖ-}}jN}Їwßuu(0s$$cYcjRRD!99(&w,yMY>Dni)Ԛ4DQ<`3m]~T늈u>/>E@"ąj!t++k[ɒ%SsD"q~iBhHܭ4KcLę ;"Z0 #٬Yd'V&Sk+yvﻮ\̥@nfzj/c)'lO3પLH(b_|;ăz׶q/|^{.tmNw WfXjH;ַ9"qȏ:87DBBRpH2[k![f1djY*n[.cS MDN_$'~1+Y<6o|cuu=F{k0aԹ7ͼծ D 4.*<߹_ܷ+gծJ95ka2](<[YYY__]*Ԏ ./崓py?Z?@KkNzqD=R D6@f!T4Ysh bf45Ϸ*n.e:MrG?uxS0G[p7! Pj MIim0kN81mf=ܓZulc#DFH0s!iϚ F@I$8;E qkC?݄H85hj˜&4k,@ h9D^g\?xΣ~ěz+/V]ϥSO|2iO>|ٶĄR0@[CbDbr0p~u"B)3L9N[XT\FPKhMBDR jv\Yٹ箯xm++s߾q}W]͵ma-""N H*B傋d5 12H61;j}7#J\,Ƀrsm 8f' , #XdI ;ÿ޿~ß'2[,Z)],ȜI("`f7EԹvk_{yG>KWoqaDn[Aq9Z\7,Ӑk9qB8r* 91$Wp)';G4jjt @PJ@):CX;7vO<ԇk\ٖ-HatKভEDvSP6IHYpn-B,ކezBq*mz=a@lV0,KwܻSyX OH{~=Mo:?87ɷZ_҅)2"AJ, Rl0'1<Yʖ;~o|kGw3w_~:JחZ^Lpn<ܬS75l CW]yO{Jur>jSbg3N*0dc%aVJ!hp4wL@3͢`9Ab &TrŝNw=omm?/3۶}5}(_xkh My =mLzwo~&8T:sArBZ)u4ׄI2DDR 36Ӻ3t\5FY"U76 aK?EXȭ-6HhDH,R7϶I A$3uӀhuw麵G|#z=>=whG^uήܬ۲TݍY|bJNm iO҇N=Z"&lkD Q*Dp)R B4D !n*vĔ9vU#6Lnvcז-[{E}ыx/wKMۀU'ZJsD~֯bH"Z3D&)Ȍc[n2fnJҳP$ɄXE"* 3QD%U6 0}!ڰ4U)i֣YݱEV ;wЁ~8! \sČCSBEM1T[!A7+_~=~^'M b8Y& YaSk-ZŠq2܌gM>@y${r! Nj%|8}u@O_WD2 dN4MEjk4Zmh}o]϶N'(3Wm# yy64!4D.6"9m3[DBA pRM}Qz,O Sf-ԚRKKݶ2OcM㎻o<7vΫr3{&2FܭRIQ2Bu\!ԞǍæMJa)0`TB5@P Bdx|8e [@#qyN歈$;w}};T"D$B]Ǫ6 ]]jck }_J!DuG@Re#w/|ӮWru\;3l"@JDkrc/tml8Ԇ#Dhؿ6{wSg[KF33%垝"B,̜lPcR*qnc"苪Lrhfմ ! DOD>xH٧S𸣏~ۛtg?t>GF6N6f=m8%"~e AUb)n6.!\nCMn6٦D"¥J*4v⦝y*"55Dhea@~:jnZSu *\I횅65-Q ez],7=Dٱͬy@֑7k+wϻӟ<~Ν>qqk^7&i[7e NU,yHx 'tM"!THYq4)qwy^N`/a YNF8# I6唟K)\Bks5pty!aT:黮iodteGWYj4Hݳ;L))H0M#`zd(")R 2gjf-\cpq\aJ12&U6637 36 .MqDh -2< !qpnj5˭[xHiE$"@It\JAb]xꓟ߾}.^~|G?s-gF $i@"S""D G 1 Jש0Aل4p9(0twa]-gDAo Qq0 fAD: SƝP,K!o>LMLrF0AvKq1u'|oÙ?{)?ԏ]\o q IEPZXܼ1Q8瓬 þkm|;人Ղj1SmC9Gf3d$q,''͔2z0CDhv^9tH[?8w7#7w;Z7y؁KkM`$"1a.!WDH{h[Ӻ7>{ު[3q6F4ZYq)- bFT4m2DB-D4QY`({9gy~C{wIԸgk:wo~?an `%0(窑@bxMj$*T=:L]aHR00LӴ^J(%وJ$$ecx,A*zJCYO@Ȓ] Mo罋O7%o9~饘$8}taN0Ca# |xDqH@ !qD,EϒP^?d23 TQ" Q ܽ"$DT t?`DtÏ=?SOz٫mVZLvYeU4F(I I[/c޺JSъy@ln>fw LD&RbP>>"YY%vinX)w;mV@1G3tKp`LM3 Y 11j5Q@Dtj"n<_mxWϳG^IDTK2II'늊MEDmA5*C-bQbLG=Af%f2TX4oc*.| 0i%6U}hk W?,"nykf̙1ϛ~4?v/z3>/^O N=FNOZ~ƌM'cN=?/|>? v{dFВ>jL3ԽU-02 <<|XCJsc&榬0AJIHT+#Bd8~1|&?|=?q_u|Pz@!kǬ1 K\y3J} Tʺ]6MfnŦ.QƾixZUFn"qi\wEkOH ½"HnA"} &"lsu7 290ʼnvY~ָE'XpxXo b(9GDHkļ,_ $|/珝\V[?w>7͙3YL֪,0/ai] iQI#y@Waa}f&>"D(!I8sDv/T!"F)2)Ԣ B>}^O-k/ᣏ=D4c\~V%B2$pk26=Qolt {⛮Ϻݺ'NI2wm IkRN2 {?yOeoŧ`YE+tg=*.}@ $.Hz!iーe/0ry& ߵÆ,"y.vkZoX7w?O'o;vQ{xf827r0-c`Y V Gbu^:QIm4Ǩ}DD9uZtjM2ƬMT*Q8vM'-;-1)]\3^#0fME<,o s_#ۨ#x n4"m < viP:$@![쌘\L,R9 nng9زH)BB[Y*ٶ]^7ݺ1~,sɓw=^x| G TdXT*t"5i":m7Y Iۖ01zZ$5h( D%i$BBVT[}_z>dDaB,jGgmD@`}睢*Z.`0ia a #4ʬe0e`m%ĘGy|F6F}y5!GVQ%*"Ie!X#Z3WqUˑ}67`EJtbZ9y}vg>)_vE.Ǽ1ۼ-Pil>x5؇DUbZY=G1[_p"0e(59ӱ:j8ID0&-"F9"B3UX>:(HOG#PD7D>>G@Pv@e,M2"&0N͆! V 3w󆙁4!|t܍ 1pp, =-mY FL >xqe_y?&'3/7›/9>˿qBHY{nVpTj^i^ZIIH^x"+Am^< I3֬\Ԙv>ϟzgN<ċ݌K79K };2!IffM$"@TU+SfnT0Z9wmo'?ksp $G@݉p98\8o~Ϲ:yUK.1eB3qgADAI"o 3ig.pM0Gl)HO?9KypOxs1M/K>ld0 jGZ6I%$C0rN>FHQHLmA@-ƘHABFkT'f1轏 Jefa,H͆JYE&w}F"9xEZ "G0,D\@>,HiOD$RZGLseGcD!2܏?J&( 4dFx5e,dy+ |x5 "݊UܙRx43qنfFϴĄޑ͈h7Vgz"@2 قw,Bkۘ2-^)~/{S~%^`>^E+"*441ҏ/\nU{&6o{8ƀr3Q,re@}>v14.@s;jM#DbK"Ә-<)Da~\c8Gf[_1;D>W};Fݺ"q> Bֆ2qtLPz-Lh@B@,LHHd뽀e p4@nޙ  $n Oe!\z7>;?38v"0!bx:<>*UG X!@ֵ'.YZ PtP,Hc m&h\8Xq T؉%;໾/W\L+Y薢J4Ddm SQҲ[bY&2 ԏ0X!]tUcxQ_unjystpn3 2kdIӊ[G|=釞{;u?ox)?.O$,9LkK@ҩI&B[5VA1@B&EDDXRoDD0dQIM9\tG?zpX]~;>;M>F-11U2p1tjZu% 8oFҘ1Ò 3ƨ0"K*pC {Btbqgfa,Y_?v|pOӯ|{u_|ͅ^޴%Ƅγ }$xz>pD ^yxp9nXnZJJFʂfBc~@bF`aȬ0ёZYX܉QT1"c(Q93"9"2nQ&bi^ @#B HMyBxUk Msq7olW?|jzʏ/ykᛣoVL#Vh"ی fH­Wմwl@aVTbO$x T#FD>MYxp !DŽVn f6hܽ[(2gE"*2kS.NZD ڦ9<{SWoOǎED,>"GsȢkC*[F~W`Z_mK[IP[өIc$ H*3KC,.m=܉X# rGʈpX]|?>ki?"p$`B.#E 6i[ +@Ub%0gDAfDrtd0$D@@}3I2+'[Ɖ #/}'g~]w{qOqY@FX<"|xfv22ͶϽk}*ǬlDJkPQ/n)/1DRiZGF˓ Udmd6Gه ("zTk զ&܊qV# lfT>.LeF`".oZ6lU:}7}+$LEE0̆g9=5YUJU00#0c<"Df[dOI$i$Len`f$bOX|cp& ϪY!B kiz}:87O}5O~yt1:y@dhc0Cb!P"r'Hd-'VcȈž;@AZ)1GfJ {2MXzጢ'R* I"Wh;iS֖snZ6҈JZu@Dwg.d0jDYc ={'J{jG 3!֐tg SWDk6 h}FHQbGGB5K4gOHǘ!$A-_ r{晥M}|fBLK7az$*>"& Y1Հ<2E5q/@D`&Qd7c۟_X;i'{5t[cS(`c+ӑyZ7mR{BflY颧CFEq^f9덐 Hý1]tX^'_5?Ϟ|/!&\T'i{nyw^`ltȯ"!QfI)< G Zn T,Ҧ95M t> X"T,h߾~-=,An;~ٳ}w?~셻BDF[9"\զZjo%}1*PYFDBu8Ҽn (G>l rdBY!e%"<y(Tf1F/ E1}a.̙*da=){kU%N6&B$a$BQ4VL"V{cFD&,BG ݻ/9}ZFݓW]uu][_|S.Cz2ìN5UQQ, Ziowl@G_}1jH6G(5TGjB"Vj{d3'֏|Sx@HR 1kkj+e0 !mbAmѹ|s׷p1E!3= ڤӴ"*k፨`a! C((IW&q;B/Xna@cRIc-*q"Ξn^t-LJ9vgwW T9afkؓlx.C}̨,6X 4iCf@/F|Y*lGVՔ IDATTZ@&^^yDE A7F&Fci56V 6Cb@q˂Xp,7# SkSHu$!DD'2 !y.3yGǘÇ0(ʳq,ȒFAc;Cf2 Hב L8]tљ3grԃs w/~ET>!xy`#b3B1gkchDm&3@c6C.n,zZ)>~E7~wVP*`G-[}ҵ].%2s%f S&Fwsy(DTp e 뫗6:d٩_y[x3Ͼ9w6_{zό"'TwDBbHp_Jn鑑,*҇>SH  3WYR]lJ[~T-Ty&HAF yѽ\rEX=7wk}w#DX̹; V+E2䖻@Ujw6z{z!*&{>o,Uk+ڐxwbIUS,JVh_&O.*mZQ<NĨme"7a7# qڦ6iDn7#R>c0%1gF@yf6@$&m*kkKl6$c)lUF ˰Wj=lx H }@&B3Kc*ATw𦗽b_ SbӧO??|_OqtT:hHڤ5J ltB"iiD-2* L:.N;rόD<34" #bI>/!*9HM3+f 2w4qz o+|df趟W/_r?gGznj1@X|Z 1BnD6}sf@c bYoXGgΜ0G+sYP`'>s^T*(=2M:Zkmj`o6@cXe:"ـ2/s9ia惉^r߇?UO|΍r}p;+o7ԊRU3X JJLIf^0Kwd=#$*[%"GbO+,5<)< aK6&jdk vwoK IK/~5oO;(CfLSզ$D$IfA?EڴZ#bYJv,{&2A1"jk":paV9<5 ִEMp`Q$ܙh# &^) ,pVc@8212(<<#*ígDyZOM؀4UJ᧔;d4ϣnDFX$1NDı )W:p&Dlg??cNc<ރu2SD.7 rx]΄e+nPG5/pYzuB*N%0 {f2o=,qAi!#B;GO&3qwӟE?\^0#$B6Z[҆HbfeMhncrdb"֧Q ̌tj$r⪫W=|w7n=yrA8/7D,LA,|Qp/PfQkT\<Ch6 XͺAK.9Ǿu;瑖3;uo{o=׽{ϼV nF [ %YZBe1gBxb3QEZӪ Y|S "$fѰE~֓[U2cd`dʰ>G3C߻yxz6D \R{#B#b$(d$^0Cz=w?}YS!pf榚$Ҧ)͜Y&սO ֑!JKgD (É!b`kڦUCd.+3lH jfͬg.ds%l,/FD2O]T40/CrBdU@G;>ex[>]oy޿)OopXZY@&lv.@p1H @p\vK1zp/ZJ,+:#05") k oI=I#Y< 5I~td c %DUDYIk@"h p@؜c"VaZ*"-„3XeZjbUHrƯ2㧩a)2d@f h7 ӴՉ9Wo?uqx/qptsP}KKh8a6Vg}9R뺐n@DTnHZ\Ns$>" 2|*0N-(2m{ޟSX_;&3?~嗿qg_>q{~=LicupâHfj@L钒A"JD"fflcc9"ǠznX4M+aDLbmFfN@znN$LHPL$fZ5Y &[;,4mmKʄ>32WX YԘ."}cwH7 Bt#FL4O1Q:8+$td _uw| @쓙jnxYz3#Y`y}9g$]&2C[Aȭ%J0e v3sǼ-L4)fBj?p:uW6OcW}/:_Փx왌GqX@6ZñIĔ@hEp33& H6GD @"n>EIhI{*N{l9<0j~8M`$M͛5> @U ;[f"= +GIl-mxP,ѷ ۑ#/#gDbf֊D瞥t[iHN'E2W"jN ; 4dz{C W#U_aHfaK& br),܃ @ p+QTX!"V?PJA"抾adq{?w_⊟yonϝ%L"!&@a@H*J¡Ӕerࣰ ` =D -3Y${<ƮHM-Uh"dİaw U0|`<D"ӼI2y0 #bY 2ԋ|%'pINLmnffZ@icLiTTp3&#iaJTS%2=ef*hݲ!Iucݹ3-W~;W<{Jyˮ~wso 1@8)"yf{ަa ֗> #1FuY"-̃X2|`8@(3fau3!1ͦNo>z|-0Q9" lwa9Dز- Mm\$fp۝[ 2 "y1cBFmPUe{$1C' 4×VD!cX5 "2W gZ$QU*--#cW\~#_>cq+og>o=K>d-K=L Y;3$bH,,R' wQ@s@$˲rHs{6Q)0Se:h% fmLJ_"M,znK-c.MuⴾpW_ ͑GLEמ}KgEKfVF=Cf$54QՉy-~tjH=bqwQ}ja_݁tH}ٝ߇{ F LQUtTalwBD%G4H\g16AXeCyD%pɭFѭ/ս:1ۨ<$}Y$5B '&nND aIMDȪSo"Һu"6 wiʬ6 F2-@VzkWUf&hE'88+^by@{/{w]y>z+fX`u`F /wB #"+"NrMC{Eij f;7?4hY'/͓ "sHh(,H@̪ư r'T$ϪtȬB> QIJ3=ܴMޱĥg>rLaR"$v5#B0#TUM%Vf6,!s¶Owޫ)Huc0foOU"0}x,\e9}^#o}߇~m7^ve?/=yȣopy6F`gW{x#3KU""&FIhID5p_e$@ +`)vW?W~WN8aǶY \^ *p"XJnW<84ߝIDJ\F*bU nj* ʆ# Gn$dYvcnm*,RވCJRm )=0#[*y./3 1ܚT,)+ n~{+]r!ޞ]/zw]yK +`fDM83lDֆD8*u)ܼ|a5G"e13"I@ Q[f @@QiMY_4fnSC H\buV ˤmÈB[H^Ȥ65ۃ(VLRD tw熴5be8@zߥu&d.U)_ۈd27VjmJ\0pG$*}&1;!ڏgGߝ=G⩓̼7OW?yǿyÛn6˅ N1FTGlykKH&6&Depׅݶn'=&n^4> OybsQN)p 2*=D IX=lhmk-2B}v7H lЖA H"TD+|,剏Di{4&&w1341SfЖfD\(f@X 3$D5#V@P ưe*-"2}d&-Qw6_pӠ6M~%_C?z5_ JncM`qiJ6҆4H6Uhc"GJSS&Lz$QȌjH Mm[ڦ W"5 Sdu'=` fbd&6)ƀ@D|[}yu2uZS" WbDbf,nV$i$~+eQ]G*iP7HLY&HnCȓOkcSNf9z~^_?X^+~/Sg 66$fi!-YD&i ,MjJ2YIjY?4Qa Y1n$43DnLDdI7a6Ӳ UCj@$AfVѩpBX|Yeef RB-b4d!0#$P&3G"5\`(:LYpsT:=RUX0e&"55(JfΟ˾ⵯםֽ{ׁoyS~ \@Bn D =6L`J@$Sm#I`,Kx"tuD0_hbƠL&r7TefiMtfQy֩aѣ=,`ޑyillTID'OHT?Bձ(G"# W 6EZ Lb$R]WnEr4w`mc qX`QRa$F2%;/O?zɓ̩G|UWĥǎ,cVu 2nH==F\-f`ܦIUi}Y< sܲY,/H8OxUsGI%IXsaЩUJtXI,a1z/pRF GcDT4 @H b7wH$i f#L8,I(:¢p!; Y_a3B3D(;>@۱ !62Y K- qcGឃ%~4w^G/xÏˏ~ƳYUu1 3<H5 F`yRfFP۽C$ P΄"2!bĈH|t^ˈ1ԧ9q{G ;FH$\Џz&L40@a1 nX'$r4"\ʯeciDaa L\ pz* J̇Np$.0 )Je1HEFڤ5VddVd?s|8PR@&`JDdY9 kH*Dlx$ F-7l/H=۞>׽7/~O<7_7~?_wGHYcfҒЖx0 $-ys47#FQ((*q1m61lm=WƭH&dHr$rMk_{ _eDYUIڤm]JPZ0m?w=go6\1[vB1͛Ydň!IkM* 1Y$,a DrxY (âLI,JXBYn/>o}>N ;~M_?;sFEr>.cIDa,` PjpSb w$ε~R2܇uK@ªL ܬ/;,.Zxb5j+DAinacY랬XTX $E XzDYEd+J b)zif0 0Ghz`2T0$Dp0&H1<%fQUDwsT<оp=}泟sG/*,bGk_+=_Ns$0:ӱD63-   PuVX[x6{T|[1i݌jfc_I",ŁӤSPtW6Yif>LDNXwq(DŽ"2 sfԨKADK&FiSb:#h542!'"9#G6*^ ң, N,U!#h}Ϋ^sۦx>ީ#Ї5ei߃D\k'fn5aQvfp;2y 7_eRF7@$bpnY0L GLp}AVn"D\&"XA+HB ̭ '}!7TD! ]o(.ik@;3 IEojBԿ bC8Ik,b" 920U]{;r7=yB 9D&36x8& "#{GD5ӣȈ4ļcm?a/[~K.n?W0> Uݎ{ov,¢t+8~R"D,H(UՒ!kr)"D+G,w B )aX@G@@)kOEjkLwz4EeIq"z^efr dRzXݛX4CѽΞ{nl@[Ͽ7o=?0aΝm "QEgHE$*p1v[JO7Pi*pX2/K i>z'$̌U&l*/J\!3ׁdEMDD "ߒ﹏MM󴷷9{" Y \ɾHDBĐ)3#ax23IA]6xhzG+,U"{#<#Dt3ӿ=hgWퟺ/|>y ?[nog}CsgDDDۄe2O$R6peܴ5@[2La=Éy]J!0#QS`x-#U,[_A,_С5+8vQ!"FbX=W F\̶)2I݅)kQOD7c*X-()21#qe$J@DeyvzÃHc۾~>'3?~ۿkߟ;Gx̩ٳٴ@,Z[*ؔfY\exD@tH-sx=@7>OhXB,[̛9D)g7֘b,/B4SkX156Jό$i$R6ZQ ⨜JBRmM"ѝ֍A";4&,a*,}L,\J9"6Q"B}DLk[q]w&&(MffsB"R&Ef"&BGӬ{| ݓ{Om%z=1SnHͬ*n,X랱0<<MlcY܍eBĴaaz%@ y[*2q,= =XEEhe;OJh|an} F"31!27ݖtDT# 9BUügk}UrYwRUX%:#Kf]я=k<"_W|}F7faiB'ܝM{,:(y @B"JE7rp1eAb$mWYD0DžC>)cx$C*FX0.5nJ$L HDZFpC$r"! !3ԄeW̗\r{MSfRT**-K Jz5(1eF !YE[#"ȄuB"!.q~n_':uoԧo~i­hf8F1VNĐc@j3C&b{@`"U} 523cE612 NSc& Gpn $bQDD RB5EE(,2ѣ=;qBt6{N, H\K* )1j)lL vA6lҚ6E&8D@HN=y> ?w{?AzǛƛoy?G?ڡz*ǀ$ADicToGBVL`3W>fi>s,pk_^~Es#2!> F{_ѦI$&UnD&@ˆXBQZrD"fm{8D'H Bڴ&,A'+vV"UdnY< ;-;c U@.™8\'bccTۓ1,|_8EWޣeP/şW?I֧~2LP k<%$$,#xDڄ)Fy˅ ":M{{7>~FT?]H~pp{}X@:fD"yFPۙIb-Yed'DT >~_/}sxL.j RdRcx5DHvwZг0SfJk""*!da 1 ;O}{}'@ic}X!09{>;=0FA@FdNwHRP]Y7 @DD+23 ABkœ/nztx6eצCYTLޭBI~7>TP1 k#fpcI)!MښaMmX[cїu].V0Nc9"#*RqYiJSD$n˂2G(1t,a!$0_v;+q~ Q{G0O$,QsZ} +fyGnyӞ_; @f=z>k]G6{i&$b)uoa"D a67PDbYfHx{ u၄1"2!,vpKH"Ǽoݭ^BU"(3 WKP baEb f{4%^z|//~;qkHTL#4(z>P7)!hEVeU@ H^HaQ s_% `Tb8B BP dDE8I23|xdc]SܽL$"B&Kk%/cn+}X 1 '.9_wu>uE=y.=z/x~~3ml1L7ϕUT Y' ը^'͓֩(K$ +֙WBdxёjNddJTeS.vnafc s, "kjBĶ/L0=#•sb5-O ,qH7ӑrͬ{] t IDAT;'zjP|Qn{f Ixu^Š,p'afI؝)/M7rq2ɓ{;/ѷ,Sˌ6OY&mHc98w>3”AUYED'L%FU !ETm,HȈ(PGAml^c> U_îxX[E XŀfHnt7O@j*ĢR&\xH6!y3{ oL=!4n=◼;^ǼO8a&$"ֈ~Q/VLr0cF_i+M 8 gB1v[ØTYB-r̜W"@]PpDƲ*Ì7{/i\rRQ(t a<#S"C0J>_.+I ꑌ[uP.IVmEk\2=#3@C\8}ï;+ #G/9s?n׾?J cEDDV&N ,{Dij:E*O!p&DJȐ1)EG7\}/;&eqvEr23#WˣK=2kUN ΞĄDM9|0zFbP" _OHA* r\lI(s&J{LuDTZF ^zǽyի~E_!>e;v|k:tCX 26X 2֘ &&eim@մH$,3 ͗։}-P̽ZR;\m}Gh|!. !B;<޻ fzbf010 "fl=ldAH(% m+3bIۆXʘ%KdsgW}zt'O|/ҧ/^ΟKpsaB̀乲\=nfI$Æ5XxWn|[?d*QDba2#{H,FTOަ- $3d.Hۍek6 SH22,(X5]JY͌Xǎeֺn^>~bnS)#2",1+PČn#<u܉P7tC{xMϪ{~'I`9CB-/Z`4`#)$M@HAQ9x"Xm RxL@ds׵+^׵}ȑd3GZkZk119ꦫ=}ǎ*E`4 T4 5SSˤ2  #[8"Fχ7Bb=_'0V!9!I04fY%cn@,\ 2c1&*w:e~˯ֆT~wg]g"!N Q0; 'OK:$vY6>Mس8m~cR"q! 8bM* E)+)ӃR9{ ~R@*Jwcܤ4; Ez #TzRJNB2ץ @q~W\unsT8cykiA#YZ^|] @Xmo.aXT`~r(u Al;lo푉DY,pl H+)T|Hb3 DRjn[k/xjcc 8ل!E LT#:+ 0)inLZ萎'ʼr%] :̣7>o|Áz!bDίʵ7]?O2ko-" -nI0dRPrΉ49ryoڧ<Őt)CvEҊ-E KA@T Ȗ(!rMsxX,[D JFps:,y]?ud%Wn2@7.;@)M{Lj:Rx( DpZgF;0bmdLDYǏ_ u뱣=v2r䤮8^?xlFf[ZmUYy=P@L\%Id'Nff" 4c;P8X7S$: Nz̠]5,\# CEۄy(cΧB`Te$LX!bD0 #1"dY[矶fډ28KΡ02dq;]suKZ ?r 5<&@Z3 ̒D*HK$̴\.%=u U׮uZPt Ye9VJ KL>7I̘2 2Sĥ jF8M@0bQ֖n$B!oO=[+""Hf@ B$apU0a25m"Vp;cA4AA[m8wGoM~.kq_=旭NB{w3i#n:MjT[)D"L1U!Ι&6 DafBȖOhm j:8:WҔ f{G$s2"Y%9oBD֧{g~Hd]sb&sSYX"zk9'# "BIE7K"de'ƛ~CvSBs=W7μǮ_芟@sU21;RD$ La>kk鶢 RLnR䣋1d(K%{nHoCr\8fEjBpiejHPj&@DRjvY]F\ '6[ ::I)h[ R `"CGXJf~77}C:9`bDd;/ Lw~nk.{`Cq9{@mV̘r)B(L٤TqEQ;"nB(ȥ[g7fjjI2ED D)Ldm#).ÀN zϮKAxWRz@!fԬjr< gRٺpy]>~oou7:iscn{ njL2ыfnXmlF8D1e0AD|f):G|CޛF mrULBJAb Z6e^JDjHnTJ%) (9-?|هڜ"l]CDL‰pVIEt¼w `vS0 f7gx›SUվ=^x-c͏[ٷ(_wA#r1 jYaļX!.OuWZާ5@"Ąn}\mlb 1,* ZkަI[edB$q'TՁ H`1.AyԀR0 ڤ!3i"\#YR$JDHa]{a0_M-_ED/~hZIu#; `踵eڅ@ۄcFB@$¾:yO࡭Q8#)Q"BR+'tlEb) u\MP;!kn+DuEr(â-"HR@fn]EJ=1I9ğHJ  8^w5fl|&/5۹rpc&B$@ں7]y_vءC2PYzx]_Y{oqL'Ro]{ϰ;0 "yz 3),S¤rZrcKPE:݈#nf$̹̈zH݉(BVzwpֺNi" J0qɦMy)֚ͺZ`qGGly#'Qz-X.w?vn>UD }Ą`W]ddW$`"QI[3f澋b_錫{hRHr. mճavy2swڢ+fm{kX8ZnN+/B,֦Q -Bh&:0NI$f$" itd7w*=wD(Z߿'Go:uj}}X8o񌧟?oiD.,M{6-6wO;Y ָaht aZbX_w7@7m1I=qBs*`f/ϋH̡ǭ1,j)@LZai2uR,O$b @\E94OMn^!"_{[OuϺ|O!/rHL(HrZĺ 8`)""]w}?}޳B93OeH"̻KU"rZJOL$ݴWC)RYXJ6NZɷ01; ̴b$I1 d7$VZޝb&1"o'HM ic]r{~smn^c?7?_ Y$qswWw'. n!,"̓5)&|!nM?{ݿ;Y"!# 0kW Z4Di5\ IY0inݜhsa6ZV&@t;"Pjiݝ`x=RrSg\͙H " YWUp37#fksϹ䆛:vD x#{V覘pc"wLk"$=w\)_AݴmkC{ܭ.-+YWpi2i:, TƕWԦ1ٹs?$[6*AD uR#6+uqsUPkADTDR -> Y4&"&E|{/=o~3{9o9~Kz0QKe&B"bCR"3# DŲXaѧަtsIaՐ5sP&@Wuw&4K 6mg@ # r5DJ*1n43F'0Q}y5^{ְ/VD, ._qkbmm"ԏeMgKiȴX[_,HD I?Nyon ]YDJ6lZW Ov(n IDATQ2 ={U!4Lr^Jq2NHUC #0L# ^2tɏ5l0Z#ȻVi!̈{՝w>㆛o8xn>X~7WG>kbmxV{" O5¬,mrUDܾ7_sɻ?}F}ĀD]U=][gpi彛*`-{4#i$=‘Q%15$,CYgYgKZ+!<u ᑏ&$vw(H I.ۜ`,JJ^Ԓ3͋\Й~G/|ԭGؿsso}_ ":$fWGxϾ}L] $ 1ɜ33 uB4 wB\t7 "bvb7us4w4"auݼO8i{;1&hTS%? &j7$O+a^,r!IEwLCCnS#qX:͍͝/{%\{Y0,πx;ᖯgm?uM[wU@lx ҇஡== 9 RCͨ.^W[m\FWRa`G9 IBQE&vܺNc'_qk@P, JDRXamlD8-YDE2•Qm\vp'!)}\[>OW>_~巼8(u7ES%=r4u8ۖbv@8 HE#g|Dݙy_xmGw`ov +_ӫ|$9f@ּ^HEn]5*,۴rY^%2C*(a 5/ kxXonjJloGP!bDԼ0Qdc*Ej[/EbA&Fi2P"8B8 P>WXrEoD+_l>U4!2Lm2U@S3H(H $0cRW݁8vhidbZw7n]sYȞB$aa(x`g!-j=瞋rYbX BTpwu@J5l'`(/9}ZTDZHƜ(`ꐴOwmnz)׼g_]WWQ4D(20I wַ#\!O|Ϲ]|#?'O/ @VqzOmO $>j@߆,1 B)u۬E*i"pa9anWpfΐ!Y 3 pD$efB¹qD)C4u-L];yaUHV2J&B*Ea)QrBDlf:}ϗ]rk[[~gn?A?[u~ qc8qlż = R41X6G3D"3mWckcT*ac .)<,]€@y[RTaݒn!܃<#>KHJ)t: $=z@Laj9}ї_unT>n}۞͡gߑ|"1[loo6f6Pk)2,XZd$83T蹩C٦&p>EӰ\HrY aj湢 ȜS,)kEW@Awd)5)GDܕRд@?m>׿_MޏJDk譅%5_ `D&Eg=!z˧ HҨvWDn{Oٝz.Pբ{ c!xM+B'T{K#"1M#ЧQMID͞FBQm1 8΀`H{[Mw6MCj]$`)E̳v !KE@.ϯg?'O/ @;z׻n|/~/[~'\c>Mms+ȮݍpPk),n"y.Zn98;jln>Z^<HXJ]2O !)WƻN=׼oi[HKio%Wޓn)Ru<@X,,\$8âJ\9]mΓc?kn7{-D<~Uz_ OD?ɿ~>? +"_9e}֝'Э#k Içitl2y!YHBB-ep,jti%WR_bf! 0O?{>npX8WJ͖!RZkM,,Znra6A,CAd&"5|W~u9W^C?dMޯ:~IOc%fb”S.O+[ܱ4"R?K-䎀ErS #05"R#1ڻ޽ Z:v;>,xuD̫9ɄfcL$r<̺ RL̅19X0I~sDwn9snXw9{ϻ IJQgR| '4('<#3}`wo, + "-Ef=s/Fx013unj4,.2GWz&#\5ܑX2H0<= 0PRe = :LFN;krO}fݺ/տ돝B*һCB"ړ꓍Aȿf-0:6{o{C $$$D O|9"BV\͚G DƠT䰋*%s5~`ROf歫gz9c 7 2p H?#ԝ~7q7{.w?콧Oxӟ;'N}Kn<~,df"ƍG?u}tNMHq ")@l枼i{/jR plR*̴w`$ߡ֒^0DjEBֶOoSoZ ]N\!дfw>#"ӿ[.5.O>vEҘ]p/u8#̿4d浵5PURʘ4]2,k "@hL _a@;ʡ7*|nεOӥ$ӄtDQZѡ\ - TH$ 99 ҩ(5K-R%zT0NNsv}kͷ52,/M{W2N#Yk6aI, <1 \J*(w]*67E\Y*&Ki؝]CS%)i 9i7 s <'^uo͟f\w:ꝛ&}f]?Y𘭯Gz?@ϹcTK'>]_]fCPӜe쎜WmdbC"kjiieyi,ÔY"Eɤf*$ 7s 7s"%-27ðmnx]s]q;3{A/A$\2Q@ϼ= Q,-mZf6lچpx& 5(RFk << <swx&Eyhz"&FdRKoZ~9TǼ;e "Z# "̽jW=DߘYLxϷ7?pVx-ͷ}o~k:@}Ol0"#STjͯNLRXUZ*2b`$\qWe&An Cd7 lN=<ت`-` ȭmIuԲm+K9FkJMǼYFR={xo;Qqq=-R}}yn=9VJ-Fe2xln7mD37t5!0[]Y:|Y:wXpc$XۣfsB0ZMKaF\ AH6Ժ%vى5?1{m~yxС>'^Kr O">+Cw`iiy>d6Bk,pq̯0xq O]Wb84,R"OD!Q,!㨃RRkA J25 B.DTj55sqlCn+``F$Lgx󭹻 vVn~Ʈ\s]{$[[n{Aw:£^Ss}6fb- 1z[pĞp9iska%8f!8>nyR#?ko'=DX\BHӵpRaTw GaipADy;v֭_yim۶߸/=co)"L: '{>,_Ml:8a WniW Mlm1*BR8mlI(Db@#! ِ 7`0S82ua`} 0LY dTʜ0_dud1d2/? ι[E0{޴s=f#Bj@H!&rmWFpw)ON\\%4Mjc0訦T-4Orxv}njH:sUbvm(,ET`UU@f6Dj&&CȹlR }ғO:՗]yr_kBF9|/{?]~`l%0Q""]_Zc-DXԾ[:jqkր|0yxgDnPgJ6 !&E H霒Qj4/ IDATfnI e"tmmgˮy Ow.UDgSθ"< cOC{;iBt% fSU6V9=a8K)DBIX8tF(3C`Sy!%7&H&ye18ۿo_~8?p9?ݻÔ>}#?9 ((!,D jVtuu: 7tq>!a.]~i ,4Ass&(Y!sYfׄ{(YDUupCmY)CsY´Tar[.-80 g]][޾pޏ}ם}ۛxՑ'y?G~5<78yEQ*a}T㮈p&Kfj ڦhcMvv]Ft66a#j+D J~=2jbkmN fmk)]ma@7ӫNl 93++xy?ޱ}VVoܭEUZ]^z[|ޛr赽{Y9LMu~#G @$3 Ofh&^$Lӵ#+f}9忹妣婢stS$dB8:0q\U8"$"? sHCO{{^qŦ.\v>/W~9wu^)y;@bFk>?<鬳 9К9D9s`<} m>k3}ҏp:CvIvfaDn”pOlVwBd7"f>,"\;mK6 6wqhQcF!.&W+1l߼;n|׭iTkA$wwq̘ *E@P2#Ø s ,V@b$bR9Ls`&*EEfA0)䖧;39@*\ "C h<@01Y̗Ň W8>=efdr~jw݅'.>j:ѳeDnڐ‰P8Ic2s?]L\pGH<2l5Ґ.| m[cG$B"9DM`;ӷKX~Rmn?7MO?i/;V7m3ZuiHDDɿR|!k3"F)NZe%,Y'8JROj&gYSma/Z?Dllm"D,?E#@DqDaue֭Oq%њY9\UGsmc"17),Fp*z BLs]Q#ϿzGx"ك|Ұ7\׼椓NQW0%gì`30l!Vl05"lmhf*HH-unQJDL98wBy/oS(Φ-va\i Hds?3b R+h-YUiusλ֓O~E/'DS|g9:f_ Up36Nf:"h 9I"5"yV3sWajX*q@4GݗpPGG$@3" f9ѕy#@'[~_/y#9:uWe$dV!B!@)5W+`6UMzgla6sc`/# =WTq0 1A?K)\Ja|Pj!~b}@*"q&;R J-0jck)D4_tVsn&FY6pFj(#FZY0۴H4)s.=DuU0iswoq%&T""2q"R* H%"_^J!07}{Ͻ/G\}whxxߧyǜpaT3G" nHvr] 1r;"#ȭa|Sխ%03$"؆!BMUٚ: 8cnZ{:f{6CX Pj<[9<]|WNx]"bG4O n+_qjʄe$R#ƱIRji3 Uu@"a0͝j_&f gښC{kjsp7PsJ CF" 301Qnmv]/\dm۾?q{?Gggܦ$yfh:L ”DnD1L.,M[Kp yI~qհ5ӑE @L3uK@ {r5Tu{7~;no,\dS.svVAatG.$Yu<l̯HuUj^e7߆YA@̿ng.n@L _2"BX!a閅+3sɬ ."ϼ_|i;wضu}g(5q۷_~ig?c.^0q!$ Q!!tH54T6ձ@ #FsS@ $bqrdr1m4iֈ@ZKi+R"Xp@#Y.nڦ|駟/ʅw%"B_}_~C+\ΦNWz}w/\X,PQ T8gtLQE8܌E87twT(}ܩ#!HRBR8Zkt9^E0!\DLŒm#[n>c.#{X^~8i眳?.-H }aj_c}O\4IvH,"\*EO-"H47J׏keib 5}\@n#̦jH\raM0"c12!luϞ_Ώv'>woZH1w$LD$=P5/RH3O;;21dC@LݬUJGIwK=Q63#DU -nJHLĹnDȁ8̤HHHa+s$kzds/xm89=(?"|o=Ѧ10{̲[nFRk%"ra}g[aqfa ),B|__߼LA݃X)[xחUb $U+nEY$6O?W_z˵,\ ݭEn:vkǿWgێ{عYcwXH{K'3iPp)qT@D`@m,E*1yh@@L$1G?OG?ym 9Tk#P0kP IODHR  TgGpܶ3ϥ\](5?oY]lZD"B#ܝK_J%7 Rk.Rw 7@l@R;$4ֆa-ܼ'$FRV) 6F VPo/G>p.+[t5f$k복8d=H| A"'pl(L"66-Rr 2Kj",3`^k2yԈ@wpϐx Jܱ_G=v׎wZ_Tuۖ-x𓇵ui PhRJ)1TK90&Ay^F0'L[:݉Z bv)_i#\[aUJ#b! 4!iZ[=xໟ%W\T߅%EɰzᥗS}?ÇT3pS6i$) Ѭ{iJ\KR %M #a@#*G&tm"8,fc s"lAtwn޲{u߅)U=xɿot)GO3:B$2uġluմBLI&)RKD̉@.Q{}WY8_+gf Q}u%cze_}н\DB`0'ɤ]UǵՕqfxTș#R-E #c \)8CĠxBpMlD!Rius/N}uWo~E𵊘߶ݻvxNẂ81+B3"R JI8HJqSf,sM#)2ƺɭ"a wCp5#2s:H|30 >OHEw?{iOx.xeW\wYi_??:Gx;`` "K&:Ya껂µ#K$nR2&LHBs'.\ ~"b˖-%WK+l/M)?0P%a6l}abjE-K0s"&.(@ĥ@paΆi.*Y{-$W isRJU| 4Ix=}^w"wMlOϼ?>EGvOD$D$X"*=Kn8 cp" :cST"Aܶ=ZJHYn]i2fc";BjwL,`"T"_Ҭyl}yK]]{߅8xUW甮cUYKEDXIP tܽH)M"ʃFD0o Jc„f6]5w0k‚\> wHw~u7=77o?nY"PfE # k?'& W lښkLܞgVD z;#L5qJD0 <;?6mĦ=9]p6]wmR HM QV ɶ#kUFDԭ+.~'3 q a@0̦G Dhkty١CҲ#2q&13A3@L nH̥ʤ82W>Gڱ>׭(Njٗ{k%9"&ծD AZtZkz$̤w@N="D1K7aY*ݤbwswp @J!̗1mvNC.~_\߅>EDWO8}7ν4nZkRC05=tI4paWf7L IDATE:B\˝Ɩ@,ץep =̂Ʉ=B=t0\3K{w7_ݿo]k8wKtlkE8s(T* EZffAb)HD\0{P)ct2]9|i7}|>YnspR!Pb8wm_Y~19:'DW5%@DKAD@AD7}k3I6003n(W\pGpuSH`LH?$ R(sl0R10"Zkw|嬗œ>kQ|r|~/[};g>{:YZ.R;aabdSS:Y^ba7EWc1p%\dƀq6x ,er?(BH#1IyXZ1} pSD\?Oƃ.|xR-͟1ֶooLw~ c/3jN} 3! 2b03 *0p]L-?vMwoX2 K@ eսw`߅X#[Y"VHHAHCI ]n- ,gz!̓oц0F;6$ @29Xbf"!CU1>7{})E1K/ϰKXv- 8PV!XHXJ-t7PN6$>i>)p1/ҹ;*]9|OyZ~șZ.c_ӟe컂`ĘCssS7M sr)] Uq;*G#B m@J$0@08;gz;_~fq]Fϼ;o*70D)Xj'Tt$pMk^t\JEH-$@ I$ܔ {ގoޛ߅̈́S{kH#)lw$ͽ0 WfM"< Dfhixz øʥmČp wcJ̬jT 3#&"bΡV":x}ߵs;mm3Z߬}iiayWq~H"nDExL-%@$Ծ"BH0隶K:swBp'ļ`^z0 U%HY0LV; _p.t*"_:CzeWv\0"ZXgW.Ĉn:{x9 3"66k%tDM6Rk#[+T ;%Uy6l,?s] BߴC_?v~Ox}̄1s5 sSl!Bj%M&˓R aib)\1# 1p3)$U!Q3 <\vE߅]E3i_y;?mWwD ){aNjAĜadIJ_(̛U."HnC"LCDHHRu}mctnZ~t'~h_g==/VnE#,]r$,Uk-$f6MR:Rsp#p~ov3,UM<0$"u,A2hJyB63͔ N̦M[d)BnșI>9Ͻo 56d鈌m]ߕZJ@ĀljmVʹ\G>o]^n޲/oxӛY3_ $YF"!3y8c"D&$SMI_)P%r}AYH- Dj"4y #]=/x뮸rRHVg[)w?p/)o~ۓfK0rs<)\j'0[nmtR')L@#wQvUվgTWSF H#@{ `0ImHR } .WWBHTRU֚~؅w}cHA@d.u'os9g+vXV?~$>]aE0"q^=jĀBessy_\D6-" Rw+7~Eߙ0~"Vk||vz9d`PY5 2yipe ^H{KC"❵֗jZUacQ@$ ߱+AsKLF'}oꚚ@EU5揷 33* '$\C4!bF&i%3JD "#b!lX\V Dҿa01er> LgS@!?ɓ_hL1#/_?ai2oF2y@A`x!`_]U!`~{LFG>3wmeEE`-? -3ALHd|nz>8l* (#B>tDA$IRgW\uU1m6D&ɍK&̿m\>&@QaSjipHU՗J2cИmj1 CbfEP -X!H"H{I ͒4- ( \k0γȪڻ㈳^>é߭y+y#Q]]]uӮwͷ4QycOd;ϼw„Q X ;kRU~^|;+ r|l "]wL]o8炋fT&1mmmI='0ѡwCw A!x@@"q!8P@U^E%1K bE51C AUσ!l ϏhOӮ^pw|e C*̒Ow<)g@lo"ָ,#6 n84JD{ Q!Rֶ6s[[]z6ŕ/N;1Yl eb[(V >azLUI 'l DP AQAѰ4PD h~.-BJLHl QཪpYgs6&}~}ͻ*gF]F"IA+.P@2+kMSʄ0y "->qSі彫ol|7\2kVߧ'~꤯TMD 0x0|<(!#r9D >d(0YbE@&DE$ L\[SUo]o{ko~CϚuH&+;D%"$;E$pAf`1(I=9?z{w}LFroy\Wtѥ1m!fgMZ@W2 Dar<ޕK媦洺s;h "^XRkMޗU@M- L]wk9ɟQD\DX, ?CݾTbc8~$8Հ̖@"01ʃy,8O lL! Ô !MKww6SSH5 _2k_Ugl濭 !8@d D4+ ޹ jl PEdȋIR\S}As/~-ˁyo{ũOFbW A4*BƐxX0\ +Yk}Oqߖ>{b7RTP,ȗ&?{܅2؏&"U Ʀ&MAs"H "9 >6a_J!1;ۺ-m+TEBDDlT(HתjLdDT]sؔV9sZZxKsfC.K{~Todž(CpLlAEŃ1XY@U' x*D6A4$J~p`>3c7QTz:{_pY k:;]TؘF<"V]SS=O=qBtԻ @4e'4ưDzwNB#! .kmnyߙ;s}LF# <}`oliCPVJ `ZQ*@Aė6-]=wo4jsK˿җ=qr˖zP@TU l!BE6Ip#($$ZKMwyj"Jl8IؚADD(l oCjkLn".67}S}wy7!2!8 X855 ւSQjl\_;|1"H6eISшŊ]]߿%@?1W炨$4 [ahNYrSg !*xS^qB1~Ewy uܣ<Ї ee᱃#qN55 .srW{wyoLF#n{}{U'\r>eӔQ=\ M4#x_.#M l XQ,X6IL>DE@$o'fD@hPU661CT d?3M^$1p$6lO-z3ٻf|4%eP "*7bCd0oTB%B;5rsCㄫ{c7qN{Q[1q) bT (tbF$<6v=늟lH4{oNs i B$86/6wMl)?2HyfmbILBp'iCcj~%glI̠:&v^8wLn". DL 3yٗo,+rٗK!+gCCy|T@T|Ҫj }$,OL>b7MT9 pDD|4ח+IDATᎼ|r "k)zƆ~o43tnN|"BdD "Up#[fj[?}O~(vF#_:㦜XXD֪QA}HUTU$56TܻvI,O\  ȗl,! :y{mũMI&~Ɯ{rͷ&eAVރ35ae"<kй7F!WݴmpzҿDTEA"ﳬ3274T_ؾ(vF@uʔӯܞ"v!("VTk I*"> %θ8hTֶ^0}F݉_:m"fլi91?y2P$=C 4MoAjU D@JLLz׮>l+vsU[swcMXƴ4sɤ47֋!bΗ@ĔKJ !hp ntwϿ໕6vFR~zS?ᝆ; @ Q!e}=8 n^1"ҋsE > R!1"i5*"^*koˋ[}D+Ue uEEbC)J^EDDg*y6Ea\*B!K֦lIt80cߚ5:y.{S -{_S[ Ͻ#}O)uw!AD DBcL$FBp6I4cK/Acc7B͍wqS/SqcIUA$IEexGK}};i]h6nQ{_SW Ϲ랉?NȖ]V.roϧ檿ɰ\jo\2[VeUh1z{spϡ [6]+V!kE jC $K03"!`y?xw!!U@EC`cӊCN;s{M " +-;tAo9٥.H !xaciJdT$H;:B7/n7.D%Ƹޞ gY!B*28TqYRU5_&}.;8Vfr&Lx;(Zy4,.qɬ[n]O4Z[[7˱7~s{׬36!fQU@AU>CD6@q.+#3[# (1+dffQ|V[cl2~L^nc$)Tw~xӁq6;옕22_ֳn2w؁ ?oڟZo\ܜ%hCDkm.j9S~+h*ޅ~kZZ`OYů^8}zu0vp _x۶@6o QA$T+K7kO4jm]݊+W$Q4%+|&G[5gq& h\UD " yT@!cٻL( I| @Q !cP׆_v;Ͻj~71;wN[Jnwa-M 4}g?;onV( _׮;bW[oZ1G[1UM uVߧpKmU;~cN|wp1'^4cf]U:堐gN;S{I_<}k/h#"K|_=ɧT]gjh@U JH(R_Q@fӳv͉nxXUU'F&Dd uuNك֔zz=3WW!Q J,_u}I1mTYg㿨ueCPVJ0\ l ` HBPЁ9w?Ln">1I'μ{>_-6>Fc ?Nķ U3/Xm1?ZK/no{:L! e"ՐA?QǬyeﰵ̄D!(un8es9͍ [myq0 lo2u>?'/r˵׶57sXU/鮻˗\zI]u1fK(L*++1?#͝KϯqŜo+V0!"* 1S^ }]±jʕ6I1 !Ё'}i.{/84p„ [5D3D;ˮ?}Ʀ1["f- /BE  5ϝm׬okkD Ll !떾%}Y[Le{==qgCީ=㣃VTVY⧏=ZW_oz,PYYQEcA/i7/rfecPU4<,TQUia6ȬB C_^Y7. ?iZWW_HEQE棪bh OP\*Y5d&f{۞{O=U]]3QEQE(PYYk;wBmIjz9?y-$R9o'~5((h!455k;|:֧&J| wS>أ-mmql).((9x?U7{}y硍:4tn}Ͽ|Fܖ~#QEQEQ>ojo9v1o/546ҌJ\DQEQE"29/ܦcG8笳o7 ((;W~Ar3;ξ$*: Qt@qF/gaTQAe@qXtIzI'ݝ׳~8U!}N|sUׯ>uׯ~uonIJ6E$Yq\d9ϟ=n…fe1Q,)et*0 \.pAe4\.aeTX,R[[chhEQʺΉ0TQIDU8 `Uⴢ*UVTӊVqZQ*N+d!Pr(0RȊB$'Hp8HL$'Lt: IDb1. ߏfLi~t!HhnwfD2n7~BL4J: Ddr9^/>\>L4J6zrD |>L.G4P,7iLhpݤ2fb1tvIDb1 !hF"b&CE<$!I@I,$#2A, ( EU% U-;=Lp: |ȏa(6mWe$IBQs:~Ox%p|;:h蠮/vKǁ⢋رkXmۨ7ޠͼ xm|".><|+;vp-㒭[q*/_lAeW8zMkְ +Ҷ~=s\~U'&8&.hkcrr~UsزaX^}X,ƅmml^i^~5R$qye2\u+gZ0܉^( .` \m.vڅC Yx1]==g+/%--t8{{<\qE,jnf  rӾo;;9Ȳ|R:TI$И+S!apWRw˯JOW*>_:ng!_N>};NH$x:x{>Inar<$?9޷};ѣ< 'C?1|k_ܫf|^xQ뿲K}Ȳ̧>aZlasqM7Qn>? M|t)яXx1~.aʝwBm-7C>Jpf|PWO~BS]ws( ɯ|',nn_ #,?/8{J8/~ 6n{n k;v~<3SSsm E"gM\4oL&sRcE]'lذq`^c144r"{{$, 9kRR {R,nnfY:"N%$R) V¡d^r+[[iild&go/bUTWG4{`T:͚K 1>=#G.!btrξ>$IbêU,mme_g']8U˖Q086Fe|;8ȼV,\G82u˖4z!nr<-_CUgx|Z,],t169I}(+ zV/^a8|HFV.ZDXdߡC Vf*b_W5<(87 U%D%IB$xIX\kǃCU3$Yil\GˑfQǃ*ˤY2u4L6[uTǃ,ˤ3M$T&C6íir9ҙ BÁ ɐ/p40(6Wd:MXDshaL):n p8JzbrQu4a4ܳiNmM͓T&r:iuq9y e\N'BT&x=J.'e>vž{r8l]xebR2Bx"+!\o| n^$@U9U͆9u|PUɉ DҥMLls7`d WQ &9sxgz$R~SӉ<U!iͪrJS" ,qYsYIgB!ػow09<%+cE)[_?8}>}hy2qJV@]r|>{2B8H4ϟYK(N(׋!g(&gfزq#>[Biœ(tVN$}C(l.Gh,F.1 H,F>8Id2L!Pؗ(B!4bCAݼyi$$PU֒HHRHol$L2NPM xt6h.5 Xt6CU|N^,ng&!_( gLzz<^#"B~?t]GA0&ddl6jӑ QT @4~?F$yLG"*I̫9S?obh,f?úP\>O4GN'a$!DAbA"2H"v#|BQYi;J$[q]Y$8,Ze|b18ƍ oh@AQ>tOkK 0 tR[Sŋ)R)p!LÇijld*Eѣ,hj&D$}}.XPh,Ƒ/\HM0( zz{Yx39=0˗,"I㓓 njZ.dll1&Xl˅$I 0j2,sthL6˒VEA$IR\6Ў Xl/Lwo/|K+!3Tl9|UQXbf>[Xڊ!ۋcwţ? 7x#GVG"?:<4B?>> 傻K}뮻<;_R6cB!~CpXĻB[~PؘnW$cpPH"OٴdOWE6.q?M}GϦ?/|ЦO @6_۴}=/dӾO$1{M{uuٴ/~@Eq`}cO  l{B,X D&c.ܺU^RbѦmXNmtXdxER"kmfFAn86_s=fֶ6!i!_v~ۜm۷ @|ŏ~7wQYr,Zt:4xX,v#Ǒ I~?WD4RtYjN=GG$$}]]!/I475d8r QTǑY*M0$uvrJ##G<d&&餡]]t= F](Dr|C822ijk0a~?5!{z R  0`OSSԅh : -8etNOc(&&hw7@w71J1 E_g'lf<"}"^(܌Oꢻ܌qnB g6ˑivHOM +/Q,2I˗-Ñ1r0SS_˷n%Nd9(*;NyyWHP L/h>0% |~~mmr%S33ȒDm0HP nv, du00tPM ld:]@T&SwLZüy$ixIt8$I2~\Áš(ēI4x*vv446ׇvm}\DdT ,uχCU1u.χb&Z:A/& @&4] IyB E]'L#߃zzس{7pNEP,K&1 ׋[Jc !7 < ꫩ 2!J:`/МNO081y׋l]Dע;߱ \7$4ۍ  3dIB2ia*,S(lV7 {>,,t̘(.ě]v3?fhh$t=[ V,o IΛ!MB\  ›x=kL|.MK,jjKϞ|E`lo"D"‹."_,vM*wD뺎:<]liFhanڄG(:[bG4ðWA[r!4!uM]F2iaфpYBv͚=Vuaz_⃵:yD;f2,֯'cEk1%EKԅBy}>G)f0sp8*dKg7뺎hM W~{eY.;LU <=v7:{'Xvehb¦y=U--ep.ȲL%|f#Ij;dt23=Hw7DsKUU%rz3j悪 "Ha VZX>]==9ƣiLFq FH:$IB+ P_ $Sl|矧6K&i[B5fF\fVJ9c,Ɣ+a$VIdL?(ŸK'I΅d*Uz&MM84:{:e^M >;_{.=-rRax\.TE)u.cddV˲<5OuK0, rֿWJ3W.f'K on,99$ 5F…4˹9Xdʕt #I"J(;0P3P(P}=]]8^PU>8흝%= Ͽ Vqfv32>w{቉O4$vĭixO8n++}?tZ~btb˶m#10=MyBrqmZ|P5+wD|-&vczV2P^Ԡ9k-EB*xeRn!"W#!g.YJ.ra{,JC!$f ._Npy#:,trF!DjlYx\H\ [xW~R!TAT3l4;<B!~3|k'9O<@eLTCUK *+PT+UjO$q"8ߞ88>XYZ$VM)Ja&ƦK=E%GfÆ 3 fM\Bv97gh +1Vw"tp8,]9\,N ZőRZeX,jEc.cw7HD#GBԆBpXZa'5oY,˂5 T^t:)⃢(b1 56biixgy+N'_nJ*1oSdYv=,~}m߹X[%crXsdeTaxtnxyW*u^8ҙ ^K%5rAiv:՜J'\oWrrϝ=Td^J:X2\cRM{ )[ӷ0b2US$<#I*f  y ݶM3JovS0h]Gc}=/:]t׬3JmgfxUWrR~@_ˑ$,Xϴ|7JIdJ)1Bqjk㼭[ 3B<^s 7lT3kq#s|LpWvҮ 'iSv5vUwDC*O{e;\߿]Gz@V%sdΗ_ۉNoLX$NO׾F*8YG%tcEPNֵf V9۶lŗ^bۦMD9Ǥ3^/wvdʺJTQf5jn0vXRv$c-32ε`:kY6ıJҬ9ΊƜ >XC[J8He2͡W_eFEsA$TK(ʍV 4`b4W,Ԋ{r9avPm1PJXM*n9sJROd8;$(1s4tb5EQJ0 djzsf?H`{96)9T%-~U!Jr`e+P,+~A*僵;f^m-==83zdBM=U:?e;%^dί1o7Au-vH$t:ص*8dT:S7HIN:׏<}3oVqj11=mm<\a2kd2~x֭+lBBQ KBjL`.{rQ#JF ,m$I(^Xũdv%+;ZR\lH\T,~h4J5\wSi))+mfpiU:oh_sŕWV Yweut\ue▖7+:[9Vn*,yB55\~377 V=N*f0NSOqu;-ad/ٻ`Vqfajz-7O~¹֑(Ig2w{.,'nr%!*B6IDATbRen9!+K5 ,=;w/J\TnTMIL?5@9C(Jɉ+SB@'#ʵz.SxVkaOLAhK}($lD%FξrۺE 226fH:ejf PTF$3]O$D"NHm$ꘉF=LܚFəgvPWtUU  LLM6W[\ξL,F̜cM @gt|܎jk{S47 |LQy\.FJqs!hp02>^ڰ:UU374 `lr(y76R(Kxn LLMqF,&I믻p)EJ#ccM0Dڵ{ߋ.IKۅAKY$<>YFe~3|kXb$gȲkv~Gڵ,^~{v6w|KqClX?* QC!Ug׾}|rvjATEg[o ۍ(Wmߎr2LG"* NǤR)n&; c!2#z>dkuL6wz{ߋn 죏?%D4wsԚs7@w7ܾ׋g9իkn&XUUg?+|'޽b /Eo\(/۴'x@p1=-r}}7lO$Y|S:FuuEd  O _=6Gnxͦ#dKlڡ_(xmF bڴ?@QD`~CUûvٴGO(&6ׄM/YC!!&&lݷ.[ZmmXdM> ֮]+fW^)۲Mm7ٴI};Fuj*}--3b]]ۅB 16f7!"i˿>[wqԧ?],yB*E~?MM l+38C,nj IӱSS r*\n7P1 z؈a{YLX$;8H}m-yB8<4Dc(D{t)['iFFXH(@Pr[sR) 9hI47u$HIV-^LLMM165d4ʲ4Id&gyK5<>N^YXJ2Eyc4YF47>mAEayk+A.EUnvb !س?^EaF''Yp!Y Ln4?86FXd~]͏dy9#HE(dEUD5L6kW9ܚFʊ& /@[[~ߎ!KP,tFGu8h ܝN'nǩ\.T&S Q rt8H%5 L4joqPd&S x5 YIv_F ^%tpǃvϞ|>E7 ,)$^]K4I"p`~,xjI̢ BE0|\.Y8 {%/} tZZ=-zC>aU`Z(}(43{9053Cƍ<LGSZM 8s!, J+vD0Y~}7P{p>@cs3~_-G$153c8J(?DpJV@]r^nA{*N-ZZضi`#G_ܟSjT^153[mk֐LO5OEP㓓ă`$E3 w^M YB!\N'cMPx`%#Ԡ( SS6oE$2-w 74P(J f2Bc}=Y|nvwtp{%Kys>S YPm*2"~$ | $O&9gZ$}eNh[fy7hjldڵEZZ8wz !'k/ih{z ]AӲugY˖061v6[Ge$oyB!$I{eFjkj%#ࢭ[Yh ݇ӱ?[7o 2]qmmNFFFزqݿ[pa}iۼvkl6oW{ I[6n]p:lݼ!J _۵ f3P(Ν l˲C=AhstE8QyxӸJ `U+[n߿hm?=@6>/v_7Z"Zܹ[[o/KyG7O?y{/?ٟ].z+Fo|?9&n:q|hK_ַ`|>{-ljCM og{&ګAz{pم2o~m6p8xmڪ+Y`JB%K8s/~Q%Z[UW{,ڲpS׮-u*c5k+2L]p]Ql6[!^޳&log޽(F]}=qK("35vvߏPSSCltvtv Dlo]~#Gڻ^ D?]ׇ#OZdEa}须QB̌ LLL6FiZt&`<eҥqzdfr&{>Lеw/,h OOӹw/d 䧧9΁={(H0Hν{ٻkACc#IӾw/E]},vSҥK(Zg`V YiOAkk+D"ҹ\-$jB)YOj2,ٯujA2,)YU~?l.VPT&C4GeJ#N3x2I.GUU|0wa`}n7d{{5f[vqB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@ܬmn!8nX|>z & j6yia17 }P%W՛A?z)9Sgꮺz~_z~r趺ޭwzlWպx:qFӳWuoTYU5I6@hz6Y}V@P7q]W =%DMtuw=[֝ug=QOڬf՜klaÜ 䖺?"C3 )BCU YNyz"C3 4&2Eh&JdL7aB3!"Pf"D!  C'20a,fG c"4;Hd1" Jhv0fBD-'2lb"ö-%2lgfUU{]ﴘ FhF`v*]rUU~p|m"öi}/ `htఝGFrHhzN]˹+8lY4 ksCP yi63TUuAm&7l{x/cݖ<[4J4[Ssim+N?T=H՟駫nuse}UյV={x;T]Pkl\ :lcs1^u=U_uU|ROUWyzG3ȫK7\U/TuMU_u'bj%,N>6gn→>DL ӂs\Y۷Vޯ2dLH_VYؿp嗫kzꡇn=dL3×Dl^|'~Μz9o7fmB6/?<~ >Sd6zᅽQ__8Sfr$4;@l;bØ Jhv0FBĆ%60a,flj c 4 6 Mh&BlL0aB3AbC߄fĆ> ̈́ } 4 qBCU YB!Eh8FlH.!6lp*& '4@qB 7k #X,j>=mZ<[4CԘVf '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qBڶE`"z9޺m_˘gkf~3j8,8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 NhY۶Cpb|>LD/[ԶmrklM =Rcof[MǛ'4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB 7kz`uAm&714#,5fqY:qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@q5I߽IENDB`DarkRadiant-2.14.0/doc/img/DarkRadiantWorkflow.png000066400000000000000000001352071413722237400217450ustar00rootroot00000000000000PNG  IHDRsBIT|d pHYs a aJ%tEXtSoftwarewww.inkscape.org< IDATxyx[?W}%8ZBLBBX tX~S`@;R@ tSJN(dwC}!dOlqHtC8v,|Ǐ)}{B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!BmӃѣ ?A!B\ L=x=x~=(tB!-!B!zOOho7q-qq(--MytB!^)rssǎ[B!BtM !BEB!"H B!D@!B("B!QD !B!B!BD)B!"R!BEB!"H B!D@!B("B!QD !B!B!BD)B!"R!BEB!"H B!D1E:!+S;nͱ^]o3)sr}DY·1mQ#nO'O pO)B\tKII1ř04"*X4+RD(Dqdf4" ےЉ@"sf0дPf QJX'$1|b^D`0wCw57Ox/11W;(8JT< Tp{=u 0ՓR0@ h""@ 1ԢMDu~}}Bqq@k R* &]SRf(ĜM*fXYT0x X0'0Ej{"0%Dh=;_7<NNzдJ?c;9xW$CP (|DR bAZ냏[@H@jTDu\D Ӕ74[tnZuuy|BQR!NRZ)..Ƃ(^z qRi) ā<Dt] ~=N3t A$=C0g muD9E"wp[=@ @FT qkD~&j -%" &斎0Q_ 6[;{CCC]mxhK\Y j5 0wNn҃O趤i:$ V)eՈ@xb0@DHY9AEJBqZ{Q,<4f( @=1װE.i.i0tp\.W>;Xwx3A {Rq(8xs0R @" `N%DD9Xt0 (]\ sXI)ٷ~QC x+ڠT5E n%MkJ5M%>J7[[}n/ x8 64x&S1dzRqi)`NQ (PS]R#`F턂!!]4 V'R*\'*VL+)@4+BH/2=YuuUW;s466nݚ ͣFs⸅&+DsĚB$D$$=&j&:'ugioM?+M R 1o@+Du`n@@3[A@nZ0|fs6oW^~Rkg+xϗb0RiĜD)̜J6jb"0nh@1ڊ T01DTUZjk+s}WRS3zZQW_+&SL`h"(HC { Y%IuYP  oY o:v\+M4!ؕf W@)վM#Wnbnz6Ӈ֙#DL(/w!rm PAfML~l R6"qh -t5n0q8@Ҵ#`>l ޙ7ot B{OJC7%T%K|;o/rZn/c tfH54ͪ*R 80'` &Ĝ̚V5)[4 PǻqtM{]dhaQ+D~MDTJhRZ oֈQv7lihhXVS!zjٿp@294-@3g#X$nok0HVG9%|DE`]?'"E]ѲefuV~裏DLd˳L~Da/Ń}^tfN@/ D`[ 8>ݢ u |YΝu9u߈@K{jQCKS(HVI hҀ&׳7qqMsj;OIq /~uiqNNlJ[[Ҵ `$8Cwa&R(ȨAAt:`|@ =p:C-[6o<^P__ĉL1wYۻ&L!F ,ms#fqi I5 Ԉ &I״F`*I ~d `QD`@4; Qs*&v@Q`(潤 {g_Jqnx۹s􊊊VtG(9s*iGÇ';(LW_}o}KIII[ou}IIɥ---կӟ;8x`ҥKRJ麮M+ׯ_{~vS¯SYYo߭jL0|Æ o]'޻}{O%hӦMC̙ĉ,G;v1vؾrVx@F|VƓ8`3muBt_V吮c`,}@ ֶc;3o4mb8]k нi505m3%] {G}ta{oNSSS:wuuܛoya|2uԿs=֯_5eʔŋ3q5<ȧeff}W 7|sYf- XԿǎ[vn;eڵ͛w_ZyȑCugG~bxhٳ #Gz',&BD<~}Qزeˠ)ST=ztPhoN|EEE9|Eu\ײ7nβ뿾3f̗rt'Z 2e2* x6̞oa!#BD֍轔ؘ|fh2 و7&9MFf^3F'm ߜpZ\zB\L~ ޴#SaÆ4h6%>[Ǝ?sYW7܀w= Ç7;ݻw\MM@iΝӟz)mѢEv<}f|'ƢfYR!Bee/&#c4"`:g`"8Gێc0D {g;.!"H g֟t_R^^>}׿c+V}w:GJJJ@vvv<ЭC@`ζ<7ov,ZQo߾._x^E 0) W2WBE3]*Ӂ`@Avd ?r86\I!!D'Hpۿuׯ/Otzyyy[+++@VV)ST޺A4?/O*//TXXؿ-u,XYu/,o{Ł_|E-[ړݪfsO?=_m6[yyy\YYYJhӘ?t|ay.! !fWUqy,?T1oñzMFIG';gisysŊwa^r+W;|G}QF͜9sի|+Wkʕ "Zy潾t{~} #??P\fyo~n۶jgϞ]k„ vx (~d]g=K!D&1w}(uhEFz!D!.XQwl6VvǸfsd:<xp""ȑ#?{^5jT]1w6|[znfbf-..v̘1css}m?YYY4M;anlll}RRR 䄄ߌ3hv=6eʔ5iiiϑT9gΜ|Ϥ;y KXKCB}L~ μ} M "Я-Z:G.+qqqQFՙO\YY[\\ҝP__o9tPRrss333ݝrbRm6 Ŏ8bjSڵ+'X|:@'PVf/~w"BSddS̀?&1^8L_5h;95 {7ߓ꧟}fʇO{2G.@fklgrLff+)))ްNOUgf5z苺 <݅Y_~x sI !軼 h6tݧ|^e-pCCCݩ 8)ōi F:$!68XEe~>Oa,@S !BD )OS@1s#B!D$I .~ϴGp)z0}ꝅB!.n2@D<_\#E6*fJjjF8>G E} (>϶tNBț]UFq iD4[U11n"ZV1gsýc}K7P_)SM1_Ӵ`NR2}moѭ/p8|-kNOw{{2˖Mmi%>#9~ޚ_ړ妦?yE:J =‹'Q`> B9+L0琦s.8Lg@|F=^X~Eň;)#)쾫*ˋ:^[ϧ)S?8xAqUR\\ò~47߼ &}ѭVz)>|ΉuuR̚Wjx_\y] 5>99/og)DY@0Z2+BvЈ h]#jn&swp-ũMO?uгZxΝW\CϽZʆ7V> ))(K)^Z[;|mm]sͫwW6ݑC޴iO.}kqcwNM7ԝ.K+w ua~uć^̞Իݖțox?_,B`駗/w3s~lmqq n/XZZگz,h}}z3,ܷk{s?{_wZ`kIɕW64 |oJKGy?I `ʟYYH!.Xsrb|,]lYi̜ (@\L=r/"G .ז~3ghәzv,5gCC7_{Ύs$&rCuǔKsRS[WW's\ &; ;'b?`[Wݑ\hAsڵkjoi1?jշc2ޚ䒜MŹKwg_Ys׭SL޿z|t%K'T,  IDAT[ǿw5iS[Mͳ,X>ڿRW>YcǾ R/`f似'HKHpYV֭J3k~h߾k~֭е-@zwom2u_EťGjjFxɒ+_3!R噶xZ `_@ !fKun"a؈(]RLd`'t&7G[ꙏu@5JUI@)ReͯO 0bLs$mO8uOWY9Z[K^4ǿW_ *+8X7޸9t?8Z[; gP4v|MM=T5?37߼n/mzvXҒmo; G׷f1cV=`gyכ=Կ_?߯&Qۖ|難uob+CnݔP?}Ĉ5|3)1iR;MS|76mUVfvfs<'[R\vYg}ve} #BosrbS:U75멸z" G`2BB\0}gUZZ2m5C-R6END6fŅ(ur|)Z@30Q8AT3W_t:T&7h 葙UUOwlOr`IӼ~,ΑFKe87=ݽg?yCxC҇(7޸}mщ댮iZ[^3@1~ qӞ`/پvi ;ݻbn2Zn0[&]oձ*dj/Lۂ/LDߠ%|k(eoi1:@D ?SI0,#G$+S-ͯia+MK'tVFdDaɼ Y%a-sd&̻ %4\~eR5>3n#$HrBl$=.iy9%gr'{or]7@Z723ϭ[L]o"uL~̺lQ9OG#YfOgﬧA5a(enzޜq'5!%ƺW#?!>x @ m)glUZZkZIlFJ3#o>=o>2 ?5ɼ kH\\),je5}%?+D4WUL ~[_c><޿]wl0><iCcT!a@a+1T|q=Slp߾Y̬'bu56ZnS}+/߹FC)6ݚC3շ+ͫ] &Lظ x-?WJX>i_yn/|3/Z }j )Dtb P=gMFdh` gɀR=5vtj@T fWq $5$.4^V>X5={f3@ný{gwo禧O8;w#oV,u|u--|M:5{̘vM~~Fgq۲졇Txۄ |k毷|Y^#5g{/&,۱ 4y?]%lv7y=`_|qdmKK/o5L|q~Èm:T\I`@c V5!.t+SM`R>4-@߁li } a;P*PD TRuu=:@m홽aqZKmDhF+οu5M?s۷__T]=B\?--^qhnyx>mnNX\|X}` 0׼w]bʺlv Mnwz(f7[zzGbb?6nWҒi(ejxTNǹv|LϗǷf]dy[oeYeRfϗ_`oTV[t)g-ZpرNtۮ]Ҟx≅ 09z[ Jy=mUYYd9`B $l2@/pK'jbvd5敗'z@(g!.a"7+/lekS[[Mk:V[LNnvȊSSr}z@Vasr oi17LNn  +9!`@pzЎ>ڻױ2P7L˫jt&>?t(ˣG>)yyPW@xҺX6 "]ԓy}>mW_+INk5fLR1)qqU~_hh@rl/N?cV-!_b^W9Ά6[CNXZwCYӞR5Ik A 5BV{y@f',,_@K=Q9+UACg;&|ׁAD `V zW$o?3fkdߖX4$:CL99}Hݙ+ bȐ^7iwU@gI8٬QWQ^5jm ߯s꘎5iRH } 6&ґq+8vg.9Dy̜MaY#w2w9aQ)(ﯻ:pB^FDx bhr:_XqݺKC:O8N xyK i,ζD1H?3 \94퉎? @) %LGHJ0Tr9R\&|3N&"k(Qiڭrt+̏5ۮ<`PFoL H^yPJPZZ^aڍc{ZBqGĹ\9& { C'8a.Vp[l'Hc."ⴭ Қ׻3L@IʹUU{%@ѫTT$n,*}fu|ݤiSsS_~7#э]Pba\6JWqQ+Z!0Ҵ!`PTWgǻtj("LT #\DGuw*lͬ=&-m8Lp/TbP$X{o6ƍ[lduccK'ZuC_{mÆI.@"zUynkE5~0I 'UJb(f6x~}}}/fؚC lFOgl6[oJ<̺z(C`F!UYI0X#,OOg2Fy8F0s mI~BCLt!b.ҙs*sE&I]$PI]O~ۅ8{EmI Fh83ш:Ik;C!8iTVʭr-ɉM~@DD\bcL3"]DtcztE!N0yӇ6Dh Gz(fOJ@h>Ҵ3y>o!"eqya`Hpg= 2@>E|ӹ= q@D7AưH"6[QF30ފr6A"żGWjb++֊IVOkS@a'Z_ &oz# qa@D7YX$,D;>HMML_Ӂq ̗hĝ7 ] W̩q0B!vT P/ gӹ3ϴjc71ePgG  ~@$.Dl~]Fh 8>R9 =`MgCeޅҗYDRRR/fBdzv'`L:^V"=P'5ҡx)DmIk`q@"1wLb;__bYT67rwW(LJ'`Lά"` `vefSJM ` JӬԚV}`+md2mqXM.`>5<'j~t\@/(EM !3MW6gRj^Z Rf:[4`';.ס}GSZ|O2 Z4;s+*D85 c*3O! !&%2h/ %д1_ "Ȗ@\'tfUUqDB>HMM6=#`N nv_ִEe0}B@{КdW*0 DjsRUW7G(d!D́w}8ǿed\!.R_ R/aWW) @DžN1lo}noG+mҴRwD*I/ąG !ڧBa!dZm3|B]zԄNVmF`DYͶ콀]ZK u Qq(@h}[g6)f00~xi4k ^]1Oz9j!ĩ|lX,d h+3Q] $)k  @=f AD3_@L>% $Bt_1sl47s6D:mcQQT46&ֵN?/Dzz?g^t8}JӮ0DWH갋AkUBzYpK J=S״3ZK Ҵ[Qq$RkF:!Gsp ?8?zH-0$XdF"kzJ?`!.[Klf3NUU- R Ǖ@fAf*)v+'`>4)z< !ޚl2}M2B g`1)Y.׶6@{ Ş8p'|rK.]~QqXۯ_9`^)zkHB\8dd R̷vŜ-UDkXךeQ6 z馛5eҥOzŒ_Nj b@Ot8&20>/DZ݊fձJNs:e-!.@+J w(? 믵E{FHƑ`80%a0El=:ڙ.)8޷ۇm Zv]9 78G&B!D_#!J19@ujMF \J#:`wf9d"@.4F:s> I1_I$`3 ]_rBi₴]1_l9D^{|BDRw)YpLBԾC !J@.@Ĭ3yޯ=D|wgTB*35 f/%f!xk实~裏CM;H#De{`df^! RhrW^ڛ !ݪL; jh< J1o9u} {# o hdRRq>\=>`1'퓡i V3rN(+UU_O$8?̑0 ˡ(Q3`tnbQ` 0D&wx-! )8Q@*_p@o`&"RoϮ\K qa(<% \`jI):>V%&~:С^X@$``a|T)3 xOc~O m.m e FNJ' `Ur^[Ty s̫ҒdK #0[}*Ya- |^6l }~;jjsBQ2?{wU󜙁6B,M4+Jovm4m/[f2sɕ44q 6Yf13; |߯W9s<9^$!D@ABe2~ !~BlyΓ<c>" !D3[ADPzчQ17N5!J <-4&Fb$!&XLQD?!uXkn={3ƮҘMI(QHu, <"IMW3cX^3ְtB0$R IDAT40vOBh՞~lc Hp!+moӰcնY0_'!IIj'f IDb7$iCx@y  b  6mQVvpM!U># |~Ϙ-/h ,u t>KD{IJs-=cמZ H W" \'pҵ\Te(-sv? m%a7~v(ID!D'5Uկ2f BQ& d9cxՓk !IQ>'@ިն/xs0v>""doFI U_KXK E' N3Ko۫_}GuC+0(5&;Y#  qynV% ܔ^]BB|T(V-a5z+BCC*UgHR"N JUt\xnC$)S_0Wak[R[M!D%/"R !"c cօH*՝D4[0}Zrfbh񈂂<_Xc( B;tbwG@tHHd; 㩮5cb6?!BZ,4_GBE|\&kEhhLpy0)yۗʾa5進"2: T9NH:G:$ Y>thȉ1vqi2*N` d!!Bh((] %s}֤T. LmpoQV`;AH6(XƮac$3J QA# $CN_\W<z1:gP:34歋J,!nQ(zⳀ'K>QQ!S-&:>L+`458@]@V QHR[$ur+e+ #9`W܌1 QP8 $)Fg{N7_AX 'J u*w !,'T j_1d. p\wlD$!Dp/yX}8} KtP`r~z 1VeWR`xև17NX*""X%x!T(Y~~KG>]tيH΁'IjlD'Y yֹx>c @Brw[k^* jC)Pb.XO ծT } k~vMC BH/~8pYTTzA&[[B!Pdϼ`=};WO4P&5k֘'NI[ouĉ3*&}CTqUbT*zLUI9pîi O]]կU~BtDDI@G"CxPe,cd~> 11dYw:vq&(..n^\\[2%%%udž ZgeecxZXt8 `ʍE8 hݰv!jp] *;oAB,*M8tVa3#m\iZ* @h³gϞH3LͬVkJ硡u?|@bbiNjGtpm$v[Rb`LB  e'š9z@;n&Mӧ\a~Ƙ~5h4 /|nfwޡ0yFsaIv-P?Ytg@d}w[AAY58@:cPt ~96 '@BdD=&c>' ǡh4 7v_~>{&::W^!51ѣCBB,U*Ľo߾'N 3?44;)66]v%Y҆ ms p umٳ}7 `>/onr-o# 9\y N0NyA?HV9/ [nYs|}ׯ_7taoڴVD$Ooڵk93yJ2XY;w۷)S|Tubyn۶m L4iɓɓ+))NLL%///Ν;<egbaaasI:t / Wq_~R( {۶mwV>4hTn7cu)P""9*B \GF kH4 PRJ36b 6La+Wt:<@#]v333.:::nNw8_f5,+333͘1…  !(777࣏>znx$)˲t}? jYf']̵Yw<~yMzVjsyy!I7F}'!ە Ŷa'=X !n'>9.';v$V=K/}[{nkpEEEM6G8gΜ'heXB.]z 70>RZZ ]RR1..o߾YYY}`ĉt H䕡E*t=cǎBͶm:0 >I_PئMQF唗f͚5>;;onnne:?-[=m3g@DZcBvx$B<1@zeqH9pϤ3kyIfFWH*58ʟG.ZkFk埡 66v%M>XfM"^[III޽{oIOOl67c~"66b„ [x&),%%ej~~~;GֈZߢEnݺ]7ڢtqgtPP駟^9mڴy5kV9 /ߏ95^r*;0~[wfMZ6JqV 0T\sL6hCJ?cZG +h @nnnxu LKKyp'N ٳg&F)III"}U~/^3cƌIU?BD$GM7%KΔ#֭̉މ'HE)`~Ӱ)& @b5fWO[RG@$e<'RVGG(!IpJ= fg5JB>s^ϫ.6pM>l\:_iҦO>w11Zfsl4FEDZ{h4ٳ?|뭷Ɲ۳gODZZZÇw+**f~SѣaZVw!1],w^ KoJm3nQ  qMiN!~w$8XS$̑%k@OrN>(** ~Rgboll3gtZϿdzZBQ0L~/$$~W޷o+V "F1n[R+ޣG=zlq#322F8NՎ;4q.!Td ,@.vNVbd @yNmӭg L)wBޚwطѰh ɓܹsnlڴi^p+L&_nnnX˖- '0׸B)-- x2`ӦM}hժ?ccc%%%'Nh侀EE̱u$B+Hl\/WW8 tٵ`N BO Jp:'Y1@ID | &Vs=p8y߾}7W&>>~ÿW_}uj kВ3~|n:Ze`h駟>7&&`|fYN*###c:,[F$I' }L&SXffA=zloUT`ODwsͺ`U:H@ QQHC[A^mZEjѨdE1Ĭy>B~PV-ҕ/v ;v*88،7ٳ'&&n *$)ISєj߾QXfMBiiixXXةݻo۳@Rɏ<ȗ'CBB-[6Sw= tlBaBqqq*cz饗>k߾v??rwzw2NU]3444r/M~;7p͛P(6!Xxxnݺm1LJ{6oNCќ@ AV.XCRuR*,@K(lWU(S?5A^{Nwd +@A4J|8:Yx!v% Z5B\Z@:Y:kVZvѢE)'z/j?"Em`2ZWzUSp9b dߌ_S᭕cqJ HC_Ībt,`Uv@╬YE$!DsWsb*Vb46!n1ր8ey"YZ^H8`ǰc&= !50ϼ|XJFDQv,_*(Q1vB}vm5^X#E@_HRG][ NXR t?!*\<`ςdFbN׍ $3_jȉZ _G̱|}b! `<7wj([R[**FCi2p36OCoGۄw6c1- 'q2/G;1 R$ Ho X^6""doi2Q!uBc޷IBͿk=[81S|AotRRaQJqjQS}oD+I MOhc.9j2+_jH_á0/QTȘL u&R@9i  @EM$P(>K70Lk2hf{N64 V+ =R? YQo.ּyR*DS(s^%,pDA_cMQ"U(NX@  AHE(RQR 'u=wA"2>NFyNCj61ƘWjL.NXg^ 6H\1³p"0y;Ħꇈh$ML@*3ɲ,G 0HsEBB^u<8`MC*LH f Rv;(`HL"̦N7TqP?D yNk8ܽ>! :ꍠUHB]e]< VED^/? Uәl0LI6?c5ibH^u<t8k 9P,jXQy"pMhP((r!v'`e1.j?O k:@,$Au] H##G L[> 1XX**5&+pA[@" !5.K9u!B|D(GG8_,**Y1ƪE5l^@j$y7Z0¿HDCA׆]2$Ăd~ gkl~72n @Cf@ ?hmB̐"(ek7^ kZ^Y;ȊkT[8%y7kZ:bL`kl0<ōv{XxH$zne@zy?kzv  !nr]Bhtn.oc8w,*:ӀWq- %> @iO#˳ D/GxKc0|5p,@c^e6Vr8:]f @ ?uCʔIfx X,`]6(-(sOm$ī<1w !qsX@QylJ$vh EZdd颴LDkd!& Gcl~:}5Q+ зM:g"# L(io sGax1X17NIH;{#J`@74 ""xD&z @ BQFcc1VO,&pcq8Hq(>-3P{ˊ]! ӠǰA"] JD$&>^j0}S _Xu{3>NX4'RgpP@)t;(:S' 4+ ħ霟\PF_5Iʗ0{󮿍X'z낺cB}|TrHQ L P"# ĸOW$鍑F_c7OD q'rD` /hw#ڹO|.d9_ҼyR}k~V+W8.<aV%7rubUU9V(B`*@7[9Z}!X씤F|K.E5n999ͯ|c b@B|uKAAcbuv[e2Y2PAzX_m ~1ϖYGQ^p:_эS!5d11@"HD8Vx#0t 3@S]f$iC?hmtB7X'H'$s1X$Sô>`M yYw|jhutt$xv^ٷ1kjCϰ} 75mDG}Zß:0Qu:)"zk^ߛ1.E0~u<~p62ӯcʊ8<ΫqUbV;^pd `6`ED: S^F IDAThcVV!&>M'ic= j6 (۴g*ۡ]z_NB,!)FCNg<1Ʈ=!lپu}Q>#F8jժql۶mi}r1w}%%%ўs$9[ly}}߻wo͛c{ァ |/cM>bmHÀH{#:]L۳6{dq7{m6͘1cRJJJ'DVoMPPԩS])ގk^ii2XpX'Գvix @_p:JSqqq 9sn[oMw8'Ntzju9*++o7<Μ9R~Ε+W*//py#;O>f͚ާ =Wq7yǷ?v{T*ӽرc|wVki@LL̡>q|[6-s}U{,XKφS [yo||_~9@ŧlq1k>u6pMd^!FTzv8 \۰KD'5,+WlbŊ{P=]VVsU:쌋;-Iܹw^^^>hEd2ĭeeeZ9YYY,Xn :ɓ'|VVVjbccJJJ"Zn}}͛5a۷oO޶mk5jTNFF?tjjo||1sav]sVZ޽ΐ!ݻ񔔔 ;ɠA*N|j`4/Cf9{]4Μ9Wy7U}O7jԨoצMΗWJfϞiӦ&ݻ @\\ܾ ,cǎL>}NQQQlEEr ^yJo|}{7H׮]|ɞJZ ^zecQQu:.7\NCjA`Z*""*4a0VIl.s|I/!E}@N$́+ Zhr~ s*,,uE?zh0v=l6+yQRR~^Z]8c֬Y3lX,AP^^!vzq1k׮߸qcbb X,P\\|2 t:UgΜ l׮]d@YYs^Af9/44rh)@`/ʘ) @O-jX~wk##Xt=D\3ߚ1AVӀe3fGzzZV{UV߾EP؋c-[֡:e֮]o?GRYbbb/= E6/|Gӏ?= ;XX:Ο/Ql6?( _\\ܾVZn25.D#Bl&a׶ :5-[N 9PW';y&v /-ф/ Ox:(IKK {DDD:}tm۶ud~PPh4チ5Ar۷lÆ w-YdJn^RyzzzoYIIIi:)))c*'FFF28Ƴm۶D$ 3iSJKK[)JdYONS9;{n~/.nj]T@"@r7dR]%HYRϽf@tp}Ŵ)c KwZ m!W7ƽ{OJ$ܥK#GhѢ۷zcccOzU)$.˲7_8}m;k.\5`5kV]? MNNN׌7Ç=rH/>>>ٳ!ᗋ%88~}YyIIIp^^^|֭[$i|ɻ###m6Yf_r 7dN8qƍ qӦM{]vJ8W^n'c Iߨ$ˑ 0!@k3q5B+35ƿ2/7}6IdIjcƌoÇ<80((XcKJ%##c˧!<Wj-} nݺu޽{{իW/Cddd6O\``c֬Yhhlm۶1?aJ`kH=48cuջz#O֬Yx݃5RVjhѢo 3J]@ AɘcQ/gtW޼2mᅅ^1؍0Z툏?g EեKFq={OәJ%@AA͚5tڵ\e2&nZj>< x\a$I(s~~FeQUy6رcADD`0hyk.]II:11 ,,Z\\TU^^ {6#"gϞ Ăfٍ͚FYf@g#GՉh޽RO70 7͊blԦV]v-z{۶mU>=E~[S'ΙAcт$#c}{[Jm|F%VO|{*VGGG(=I1l^銅XC;չ|V;$܍cYXbcTG2\m 987d0vH ekڨ : @s$ĤGoDUkFc0}iThq_˷^ZxIV!F`e++If1.e0!xF. KU?Jԭ閹{#P!Ho }X>Tq1Ƙo ,lhqbn :vLtPw|Ay @l'hcjTQ*,HKzᾎ5nF110t8U FCb ' "#'Y~?GZ[9$ Pk= 3Rzbiwfϧ:BrDZ0 -<%N\VsG`1ƪIױdX~/\=p l0% Ao9U75.cL,vNXAt8~@m5`^  ­aSU |ׁoUեuR4xmj@4R'?"cR@` 'QK 3IZ(%` ʪ] )޵1o{?vV p"|eRaIcA8 YZg;2@Ȳ>,wҧ(y>_R91֕-_p vZ1,zֱ0-ϫoHDȁkەbʃAbdՈD-̚NXB9!?edossMWUǰF,NVby@吼-tE:]?ñ3G_ՐI--{c0CQzv GzwcAu' '~q }.9PX mj@ Rb!'NXB~}Zf\c]`> c =slʧP:U* AoFr.'fv= >g}oxJzVuGH뿩ϱf^S<voesL\t4(V!@ze_7^1ƼM?rŊ76LNSRj4::_9nܸCXktb@TTT֘1cuL޶Amc1N%pz @!tD;$REX`{ב5H2v  6E9Cu#c$7^1ƘW5'o_eeeNSv]SVVy+V8EF !2j;dz}4e!ߺߥ"ɴ$? v:c,& [$7Bd1V7L~'  ;ݥK-ݻwߔ~o~׵ߘ-uThr q @8SjUQ@7/"58k1v9A+r#:Sq1X]i2C6mڔi'%%͞={=z4T$cW:::@p|f?ɲ>qzkgϞ= "gϞRuHH%11J:t(`0ڵkWڠ`+~p54zsC\%h6HLvͣ1܈S@5bnfuzAjYתs?Wku2&z?_v֭re<8p1'O*rYhh#F7Rf2lذrm۶U߼ys.,l/scpDg` IDATy2UdRO@7{|]:_GDbV :eirVu`k cp @v{j-y[q͵|"4Cnի3of͛7wȨ ^v/ѣG}[3ѣ "##w&&&uwn:zŋߪ̙3N:96miԨQϫV٣> !o@,'Q~˖-S ;888gܬ,ghh?44[n62AcJX }MzVy͋*7(:aiHœqz!te&J>ڄO 輎b Y gy!ܹs͘1ctyQT45k\EqرcKt4˗/dɒ6nxq\tt2dHeo,K.@vvvȑ#C|~,J]ݻwI)͛wСCݱ,_Lb?B@7`6ty P6@csiQ7~\J nCbba#/y~.BJ<={v>a{WR(W\㝷_ 0N~}'5j=ngdggW=p@e>.**jC>V)t:s뮍SL`Oؿ+߯"r#5$x;kDsy| \y[5jtFY۷o o:QPPЅcrZ yStaF:ւ~D߂pZH} %H81{-7D~%gBs!MNKewzX=$z+Vy >EqguF4!eR 6mTرc LӴ%%%]tY,_~ƏiLLLԺIII-_|Ŗw֭8vׯ6meZkKrrr/Rw{~9+W0%K Yd)x<sNNNhRR%+W5W_}Ҏ&|ooq@XifRΖ՟kh5`kh};{b06t gx_ѲĄl &J1(:: /TgGFF gUVm_L4)aĈ _~ԩS_+ ?Nnh޼'|[n\]w_C};"""GXә־}%Æ z4444?Un7;?si?G1nݺ[Vkfԯ_e]` =p7n.,,,9xjԩS珻GydY|+Dr@] ,>~,_qٟq8zrZ {yI#D1іі +Q]Bƍ nVsGYh4h Q:BQ1|r2jdffŠ#0 FDDa)g#555T;0 KVVVPQ?N{$9AX[ Ž{W.uAG\GԏiN[ +;Z!7lIGW,,Mg>Z?L>u"i#F&\ʽPT' 3lfq:N3\t!/QQl?/{aG xhg7[D~ZއՀͧw4,QL 5(J\' B$wA%rPzt⩴!NMI(p|OQ뙎jpO= b".%GSI|L"]B2H!D;ޫPLL#ڋ{jg/aMLǓ}u x8G%BJIB?'5Pk\)H.E3G(1{ZdBp%BZ[}wumVHRT$zrv=j.G}eAnw"r4ogO*gIåj)1=GB!`ƌ/^?;;Zv=^z 4hYnzOgggW IdyHBGg?Ӄ`G(}0پΘэX0lڣ縜H)Ql1ˁX- q9]vN]|RAQ 4,D{ﵛ;w]/ vcǎN?eogy*NB d13fΗQz4A8."&&&e&sdcſh K]RA L4Xѽ @B!ę-Zz@)tnf>""HNNv;Zk˺uZ%1\BOLu%@ Pa؄6_$9g~]vp\Y6mTgԨQ Z(...rԩ_ŋZZnu+w޹)pn׮]цavD&%%]qƫbcc_k۶}ݻwʪxU:th pkNBIޕhnXYZ]t-%&,D1L{8JTBORo*`$\pt, O"**j[N\ve 999aJ)A^y_EGGPJvje˖qwjjСC;v쳏<ȋ]vZk˼yvPPs v~>[בrڵ[զMUV=о}%ԩ8߯^~{Y,s7tePP0 {a?-c@ҔWu瓗oݙurp=fjſؐ^$f';xVbC:9E'q)Q1!(1h R f\N/6q:f]oiӦ]`]tjܸqƏ6oP7o L>sO>wjlٲSgÓ'L~w1%%9sZ <,ٻwo?;q/ ^K/uKJJjQ_|qIJJJ}Ν;/r\'[yʕ+fffFΟ?ɀO (m U8ǢAs1V;  π(s).g_<{O[0IA?(5I ;H:T&eVF4Ds16ZU@UL"8}k@1r\w1)g9$w>yzzzDs;yfRRRN.sM6EK;ހ@F#숌i֯zPTTTu]WAeCB /u܏]* l񞶜;np %QVh@@s1Z18S> p9amqB<xv(lLM ,G%w* gYo͞=cfff-oY uc9[lzֳY)))uO 55tj{<𔔔zknYyDDđiF5J*MfVRʯ<OS1cFzHHHzu6mڴ*6G q$zG3׽1sLpC~7`fbw/;Zm圂BJ^{gc݊گG5 3>I8}}Qj$/$K#mc#!rfAR+_7{i{eӍYlzwvT 0bĈJso诿yo LZ+VupLڵkjժպu{ ݾ}{uM_~VrK.mxjJܹuf/_>@r- ㏿vڋ}>_pڵS]E0 ˪U.YfVtt I,v{mڴILشiSիW7 kniJ ð,[={"MT5jȈ>آEԢw Pd Z5ba(A݂x!EK[; ?uGa8a99X:2Բ?VQ9Hg&u ezTGwҁORB)~JfD̻ qݞ7u붿[n SJ={KXXqs*?\aSкuceӵѸqƍ"::۷n`wI%'S(I@ww!"ݙIp|JP #qGJt }S@Fq|I 3\@wDZU4&>7!%nSQ1ZKB Bַ*8#h^nq|"!G u@e51L~W&{w Ӝ \4{rBi7Iw9am)QI .y|T'ѻ*!>STe7-'!.p@Uw)8TBBn.q}ג텹IDAT7@!h.4\)mJܾz9PJbv`xwۯDd ,1{=\ 89&>w} Hu+~؉9 +cPe]+-Jij=ۓBHD3 ~w M 85$nw9hG n߽gC @߈ɍKQ} EC^4Q&t`bT%4vȋ ;F5N{Z\qܷs`'4͟3y;%'-KaωjX3w8,yŖ$@+~O>2iHӸ龞˪}W\TO&{wX%a&orPo٬57>u>>{sm#˿; _zMjr}sWܝSz|᪁޵u{?{/cSu.ܟij 0`;$Tly*E1^+ﰄd mЖ?ruO 3DogXwBGo þr|z_M?-iVTZkwc0f˺ݝ AQy(m><><¿߹\}N8&>o~b J_'BT4 Lpnԟ \NYβvMo! ǀaB8@5~弙Ϛl¨uQ]opxg[Rorw -3v?{lI9zJʢϷN0Z~0E4UצͬMkoɓsE< \.قr0sf&{wsT%r-7"'BTD=?bE?}Aq^wcZsꜞ tm`qKZ̋|]}COe^Fws%u'^m ߽-Ṋﰫ/M~'_GcJa,X¯U:_ڑD Q\@M:xoe_ oa>w۰`N8*wakf{mWP17b͖7睗YSD?`̞{edU7Mm pժWc޸ߝٳ5)d Yw<ќKڷp,oDh3}|yC['|chnn%(f$~:,PnuYo0\=gex[aUBSmǸ{`Y$ܜK潳ۡ}GsvӞU3ʁڝ̬_gy{-#zö<;n~4=2''L^3uwu]uf>O-ܸf[^~,fR#<+V}Rۆw!q@OAzhms~uŜ&!N"/p_)V !輅Z"74 %''oڴY(]rry{|#!*w|w Ǎ2DM1EځC3g+yt ۯw^= kmhf2 $!)ugZcS>| O[$czeҎdDGr=ۓByiG2j+SοiGxyQ녟#9~{vn<&_yj0#p']odggW+C{T |VaWs;N;Qu'w5?qiy8S}6;-~|ʽksrr-62ӲgewL =ŷx x[w%g_ gI),ds̹gΜs2M LMohA\1QL)^FبxgҝrFIg.rԣ무o5#5.:lk޶aJ_ò/~o^ЇoxB#BRwdM*Us=]tpѿdf=kiG2jQm[5F)Uv'7H?Y @)e؍޷^-o;h?AwWuiGο#Ԟkߴբz}e)Tuٻjt-/ozͱ,gӾ5NtBgP)emE[׮~6;`'z=>޵aUBɁZl57}VOYD*; ew@:qz|@\V>z;:G# 5Țs裝{G(s}"r$G, ƭʼ+]ݟi<(Z:iDs;^yYAi~}8;kzwY~&ѓ|gvG֫]@XP+_/x]זk׭{=9?.y &F;M 7 O}pͬr$#0*$Ԟ;W2e~^&7eK ј?hY$*Vb]BT(2Bn\Ƚ8T 3NI] wmvoQ=ijGm[֡}ռY9k0sM둃iVGnHύ;4׾q{^C6LḑM\M=j_8su][Gfe9&Og='oPI;gcWkuu7;Ǟ^#pȁlAE5ͬMmްMDI# Dw"1Tvr}BT2B]h'hP8b iLNK9c=%+K1,Kkls$9U\_LS)qzOSP4+\Woc PS.Q _eqFTm!ij+@DY::/?S˜Yv%iLfvR5gw,L^[q q4B\^Gl&(,&0o7qpF_\s"_᫾MmLkVcZG#SX9-7Zm@wY-28bɟ> d֚sZz i@zHͪ=Nwk׬:# ܡ[˕\ú>QU^q;z$}?tpOrS٨eMWwv~Ө-/߀i9> ؼ/Dِtqhk`2s|ѭвZ}@#f$rfC}&>\yme5\ zps4g7O7j~+76sM+I!g. q3k |?}57 ?.ͧ_|ng>cKܲz֌0 ?p`jݝ[8Μw5Tg3<㕯bO`: #~toEhOD) s?}]{pWyB1E'Deuo ~ŀ 8 ،>Xк:J?FM6bW'8/deW;cћ+boy_ȾSQ??|xQ0GHڝ}?vWm 3=c43N+jѮQF!W,5mύzkp͵nZkN=[`xnU mퟑE,QiG3>Gvǚr8t%QY7$0hJ=nۿY=Ũ`%&Ur3."WPWO}Z{BB!*gIo"yMG֠^b˱޹9w^U0c>~*c̴fu˛13êK?6euԺ%Țv$ .^/w{;^񿗟ܓ3폋6^^w϶V}|?oزSMZG 15T􆧧d:MkG{Ѿ/*3!4IvJae sv3,'' ;q_g==%9#.m=ZoPG6ϓҭ/}9jB nU IZ;!52=hԴ-()B3'BTfykf탶G&yӃ@o!qwCrncsybF;櫟` 8飪5#N,uqLHIN{4)3ԑ}eRM; 6'z?gpV4{ƒE)wk,w>}훁Onj{qzJfF-mU2U I:tkd53~ o=,JYA͢O#bIX,m~8WUo*<䄼NNzpjpf'`{}9V[\Xwtj. v}[])JkTC#,[aC4%K;lآnJ|cG҃ ~ԬcG҃j֩ g1 wZ&uҮpXP ΂1lAf'!?r058;3QA,IY>OWK,FYz>|Q(ϩ5?uƼ7ƏRzXt0P"w}h˥(W' "W*a%#!ĩ $,zg2omփ :|w@+=D) iANk,܆6CUA("hj_u& [4.(@qjϒF" 80A c2OQ4VB(xOUsZ 7QG:clւZ 1/(m2BڄNfbQ@+&0!D{o#JMEheGy 9@:h(s#[};IBd (8kBQ3~PLނ [<\a !Naop-cF/m&ҩ#!D@GJ`(s31Fg={BT,zÉ bE[EP_H_ 3տ:gng. P&e&O0J"Vx>_6 (Y5N!Dp IDATxw|Ul˦ ޻Ղ HEPػb(EUz{2 H%$,>=g7kϞsV\4hjih4B!JXfݺK t{يEVB!▧hPU[ν6m9jﲄB!(p3!Bq)((HB!>FE!Bq;@.74S^.yf{qe?BkwBaWj~μt1AD_ɹYCܧSZHϷI#:at~̓nόK*f1cMݟ䡦(WlG!@.X8pI%lE脇o uiӦ[k*'B:9b:fo!GBqU CfϬYyGAX%'x|>j5=U+&,ܖOWhׂ4 ž>]EWXhKC@<-&Y.o@8[iu !ĭM▓II3?W ,RbQmEsg5ЬwB(9}VQw P<3tz<4u0^5]K<Z6SeMK)x]EO:$\qR냌h3O?X$\Jؾ%Z5!JYvI53L+hBf\ .ӾuJ%˿mU1|ϜBLⶠsV%avĴ@Qs<]լX*XX8Vh\hXi^aڐNi례_1?ևnO?Jw2.|\]8^a:uF%`?f+ih,㘥Q ߶s*gK\ގYrX<-LLzwBk7[VDo"ⷮdĞK'͟W"7& Bۇ>X83PU 稀b$YM.D>^8rcKzfΙ8h("#c% 8X=OSDHLC'9u,s(% A]Z&sf#^8Rj˟Y|iIq-/ۖ3T?ы'@-Ԏ>b%W)[LBZ$ !n# ^^hXȶBXJo(6CjąjoMb$Zk8aTZz2jF=ɩG9mJ3d¢#p)}?Eqn"X֭s%PrUAquc9;x,"MHQxv$aQtGU+uwpt PȺb֡)RPx5V(V!}n?)1U^qrI53fSz3 YoBۅr!m((Kgccֻ!Wg^X5  hҡXS8t0/9OѠj.ۜpqVF\NG8դUC7HDz~W<#ѠfcDlcu*DjQ3vgF[پxH BFdȊeIJi|LyYcRAMߡ]WCLn~ϛk|v٨G`fڸœM)u'+.;fSzkD<;fMZWD ]ܢe%9`j@2muilW\xkѐ3vrɌ䏯Jvr6jY1_)ѐwwDƯ1?s&^&@zyBr=p2(#l2i:jҺ}@2kxMP8)4'@^b<(nԨMz]bQPno>sI8™5~hCi^1젒vظw.B\jGҲڬD% 8*h])4]sL/xM\(J9GɅ&9u+&$KBq faМ1 !( YB[Ŧ3'ǁij$;SO"% ! OB Ydrl*@vɽ ݪzu!@!BaG2S!B;@.B!I B!Ž$ !BaGJn^LB!N\!B;@.B!I B!Ž$ !BaGȅB!# B!Bؑr!B!HB!v$\!B;@.B!I B!Žtl%153VvMB!BJQ:_js򯺲lܜrFQ>B!*ɩdR#^M=WR!+ B!.Eۙs^z5\IƅB!(b[mJdRB!v$\!B;@.B!I B!Ž$ !BaGb !B!nv7ofaZ]ՒI :$ !BےV0xP\ݰVTTPUjUU%33M'*Jf|<e@|1{!BaZrrP8*VɄ٢ҪUK~v7L.h3{.~o]iuTM:vCǺ6R"B!Bɗ(?vRAE,+z%i p[|\Li)B!FU͚:X=j4qͣf@NmcQ#2sK_.xBEZ7cȘdW.dT nV Av8ϭJGv0ak9_k$B!lWi׶%m~_l¸RF)^tSXhZ!il]HÜ4f{Ĵl]5TQ 7EEGW N9O9%m/Zo !bSҝ!cC&Nx: j?w󐉎X`: W!BJTvM\#{tp+YoZhr]tDՈj`l_4 M,Q>f@*}>Q#db}.A˛%z@W': M g6y5h>':~cI}UǸXNh'wy>OobTN]sXKjX9x :ԣwPi3$](Bq3g_%='Ob߿w=R;ӻpEb *)j) xI!)]ՠa9N$ N'/c_7s `"ibv_ҝz4K65% !B Rj<8::*FW[|}(y_FoŞz:_M[Og7O|j!]ZGҡY$\H=*c:{^@ہ;¶%^t)UB!Dq`0mgcƵZmUTCesY\{~,ekޞE/擖QK>t ٜB!Xa嬞( qxxWz7`5c7gՐ aB!DOZZM\(Vz7O e/& xqyB!7p]Mȵo wB!BT"-B!I B!Ž$ !BaGȅB! rEQ]F!B/)ʭs% FɩʅB!u*ɩ8_0z֫JܼdG~YBB!EѨ [+޿"\!BQ9dRB!v$\!B;@.B!I B!ŽzmsUQB w B!AK 2B\RRR]Bk$CVB!# B!/k+"` `7ymv^JI<,{B3I^+^u^QTC$e`X1ptL +Ǔob* 3)C׳Xn%A[5'f.ľ3j Aöy``;2a(=w< CoSvxrLv.2Ʉ!!(a90i' l;mHp 9Ռ(#̙ AG➼oYq?m>D5w7:\t]n2pN";a =HzO3wiUpk8^K>+UM Ws-H^5d0#{Р3:rWV& =_!᤮׿AU, !w ~EU{=qλciVUB\_Xi g6laeHzA#ڲu$%mc;ۘ~~}ƶkF[Z+Z"|C6Ws_WpG51%^,U4cRζkFoetϹkx{'u!č s߆}xaFcɏ0qQr!̒ Cle.0dҁ+W#P"ԋ& eEjnixwi?-ڏm#nkʳKi> 8:7%g{ GȐB!t|1,ZJL"74.tQ&.ۨ-c FV!ٔ?7pO6xgi/BQ^ S_EF WMI48y{HcٜJepƔSVmEo-^zlN!ǹ|S5~,vH%~; \Ri"ZE85Ιc%S/mz1xP{nB$[ 8vs/ۦsw߆88X{6|f?/ulI{5ڶƌ')<4gT5S*ck(^R1V#6 Bǒlز]B!*N!/d BS%} _K؉5q7ht8zQ=<{(<|4M#u6p N kiDm1OˌzL|-(\!BT%7/G'%#<<ʹ0Q4 M`oܣ+A ;#cCJJ ~.E!5d{&_λl&+FL!BTIS qhBGMJ#H_8 塡w"B!D%!+Bq!+Bqk^!B!HB!v$\!B;@.B!I BKBQ $ !BaGȅB!#b !ŽrHM/dEUA)^gGCVS/0W(8u{;U^r!NrHJ'$7gEwIBPTU%Qh IDAT+L{.57g"C=wIUUSsIL#ĿȐ!NR  t(a\+Pw#!f䗹oA_/*]R_og ̕z\ B!9;ػ !nxnYGUVQJsrS&{a |,Updk~2'N$QXގ7M[U!i!\!ͮ*B cـ׶^e=A6}oCK_k"j"JCH, "m B{9o_OגkYd]j&?'\l*%^ܶ"m B{*+EfNg_Pzt2 pXY=3坱XUI+SyN-R!V{fKU 6Nʱ &dn~2Qͻht[KҞBVLΥO;/B&nHB qb*(Bkt󭅙KU ({ӴU6.*7@<dd-{v1x8PS؟w> SQP] l2qps r;.?бq =1kŃc#\77!M4ai{ v _]&[`z_G -?UGHZU rwp; 7r-XXhmi+K3E8x5c{+9wa,z!;'Whݍ . lZ ~#kl`t/w^kyCYBR,0#>YK|wS1Ā^2P.V.k ^H'8g*Uc|^Xϭ0դql D3]m#f"P2壯ߙ]Ѣ}'v8kMuVzC@c|=4Ԁ^5 Yܑy(lw0rOŁ9Pcior,Imp#xaB8ؕޗŊ iTc^,6Jҧtw[_ץhd.tϙ,kSo>G=O+9Ո*U2W>O^s6f ,Y3XIƮ공 Y<9=Hʵb F؏vO\fw,d̀z۽(\_P_@A^E;+6[.fqH\?7f2Qb^\iQVm`Sww3wu,y%KjR@p59&AP&u89ځ{{TʂX=L,95u>#0' 1<6i*۞%YS+==nX2yūX8+7^8|q{2c^ܣin{)H:ɞkٖ(;Q*GzЄӹ܋cuS΍8fr?lsux*x4U!A|?O&ndaoGݫ^z40t,*x+F'PQp oLk(NnbNLPKVjVRRW)wĠŮAMYj>7uzq0&Cn`&ٟZ.,hƧ q)[ons 3z%?O;URJ Y8Ck*&%_l;exQ3P5xz]`x g'/QqvRd*e)Šy>yBfzƅ/ R]meMK!jf{-q}򺚒a rkJ")V-AAe0vxq[g܅Uk2. JIYގJNˤPJP  }wrs6>_ nkG-ߞѽGhBʹrj4&\l^40],o!fķˎql YV>Qߟ6E[l P#h3` P70fꓯ>>~tՙÒ~0f|=P_)湿ٻ,z[fcػ3L1~˂G5yw _v+VfSx:xӢ#<@C4&,)plZ\C{hZn0E?@ŀO KR[g˵8Um 1dz[{}Mf9gkJРрjUW//sX\z/Lr+JRxT.8`Pdm I[JCQYLz સP-} ;4\9p}*"-|m;3DG{1Q肒~[' 8z4vweГu&Nx8]60w+{3o=L\ÂƇ#kPιkJY#Xϙ }S~Q[?c׌mdo o-NO>^ ̚6 |/mQ qgƓb?1%%u/ ~Y{o ajjKPBժgo@iЃawE}Qz]ttq6;G$D鵿3cw@G_]=&c8M6d3DʩK񨩱$1hvp"ϿN~J%k7τ~DWzf4S|o{ \kP!nr)$eq6\DݝGԉƆmqC*:\A$(v给Ɍ̔P䵼oMw?6]݋{;[6ܼ>:綼0+PB2PgdŮ][?ovG']gi=ŽrXYN-mee9r/?x:@渧K9o$uJRƿ wOƳ໅ńϟX9߯2b8|W@'7upr*?bS89?ED({ՊAyK<(tF(zŽm2.DHZݦo,W<ڤ?tt+ 8S¹sCq#4xf|d;JW1ob/q{yfZɎ?JQx5L25c];7sffOڍ󫜔>_JY!nrjɿSodl#;NJ&1X'Dḟ.Ao"ŕ蚁h'r.OŕWd zuIঀL5؜fcI{[QTLL]'9_nboHW> (N†4̀D_yu|5=l?RD^xNP~59R_fa+seαQ)*C9A YMģL7w|Gj۟m}f {_BgB YgOX,ߞq\'ڝz,G z[ZDM[(R;ڟRv?,>za:&+>!5xW®8ȝ/N/3Ӟ66=SX&#߾&|7޺y\44D<3K,/Ĺߓߠ nB@o4zzۮ⏃R!nroOL$]_٭ǔq2B ήzΨ*(.xݱ7_?/^2xwKYۮx~0?/ԋ )1,T g?]/99*W1BXI+_mǓ,f \\lUw f;hLEGfs)KVΫsrs8/QԬəOeuEBEyF8xP@`SIe ;y}ǗKcFO̕F4?]= aߤ f̊B\|66-y{[*o\S&GZ>;ڲ|!|n}&]EkC[ 3blxoYvapGbejaހw8B܆թĒؔܓ>~iVTt_?߄jzƇΔ֞׎les۸hr,ՖsY%9D+.hy}YH1w[-b?r潌|zfwJOTt>;n xUxIYsʭHWZܙg <,6+^>gG9䌓W)kPYϗEycDVUBҲ)*۵R4!t6݉ M˙-2qjFLRhշ=~׋JO. Bo1z~0z6,bbT. ՚ &N<1&`mZJۂ-s_eSxP7Tɸl]ʤ<$(DV r˩#-Ρӷ[rPg\dRT.x֧Y WŮ7\+!s(Ja!lwuFEH#ٟ?7[SAQ@5Bbk[iZ̸UX@!ĵql0_6ҮM=¼ 2ql^ZG|}]\QhQHJNL@b=4Nő_zvS#f)Hp?8oKfK6sW6>C۱iiJ^jZJ&>}Vk;?>E*x=׆ՠa+:i1w6Ga>)\C)^,~q?WgY3og+Gֱ`~M0KI/w `"&;қ8?9VNboΫ{Vy#9I;wRKTIښ31&Kp_H3b ,_k-RMH>_D$Wų'JC-@m^=~O槮kiB8SxYeǒ9Sq'VC:h8azΚ?Ч0})I?◯&O5O5y$Ye)t8Gd7iF-kr&$W]^:[ڰ6ipvT(85Ň/ibj~ w ÕGh(ʊԳW0e̟l괏,9V ^f;&?o1n(:tZۮ⏃RQ.%7޿&%#<<Bq5N:@;ґS4෭[\!>yu.x;u0pR9N!*uÉerB!\#Nn0FH;LΚz35%]&q^N&u !▦f,U ^-mޗN=(%\^5i5]'Bm@c!B\7ks}c-m׫óLw]K7 B!~tD77܌nR@񝃕]B aKB(T:UqYF!BQ6[BQGrjnNJrj.d"CVB;qk-hRe`(ۉ<,+QSWBa'ޞF2!ܜv!n6[H\B&~`NCurI B!рBBR2|E(AΎZW \!#gG-4IB!Bؑr;s0hYf]!F!2(zzüE5t'xxṙkB!r(45y6[hPA zM9iM]QރjldIؒS8ldK70oIK_-y,^s0ٻ0!B$W3*ʜ hЋ9|n=ǧӕ[8;?On-( E͸f2kUQ 'ϧxFI!'*8qXK~҅܉,8 R9XG}}ں/$ cB![&{Vbd{OZqM8b?Nu-Y+ YwB![";1a),\F%DFI+*4q`*+2.Nn~A0W;4 n,V3#Wqy6s?;%?Vrά!2ƛ{Q-ٟ΂ w5y i|gX¸K?x➘ɼU:ӫI kyjV-"iu,Pp1ߦτ8ƥBt!<>,OK ~ZG :B=-]apˋGQJU3:g/VuEWM.¢5@t !¾n@j錝ޢb>ij`N4IŷZrY5w{G wxTU$HBHP) (H ZW]W׶յ~BM]z BII# \y{Ι3=sf籪3A _zu zv}qGuu?7#.iw:{$+zs<1 ]p24~+`Fj< Yߣ7+K2crcǴѻcWi/ #-B4MN8MV,N덥d_z<IZp2 حbWj""""ąPivx\yy‡ӭTR}xĞAh3h gBlm?0Ua,63ڜ1%6.;T IDAT,uS ؽ% |}ߝNx>נUո= ٘nOy!7[|ڀ=h 9/x1JYCSqwO\ETtp=O{}B 9x8솠Ǘ瘞ʱ}/AB&=CC9}du-;i RhO`cBӆφ^rd.H%)&ۄ@ N Fh8OEÌ\<٩Cgp3K !S51͒Qtt2!DCn^i8}L:L/X̒kW U ^v3Cn Ȝ|~3Cc"b\wA SK"30s؈ w[i^<ͺt59i;aO:bf/8Ĕ:-gofCoL|zW>A" .봙TJEi?2m%~()uƲiPRǍ1fd re8# Fq}<9YKZapӹ½YLdžQG"b94qgёJx=8"&Ǿ*ba8Nc8|{gҖݏ6-©vl4Xn/ʥg*xo N|LvcMf2R<̚R 877F@~Z_JAw2qLW^?sqMh޼͏)<@@/m (2N3“1xQ:GȍU +dܔ,A."KJhꮈH9Qr427g7 2 2ff&d+CG事9͎.yn'DyqB+w#-p6fc@Q&XETe`({I۟F'볷ׅc87tő_xan&)/혖G긳](:l30 (]-M aټ= BQZ:| t`PWy|S*v&J"bB/!ZIBGJAe #7]쓖z!cYhѣ/%xGD,o':ݐ39%fIVwCD ^)u]#Q\_6bp}S:zK (؏C$#͢,NDDDDҢ@~VlY{Z9]wI;ev_rB@."""o}5|z<2}.˅JSVDD(3o3ggF>>mUqC3yX-mã9iYbЦ' G~*Z^GY7PO%Uv?DD TZ]^ip66gn!e_:مUh֩/oiGc2SފxY8EO0^wAך>~.^ǿxN&&>O-LO~Ay<T+do2zvvH.'{w8-2f:9HVAq;wT~ݔJA`d, :3406_g//ҟlH?ᨉ,ؘJ#x_oeٶ?|wd}wrMϺ_[ٹ/{hMʈWQ\7O˙n>=SKPXj%w/#HL;~`~ޠjl5lx4,zI_=|2Re]p.}bU!'GװiwY>Ws#BKҏi^Dڒoߨ),ޖ =a0\}qi5xwcp:.QȞ5YL[[2Wyx]T?oP4C ÿ1Inn$&mbcJځ|6B?6n/[3;PȖ 1c8 ٻv)k3P_| I09[_6cJm}I "aj4=3=Unvqai!峗CŜ@ncё!f_^ GbHԟnՂ12 %QȞUXф ޷Cg-6&9+F2ⱟ8T'֑Ƕ9~@-]{'NƆ|{vF@<7Y#@fpW]`Om9Jle&6d &^1-&%3)b <ӎwx\yOX߃mBؽ'g\ED_C?y'^o<ʌϒԫzF_E5~oA_1vI'kuzхs M+a]Æ{68unܘDcnBKсwlLS{6H8RGe\#{҃_eO&?R& #}F >&|4U;w"rV{å,=Z%E7WkKF{uk05w5Ⲋ&^<]Qȱڕ;_V--iTͼoȱEN @>Ğjx4v[1+v :d[L ~_qLn}2}xa4_Nh6nlqpKGMk""rA@^<3#}j]g0ӗ/0nuNKlVvMLj%F9^𦴬 )k֓ewZָӹC]O fo=GI5W?[V*2=3k+z؍[K 6ul3k5K6yI܍F ǔ녨:#B8lw1+Oְl{piթ ~3ohY$sWm6ұYtsT옞fo3JjPPD&50Ҷ%Lp F§󷓥tK)4B.""dzQ <Ծ/s/ȷyaG8!M1`KqW`no ѴhYQ?d VfOVչij% iite{+,FdTy5ReffiG"ˡeSY-|A!yᴏàӯ.XFlT2?veGLD@Nfp/%}Lr2Ńt™zdy?'/gȆ|.AZ?TN@.""Cdv &5COSEV6Sy__R7ւaOwF֭rK½|͆RQ,mlAK7a4F2{* $;+h` ̌,L"N$^Zk8z9fHa>ea349rV]PB 'L (,a8{p0?_V9ğؒ'vW⎝~||?:?19/O""b%?V7s*"Iy'q-|][ٖƕN϶MieI8' xYDV ؝iݸe?&۷$ɥ<힊Y1&;.$S Li~0l iRd>y{qfx8h(_FFh0lUc}|n@B ބVu RfbљT&8'Z+ucZ%uzzI4L>_U|-mT w<=v~HYrP}u#/oBpf{cƲBcfo^ͦS(H[ϓ~%/q7 |צ,}:`0ecO";2ԷDvx?X9m]il;֥ ͘7څ?Hﮍ_ȡ-I:άOGljSb|(ھ{*e8;TANS}ҜI? k៹SLD3Bi4c8^AR .M}KO;{0xQ:ypw1]Pϙ2iHߡW1幏yl_{)l8Zb{'6:|'c4*'Q vɊYx «;1_ BI9FDgƍIv/ajӱV>&`H3$NP\><% #7biHHH8KHII!:9l1F? ({xze{^909%fI_9ϲ7exG·j~%]tʈ`r`WL@m6/` L][d/ag բJUy89CӥN953725E^u|ѫ,SLvz ^ϤCYQ>m7&XMY)+R.)+"ʜrQ9)XH\DD"a`ghX4M T Æ+SD*+7?ʋ """ wgY9\L$+ÞYDC9iu"i?EJW\͇JIȩ۹mgI%>L/n<.πt-aœx̝ /LVOϴ5T*͢/7c˸gV}bDNbf-bܬCxm[7-GF}J@.""'0I=%tgdfUD~Y"δ =r!g2Rn ˳/+%sL̜ȯtT҉LS჏suFVw@DD3]y#4!XNuy(d3u[$kx;i |*nJ% 02HowLl}?Mdz_=&gmgt\/~i۷ 2ir6 IuԨORz!TÑRNޝLŰ;YSmcǜ&k'hK:bkwcKChPڶ=5W31Tx9'>=S J5rc}I-o^[ٹ0.w8wȃ:Qﴏ=St nm?8y W~eP m;Fj|:sf~`MX2es[_丣scό'zzCUd/k@o띧k6178] ȗDkӡɞkLߟaOW x:ug6a.ǽs*7{9TYp_p0~fKn?ڞؚ%}{f4;rn 3XߝnBؽ7pҷ$wu=i?gڴnQ-3׷ \a0X=&ǕE_u}! ޽|dTM@'wW7*n%w"}+F;`v m,_{0&%!l~IGlQMѻ{I=:P5n^;Ciz"Ц}#5 0}FN Mr+`ʹ9kʠ%v<B%wVƻORĻL`WԵ潴8Z;w?;-Y2~]Gb]Cyy6 oHJNÆJnn0:uh_wIjPoIsED^xgӶ 6+ڒl+-cw3k+z؍5]FvA qԨ2(uaE[ (( $Q<lsfD^XlY+m 6uȕ,( InN.*?;|#>rftͮ#v4gpƊ->,U>c\ڶYkXKYEFa$$`q8fy(Qy+kB, odK$˴Qa}5p:,,cY5E%<ۅ,f7p]LCix8NBkU9-:5MK{Ԍ۸O,pԼ\deMe]ًfȹmfkoN|^ +oLBYYG^ #+6 N )8K'C!>g#:*yN?:H 3esg1+EǮ6 $;+S38uqTA^,_2m0L>$^7F\yBN ~/l0 0G~j р6-d6\)f.؇aZk\ḁ,.2fա'\=/wg SKvs1 $;+sB\DD0s3wyfy$ֽ_U IDAT٥+y4"Q?Dž Ip3N.cS-lIT%J#,F ~m?w9# !ҏh0q`Gs1@[`=nX=FGr)3gl>g&b^advs  z_fx7kYgͷR]טiu2 ǘ/ 7>]k<i"͵Ho9enoTBLaU1w&;Ͷ }sM͙E?!Ubi&?5k~\cɤS Z-Lȯ@=6={^WQ>bW#-m#ibJ\DD"~܊,(*Wn>~m+eEDD,d,r<)S2M{gA]Ni?EJW\Nb~6#wYVS[ξqEDD,(3h\"49r#E &2<Ӗ0 vb"*^rn#>&nЗ:EDDDD,@.""""b!r )XH\DDDDB """""R EDDDD,@.""""b!r ٭E^Rp{0M\p i'&2ƵEDDD.s Vp ð;49Kjz1AV\"廹r؃O`jkJ[se >rf*,ܥ'kaMer[T LYK pa:Sf^y^__!3whVz^}-]{SBq+W]oC kA PDڒ/=A9v+T 4yk2N]/(q#x87LEZ6&нUٛU hBaZ?=5mн j KGgE9zISVDDDDr5bسwsQLxANKܧ 5AnoГS7ZX|/Neĵr9ͻ񣦲?/t'~@V?0/r$_c᳃a|/?lׄ:%W#%:طx);\ʼnmiW݆LjkGQ@AAA$7-Y޼ ADDDD{pwn`<ڏ\-$ڼZ-id % `Ѧcco‚]P+j%WxHЎ60]bv}cOl9&D^X(YCsGyr:~sL~}V$;p>I9AX۫h7;o\RO]n dP<ڥ= 'ѱrfv&L3BkPi3[b:G"AX:tH`rr#7] !!,uGDD*"%%蘪VwCD.S2h\?;fR3.]N6،R꼽xT-{;5@?"1CL`z.yZ֕[N?Lrx -ۋGE]9ЊS7aDEYث0~2 [fY""r;@n/aki0~2 5Hť箈4PDDDDB """""R EDDDD,@^^EgKP""2wSlu7DD䢤@^E>^ғvyˉUٵxW-wA34-Fv֜.9ugDD,[݁s+o^}#z2 -,Z,'arxB~ٚMA _'TIb\~g+)p6vШN>Z y M9$^S:@vq8+P[[mן7q>g^=TEDDΞK*Y7^ɬq ڪ+(=O{($:ͪbx)#3a{J]ZK,d3C))8iT'uL'V~ulZ8Q,`]Mp"C]xiw;.""r]B̉MNY8i{:sKu9Q51Ƒ]>ɻW3 ;q3J[{^ԝ z婤Ĕ/.@] ͞1u6 {AgxlVQ TayɟfGA@|#ei{p !v7F4G.{!?w6j4:uFEDOdyᦙL퉭[7knK3K: 4m" {NN~Lm-'ghv!퐇!% 3n"k4]l\ юuO5c KE|D T=9QS37xx]ǐ(Z73y>S'3٦$P۪7bdn?L;ʮӖ>3eݹ&T!{?6lB:q&E= Q&? 6=~M6 ÀW%1yL[9f|x;.$@>xV8W?[N wfa7A\զ>@(|=sYc7?1!9es Z\'LMeI.'+$7EO!lG>[icwGMe\_}NIfSa$#О?f`nA=w_Qg[ْG׶6|[zmOL^= y%Ҙ@Y8]!`ծ= Y,#żX }{j27?LZIpժ㥨b;AnY>&`fɿ3iO5o}o!K6ȿIfZVn3ѮFܤF6dU"pNqyR'('ib:80ݜ/ OaP182:^}rI|"2Z؁s|}.A>vrGx3Pu'\=/wg Su-""gE͜eZ |{_jӢgMaՀ{iq1rKuڕolj~Dlrר*'{-\uWJИ#zox: OquzϕTW([4y*dkٰ~/"""k<i"͵Ho9en\Oa=@:iN|@1k9v?[9ɟWÁ]Kq~iwȍOdmZ_j'Ucҍ]MPPQL;0f0%c_"ÆVQ=.˱%@8~?y;SCzDKa@nmRib>ei'6:ª|' c./ڈ.@nX4{%\}yۍv_e/+wb2 lV!y+Dl9֕`p: nԎV%6۴R` !.ԋi`ڈLk#RV$e!4gwmbׇ8"Ӟ"y0: @_>櫱K+o_LgYd;VL{:8;M@XI )֊@Z_G,bURc LˈTQAAJj%ea7!8CK3?ݜ;̹-rF_U[_._3tӈd/voD1>Mp_OV+j1Ǘ"ܣ4鸣z2F M?ر߄jtD|mӔsrĴ/W;օ>8tR{هR9 pA8 DjQc"arOHM[Gy۶4Dyǭ cVe>%zߎ튓QejTm;s_URWMm?1D[)t&`(LGc>)1^WK9oێ朻ע  pA8 D"rA9 pA8 D"rA9 pA8 D"N!`X%~euz81D[)| nu5::T۩Һu1k*|e[9sT["[N 6\u3 !@Tdi: !rA9 pAEGN ZJj]s_nl7N /kŊuz}*=[5l]6n8=/ ZrڧR9#G++s=҃>m9KsE=ZB[Mݛ=l<|׉_Erɺ5uGxՔ ۳>?G=M)5c mڲy?EûGXazj+s\C1. =m/=4GKwՆ˹Ah&jI<85uӔ;oz4x3р>^=W3 su=b%@VmO=p~:ʯƸ$ח{c?>*>:WCuMtAVIuzw??ӡޞq~~ppê_V)ёٿ@nI t_uVtPꚥ.n>})Ÿ$%1^?d&?JϽwn;&]mH%hڢJ=KgQ UrATIDAT萔a5"gŠ5wG'-}gީוI kVqiZ<:2YUK_TSb]duh4ezX'g)ϵZn*~sWv[-|\s~CUs~zۑ$[1M8H]bC AڮrS)Ě;w~{茄7*5.m.*$]Wi*Y{tJNB,MIŔbUZq<7,*UՑ8%yw Q#>*kԵ[W5cl!!]>Y.?AwUR*1Ui^ɷXUVJm`BUSZzWg`]t3s55pzvrvr4^ܱU[.ѨyZ7k'wxzJ\Rg%UJ(O$)o׭~u{F;\iKE*H?vkTt K;\I55S3V>;ߣNWvvx5dyJۥeG}RB}PaW%C*_? !O3..9O'[}uޭ9F?,U>˫uZR$HbxF3${W\.-[FE_yL 3@a(ՠ4mDO68W@8ZM[;\'M:@+Xu@;Vܥ5k@NMxY.yT=J(cE9˺]*^Y~s.Ā?1|}zUppg&߲O#QV(wƝ1ս{7h骾yy hwfLP\&MتP/oH+py~HeDpdR4얙?it\;;#h g6k OjʓCyu~Od;+ȲWW:yO](y/МZ ZlێJ?ur|V%;Y9IQnRu(^]3s44VV^%h؉xRmzR;r)AO]'WnuOi()=[ܪqW>&WE]59Z `ԉ(WN#S>Y\=2 a 9 pA8 D"r1ۥV4~S: !@TJUV#[Z =ߘnuCS'J`X%~ 0(VzJGŻ#_e[9s9"rA9 pA8 D" HrfIENDB`DarkRadiant-2.14.0/doc/img/EdgeEditing.png000066400000000000000000000104531413722237400201710ustar00rootroot00000000000000PNG  IHDRE@bKGD pHYs  tIME'8nIDATx=vH9c[: Ϭ@ksā8-a֠%0,@V]D/p RDfcra׮7~3}Ouoǎ?cSvg}׮7~b/JW>yիW?>cիݻzꇯ ֒si}i}g=kGk?cSv}g3>kG[?:`I4ɂ&Y$ Vd @,Xh+M`I4ɂ&]n8׫R'}rrno}Z+uRGsgV~߻4ɂ۟WWG}ׯ'9N꧷Bܤsv[蟼Z?{Cx`5wz͛/%wrbϾ=|oD&޾{?vM\^w︮mݻ۟[cS9m)|7=w_E|y{[;^d6Z[ퟷ:e#"bmf`I΁_ ϸr Vd  Qd6@fsmqD Z} rݿqWG~+M*^^v"[Y־a nonMfݧ 4oDZ`IP̶ܶOvώdzK0tHnyod8v >;4.P 7LoEmc^?;@Udw<;?ED0 *9FիY?Y׬s=P/9F{ݲz~_tc Pteׯv_VXuZ]v}͞{Q^;=뿾Wm2kK0tHnVx?dwv 5ϰ$C?k0v9d=;-siggwQIvgY$ V(`Gnscl;dtWWqXnIv -P IvOˎVd`(ug`ewQ%m0+pd|# Vd l>m0%g [ܼ@N[*C6+Ma.w_}W_dg{Wqgs{Jfe{z=KJED~/:P1a(:W/ kSv}y󿅞^:)#?b5h^v~ﯯ!`d lDД| ddv K0tIns^9n[>VjF5ФncЛ?k0r;=wh8%=ͫ/""a}">m6E(U>k};V3|缧ܿygf>|OM""b~ƟZT]a1=Oy?{)#l}ާ8 }i]SӐy!aF$Î4ɂ عiCùdw~cp՛#@)#*^m8 wXh]@o_NGvmYqx6ϿAN;s1؂&YB@>r;;4 ds1.!9n_c;4]\Ч{mD׿y[WUs2>sj]#n~י+Mx$Z.'aAK::k>Z- uhg٭g~/>@a(:r9zSv}[,X1_[?s_?tu{!=}?/~u/@םOd41dv3뫫[,j1J՛#SG@NS>;4.P 7LEi>+dʸc+M`67|CCdi˱l`9.cd1Vt1 \vq~=%Wf}W><_տOO\W?ҟYzU_RlED~/:P1a(:W/ kSv}y󿅞Ou<6g0qנe7ܛWWq{sﯯv2~ IPFd ?]a`C^Y.Sj}`wXhRrMoM\vۀ_dSh9g@g<9.rS-.Z-Xh+{nݡ!3{ Z;%:$/dshq`wXh]@oBdsfdsj-s@<9.vkﯯ+w+M`6@|zo{7cfdZZ1""b[,fStZ[nի?>c2̽ˮ6xC|lPTR? Cg{׮0ƞ>g}ݿ]lc }zv%2{ yfK_W8Ҋ54ɂ s!dKnۍE/=]ZS{koo"0r '琓ҢUnVd`(ug(sCfdʢ;0#d1؂&YB#@>sέ;4ќ3{ dQc`CI!'%s+MK0: S(s5.3@rdιcED0 *9FիY?Y׬s=?'C՟{]s?E*90 E]QvjoewE|\~)^u}Lnk9whjoS[v]y*^m"S.!gIvsVd`(ug0owQz0.srꌺ ]r];[$ V(`gu!\n8ɱ [M!'eNc;4.P 7L!(ɞ٥ȫ; '٥1؂&YB'@>Ys ʚ٥7S|Qz">VSvsۈZ~i{x:]^c~Hf|~MI=AC{n><3@. Vդq?cs"ue{٭ko`d @,Xh+M`I4ɂ&Y$ Vd @,Xh+M`I0DzyΫ^q{V^}իW?qiEPpIENDB`DarkRadiant-2.14.0/doc/img/EntityClassSelector.png000066400000000000000000004360571413722237400220000ustar00rootroot00000000000000PNG  IHDR`1bKGD pHYs  tIME3my=8f,D`B56EoBٹ-[F74U*1: BR8Zѱe5>6y+Q.5c8gqܘ, J%#YtHu\RUoXS wpPYY JDjŚt/֒ĈA^p>u8qx(Foca xaI0Z1X5h$XE!xӱ?A?&h t ?U.WJ`B!< [rgK~ 'v:dǎ"ټfe2Qd2Z0$b,?wqD908mzsNZS$,uxk aaDq}|A+0qLD'9@EbЀ-虅GpNmK.ff2]/.ga^MUCOr8q@oaqU(Q,2@!H[ ր%(BΘ`B!^gXz'NFbPk -[x~2Vln7r938gJEOh\~{Yh9ヤ H&%$󷔛%Dt!YZ^a)z56 Oy"~z(T[≻ R zrB@O S DYKg1F+FE:Emqۻt,z{z( #5&&B6 -Cܬ3ӝrDOTdrL47tvL[ C6wXYS8~b5~g+ L/2T6YM6)Y_]_Æ'vpy'qd]GNghENJ(Nd9eU@֥ \Pٳ_4d"idih2hlJB SGA/Ku!q8bJ<^ fMC`/!_* G4O6o~*]bhT̈(>H&%YcJf| sox?jr*tL[k;3OpWIo0c Mo1U1{ʄ%e"YGRnp8к,_d~#GX 3eX_0%TK[$7|"3ņ8+i1&qsxn ~0:X111> >6؃ϲ.g50&eά&i.(.=g86UBySq׮K_**_|PSMpi|_ƫB!bL[M֍[i <&6vigWD*C!#0-x%,^MSa u.+Vl)g9|$UKY՛aÙXI,Xۊ4Ma9**ؾ` &s)Thzp !xPaH4[Wj5 BT<S݄J:!4`02XqpB%͖-1 XpdbrCp\W]\m B뤩8$cɜ]^wQIo2G'%&} CiKR861A㠢2=m t\|lQ)B/!x͢n{f.-Dc=: ]$Bq[Zpb}VWZIA; Is4}E8Tˇnצ}Z z^z5t_5 KludٮOWe<,79<${Q&R~C!\yP$60g߯]I&B'Q;:,#Q>/o ֦$r+ BeA9%X.B!TAB!kbJ'B!ޠݪY!B!Azz;!B!B!B׈`B!BL!B!^# !B!kD0!B!xH&B!jĬzC!8财q!xhٯ1BJi 7AjB0`R c m-vL!xA88p!Æ7&0|3WR__O}BEs 7Ks466ԝB!^[SS[Me>v4yc Zke L!A?}+Ͼ=BWRj`1(h޶͛4qZvI;B!^o^_oJ%`|B׿W6fmuwf[O~$>$OU@: Д81i [;h]JAhV5XˠTZx!B!B(~u-WߺqyThY˪ lPҚ]`U4ruX9(\Z{نB!B(@sr}Ki<,9zD9W6f[ڎu|u D|gヒ;XI9;ųw9h|Sظ;}[Z)FO=K/=mC\wSl/drEqa({%پ@vtΜ=s六!>\rs72CZwuZ|_a疻%{sU\ؠ-`BZt8:Gcf_v%U\k>EGK%B!xy^Ɲ|*g?3= 5m ^fg|'g),ͷUT~ܵհ5:]Ҥ4<]5o-Yp!bbIGDa ۸GpVl",qDL,XFQY(" ˔8nLF߳{9pZÎ#CgI"0%B7}k%J(pd4+-5YQZZrHo9DX 0F):(h/DD%t.&1n\#CW؎V7( B8Z(IUɜ,cAAMNXU(ڻ*в- b24PXk b3VNUюu4YO1~T6&(ذLecnBH& Z)$ޜl_O䯾PF JZ" nDm arL>P QZ3aX J@+7ic-b 6ed o\l!b8dɪ (0BEI&Bw֗U۟ DV}l/V[uL D"j2GD2dm'cf(JWzFϻ6jо[_U:.޹mͶ~*5'ͦx_ֿ~lw1ĻC7~0,B aX&P#6|G86hs>]CKG/I֡BkZq|l6ö'̘Sǡs 8[a Wk"cEņ$&" CVmFwOYLv-յ TTT{oR+ě`e~ߠISdgoO(4c‰L;ZRg8<(M:3lO ~cyS,*9m4(گ$ӰPC)Xcl)$K1 =MO:} /,gr[BQli5>JkzEފI5ؠuvSqt586ڪ<AEw|WcLEQ*whLl)Kꥧqi\WM[t2c0"j*.0No(Jd1J+Cv@ы1CX@k7?/ُ>}Oaw+Kz=7=A!g3]㽜5x&(vlN~~BP. fj~6=#`J;?Fofɞs9p@^$N(`Ǹ0r|=2bpe?O8\x4![H?Ln.o%V>%NSO{4Gq1w]\8`@Nwp#hNLBq_ ՠ\Gb[K ew6ՠTD,d3O{Q3L32at=CGHBgg֮^vth\ xPFQ1:Uq&٫<*#1 claFkvx=گL)06oTXъƆ*݃9G%##'ikb'IXbsQDQ$4|O6\Mya'ax2z+|%5C?'w~<Xj.dvgWO_{sT*#|kڷ-?`Y{'8u@IMf~Ee|ϐ-rQ;sfD?Bgm28aT}F9xfv:zgR0*YFqFsxCMeb9d[X]*4Xl4Rvhg@+h*)ġ}2QlDXki c"2^L&K_vVoC*s>F>1[w1aLݐ֎^IGo2 /Oy-Y! KL=W|뗜|q -z4O<"Ɵtxf<Γ숩s~InbMOwg}F¹'u?0o̱| Obk/&N<$U(LO+,dF:} ݾ1Yse ;R:>.l+>wL>W-iaoypx}H53ǜ=\涞)w{ !5iT* wqG%e)} 5#jg6ry[wVoj!2Ot޶Q Nn$\`PAaSzOcM$͵H9C(X;SoI71K%?{[|]Yk7~3=08mߺRnǸO?,=!$=XKT. W98a[[ho=7~k-ZWktvل(18sNnFWOOpogeK7;[;)E(UVBsUlluL(/~lRi>L;U!ɧ(#Nwqۧ040@nI\0:{_S?ɥY,N7|o[9ϱ 'k>sMn wI|v{\/ͮIT2}YUB8#;wR#UP1J?%G>l8VqYr.'w;DŽ%>O]aF\ux| peJ˿nϾϼ;8.Y{| ~o{N[n9u44?[zl~{}j_nv`sB8 =:09dLMډ4٬uX,Ϝ:Tq.Z:ya:R9$ qf=`e-ξ Ob d͂%l,ٿw ((г9ßS*v+M *0ใ'B9,^Z*Q 'ϷxygyNn(e_"˟}V =Juc G=MfFL~ct(|X=O,+4o,erh[Ɇ7{B;s* mɝ(yό;}gQEB!d9ZzKZ:PGd,ceٺmCMe野&cnnAkGe8l*Elbrp*"Xl×V3EaT%ch]At4(;E8U}g5fBU@f <{EC =㘞B7 (:gpD%wk`IGSW{ubCz<ǟ6[qߎs85o (.RŹ]s ~J+hlLs`I,S61n>{(,X5gƼ_ԙiE]jGm@ݔZ$pn¾3ʨio<؋|XxKͻnfzRiƒ[C>Qi?oi=Tݘtbu]3 $Z$ XM4r3X%ew;B!+b 3f0A4PpytÑ6>˼Mkpf8skɝb8:@̣͇Ѹ\[h;;i3701<=i=P4 ߬fKfm+u HKɒ9N6mYTy3/.YćzQ4_ 95[=ǿ^NqE|Kōzioo#8VINIp8S$|g߼B!+FlSɣ(YegGk1 DpN' |3+$A5ڰRɽU;xN ZzX%cKuAA|$km%6'f\.PoX!ތ+cC]mmtʻU626)rP]]ݜp% C,{X0u5ήKgW]bW; 8ǿ20ӓ}g*SU1d9d*2?BDOk ;0 _|[A}}~,}Q YZ72s<:|~ezhW\y|+c?K?r5|M6rgdpmC80<0ϯ,rܜV<5ڣ#_Ϝwn)||8S=s{;K+ƥ5Eϲk~3ۘtAIG7CܴO%˱s[nG>?sgE{~ =3W.<`R<'Lc B!WCz{)n; t:(.I: $ J6NKă: ,&=Up+6`LzKT5bҫuƘt~d$.2GB#`QWS*ACC#avxP=]PT()tHR*GCF,TVdv{}8_;k56lAaɺlک;YctҼn=:J8*ƎG]nݖskQ bp|G61! ? օ>u;6 #@ȶu[U[9d< E6o!?GƖ2&4fֵki{cep֯L{oa 6hlY2QdQNeNFOGgZl/pȡdzM_ ͭtc:90>bul,S8CGUѼۺ_vnek#нcUkU2*iBխԎ k׵`r8lh2/=4v*4?s|3gI'f!^Z:.UZe+V}IyIKss3UոK.a+ A!,$}Nڒ@cюCOWʢq\'ilIW$-4.(Da2 їhs@RL#3$ҢZiQIn[Q:#ɚjD6Z+ěFEύ7݌DЦ{jk޽5\b̀cZo{ۻ2dz#{4dMwKWg_#kh}!?|_{}s%?&| !xc?YkqT#Ɣqb5kLDQ}OѪoX>h,:N5/hK6:pHbbC c&iI4$aOo/6nuj! B0^7*C/ޚ[.Tc@~ !xt4tRƳR pMFHn&}&sc*kE25P0Q,&.J(ݡi8oGqvBwQY<'cIF<ףT*R-I]]5ÒnЎ(QbrMol}Z-KoB!?mmZX)<a 8q798Bk0p]/ lE$ZR6 )G;ij I)z*UqZZפ5ҢZ . a29[E(A;E111:XJ]Af1&x~R!r1ad"rBY [fU,Ysy*> y?C)ы]yG'ƀ&bԱT&6N`YC(XbX z'B!ī(6CFe{l@Ūd5Qd ؄Rk$H+KoI%xNG"$eRNRbJ etΘVs86i<YRTUhȶ.0B$,imN)E̜DuΣX*%JEK04DX ,ZS]P(Ib 2&s |c[cc*?C*B׊R,k ݽ%Ƞt Y%b$ (7m<:a_t6 *}2ʂ (ݗy6ijE&lı"""C>.VAA@W{r186 ;Z-IhJASpܴ鼮0)1Őmmtw2i8jtBҦ2w+eeծˑ;%B!xi}AYBkcTA( XbNYc3r5a`b)k'Qi9}A56׶0i{0qR0d|0aRUxN2hEMe\M hXWc{xˮ9;ԭyJ*<'HBE[:*bۢv:  -"EA^: $d 3$E<ܺk?:JUBSIIڿ<Ǿsk5~$fݤ{p6!ZcsOZ :^Y ۤy!2.RzO(o{?y+WjäByFz-זH$D"tRPVۯp, ;dlt4VޠTx2@*&xnPvb`_˜L,2LaE H~US=gXg[c,B(zeҊYz2(R}c $g< s~۲ =Ƅj`qS[BfjˉVf-6HgZ,k@|G/Aixw,s🙝9<yRBz5S3 @ O4cc-&u6/uztL߃tH6Mq'1>Ҡ2EpWܾwJm@+M8fzmq3xpT|)/?GdtV¬hy~t6lHm%nwO*9z{׿ !O.W?b9FnJ$D",$w+dH B#ךVAK&F3"YA ft͎"ii)BxF9TdF"X(YN|V(PR4Eq< * ȱR P^)(XҋNVUH)Rrpm=J2Y8&AzƒW<^EWyZQO<8*̹^pCH\s/:62/ 4onУi>xQ=z:~sW?wqUK$D"xZ!(kCt:%EGd\*EY>@LX2th64Stdi52 Z}rWSXWgCW N8Ciڭ`W,U(߯+)2D4PR ~NM0MP{/5nƍkiQW56E !hQ*x5#-BiK<8&᭰uvv@e#,w ^}Y~wЮWu*1D"HE?4,H$D(3t%i"5"Xu 2TЯJXk,X[ZstpS4ΡAJ_?cfOYzxr>CI찐O;GVdHf񝩐RUq.2OΆ<`O`t6{J3)އ ZA; R9G`úuԶfuDQ`S !:x^~|Xl G#g+R ͦ_/l sG{Tp?/|t>䡆D"H$GAU skLP6gDwT(Z s; RH5RV'`/T8oo%|&$6ٗqՅ'2]!·. -wUUQUeYg u FZ ,C&'"ڭNb*Oy#yLD8w_fDkuq4!MܹoSV. r33LH$DY IbsT"{B)c`@[bAWbuxu RѦR*!7LKJžeDJ(<-YxO 1Z-PֆVO@ 3| hQz|Uwaሯٰ~f`΃LԃxpT֒UGt,`]qZ,Z;_ W;oqզ8jGg۞̗[o}1kbXZ'I$D"q42|O @k3ߟ B1aJ`@hC!WZ"cRrGH$RH)T:ἴRdZTmHC6N:L2֯Ego@IR=y]޼'&1ge9|B0z6NrIkY7]wFtwx~pL82XtX*~Ә\0[Ƿj鄓9%|WgH$D"4`cBH4FWЯ(n>*us!JkL]G0%d1J Ahqg$dtFCYJ. 5!B6@C &4"ˆ-9.Y1A@)0`|=|mڝsԵ a /:q>, *dR()3)ȴF(#h:ҊEw,*SoMM,њvvB0u5r />L<0Ͳ6+&&X ^LE>ND& D"H$g`ǚ.[vN 9[R,xW($KwQt| !R ()[pdZΜ;;AiIe X8/זS8 6hH̲(#s֭M'cBev` [+mmQ bN$D"pnCYX~ dB|og=`w%0Ke0gZܭx^*R+T^@2TXkAXX %%Vx$yY)kb #)ZyȤP"^Tg8["n7'SB"LWh$2jrUhQLk-VL BNKƃE&Ó)hAVV`@mb8V5 g9>V5pJ_"q`f*xs!CIKOzOU^HD{i>L >t* |N UlϔA9fΚc9ZRx/PRy/3u SmvdZdW#Fԕ78M5BIgf6AV{QhhuF2BC%94qƠ +25J qx.؇E!DXpO0aDJHa$;w[Z&.*^'"o1uIsޒ5Zh(xĘ%ybnV7j5S%,qq0c}s Z^U6dRT^җh4|hd7\ɵ0~h'9&>ٛI^ï8*QGz8 W=c >ǧ.$8cENYVg'*Pc>y|_VMڍ g-΃yVGB2sS=F#ɘ#qL 0cp +}iۜ3^JJdǾyw_CPxewn?-q G츝/m~%?uF#:`xxr>K?$W<,WYI2O3\+bfc %o[L3L^~ٴEV禯's /=hn=\\kޓH$5kVf*0ggL0=G pyr)ihE&e%+&Fh7<R+mMTa!VJ'B@xmyBPZz BL0smV1z=o !p>aS\+F;\IQ`;fB ZpR4%H;Cfx]rH8MOGgH|E`{{`w|gοŜwᥜz%Ou|?@>Zp󁌗^\Zr|w`rLn:}Zz3!%^jOj=n{xǵ~?aPC.>/[X [o orٻm3wܽ,i=H|_`1t06mCqӯ-ڄɳ`; b"VD0 9$BPb&'\xO2' HZ8 . q8ǪlN,&ǚqҙ2?ݣj`e@Y4Zw.ZgZbq>(&91b}G0[VopƦυ1s^B_پc'&ظaݓasTOץPn\o^Ϳ{Z$i*8k^ӄz_~Kޖmo'~?ۗo_WKþ 䪫 ~ԧ$ k'cC]'ij@JKx3,`= 8" H3g] yQ^ B8.W=Ai=CC+J>ZCv VŇ񩐨<806 &TMXC)BE MUh(%ZKjcȔXKE10)1:qcW%seqg8Ҙ8f\po}t+䈘8&86ѣ۵{/wdjj-<7>o/#+(Kd}w}s ‡Sq_ßwOWc|p ^q\¹#phq|h>_.鿶Tuhd/cKJgѭ8zjeZI$D#@5aobKDiWFH-c,:I*\PV5›%4>ć{-B $[b!1qP'F!F#{Mc.=ڐٸi5e;ފ_l= ,_ϩ-=}s7ayc.Lw YkVbf(rX{$)%{=:֚f;W~LNNҚH ϰ{n, g0JIh%Uk*FXrɱ%=t3 }zeE\;,T#Å`r8ԵCศ"Dk]u0!6^BGjLKNarR}gƍmQn\. (" qSTcB+GR;CC)ݷG c ys>N瘧Ȟ{+`yN<],xlqcAhV?1'ذ}v;.Fxq'7r8iiڳ r6v!5f,)ybNXwi[rbi^6N=M͓N%D"8Z*lEWV^qROpF B1gǾY;ԵE2:,)`WxR-!d|VXr>̘ b7ƻK/@ᙚl5du1nx3p/P",kƙdZK gMS#z{߻wN`ݟX`O-VēʔRs 7S4.|uI:{AOz>O8[D"HRtff)g222J`f3剆\ށg&Xh%IvaieV`]0ǐC އf Em9hj!dZ!b\ux'K *F<8㤚H-)˒ٴ~: &G(KtΡPXf: yӫdJKs~(s(NsDDzA0dWDK= <׷wHNZHQ5lɋ qv I,0{9Jibܖ݉qrMPq^  3ẕf83U,vC^:ZK!ɔ ()*Z ckto49iJ:^KȨgg&QyD"UD"H$AB ZEF%.6h'|ܝp9C;5}0P"?P +l mzfZi䍌Lkpk 'S \<[=!Y dD4KL(U"ݲ W[ ;}Β :Li- :[C/\jXA\cuY76L!%:Ә9lwDD&&D"H<@etƑ)fK9Z6J)u]f %P.T먭c TCVAϡj25ƚ5[D6[<]v280%%/LI|!yR*L<02VÂjOm !к_t>;t&XℤL̉c$D"H$ipߏq.‹AB!;Z#AB^ib;aj멝\Qx,ٍ8Co]cT~8RT01yskK]RbcӋ0GQs隊m3S@ReBPH }8GHsd:<()Mg^k̠(G`D"H$$dDHqHDP"-m*3Xk֠0 !n~{G[wA7G-,q"D`~H9 L7,[ ùáAbW# 3.[R)AGA At9 9-XgM!#-,('!{f~}Pb?,GbLTsXWhF;y O5|0>a.~ /D"82%v!u#TnNI+!tzwPl٥3P1`1J +(B2)# L3 0U5v(C#k"=|pq("Hu $v_VaUyF5Lu=xa4; sqy5XgHltJ"{uޒgYFQ/,7LijV Vjï Xȋ9\.M7XtD#GÜud*ܗ^ v"КGNPUdJIVp`bbVd2jCe-J*1@<+Jw5&;s1#q|H]Yʗp饗p/_/ڳ.nTw>ͽoF!`1}_rc op*|={;os>;8h6|oa8Fm;ly8gw?8?F!wM=ݎxζgoD"HDr@,iDjTusqGQ')Q}Y&AR "WA ap7 _J>X`})F\ f7e1 gJ/^ ^@IAS`!Eh98qu33 F#$ mfpH+ḵ>(;ܺuQc }uk6Y-ܵEQ-=}r `tH~q?LC7D"H| : z*ZvG '^Ba*njZ!ؘ0">ҹ1=Z+b \x LB T.ZEKMm YjVCQՖ-gUR ,UCA\U/%2^$D`}7˅BR#D9`8Vqt{! 9gbL/42Ɏ}ニV;z='BXA5V ooY*{}X뱏2^zsjx=7wKPv.؝0vu[z@ ;閭 Ӈ? _y`/3>~pZSO?|}?-.옢7}cF^ކ9a)~9}s :.sG;|@7=6ne+Lo x|0tۺ ;w_cH$hkH Z *ShY"Lǣ"SBk`sxk Al< 2 *1-Κ1cpzȡFΣ~e35OUK}ad5Qጵ}2%JPB myVׯ8N_}t.spe9?9g-pu|~ƚfÁsuy+N*`-}~E\|4o~}4|_zP|yVx/X7xS+H$_DnmT3C2Xъ &GD(ly_(%DpGtQ5(:*ݢ!F^5rkYc0`&20 ]8癙3߭(!`բ*kùkYtJ) L9q>LIR 4ml:Ks4%%EQ`::[>d|]s1Q|ڽ;v255͖G7c|l|W{xK=OǤ;s<!WE x\gW b5xQ"CCHIt;=y]UkxXjviX|}Ujo_=mZ:ݟ}t YTGdx =옫8)W7S`=ZCxpI,Lje/֮]OاPY}ٵl%1!n{x-ϻ܇hJt6֘{c[ x&7]'x{ -% ؿ^z.ⲳZauqɦU%'D"MJDTRr(TPp"VĈ2lh_4.Ӳu I)m(-@1ި+aF 8z/' Q 2p-zl/h*YZeAt9kCU"w2UlhqC5y㜣6%%N9)5_zL&$L?:VhCw#Y3+-W=m#]u%Yn+sqek5yȀg(uaTs$ 利qT=^2-w*sz`xR ;ޕ@'W~2~6u=o^Wsxݻ?/zavy3-lśj87ρ>8]ɛ?>v?l{'6i{ V]s+,`MG8j;Wl㵟˅7vb x`gfr!8lG*5|-mG'~]t/T.gӡwޏ>ď?u ?>ᇞt!?e{/YdaᲭ+lΕ4Vl_Ԉrņ?K|qsD"H$ME?sM EIʘ{.9y&B_}$.!ȴyYqQL0=s;N_; ч XdxgNK)G,' ׯ?nɠ, H5vv>UUe>~<pyv=xU`%sޝ9gZ}t6naUwD6*]<2gm֬P/{mb lX عg5[71ҡ}ٶu%~aU[dÊu.aͺu_;f#sl߶N}Юt7naHoe1 9gn^E<U8wwvLwY~}x<_^fܺ[d{8PSl۾|K$5cXw[RJ$Zk:wu77*''8X5/$[dgcKP3 MOrX9bWrAбFIp6z'AoIYwD32/BwLAi0ac<rζ5,,?c<85b'Zg'x<}%Dۈ=8!0z/=*((B+\Kf^+ x% IDATcw 9$+dc ؔQ$8%s-4PI W%VM%lxW߁x1"owB D8I+1΄x! ssBTy sqZ \] BLGEkPYNK2+B"H$IEg:xwn;#Ӳi Q"wC['5a^+0 +>BN^ؖė|^)I 0 -yynD+FWfB'{fB* /BV 7!Շnvui-:y*b3*m{ pZ)\T\x9 <he<h)[d:cPģ`tԜ8e$H$D"q2bC*A6(yN)dT`¸f^;*ٰ!8E٨'KjqP&H7|#xg zO9¸'Q|51{ 3pBZ #d zGǫv] c1քVEqei||=qТS&$net;]2ɴ,fN-8IDZD"H$N2JB%D\1Šs_vEm(O`>`IpM. Y-|-GֽqH<Zga=ec!q5"SPѓP҇ʪ0'P kص bNKG#A ;2?+,pzT*`D"H$')BZHZz,ၑzLhbJ&Bgޢ8*d2u*C/I-Z6:1nCY }jB5Qvx"G %Uc/ɔr9800U0@ D+ֶam,xhgY2UsLeEe]RQ!HjK$D"8Bc-5ͼhD8JJjŸ -e0y'd[6F4V Bmu$1Y|pŊTpgtMsC4VaM6s\E WW̄ L@sZHQWCeL(IІL0L݇SL`D"H$'^(Gx1Tvo _sXF%eȵZ) s#QWy+)q{:^x L. f,3@1 T1%Әh#Py LJ̘- $ZʢIڹFEÌC`Mm"B 1!hTS`0ee5V#^_z;3'lm{vNbD"H$/ȺN Q$_+!bF+aNKUS7+h(D\R(Ҧp> *o| U &EqA 6nR8 :~Ci*e:yF2,Gg)R$8BgңthZ hu֚\gx drǖE \Cc@Yj|RJrdv}lJ=Ϻb~hEJyL }KW>)m3\v>s>>omL=!錏!S{&D"8}PB ߸.Ayh'MyzZG5΅YR;눭@G$2k%pN)P be9Î&3,H|4ڥ0Q/N<&6)YrST(%> }03 AIAltpcYv+40`!)?&S.u9U}~9J&[_o\<,3ɞ n+5㈪>\}aigW͍'TȽ/{Od2]v OhS]<3/:DX"H$B fޣX.Dm1֡:?2(/ ^`"ӡO ;B gٝ -jOX$:b+?X TSr#&rT_CyE4ꨅT]A Rnyct%yY2h!Y[JLtN\3:%6 KW! T:p$ 8Er=g1ν.:.Dpssp+:\UlX3>;ġ~?1}/x2o9jΝp;>^Ϋ ,$ukEOy˟uO/>LMo-G}_MxdׁE>+ϿxgC|/]'OR{8–kL?6-> @>Zܯ۲"M}fRXkVƊ k  @0/ݼ]<-aકk~w)~x"H$B@Y[ {t`(knð5od&jPT,iF}g\mU8)XM#` \ ᩌ9O)Qࡨ Ҁ\0^c+qgMS^Re; ( 0rXBaAq.}q?rʫ?A6Q]Xv~k|ݧ'tŗ\SΝ0݊|A6sŽwr-{%>D"Hb 3i=0N 2R-B+^^2TyXoX(,ٗuE 2 W^?9,!m2f|]Zjă(GL5>.HFq,)FTĔ!A`I_Ͼ!yqcPXk!'_@9o;eV*X c)`%?k?>Js~΃]x +&'F|{=GFUY;w^ .j>D"H$ bqgȖc=2TR9CT\!Fly*,+LtLMtk!lx J|Œ" X9TTPA89 FFu%h 8hƂcDX2&1Jl($̟, kZkd&qi' cv d*X{qѾEns'N\i-7L@(sK)Kyp'?2PJqdf7r>|d\~;qE-[\gnn{+`[Y;x˫_͇׏q䡇h\u*~=c/.=kk!H$<+'b w2%ށab !BxfEQ1(JRrZZ7uK_]q "(IA|ac2ĜLJcH1k󼎺!8 [$ݾ3cGNXAM^XQʣe8)my6oǦfv-2B༣tBsu~YD/+6xK cXZ\`_7#?b!Am_ cs-9!4gngtnb͸ ?0Gޞ`l]0nSl۾<)Ogp=R--JWq9r;_:,AɪLwս'a/: JerS| e- X0&̒y̮:K 2CQ%F(pqIߠھ9 sg>/=2kc01Z kw> -x'Jdn# (+KY T;L G DtbT bqp7V S \pBꚷTEUǂbPhRUs)ի1GPH/*a6?JXAhKI'OYUH)c@-)N.=!H$D$2$ƒ?'="KLuYeĄ8BJWx3DѮ݅9 uqkB̹J3RhjF5]f }F`8%ޮ+bQgD!%ck<.S % @CX;onc8,`(,graI<$H$D"qAG[?ʽ0aϺ:6^/t16#'+6PjMʑJaZq*l@cL|;K'χ3*zKKJǜoD"H$G!cs쭫-|uϳЯcMGJbdPƻ-Z`HVzӴzG#~d={U:Bg Kp: [!8"E ^W VDT٦6E?GUZz{h5tvZǼ3^ c^p<@댲p(!d-P~vr*D2I< X"H$ID0ʔf.w3T}j*kV,bJc!T82Zy u5nXcXBHs>8{q18`3d4"q W^N8r!xtlt[K6>u(oQ*;K$LeJ#8g[rk~yB.,13?9MЖyD&UD"H$NuF-4qnEo{ߝLcldo'eeJt;9\3Ցw=Z4tvaE1(Bc-$xqA>p4X KBλZ6\c4btcx)Ȼc-+04" Pa*m}!|עl m0l/EרkCHu{9zE<^#9JJ S+v0ZJr(0s'Z[d"X"H$IDPZ8bV1+ꙩoYYf_5Vn Ei-Z } ˡh  GeQD'@8 C5&W]yB\ֆ؈TK0i0L缣( 2)օk $P1erd0XZd+\VN\s><>D"H$ \_hF'@ "C Gw&V9# [XT%VÁC_9#m%ATgp9Dcȴ+6 p]p(B6F56z=򝵌jj1o9*91)TxΔ`re4ccBN@YG^ǒo+AڅDVÝ!?F%D"E)(8AYQTڍyr3gPZfeAipExq;5[WW|ttE'DF0aWh%t#61P }h+ 2ځ BWsBFrX[!tT^R pdR++*ޛd1;ǘV!9R7(ȽCH1V%: u8We?HF+K.擟kt{y=8,7w~kI|%D"@*~$T3XgK IDAT"ptE ¼UK|H^BحgkC L%=0TZGYa膨:+kHhz|XW6mb>Yt{lmZUN`* J邸- '`7`nq^YbLVJ1ie"ǐӮT?5{ڭkF,Eaϗ/yVp^WOur1,-xӮg58CODВaXȔDg JEcͳ~$kzb"&8R<YȓLX0U-/{j{烙Ų`* ѥz~YXm"4DJ v8XX\D /gmIY0 VAYRTZ@2,gb|,Rm}NKii{"ׯ ώ[qdϡ#=6X_O|uw82xkC3~M wv>bFw|N>p?ʎS; V( O₫M |ßzg^ӲnH$ķ>.Vrr(DlkO[HJu,-)&WS"4.gy†nZʑ bapXރV:\>3x3ZІ17%Y#|d#jv;D :!ZR6`.=(I{Z: K88pAg.Xa[)"$JIdJkMS!4`i0L/qh|,-}`5ֹvI?L+>.:k2솼3q7>|x ԺG3a5yf %oz=l\o|o]#/f?'ػk=`E7.YMrWyyq<'l߷$H$5xd骟Sc1ΰy֬/9q&(SV9I!@F Z ÑW-j %m ͼ@-M,TF]*Zm_o_u1c90-?BHګV5В`uLX4<ɵ=2ȅCK9J4cXԊ)3bH<ʜv @k,}k8^|1&Teg7 Hbl|Gh |o//; _Ö's`?o{8^>gp7<߹ֲc䩛s_e=}msC%z-qKgsvr捿5ާD"H$xAUvEե*([۝`UQ%8zCGRUr`3sL5`lzR*Z:KKLe!ϑ x9bPxuќsvDk7Y;V4眽#&/抉}> ^x#V <+֟E|'ۆ[x N p#5?gnٜD"x=#8kmN0ƞCC8AQ:5RߠTEĜn\GjBQc sɈR1hmXcw|SeÞEt:嫒#$5XkCkQYTiyp/_rSS(ֱrOQz*Sw#Q^Bg ZJt2 Z*!Z𤋮- @FjAL<^τcXZ\`'̶zY\*N=vFu4Ơ75ٶЮGnªnkټ:dx 탾X`C3LmŠ_r`\6ngÊz͊}dՙ`g06x!:D"órqo!ܝ߿?h[u|󫘞wC$|pcZ9{wn(JGG{:ڡu 력5x(%*AaYzvS)BJgE.8s 瞱 c Vb>r{j\4ÅCGkRMo*ZB!"\#Վbx]Z gWֲLTGzOi 3=Wm:* ֮n$Š.֔,,U!й&--2wEV't36G%Ŀc y󎿺<3'ⴼ6Qu̶Ce>*֜ \E#ZqD3"gݼa݌ adݲ[H$D1DRΰ~r~Wċ>w#,-XݖH'(+CQ:2́- ڲ51+e!ӓ-=Lx6 c"gzr#FrTA1ƌŌp-p\ւR@j%z7 [x¶5L(Ld,,YZ(kUIUhJ"frbNe00>6<STHUF%5SdW:-'6":PIR*ߢ1j_smytUO\O$D@?g9k*.ڶ7o຋"!6R2gݪ zLǜySeYw,~i1ҊxSdR RBj=6{’yƉbآ*; [6-JJdЉk<2 Xz*qNXFFFFFFF9@yOB1:}Ginofb)D#E R h$ "fmz+Pee\mZr`]H%I 55;/w.Bk `5ba 6<%9`R6e'qB>cM)55 ØdžH=d08:I)5k?Vtm 5Q|˜]LBMk@'$Ƹ 5k0W&D>JdaLeddddddd#b. }#X;%QkOzn]H?%`r2Z4JP"5Ԉ\g$!} $ր'ƅ)aT9 Y s?g\!@yqm}Oh&\PR L(&N R!ܿ S}'Jkg|O΢. S#ɪf4RZÞc<Ru%Z15CcU* ?68G< @ΓRGY+$qzYN;(`SHV3j |1N {%=殜#"$As힒Z&+V#-\p'oj^[S7i{\бs @cE*N̴$T#v?|\) noA T r| ~zg Dk4?T:&YLKW䜸xXFFFFFFF9D I-T h,sO\;eg|2b,Y3pJXKb bQIp nXUM!yJ"%ıYIR#DGNcb$QR9BH A'A(bl:JJ<0B)׾ B5NlH)-ho)k)50$ )/uY] xGA)IP.$!F yՐ8N20Y<8! #Š!I4Z k]%%h /鎋vUmc*8vK'<鹌1\mj=D-X!tJaa7oqXFFFFFFFƏ11%kS>&Jiˉ$Hbٽ(-`Ng jh %,։eIp"R|K3DP AF'4w2oB859c?g-PYNh8GF;>Ɓa?zGood̜h;<ȓ/θ.A->ʆPęWxPkFfddddE]E%A'Xcinlbvl$yU~_2k S>w vn{+q=g{k':U^*ҕLo=Z9"7y]C綟Į |`ez>3?ǔxsssie~kcgQ:͉}qӽ]q.Ƚ6կ'7yufddddz3\qa7+fNjHSqcC.s&vgct7bgάvP c.x!S Qʣ42NKC1h+JY1aLkaXr&&&<K #{?9w=fjmBgx^gլY§ɯ i;o\cx iEy->Gwئ=-ݬj9o3 R^7_JY579bϳ Ck粞FuYx5,lQya+y)uʲlfہA&#CnͅԷ4z) xn%Q,_}s>oG% VviElJBS1;7>qnkn?R gZ/uQ)`ۖ=R IDAT$fqnc^bUrP9OngTvp-kX,ep{j?ɮ2z46mǦS< s :q F:+%RDFFFk m,R)-HFx~RĘM/?T"Pe;in*b,\rB96Li2򭴡1+ȚH2ęZ0xj*91hL$5˜ZE9K鄏nYI@ IrGI| RxĚrFIUQ124 ;^0jk,Z&ͱv tJ(wFkSSZXrsC3(u`xZ!$1|/ wW5:yɏ2打fjwDN>}FPLE1Z!S_ycC}[Kr? #QuG>w|]LLO<[:[*@ NTȗ9 T6+h+=y%`~7BeĮkO1x/~A _}:K77/x8ʉQ?rpLK |}lsUb{j#g|G?Jugu|O=**#XVnwz382222^+X] %ePUI(a5&JT(7H)>Bvy;xڸ.:ZuXc1GsS!SK|$" W6 Ts%cg#kcH%Dڵ, Ӑ(>h.H-;\u-)+;>1&RGZehhyYk-Kyw}g=Oog/&.kd߽y "$,E̽7{7/^s/{cWp%w@C{}yd _P܌yofڲ?~*;t}445)Wʈ.F9R<2u㳅^~qĔuWB?GmY^;/sǒ[||mIW f}!_׿]~@ȗA^V3==/]؛"<=7sw {ˊ JB]FFFk!aXiVb@Q7#)&)0{0bޜvZxbIO < y,N\|c*IbyXsY8Fy Z(s(邡sOX x0u " B@ BN8QRr9TO* Iқh" 0ւ3e"m[ /p |ι8҂>S>X]hO',i=:ĉ t+չB8u+](ᾲg.>(֮h/GK>NJ/Fy>J w WH-GJg&|g~W+M9Ead2\MHr<ƺ,&I(O5\@w.@=gN{ĐhK'$IUW`TTh!ADE Ǒ#G9tYj" :[|C;u{Qg6 &]+(L;>FB֚$3 Shn?zͷo㉇>čs[ O?\xHҿm|oarJnX1cR4T܈NrШ ZLq=4o?«v 43plw瞙aY[zd t!/ߞߓ|ozA&cZ5*VB ,5Q!ϙ7a9%›^ss?[(J_lcV՘~יt5L{Oo~=1U_N[ICH>m'xJQ4q@)YƢ-X V6T8AikMMB}YBc?Sx!NNSKԎuiTBVl:f svԌCf zjNL;Op5O>b?!~0Ci:7b˟oc6~q>桹턃GDP,1VS'+N& +#xO5?'a Uuyzֵ~/C&VgVx Ɖ?>VT[]ӎ!Os\x 7{Mo,M2c3 &10_}glhE.w-*qJs떑}FFLNyOn˭W^ȍ+0Q QocJBc(c4Z(_) BI~9p22Zб1ry]*6Mo݅O!4^s63 )e zO_zSʚ ([n":Dc ˆzJkS`)0fQ:h8tHq' Rn9g8^/gre3s!I0Y`Μ9gi(r>˽ >σW*>$vPaW A9=]t68:͢6})#"]]tjdöE-`Bꡫ#)_e}Gi9pOI42}}C.X@K0k>ӒG'}r ,A-"',G1.Y4t}f٨Ns|ٜ=޽]Z"jĶu3-~=t66>˾ zX6ߵE94b@I,>o͵FBk' upK6f@/GB,`fF;0m96!ügq|d{-{X80t b':ΰsy%x4769s Ԍy96nޞeTT*:t05pAV_[\F)hn׃1J'Jd0 !HF 2`QN,b^yG"JŏjMvF^5 X:v`FTܶLzNDRG:M gw:eӪIM&ֵh 9j>l]zWk^ub{tj477sیW$I}A$3 L@-'`|}>/} jSc/wߩcTk)[q5(?I;h/e|O~m}<9HߗӅE[8p;1"I/?oVgמ5}+^F Unő w,"[s/Y4+g3Ozg )M&2^+xd}C-!] K#u׾B}QxxE1^Ƭ" noTDn['DqHRMcc\%Dm -MEӯTȺ]ډ=*VctR԰iAZf\W*`ںL#Yu7ڴVQfPH~0'${H%3e2ɄXm0m~*\#5\/'3Ee-30]\5L\;=U|gC~)ϑuͶko_ |Ti! `'0ʹ?egIQ6Mp`\Oa 8eE3}h8rM3 ?>3OIȾ,2222~cS>RH*aqg3K/n|w.nɍ\+]jU,ikqo/XeasfQ\zVC8b5;CjAdj=-LRZ#tbOX ns4t5J5>]RiCH6rJBwՈ)|XG-uWLeddddddd%B8&h(S.`aW;Ql(y*qB%nv* HqSR0bng+Ţk=a B>@KscJ11Y8Kp޼ښ ʡ6I6R%&#X{~7_E]\tZ1$&(CwW+wYCl{97ALǵE*)Tk,l`u*Цer΋aj1dt |1i[@KR""T*DJKn&AZ,IM6pvhABc+RRdd,#######,R'A?`Reټn|)!=|_y.h,a%by]p4BkM Da fl '< a@Y֮Tp\bIw,zyfA9ĉNS$T&X'vHMc1OuuZqd.BDk!WtMsLxXۑ҅I'^*!Z;Q*ddL'`g `t>~P\ x{G5Go>]w_ IDAT\M[C]1$F0jxI7WXA>"(H(BJ*lk7O1$IDG#V-`[C㴶4)fR SX+رo(6,[4e ;c'4<ߧPlD*k-7]";^짭HWG39ZWur,]M2ϖ9vb$s [_c#!ii=Bmhn,.aQw `cD OIҧ)'y$%(NOGG'tc}ÈƂngT(%,?G*^A$K3|Σ(1fՌ:=3tNZ̟d5“( y=&SX(JJ<`4BXq삠uVB#J6 ]DX;ƽ>cLjf7$}$I#` kz׻]OʹXF}FFV쌕x˃\0ҒxSCUl=#.AOnd72}I o_7eם㡄Z YA>Zjb~W;)r9HJ"7=mKIY8 2wvM ,1F ;ZVC&UnV+&im]5(C6D XrHkK9 Ib[ X؋Ƶ"JQEB2klw&Xax9vbKXrs\Bi;8SiY͚~OH{]Θ;OJ9s\_GFƫM&Q(>">ٵig>\u<3aBgx^gլY§ɯ i;o\cx iEy->Gwئ=-ݬj9o3 R^7_JY579bϳ Ck粞FuYx5,lQya+y)uʲlfہA&#CnͅԷ4z) xn%Q,_}s>oG% V*N=>7A(ȩrq875\MwCB gZ/uQ)`ۖ$fqnc^bUrP9OngTvp-kX,ep{j?ɮ2z46mǦS< s :hrnNC>yybL[.,f5HKpc !;dn.v^ڻ[8V d{z.7-領q>o1[`adzOa|\tj:˻knfi vmi^f5_|="x{eKu!7_< 7_=>ه:fcnぇcӋxyAy2p1Xv;E+Gaj8i7'b#gǸ^ݭY}2e_$~}v=0 ebJ?rs3$9;CƎJ#mB9i䒋z}O'u7hE}>ȒUP3%{xC=m_̅sJϮ;xܘ']+#T Ƹ DQBb qP c8T,G^BZ)PeΆjBYiI*m4BPn1(x~T}VtdSaf/_062-w~ >~߽("0 ؼe,yuUy?<2b_Wi`~N)~|h`1w#{+|xϑ'{}w^r n馷&70gAvinmyGy}WU/g3FeF%ٖ ,. 8$@> e $y $~Aؘlb`cƋlٖeڥ2fٺ-"1I.]9sWr\q/ojJ.q-x>ccص|[ܸ~W-3x, p9>FN]u';|m ׽uo;:uV sUui ahvC֋z(Y|^2uulʇ^t‘z92,;d.t}cuT3VgfhOln[Ijjj*M3b0SyK bYzw.*Vzž*sg'wPF91 0 i3VE3jwRM 8#[3$ e<0O Zힵcft,0`pV/:3L4rѤ@[!TK&8PyNBjM276?"$>rr*M: BP*HBsB(ez-*}}{50(!OWS׎; #-lڵgyTu(䱫W[@yu@)f`~OO_<4-6!CNO1?+u}@fdfnZB*Ҿ? 0h7{2љHS'rG}sX0Zq86gpa0n0Dc y9_u]+^z14i|mXno7I;͚{WucDv' š$O4 mcX{'8`;{3{^?qy679/f,h%)==f.+%5D1#(fϞMGj5*4o.U(a,!q"Ce߱@oofM!I3<*1wcdtȻ# kq`Ö=<~W.,-Y2KDDU.HL''w2g,:z+x)}jkR|vq0\6qym0>Om2ЛnMu: PL<[gzOnwQξp _G36ލ&ʿc𙿻etrVkJMcB  >YYjC?x۲O1 Unc5C| D_;Y=@ "H{J |upyE<@!אf)2 rgɶp;_Jgo`{+"-a>\7N<0t) +wSֺǎ?*Itrw=Us] `ߪ|\v]AAAA)Q`AaiVBgdJ %-bѢcPQL RJNks(M$ T! BZ,!**sbCVv%,N=~./|[}|n\as !!($ $0 P>|O_gKIRO*M;(V!I3~YnFY @[B )aR.\ڢ-Z3MS2aM^˘܌ /C?}0EPC)Ō3xYX; ~9]K^IodKy˖ۗkLXc#y_3`A_ڞ?y&,`-vI|p'|igMɤDa$]|޴ᮥ|W2&{Wpbyq$!1nQ{y",< F)*`#<2CGǀs| vKbh[U95}Wh`% Ga|uUFHj?QkXgٱl+_I vmVò,Ek= WPlQC+72?i _ [FYqkQ%r|gsۺ'}?E]_^J޴e7_s$# ^B4uO :qwNo!#hoZ?p3oky鲗sƝG߷nˆ.~a LJ}lL9Wro=&>>Aؤxǯ:?|ӘN6xF;/e5Vj\H@s#߹s*xcq':}s ?i5 Mv4 [hU= ]fޫywKR^w8o#fl)|_ws._6Ncx50Iz3Ax5/}?F(|y (o]ϪG qtmԌ3xR Ă<J۵KJD312>AWa~{J(Z$)Rny kBf2TkH+RAFt8Vo0 ;$&/n1'UBRJL℠|Hq[I<E _~P")6޻9 pܼ>V_e EǷ(_˟dM0- k)%{58|ZW! ]D՞S(@kM19su 8 RrG(6SXR9C.62<3{}( 7obx* ̞`[Y86aۦC ЭQ60w\*f A2u[XIt7wzPΟOO,pQ6 O0kY, #lgp6p۾¹]`lsRW05GP#ZYBh`Ocƛmp'pӖC6c8jO x?lB‡~^W,cl~a6i^9 vMuϥ%;: n ۳=<̑H;|1@xnczQ$m1Q\!3fIOW}IE+YqjXZ ɬJ!jo:a 8XA%:# Kԓ6N8}B*N KZC!M3ҴCHTﯠT(/dlVcʥBHvM::2PQ)w;SRqR _+Zajn÷)PPgojv'ġBgꚔ-q2wK3 (r3by8$!Xp!RQ~V NÁ⪻gϓcCAn<݀F^~oy.QVFƤb;`6CHkd gw(q)7~ai%=T;%!nRh0˷'U+m #fDP!vB ¨LTl5`gg'[G* 4K2@ya4EC(uhq T8FwRZdpߝ0p©aBkK)8q\] iK%X!ަdxVἭ$LrM(J%2:sDŽDYsa8GI)b%$&xK~onDyZ3Lg̚5jJeOm k_o,7kg)G+_f|Ͻ<`o Hkil9W2I(1\ufFu{€NQ"0F#A$JLrfw1R04J*Xszʥ2 vu˞"B£S.W VR ,Z REXNqү& A-|m"_ dq! $2N+F!z!EkKĪ^\I)QBN |ec\+V +(Bj=[G|I*EtF' 5CbRXԆ$3ād=ZS_2't봸X+xl6j]59XmݭH;4TŴ; }eN>nd~}Mz| 3Ola!Tޮ>H hW͜CIcpE( A_vXLI5k̢#6fJLRW! #(;dTbVI{Y{]?k)B\h@J"rTBD*/(0NSQU_aJErht:ġB!Y!q8ZkaXzq ",Jڲvnjm,($͘9g/I#z1aa?;9mI)'`t9ftH~:5dN(>NcxomFF][/"73OuȬ8"[>LIhvӅ}sB%jf@ vEl#yxw!T!q皍Tc4i^PLN&rq|)uAtFkIHPcp֐&'q;RDEf٬ݺ}mfb`F̌*qFę`@'wd}/PGo2iq]eY($/WsB4(:$h??1+ ;Qg.ucT9R7r>#0`ʆාabWSIsAp'hF3ʄ8 I:%o!Hg[ A9 $i_OQZ0"rxG .nöx sO"H8g1yX""ύ:G BDMIiZʥZiFZQp{SN0E fio3:6,34 V̛Cxj͋Frn*rl1ՆVd~9(I )$Fk@d4\-%M~(RD}l3aZzdF #ջLk38GPC߿3^z*?mEX t AZ}đBH/=玌ʋ0;6:;Ygy6_WX+ D?S;#x;ܿZ/җଳk]#iǔyϏޛYxɹ|پ|>c `Ϛ{ '`f{~16wOg;5}r?ⶕ[i^~wɱ߹7v7q@$an9JQȶ ).(BYM=D#"2iMtF_^ën|del|6$)/~(ku;51Ƣc%F6e}(!ٵc/R D RJIb2_XY)kPBfsf;W,~,R(T0If R*EhHE97H3 kh8bDHoRIAsB>|[x_@oON ] /}E7 guӮd{oyo<ӎ_Tz«ZBLUt`hڲ#!G-rqKu/X%;s7Gf.ȶRa#4QM~9K-X@!YH3M,J =ZPEJfQb!TiB1=?XI B PHԺ)G(+v:rû#jk0*7|hN9aCw=,E u}o@a. Lq(!Hd.x ق-9s5 vο৬Yy7]WE}l=}g~0!`dݯMtlȢ3e)C Bjavb]g񲋏{κn'ʵB rNl~{׎P<+^p}${7rݛ9i X؝;rErPL7pyqLKµY{]ܳ} x!8B3?.;46?Ɗ/;.anC.N:yM6Ke,!Ѹ E2V{ Xv1A+u?^z ]lc<6\˙m>bIg윅@{cG3e,L/et5]|^v^?%kv( q*;YЪ m+ff1| ?`aMA.( sP)PA)1u! RZYF#M5[mtҔZ%" I )q֑ijf%%29 IʯeFSoQR0AJ>1e!A*:- Y*?|d==߹fwS iûr DBx9cO\[}}B|<7B|o-g4Fg<`[.SN;{|Mlݠk5"]9ayU4è$gwnd|f^T b[ǿ|W 7>뷭abbw\y>h+[4;oadÎ~|:V76/?d#܄\Xhn_w=} 5pw1?v_ʏX?{Ɲ7Xo/+?[9 AD! Hسs=c>amtS1vsw}qYm[AAAA7Lap+["Y68ǔĤC_ 8gG/:zKe H U4!TE|LfZƋ0cdt2y!'@@IqD)IGOJ0􅠥DIohM56;$IBR!2mW@ W̝)nnqoa^O*"B 9[J)0BLNNJ%'U"Ͽ E4!o<- ![!җ}[-D6*pHF<:8.?{w<g^{*?bRa}}|w"}w;r[yi!'Y9|Qs.yr |}IK+tvN`+eGpK[7Ka~̦WL\VS( k3f3Iv||qs)o-juy|t،rO ;/mV _>e؇Y~l V~/㪴qono7''ηd'O\ [S^~q_S[{}/O#+=RL Zco"DaB`eS8`#VJH@AQ\Hpc,4CCM)4%"(dEk8fyb% |$:A8C5N8 j]eI $r^xZ)U//oIW&C(P1ˑ ܞ(xQCp>5+{ٱ^)gGS8ؼ/fis̆Uø%S/Bb^sjcE^n6Mhv5߼q֦[ǍlGs_ hjI+&$ c 7^a}@oS.I__t^%.(((xF ~$T@*$27rDRmR,5TJQ"$fҙ 42nzWEJ >X*4XTBVx74leqG*HZKNp9"LL4aHRGڋ(t}=i,**E!>N'#Y內;DI>lr2wYyܤB<(B> }ipfl]OM3wwm.#I1UPɡrL(D{  HbsP]mYL_W 0ӰᛎLaO5)ଞj A$=~:AOV7m}!Pak'20YD&;a=\Wf>ފHKX1jmMxv) +wS7:G NPJbkxq}S*Zp}əo%_AAAAsPU*YBC'˦ ,ʯ8$՞> /HOE3bEM)=]U*׺(BIRp-ZJ'VgH RH5)á1 N@'Kik6CYB;E{؊H* ZkդڑiKd;)I2C $&MS,%IesBW]cٵ՟s6FZ\Sh9.bV,kr\q,N훰p'w <1 D#X md>&Z@{ZE:voZpRW,e:/b(<^(=w!*?O yC9 A@[x7~U莭$+./{˯x>'/n 1u&E[MteWp0tz8=s I/d:;wX >;׬gD xsݕSR!BIs()BtajxeSnQ(8&4 0֡F3ebd);vo6i& yhȬjT:RLV!.q\A|\pE1+,$c0VInC*A:wlڵZշ! "E^R@ky;1j6k]^kc KK`-,:Vo+^e~ӄlA۷OWõ&׵\ʕՏ~ͩo6j\"G>vy+yӖ|?έsgl'Xx UlPש?34ĩX06BF޴fe/;oݖ ;\FH?JN_$'Ugtɦ_ohp,_J (qι|;7rYCôv2DO|.Z1Îfz=aO{p J6 qP{5^{{鯂XygM#] -?O| ΙpEpKYxc&i1^o&hv2`of9'Q哯=o|r*>?YHy^NVPPPDHT@)dޘz!˂IU(c޽ 'mS6c(1HuX@(1f pv}4@:%J-B@d|ȡhQA@T"VdnYb3J*40ƐKu|XS #zjk1ژI t|muC9ܳ謁3=|8Am<𡟗>{{Z#Gc?dz¼@Sgs$SQCuְ}Mܞ%`o=sp_#߯BdH! ='ְ``ZPA@5ۤZW""$dZRy|RC*8q2m"Y1rS)RlwpR-Ehk}Qb!ͽp:)I  ].ݥQYG1AAHf*@ϭ8TtըZlڵ,_Tȴs!& ,OP/'V;ax8#;ـb$)u6]1Η1 yE#*AJI1 l9s湟oC̮3נ1F"2Veɡj!ُ̛Jdʅˠ H'7#SA^i8$J0Z֋@54ѱBUsQ .˞a룓kHt2DiZEA;o#VZ$F{B Q ;D)l,=, -J@H!J{pjֻ]F. W=Dc!7mңR.[m!+McY Z! E8IJ]ӥ֨ B7=v | @Sz:Y=clņǟtI C%96`Z?)pG9$A*ɢCs̜xPJ"E,4p!$=⮍c@P)qTTXEEEEEEE$ʥ jIq xjXi,h}Z|_3]=YFf]4YHA$R8ɲ1@cc]B`T8Hm塴&6.V=$VM붐$QINRȋXGy (汦PDAk->甒UUqPQ`~YIq!Q@ȍCIԚD%x}6ixY=XWz^IRPXCap Q8cG D XK_>k]@II[Rq&!& QX!& Q9)"$I5vׂH"G$Iqe@! %f'Ǹ!3CZ5T\;4NHEO]:+:jP{?wcRgoфI'{@FX{AkA{B AsIR{A x(hܸqb<} h%1t!EA11i$M$yOHpƐ=J#"%5Y޾4d5Zb73X^Xf^2*;JZ 0ǃz#CX(sa#8:Qϓ[E ev4c5!xRR~2j7*:l?) G>oAVz7o]ŭ?( !p#r-w԰=`ҫB?-?}lC?{~>8 ׽'SRQO3:$ 3-HӤ,vgyjtڴ;-GnbGI9s4y+ۢ(mBJJT_wH!HE xY*z?Kf͠N1a,M4s¹3J9Q$d<}@' *N)[݊r~:>1X|g<6·3ࡇS -Vܳ;{ K_f{S2;q㵷f9`cl_~p/C XvOyhc{&|&y|k""OYTTTTE%Z3\^_-V*IY|uSb`EH`M(%h)iIJFO̎)%ZK}]>XoE>xtR#IV!cOqc]G4@ 64 eaY6u%%R6sgLcZ,[XAxT(Pi/:mBjq#toi9w3xlC魽|qvڞdž-,|ߙtxd"}U6QOzԎ\Y4L~/S8/_ǿXmk/@&GR4n BX9[}^}L'G{ƿy7ai[QQQQҐhEa ISDq1$MY5kz?,Px:Ú6 8pXC`Gϻ> P~58pJ{NWocEEEEŁ%$Jc#A_-#xeu c@x}Q"syEk$Y !bc8AHHpnW,m ;"nzDYCǠй6,#j)Hc eOd>`zC֛Sz S`k-ZJ$%(s$C{/[H3D(,yt{67=Z*8(JwC.Ӿ* '8Xt$c{3mkܺC$xk( S57rW/w?Ȏ,Y 2?>K~%|޾u7l^ɕzVn-fXUwr%WtWz0ycW53p,Y7Dgl+?rUY50^}-rWh5]~{l'k}n|xt?Bپe3ۇykoVswΥW/eKnG>;(Up?m# \w6ƻKdMvK/6g]Ӡ AF[MVV/yA# w}_~3ƺj. 1Y7;{   UaEEEAEM$Zƚ5ƖBLJb]J4J'{:89vvCs}}45zjR|dIB=LY7n(AZ-QLIAcT opPF}k{yx!xjiF4JJ\t)_ʢ-quD*e2fz(ȔdNv +*F $:mxxݯ qޛ7yi~H§X!>|U4.[oz2>NwxY V|,y<PgnlV`ocp =?}buR¦Ok|:ǾBИK}8gp|zɦ+bvΉy:r>o}p|*>w'WOi#f~e >}O:Nc}m -vڮz<\X".sͭ;yן֥uyK8ė7q1+>ȹӟ'Ey {^.^'?}F ϳ>' \wY3 ZO\ò㢣=7p'3}?'έsoPվ^EEEAItIj5IFa,v/Z'$ZG0O Ѥ(5σCfGc0:mLKnQ&RrFOn<{K=K%R]:P2L"B(E8x(@2Ā3 "IPR!9Z cR!,7[ @( (x绹'c VfM3670jТ1TT$`mQIi > >c~љMt<ϖf8wv\Æ[qo ԉaZ!nea_Jw 7{!Z-1{ήsǝ+6E E‚`_@s,{VkC3+}Q P6{RPc`sk)ݱh>@ hL C8l#l^KErtsOy ,pZyjWsoz-6cØW=kwmrԿ$"vMAaܷvoS+G2d yl)m`gkǸox>0`;BM++****:T1ΓHZrkHӔ4R' Q:ŋNR9t12S!"GЉ"P A90=RҷK)*VF;8Qg\@ QJ#DpeJ#)pEё]pG Jzs_8oAw$Yk-,*; 80.xp{~UT}:?(w ng3G}|KGQ|og ud#j6# 3KDA!`\q㪭+/~GRf$!trviE9 S S]ִ `|G/BKZ63z'c4fpw5n] O#V*BA:3>]|1vt'V?ȺK// lq▍R7BTy'VTG=!$)K$:y4R+\GL%dZAҞhyfozH@D&H!')NE-K̈~($Ap8gcYiʂ*R &!nޒ͟HK9("x/aK{K o,2ysg^R#G<^T널{(4J)PZæGyt8#GѶΑa`֔R4;;-w==m~!5\ѦiR&`̭zg5Uϥxb@4c`f236XȟUI?ӡ˃+[_`X^1C2߸dKv0^9sa:~i***&!Dm̚4/CR7R"$1[+}ѴYDJ!zGݥkb@"edZ"U,MA8-IujvDh薂G 4JҿO]6]1<~*-@H8}(? g\zk)F)Mzy0-0CHϷx|ĐIŁrSxIxG-~[޼X+~{;zo ;yFrO{y6s|̛AmsiVQ3GsdosG:򗟹eiorY{֯7qX3:2|adN׮tcb&?:Ҥ)53458s&uu je52Ju#c]?3k/%t3adt4g-+۝'Ou IDATN ogً9mf#.l}exyy̙6cF;G1|++*FIA7<0gڋ Y+^l(_ AB0$Hq>^2f$J\gsjq @b^ŠF4!ysC-͢И4 Ka=#Zc(t.;$5x@+*k2j!R^"'bo1cėb[>%̚G0Ih90nkw2=c 3oz $s07-XIc;tzP# 6Գ+=8_b71uԧ氅sio"<#91| [2L=l6rdO,<`Gt``?d-v9lFL!~&XQdێaTyH)ٺu+FfM塇?qf̘sCŋCP eVN$4=t KaecfH*V"2̓ 8:0,Y0jtI@ sR 3[aA17.  7I98Y >fy!6*.kWapq'^HL~'+*yؖ-["\`/.AJmku::MA226B`\TdIB>Z5 "J7s4G͘X Ua FPO:݂4M2ɻt'ɐJ&vXQ6 -PJW#(%/:t B`}z Huw'IL'46>8ӌ8VԳ4Ivs;(Opb{ʹ=iJw=i7%UUV )=xJ)ou=Z_S#0vrVT7 JJP[8RH!)9J_+)Dr%$RH:vR(# J?-A=Mȍx4ۤg ,$jaz}e8^L|րPᜧ s)L DU`Q\̗=3ZIsƸP*7W#8p6!hw &/ $]TW/1U w[NH>ɏSq\sK<8SQQ#X CEÒF\!CMj"'!h bx(|{R39l ;9)lTDQYWI@"w9<- HPJ(Id٧VC+ 3^e#PX!zԴFIu SƆǘQy(ƠRB4SL؃=6ϙw!4B@)s݂MÉ@nGTM+~%yz{4'lR\@-6 \A$䡠), `®b:Gam::9]cx,B@"d %KArl+;cCI9 zއh,%"Ķ-,a$H!BUovBH`, f10szjs DHvߩUe)n*^lUbiD\+ pz Jkn`R `)Sӊ,%UNZ(1Zh)g)R4j)(E I*IYWC5!svt%7룷xpeB@ e4 ĬR DKEmZOF_c.|zPtU݊UVQQQQd\~Փ;pa}EŁG gR )x:( >jd5RɒX$|iE=IBұɁ(>eYMG!bh \yZ\:>x gI>@4ZE"Y&WTʏeT0XOO'Qs45.ZɪeOUXQQQQQQQ"ϑ֒xZ9cL;Z-B@JRIP–"T;kMq^2/GP{?wctM0鄓qȨk:H{M_yq\_x~~!JX)Kj2%i %RIPJڦCR`+3Jܥ>M4OxDOd;1kl \ a#K2tEE{/=D4)v-HT%$AՅ+e#IǍuI)0k1RKHT7*^T~HS|߂Eo U@yn B0nCZ,-)ty;XvbxM+()cܽ="Jq2PQK uNTTl $Q!@&MS|2KT)YJ=?-i;FF1֠&Pe*Oʞ,ɐRt$IJ֑R Ei{F@=a{EVK'/ЪTH=>(PBRT&)Ilb>1X|g<6·3ࡇ@_ Zg +7vAZpͿ\Ǎš怍 }r 0c-?塍_p鋀ҟ}ϯ}W㫢@Jv=i4@p`:UW~g~HEooH BAL evIJyF(r9裏 =$V.!>+[iZ:mws &&](|BbyWҔYRP^x9SMb1#toi9w3xlC魽|qvڞǖR{cv;/Q룯CQ<\n''{jG.,{ SB8/_ǿX(t9{d^j-CɕM˓Fsʠ~5_kWd{~ ҼM}j A6N$8aE&aǭ3ƃ^hI]H~ϧ >i1X{{e+K:yvE JNF' BlHk$NFO/H::8P4@+=Ɓ%>XBD9zTX(@sN;/,=*ۍ^}myx g8ftx~O"_ <{mk7 Gr&-Зtyg"֘viG3vr6~;Qz$q| w9U'6`ILאxۗlů'e?4N>5kz?,Px:.?qչ?Ƽ]|g9W}ײ7z>akKob[8tyd5+8=sA1>kX\tLN% 1ć9wa}VQQQQD PG*b,38;K%e$!Mөe>yGTRJX&JxKXCKv < ӒYZ$ In-R̗sq{GQ$JDQ+R.FAHu煠 M $Y&[3FlŢ &kckVMc v{~Ο@h&E B[gKV3j[ق@N`uv\Æ[qo ԥ' 9>vc. Rm` nsv{>\/l(%kC3+}QuR8l{ogY{~ߥֻԭŒ%x_ہ܄BBB$3pp/2|03LBVBbm6ؖ-KhoZjsjy=jYc\_}>VꭷUկ=FRF*1l_t~垌KXڭvMo.8{.F.༥̖ceJXH\/^̦ol5ts|Q4O°v$򙂠Æuئib7N[8=?O,L2f?swi\:ɾ}SWpwp@#|oE6sJJJJJ~|xPJxvj5گ Ph)}p DItH`@$قQBaVUi`aznGˈ9] ާ84yve7eQ2d $N}:glS@?g =2ɽ!wj,!z[ LA<>Gsw/gx>W-I;Sx>_]j/X{w ^P`Nc[h7p9MW+))))yyޣ0Kce P* ] ^(E0arN9f K2S`#kTU!A.-!θ`(DpGX*U4=jcdm #H"cCCfB lS@K~EQEƬPƺG)a\E@)#jɉK> OLxqۿz.fDko0m溫%f݋Hk3Nȭʍ Cq"|)f[YxEjv^֟w<"FaCi9mkίVn]Y%Bη u mz8==894J y~F633\CR,;"O`K/_!}~66o33XzλnIO-5dY7^Ͽfn2^3Z(fعk[X#g#>~y[dIy[[˙,Z?s3oױfqαw|?bj%G[IIII++I 3[m B(D)H'Tl{؋8$NP:RRSU@KRiTNyN^$QD-IنXgB%VH*8g"qN` IDATQ8v*RIBLR+%F:6 *Rx~His뚍>}K9JϕWg>>;{~Z:H6 Z@:עi?Қi~&cz>}<<>FYز9嚛*`sӳdv7jk//hR.03SgۍYߜipܲf!g'=W^%G_by(4S{yaf6޳w^ʟ1~$[!=ע̘?7~NR+嚑_7|c?: /Wp`[CK"θjngyo=[ŀfL=`631,si ﺅ~oЧ g{Noۣ~dk?xo+)))) ke0vqRz'!C.,J(H,}kMV k+$a8f8aih^%VNV^*t2s$QE82@,Jjb%QBDLjN$& ukZxpxZ )QwlIŋǴ1,d.\k%KwOW;y͞/}Yh ^I1C:Ŧc4SG\aV,cղ۷16F5lAsN^V-1mhh9#}ӞbRld`rzcȦwi>2'5Yr\Iµv Lml5+IlXzf&رqҪٿk'M9Ȫ vl: uŽlڴLqYe,HmM4ōp`mloQZi+B^>SF`Zl:lzJzKd˖]LjbV4BX(|md.YɩK{޽m8;0Ċ3t8`{شc+^Ϊ}(w[x]c % }kiXۨh{$RJiZI}JJ~lxJrC2(B꼇H)skQ(*Qyf|^f%!+<+(r^`ZQ:#N=:(ZKfyNX)X:2LfA%V%RCfghT"E5ucq$R 2{dQFo5/+:бX N çFӢc q/Iǡul$4g#n:zYQhͤj0u#qLM;eǓw'sRdJ)J^Mx{@[!^v򕧟\pA]:ūWBk-Y@K4K1Jc YcL5)0R0Β9::$+G'Hl9F')\#T*;dG iM; ! Myx ZsC+y2qW} G/8#.?byQ{=Gֱ "[#k8` (_h݂] ==m"D&vG})8b^ zE|d` 񟟅_n⫤ՈL9 Z!Fzu Lq!QzlV/S]G`o=! (Fy0W"QXCit6 IFDQXh֠ptAHIu( NJuT!eg [M7t>kY\JRIͼud F%GI{{bIɫR VOv* ̲[Nn ~SRRRRCx# ܄Z"HMNOVf֭ )LZ6.JU0%cDh cy<&R`r5REzO[G(Ee 􇩪)"ӜJ AQSanuѮZܝY xq!e:9,GJP`CXA7 8q޽tӒW1+)))))))1 TO9$mϱ{)%*cgAݷ[LM=!;ZIF5d8KQKR5 $&/b6zLk,#hhTH"Ma-x*qB̡D&#:):X[.XkET#AYU8R!Hk8YJNdJVRRRRRRR2c]H$T f=HxdQJ@vܲ|rL24NE Ibd(%ёbJh% 'HZTz5yHH͎E%Ay 5ahLDv$G p!S NH냖r=0b AhN1R) um{@C璒RLd-U%u*s+/88R:( 3cS06mMĨ(Z <=QaЈ9s4RI"9;w2a2ؾ8wT∑>久tuI(t638Sۇ-so*RC[TB8L p:#L"ZEaJc:H+:|XA<J2-OfUo!Ez^нh~[^-~5"+))))yƂchb )(LIx)CbB!@tB*8%6b~}j!Dx 2?Z9{8c*A"Ra';XȰyIUc%K3 Ns8ZQٿ!Fi-=X t5/T%MsI0T 㲬|(9ayMT8Z Bxo/3^29z`:/4w%,.s!AM[oTL dy0osmӷ{NL,&/~~R;y~Eqw8bL:ըUk5*:Qgp%VM ;TN\0ȭ %%(%i9JJFs7 ;J0:?Бf:袠8"N pC g6R kAwC9ko>;͖q O|#&6_J9څ_o3x9D47lۢfw$%/=%<;{p'YZ{T'ejq>|HPf$θSoW*)j%senŎۙcb ZE].رg B:PsמDaEOU"#rs+{9k0JI6dds),G*I\(LAa-{Rh (\5RJl1~>TPʎ]uvbn `O?Opɐ%+ RH>ڏ~IA+[~wa}8Y/]x=Wn" Dkw S~WxdM\R#f;}'caћyEsO ϧ K>J b ~b_Rc9;f)<7wV<2o\Aeյ\ ܅<%%%%%%фE)E}}LNNor6R*lo@oH!q32T㜵.Ԋ)%W%YXfZSF6[> "զZaQo /,w%I,ˉbEgx爓o]p pr)Bҭ Q2 Aa,&utږ4DZG:B0h55q רcڭ qׄ`ZaÆwzlX,kNeLq.{tǸ1h-9w0if[ۖ7_p`kqVkF2q:-KtȀHu~=c8m!)Zp굯+?̭M/AkR24^DddƔ 2Ȳ~6̅9eL&."ۜ9 -fѢa4͙&q3=ڌ݀\9iz5:OfgZDҡ*?c4'fT"f1J)ٓgߛUbGH"Ea CXX("c-ZAzrCɃXgk::C+XKݲ; k֑TTԥexkׄ;k<ݘZr/*M|KBK\7힧ß|/-X};^ϠNP֑Jyl_`a+ 4,B [qx}NV\է9 QR)B.<wLbľY*- VCӖQ]F<3ζ @8"PB_Zl1SXfqpWP[LnI"~IARΓK]oFXo#GKV Q/@HRS1c4j5 Z=fOIɉ oC?1vXc;):N;oc;&÷$cͷ¹+SGTm(vyl 3Ug,ٯ ݦá!{^L !Jэ<=Kt 7\ɒHVǼ> Tiz [a@`(ns6N͋l),&Y5o5n>C#? aǢQBJm9_䎟}x(c :I" $)mIIIIɫ!E3:+VP&¼:Ca[@JLkՈ6c{l1o?W,<9vODIRG#H"Yij5ڙenje=H#xRh*7Sjt}y*D!BPтH L R"\\AVHiNNBGSZI Eo}tҥ⼋Szʆ?_|8SY{٭ie-S.Fi\Eroo~]d8KW7:7#14KC˛y7Vs̴ b`ާ{~1晄{fmf1lff&is뚍>}K9JϕWg>ruλnEVmƧc3,=Gm`zIfdL:tSqYf[s kӟ .?鿸=v?s̟͝;]~%%%%%%?1MMdh"FGG?-^Z:@I@6H`YnJ`kqBalw)$byOtBk 9K,5?gIx] |T9(bV+TL֐ H3xZ(v IDAT! ()A̵; > !00ךeɒ%x_Bۙ#+W| ŶͣL Q˗0Tٺ׿ .ah+ܾnW8e^ƚe+޽mMbș OZVY.cʳbGNiWzX|ŽU0e+c3װzv1[;:6MKVfIYb` Agv(N^H8&vIr>etv63xd%ýhrFbq®-;paV Ͻcbr$6 cEkM={d_R!$2m݂Gg;)UG Pg 6!}IzE{GRQVA)(QQJa >l":Ih6gMTD* Ms TCE$0:(:Ȉ { nϚ ,ZJdOhIɫ c q/IǘcTx#iN{mv.xsqwk8B>'O>35 .lÏ-ȉй9F+6.))yS W3Z+&c P:)BQ,&킛s(`1c@"nZSVc [4;T 4[sh%1AG1XcI4%iB)]!2tDa2sdcA /%s`%J~v§ 3k&&Gi*ö_h[;y)'M N}IT9gvĜ'vm\vؘGzÆ^㜕⫤#4qMZ>[@A8 B!#Ɍcr:YIcIǟϙnw#m!Z goScnZ78 7wfg+ ͙){{q337G_O/R"wH%!eyc蟔v\ pў_^+^_q`?1KJJJJJJm2NQ*ﻩwa"dPx|˃ MHA,J IUBKA<8N+x5c5haWiXsuv6dZ%B T^HMN4j5H!VxIQ`C49"qxq렚D,Yqj#[IɉkN QPEpw9+ݓwn;(%1Sd}UNY>H{fLdYʡo#U5M=6gr]xBfr%I0%J Uwc iRvӣ&4! QKɵQ!+ LT]!V3%%%%%%%%! e#4Rݴ})A*Ih_# ֐NjY_F%LLyp.95/׍&`Ň􀖰dg=ZKnT,!˃(TRcMEۈR5H Hὥ 8$+Ngղ굄#4|o+?KR2VRRRRRRR ⽧X- ߍd9ɍAIE}OQX&xv^ڙZKH x 0#$f@,74j +Fz>6`_ ރRC"ZDqy)Q0𞬰x{l-]z ˺˜uHuPUj8J(f/ͧo;XGݖI'w64kOF//dBcO>ȝ-kO r~;&ssp\8d#yO5ZK%n#尞CI@ +}#FH]WE0c,ZZF; &(R-0ݲAXjnirʙo`t˗1ٹ}>6>n󯹚2;֫vU\~۞up>fwtj0<(SƊ3lqߓ˸hˣ[|}(Ts W!hmG6[.y%WʆGã/C7rMWsrO'-`yէSQ{ߣvPQKcwwgЭo6НCkt(>qz<'#|w;)pm _}EF`t\~u<9)nݛ⫅1:2\ѭ7 T ͸$n{E>xݝ԰L2 W)3|o>34P~VpϘ@m'?~=|nB콉'u?}4[e~O՛1[arrmg ʖ<0Թ?I>=?R!`f|;wQm߼_1x< 8ތi6 XkT<{H^!ֺh$Ic;vjmL cah k\22Tb:II6emn}LH&m9ނk޷~r%FSnW,_7>r-h J7k^ t sKE\Q,GP7dxZ^Co۷ r\rGΟw5Z2הicB`k R@fܿ}x0 f _#I w|d9 8-׾|Zwwu< D)DQ{ІXLj h5@@ Z%Ta@_B/ʫu]t!vzd<րf r]l޲Vem/x<'"m++T`,:1$MD!D XǝHmE4F'eŲ dbIO`tv[XaqnE!L*yn(t1ݕ%/m,3^ QZy<kG^~-l}oW~Z5EⅯ#dڅlH,~뷟^p PL|#`,xl7xhMjոߌ+Tm'!Z+^tn!Js;2ܿpUW]`VʂGYH)+$~xx?eu9qX…/Fhpyi=s+7Ip.y\sl\ &J~(it3dtkW>obS.'+x<d$N4 LbPD*181$H0@X#щkBy0h7J mY6M>(MOc* CNڠ5% B <|{cbjέJĴSݏsMvҫֈ%M6CR=SS>QJcx嫡Vmb.p|s|=n8KuO}>hعeW(9+V~k 9o5/FPRo$Mff4[^a[n |=Mou=ĎW@7Grw>Wo++?HZ#0w~9a@Z~}]fvA-Ou^gO~~5DWlg?7,/NA2rӿ޿x]KxA7TTggc5q3ÇyCx zhmRn)Z@h@H,u%B t g.[1!E3p4uY8l rkI( 3 I-5 1<:Lt:r1V9TCJGO8hyNDZ;B$RcppN\ _rze~GpS-ƈ#FpQ a$|7K-+@®{n*XҞ 2wcfZ:H_Nr`^LC=)L} XJ!QFi֮93Ȭ`RXJ{=6Ş>@LgRjQtyb/FJ4gp%kswl訏uQ@4iUf|nF( {sq9Ν)5V-_LFŌڏm/9{GiV9>d[-xV:#G`Q߻6W7]~X0s:01Y":I)#_(tM6󶷽^gxm̖ܿݏѣ+Gz|2GakS{|^L,:6Vr%82s3orzWc:}1#WrcK aQ㡏ĕ_&[aD7͜_/t 0ϩ@' VIcnAXyPmPa)\ɸs8+xKic,bݲʕ*;FL?1~atBظ,C:R*PdY) }]y.\7 wDJI jkR(sRX)x8 [{s8xx<d"4d b`/#의eD J"[ ].gM&L@'"t}1:Hj=QZPJ|c7IH)5Ha4B{q;Uoz3᪋ְeLjqE\Z{NNiao5~s<0ϩB!Obe.0Q*3=WRk2>]fTiy ɦ2b>]d3)BV@a+)%:cM-7V2,?`uT!ތK`3A&'r|q7K[-|1[: IDATAG 9x< ]gߌ39uSBB*Pdc sY[tkӠJJH`8z @ę[ XkE>b,B ꍄ@IɊEF'+T)+"+IB 6ts)@9|Xk}$e-qӈgo R)W,aM 0x<'m PВJr4+:K mUDIE4&)hEBIX(g* &`Qwt* 9 olskHӡoz)%QE]esZp CWvoZvB:?ʻ؛/7 x<s(wIGNf gcI8L˜%fdW{)'RaX (UݾB q*c,X˶z   J).:11]&x zϩImsG9@JRǭ(=aB>~|+?`Y؟ hro4$x<icd+m`utLR 9U՞,-.qI_! ֆM6YL&bp9Ɛ$1%kG XHm-RJ%HAc֮\L!my`x ]99a"`60/Z Z;^Ltx#J3A$-|gیE \]hX|(<rO\|%gvkΙ{ xNI@J0k+`J"dmb Ƹ>km'ZgaX)$Xҙ,=}ǧ etpCz>t&(,F W&$-`qh9=FJRkhV vq>+1SeM :99!L#R,PE,/+%*]²C@i \3[$~ŵH)=w穿*֥klF>fm΋wcEtg> x!WsYk!#GxN.)tGH0DskeG"] 6 (OS5a*\Ms*[B#1<{%Zcq/-ˠ$)J!Zon" ߿e;WA'/ݳ9xX 35֭<<76\I1Z;9{WLCɾ9>W$R._{_L#^ W\F?{wso&:\2'g.3M7ncU3)$3sll1,)LRъt1nQ ~V/=z} K^pmwp;Q/){x<`[ehil7 $"ºv%ɬ2`%L2SypB%>XCg.%; 0-AFh( BCh وu+ WR74O=V<̺{ʑ|3ϻ .*9 ~՝a[ t,%:.$ܛ/WXu9gw/_?/&W0ÌOItz/}qge71Goڳ3/󩟖8U g>~笧L06>^y<sJ`,CKW6`+1KH$IKI\X[IYk9 24tL>~ &uHG=5Ls ZJ.q=ĉvBvơZ6\&ҍ+Y}ctvJ:lG<Os&d~Ug iԩתk5@Z\X^#_z;R!;Lտy$\@&jr!bH*RҐ쾙nlw5Yͼ*og.`'g}󩔪 |-OoU,og z<sj ^r!&gk MOIa d'-C6 m1R aQw|F[k À@La ܹuɹj Ζ ;ʡd"ŦB ?.cxNTtt'Xds֟a⮓&&Z9 w~}r")q%FX߿xz6h=NPA@Мai|K_%LQD>\u˧x;ϳw /|z^|y<sRd3)6BZtFD 5Z8qiI^Y\ɪ-a G" UWoxK7VXKYN5$Ҍ5shmQRrA 9%9P-3RB* a`ӆ']F\r\r ^oQz{x \.uWJy_ "o<-o.7"}a<$aau:ϪCH@4jRx)]l4Dgk>pƟ (=Tj^Pdh*Ƨa DjvZD" RQ@1c`TH$5HYr ][w`qV.i+dADWY1wlTٹ zB*`ZQ>A__/n#B<Ln#Gv٥пz@Ĝuyt Z(X|ӵ zY[MwR~V8?L{IDXɲX11z3xӯ#Ԉ ykWuOy 0 @HCV% } x}e7-3ܳx<sb Y.D&sz}veq:BWLhC\c #RF )%Rv;>E(%G$$ Yfhp R:0WMbEY[ILKpҷ9YxXHو#RU l?[oJ)K|!-? azj//x!?y9Q.̇7-Qp9>软-o~?!8 a3_+w}/aD+_G,,$|2Wx<k4ؤD4[L Yܛ#t*$kuH"%I4zJX GJ~(dnft(qKJf *mc?6YEHgG iKG|y<R5+ I*9㉱r~nro\6" 1a(5[cQM,(U}7jcD" XTRfϞ)-;-hMkuIǎh;%D ftnJuT+HfF2MUKh'صgrӐdݪ=abR9Q&RJA@&bӦͼmoEk k4PG3H11H_1M3N\ʡ$ AV` vR6zA.3I$m%EQZ)e$\pQ9kłroRdQI,hL+'~5uo$IBE| _$GmGtҏc_񅵈tk 8¾L26/;yVjΌTaς\/Îq5dh:޵d9]1YQ~6 }y<9q1)Քjr,J&M(Íw$nbtrՆ4BH(%Yz1|4cCnlXcѶ]VҲo9ָZ81ڸȝR\JRB Yr񜊜 8}G]]:Zpvq=|H)Iص :\ (0@)N\V#涘1V AI,hY[K=NX[dQ/;'2;yl$v %X5d$H!QuIk:q)1$F x* Ȧ ʍWϩ'<x'DQٵkssUvXԝ Vr];,Ո|/\-։1إ !CE* `R$N :N M͑C].ctT@ KzV2:DcXPRa`8{bR "` 10`x<"Z4ji= c |J|f.;w%0S Th"_Z%Vk-Q)-rUXsp:@7)#04E+%j=,f6D'$Z%": kM $TH(62_3HW>#S B7Lϩ`x<RJ޽Ifgfs!Z; v%iN/W][A3i6a1 ı0ft ( ,_O3Wp}88Cl%XZdbГ]C{mE4&qNBV$"BRew8aQw /# C \_/<x~ 4޾};sy"h3F4 },Cj ]HD[VW+!:fwܻ5FJAdA[;\݄PH ƥTz*u bm1a^{2Zf1$D.9x<1`!"j޵(](ЦPYNNx(`rQEq.X(R3)&JUkIZ!ZfB.KVqqg$?{_FYbw3:=GD꼜 €\Vr3V:TMLϲoBk7#Vxx<s 8 A:fzzM6M&! 7a4nEˤT)Bc(6)-\)a #Ԭd1;;KwwaFֺt}{ ~.:{)ˆ*{`Rp!"W̐D94U w8^0Gxx< h8{)H!3 6#Ҍ5k慘1-!r %U~L+#1ָ$@*ED;rF؄$Y:Q{o@/33%Ƨ+xnp5lk80֔?E4F0Q+;ORm$d2$U,ei%֝'Q{t k |›TF͢*x<s4-REHAFҩ"qX3.2!ļXW%mV՝})m!V3g˒%K\>~XP)g`g'N X6 j8kzpnIf+h#P-=]yP3m< ǂl8,D7hrOdgrf"x<ǙT*;Li\TH jk2v>NAH)1z>"P6F z~Y'ȤpV#y_h6DQt:E!biԓGwZLŽ=D#% DJ@p3% ' l P`dAKC~d>u(>=;[otDu\iA>N _[Ex<7TK>' [QvцhUek:5]J)'@pB B:qx~#2_֊iI THA6Z-311N5vK],-P̦nC0SL* dLNdRJJ,m JHRa@ ^|yN'NX3616v֒N  v  oO_F"&IBR+`Ƙq?;]3d5W>)\$8ǎ kNxz #)x<ZKEJ%. yvN\ .%(gE/)}|\$M*:Q%]%+Յ Vf $ccc -X,h4gcHgҬaܠqVDжC11 8cJ`տ%Y&qs"s0'JDe]D#S35NUZTX~ozK,#&#H)0Igu  +ywn%/;pwl{wrd9._"Qyι{ҋyƕbMpK}?GQgܫ.?rgf7M#%I*Zzx<F9wmFJI3⪴Z͇i,@*ID4XǮ~+pa))PJCu`ƸAH_o (HHSEw*(m`"Y_`I&kDaI."خO3EXFc-Q̈́K3iOD[?F46樍e+}8a8,gE%}ˏo)y:Z)N~e?^N0Y@S\_Y¹k{Vg>C.V;ĪE~v#w<<7Y 鳼uT|w?xݔg7i߸f|J'e֨x<'$&^ +ZBx< RJFFF0\vvfc|Bvj\5:qFA*Ll2\ fgfZJ:C/ն?0vT*hr'J˥w }}F]|!ky޲o͟߸$N74ѭX<,qkٙ9*Xk~n+Хb2[^s%.o#z)4χSx<s,HR+КoBӎ|O]\ֆsZd2TUҹ4n8%]4-'#;}"PR!sn B7!Tm 7ܱ#0 %dCT$IB<` dS4YZK:I=RS&Ir klۋ_`oXWeݲ>J$]C fiӖe{ʃ1g̢ iH2{miAע"hZ>vFˈ-%zx<ϓdTP| n<66FP$26mmo{+GzNOڽ^ E¤j7Uv&m;jhh d@svMB`&˱}v.YB?;wdù*OՑP^uV8R(FA0 -RXK$E<̎s*$ Q/|(H;i"`=6 }Xrh]9UZ{k\ޥ+m.TkVtB~CF1ߠ9׿-/x<ϑ~^AtD&WҪA1X!ZjMڶA&_( (rl۶1 2WfQkԟt,LOOS;g4CMJ,99Zq~w-{=x<*m;Zs`Qjr8hΔ Yf`!!rr7BцFs| Vf*9`,G(n53u󎳪8wι.KE1FMԨ)Ɣ7y4Uc$b/!TPzﰴvs8n_@Ct~;gg33,, I]BW]~BP(>,C{h6dAfm5+&ɤ $tɌl{›CnGEL/'N$_$N0g[0"MK4$=03hi" 1&[1#r82![Y)Q<dNq˯P( ŇR`"K@b Qث^iR`YںZ冨P Htp'0-E܌&1ȚGR{,WZ̲Й>>t"moô ,U%aX8||yF6#BD{g 3ayiV6C4OF斱~Ő\=ȃ4d)%Q WGq }˯P( G$e(VR/kM.7kyಔjat6eY֠ ǯP;8?K]bPZ_2)g}TdҽN.9z NjQ )n usr8'r0X4DMQ2,jb S"4GC& q y5\EmTxuG {u"'*gi>cl) Mj tGM Aȧ se~f~v:j6&>j౰h1ۥ]#qikC4n|^9T6`.{tBs]vuaǁс~,IMinDmNP(s _m~fZM M˴lF4E4dXR`<k+`rxm`M a;LkDCl&N=˖gOˉ3$=f^|Zi$&4.ە?u*5h9nä4$ I(/0bG^{hh`: #^mbkƄ1D f8LNr`w-{k,\?zIT\8:h^TI3yeS5q98Iigd&ô(/mͶR8b+WТ&\H%iL\5ЃQȢ͵ ` zrI6f88DeH"-77FFY53CD kXqAV.ˬy(u+w(y[x B8i :d2i-/=`e١[LJiO&{^d`XD @h ']]9cil~~LCz]L] a 'tC 2ҽpzpp!S[+_ŷG y3܃јdE]Nûm8>'s/O |sZ.259^|:=fpLn݅!{WG `Ĝ3Ɍ+gu> C窙90<.Յ YFIӢ\'!'oJ4e) 3@S`SAhF2Ss:;-Cwpab ġPVZ!qACVnf\ -V7&\O-py4\E.pZN$ Jh`/KO]k)~]a٫pa#$f!Y|~LI `φ BHRe]khbL&epygb1&N&W(}:p ,K2`{YV/c/k%H9od"{ WN iZ83ӸT7Z "MӔ IG$Fn#6{l'wCP(%XPjK Kk2H#vT4 @Z,+`Bh.z$  ÑNx]77_D SP|JL'͠쐓wd#8x?$ӵ4%Ű|7.A,fp"zSg@*FAiZ?K4 +aq*Ʊ*\/]08PuIF9Rc 蟥qdIQJ"PyN" ƨ:TF8Rcfo,RB 7MϐUQv$.% Ar}xԤ2FQIVй=gibXwn[㔇Mb04υO( N*ˢT0, JX)p"}.857ǵwQ23 vDRS*Au4)RM|n/ [HOڨKc|~Ɍip8zlٲ; PEJepTVqyФF̈! ʺ,,Llh5зoo23c.g{˅aU+`xNN=+h].I0;AA2ڏ vO^ShžC>ӢH={Fáw ʋ9F#Х hNDch8[xt<A]Ueh;UJpu\~RچU=rjLGJ gh2jaҼ*4jkjTHn{ǭi_ti)w*m+ B)GJI磦˴0tMhH!1M˲p8a惛<^~ӴLPب!] 7t]@4o>;rjc|}b%Y6qĎ)M?/Ŕiv뜨BP(/RJ\N'a{B2)2bز!M+bRJǫR(pFH>7F)7sv t]'Dd\B88RABqIE=MYE9]~%CCJ@`iZ󒗗GzF@ l)&No A” B Qc=3^G YGJ$==N'i2-Ӟz/G(=DVvhG(aNkE&zYP'* DC3 |v: Y4Mt]'K.nR;U*`O RzիNX4r80$!N.m( BS_#nH| ŧ)%e%ʊJ̘)ͦ4D"A׼,J_^҂iR(:`$SE B&$nP[>pr4t %>YBHn|^2S * BP(aYitz Bg ӰCA4MSƗBqOZsxX%|3j/YW6PQڥ9Ӽ[|8l몝}\|XϷ) Bq*,rvА4̦B(*S SrAM5| n݇#vOJwl*LA?B=trX{VsL߬gҷR8R( cò,\.myh /CAٞo}[x2.?P 23ٵc _3P&*yㅥte<#z%Y]Xr#kK8],$h- ?IeYxL᧧R>)x~҂w[Ni/l-˿7'u3YZ?vuZNt"pg%ͧ$XD8`C$og[Bkt#4?94oL헓hWe%YIaP( DZ A`-HcY!xe8mm]ÄL9DQO8n6m xϨL 3# <SAq~g=ʼn4"N'$ ?nf6(Ǘ?GXV)dȴNs`*w:#'_n?ɪ55aBzn-wߤX4 9{ V0k`<wekU:50{0c|VFk |!Equ>`c93s,.0Glc˾bjNME:WAV5Pq?YԈ 46:RP} vnhM\13gzzW @-OY!}p띯h2Nه-fr@zϟә 4y9~g?@(}D]g~ˆĤ΅7'C.~zs+lA-vXN)BY` ]fsOdYO҂x]ý?- HrOC'oUn: Z/y.q Mwxm\x7gгhG|/#yOkl)?nan~*/=7obe_`h,Ua-a\.&kg$kNvܛcyӅX4N,WNjb#F!qWPCZ+8M~Ay]p:X)?A%);@ni\6=Dc&`XJBfp8 @WPc/J׼L.c%BhM6. "5%@Sd%쯳8i3$Ss1KrLfGwX8k J- VNIUMq+ߟYZ:4hx42nr {7x4$][_ȁf| b1cg`0wx@jm'* BP( b, ,~᯼v9WTpBѱj֮_zNrAj%0``/~ϭ뽿fyLbE8zOD3+0Ҥw^5a4D?yo>OϨO:A~CQٹ!<߳dd5qi5++gR_\J޸q8Xc=u,cExOQ[)1OD}.যGp !=wle: 4rjЙw}trP|(}ӿx%X̝w}@+BQ, 2gH?SnBVh\8.߾,S/1_̓-8l4v/gHwQSYn{l ݻZDM&McL7-=z rr7nfdExT * BPp0hl'//s>eaud˂_6G3fBj Spyu%' >BqmPn>31)+NI9spV ]`6p N_] QWJ " ԥ "{wB3XމRX\i4O|9?*9t£F?=zrhV򧑗ߕ쀳SqQϡCwI_oW>]CX:ZFC›ǀ>98z.>×N=IKSÇxs#H2+]3ܝʣP|)rcZi%%%i87[l;Gff&&1 Bq0 ų=0N*R$k\^8O/:8S[\o-Kf Q67JG"Ё#YƧT>n ң($F\ǐaNu'ɠ^vgoQYki!FMcppNNTGq8Ip`7Cu&4 ҡc8^}ݥH@߉9u2}38e3SRA#;H5na븬a)u'Z_WƗBP( 2>$ߠ7)_>YQ#fgČS\yVv!t-%( BP(>+|ha-|NJ&mh{s:iɤP(.IWyT( Ź̇2>+>uݚ?~x"ճP||!Є<=T( Źi 0Mӈ㔔|( B)Bш]DSMP(OS`}5Y9XDR( $HyzWCMWɔKBP(%Q45P(e|) \ 0S( BP(P( BP(S( BP( e) BP( DŽ2 BP( c⌂p- Bq>H) \ 0˲9` B8HP( Ź) 0!eQYQh%H%%BHt>XV*^g|oRRigCKMҲ@h(e!G\.gKr>SJ ˒ =`οG~OLK<'+;GcP(sӮY"//GP(BII e)LP($-H8Lc8Blq]'=as%P}-'ԝiѿ$yg׌A4!K$eW>j*kȢDO|oRx?GFCitH#N$!f$]Peoou]מх۰iE˾/տ\u/߈&R;k1ٮ??z/lجzE#qR;V#K)3R?oQ<4?ɫe?NyeDBP(gLy^H-7./^2 £a{H,BhHX4ԀH 2$ޜKREuKpI-]h5ir-lxeJ]m_9%"N'- K",SZRd’MXTɶ^r{S224CX{yYɆk0i-\Lʛ]ЮsG:%ݎd="|g1Mò\ z}YoNE}ެnd;l$[Zl)FJ i^S^=.ȤޅѡϽcĥ\22˒V˾iRmj+11رly^?LBwhMJ!4tj]/zfeuRjoN]*Y~R'l/ ilW~ [mL9耭ϘreRmVljqZɽm똬PEp㯸!yޖji̴aKl`KQ܀pf?پ#|YM}{gKݖI[]װ+ٽe/ݮ;Q,3R^me϶}ݖqCUBP(e, )&M?6 wˣO?1MmzɦéϮ1Wcx^Mc; p&ӄEJ0j''pcQ]1jJ9Zť5ב~ uHD{%H]xVuj!tztZ(;AAaf&e5ܳjXo/)tnAoCN`7e'lFlЛbu'h"ul[m-jYggRm*wf2qm!<=$JչجG휺Qۮ39e CC(dZv wu z>- 4RXI ׫m_G{~`!;_v.khTnV_eǗ78tRw\zejA4?@ZГ,ZmO4]{7FК'KldiBP(qBӿ_@sђuV^~y#P_O,@!?0iü+l> qn̂WpN0hezPt!޿rOHtI ~ X Ε{14UD/<6rV&4Y9^X c.N聈UYڸ) Rjϯ܇f *_ TX_HEQa[ċ4HjuKhkt|z9=;^Cg쫹nz?mVd51whz7.CzpugBO]F:VƝ+Y~~ |OdZZ ?D]ݹz;x6{snAYH< =̒b |͌l^";BDa#s*j.&^y>7[kC%7t 7IpO}}4w^eF=̺:_ 㺑=nzi{sIsXSPM0O$oP92/c)s/N/j{6~[|!p"slnz,A/]j)eŬ:P57~ K-˫KagQ= ܌6ޱܰ:e7|iɶo`ݒ8d#w!>vS5~/(aɳXY[w҇c\s-fR5]l=孧_&>x}2ɫ @pWm{$Nm [fagׯ(u 7L͡կ=R$ os*N᳸bi?&Qù˚g[Dӯhδ|.f&fܟAnef_^nj[n@Pv/#(BP(>0鐨w7qz^xOl¥Y{)H9}7%uq/`ݭbEY:3g'-MtͽOq"mO͖bs1~H/<-G/&%n(V,:.=4cyXB/{ Gn!\F5;:ͨ)f׎Pg80cp !x(OdʘdxXp1q2?(Kv[,Љ\}l&Y{4}f:F_-\cq~E"H.E(^3{Wx~Tr{\o7ֱp*vF: 1s.O#v pK{yJ>7W3`Lf r,XWϸ9}Q5OM|b粈iY8/ˆ>cwReQifdZ1?kj0 桧Q`dYqsM2]dzm:md{X @Lʜ=ٳt-9 @"nȥ_&%^3{Nɣ/KG_Z?o1\|h<{]LxB!5ls&b ~ IDAT#}6ФxnlbYc\:z`Tn{@韟CZ&dƬ\o}ij{Y `ϞLO{ !ްtV.%pKz*BP(DtQͦR趨*)3 nI^9t@8|85RKiаw=ʰp^ |Y<ЁBjY#-A|ڄvRFuăYR:6A`::ӇK$#&a#i8S)c`nLs vsm|d5jh>j1 &HΞUz ,^]9aR.Ǿ0鞭B 7[>k|s`2у kw3goprt.(fs9T!75%=~ *\D$fAsA}$'ƖJ f1eBSeqs,F@GkO8>th!\>o*Y '{ϸ´W7d S'D;0$^Csᅶew)ɚcgg m e vMPLk!o[̊#Y|&uhK.ivA.~}0) 2VO5vt/ேaWΤ=aƐZeP:.t8r='82h:L lB %{eu^y:k,F^4Qv|I}8:ps&!~SdPP-1,p_Ϫџobg݇VQ0[ի bu}=>Mes'Dr" `ׁL;mYq4m}>\lGg_9}Qhk33+.& Ȯ<7amu뀁1l fMgxp2y-䉍\.3Iy0_=Co0(AX;3tMLO^b[M\8bk9XZZ@b#%ćP( ŧ34@p`ձỹ2tD\htʬڊbDdF1LSo9Je8te„iiHqi.Q,'}8 04):f1*} I<+BJwKoYXFoذd |=S.5m\'^Ae^MӈW@53X  AjhXcqrjM/N,LʏG65Ɠٚtx4LMIFV[ ~diI)th<Q7Bƈ$'DˏQʢG44n19D %f"z33`!Z)2lDUDZz&75v+3Çʑ=ue4 grhI}wUչaқ(H%hb7&x޼&IޛĘĈF%vc@ J>0Խz8gHy̙9{Y{}ϬѮ0~ݗxĕMݶ*"'d|LJ*3}FO9[8X_3Au ,.U@ Bk4Īh$ I62NvqhZO0hJ;5;bpraA jkH<;qƏ3qboϨ)ӹ梓)[vɎ 9Gt]&AL rmTǹt ccF/!+'A˟:^# OEYث㤠:]ϏT Thdۮ*rG|eވtɦqDC> 7@|/<o'49fcZM5dz~icغi6;ȏBCf&Ӽ˄1yj.*Iown`xWI'sWrh'LXDKūNI4bYQ)&̰_ymƞ/Ph4kxDMC=-!-̺#QQE(V gct@zyy{pv&e0c6&fp(01Ц>m G(.GoYij>^7mFNPߐ""L~SOcS3MlEP]]֏ 9oٔem"p%k؝nZ!+!FC5CSmR_tdxe"&Rr^u:aAy}Wh&@G%-{;m O}^~qu8qxn{Ao~:C>w)_Ż/<ě~Ц~pAJp~W箻y\QZs믚UT{c Q\eL3JIy!)68d: 9kiSba[d)apO $ip0=~cj>wtrхZ{]ānzh0:ڈŽ]n.^`ѫk3/)LoIyE\vٝވs,biLiKte7} "ϛ_5- 1ˉRՇM)_oyxXGӿ`1O$:6d{6>|5 Jy4 _m5Tn̎T,CѮݰ>"dF[+=gUE[n08ۖ:rsqtt8 g0sE\W.Ea:Գ>2xC /PVփ,OHLr֓'ES}6`"4õ쌇2j0*VKU} kISDrsJX2 $!2A:bR6-]0ZQQ谭1Owڢ5Ct(.oV~|5*-O7d4Mf-|z-uuhKۜ_ݼGY.[&la]8w_AYwŖU Xqkn#L<6<̿j 8Bt2ݮC3t;d ;Ѫ%(Ik]zG$S Kؼ~56V8ٰaΞj{n5CpNt}* KY?]Ɔ7RYtڶm' C2‚7r ȶ$BD-+¶m5YCr\}N˹m=L]}p|ukxZ*jœ6[;6FEYs=ˏ{6~Jxm.+bZw>0td1̜e[ڲ-UN8 lڲ*I֔ rm;ְFR-wiIN%>: kϼ.в l?dkpo²_B!D}˂5bB;yߐm$Eɗ O`IJΟ- 08N%CvZ <7O[{5O*8y.߼{ )伯J(fF~z~~<» ehT)_GmSϒȍ2Y|vl~{ Q u jOg+!Tċ֭gS_1 ?3͝MzP̼jjf?/_hzL TsaWsE&o,xr(8NU΍?vm?2ǬIGx{ys :2u; r1w"?WOqS(|ev{,p˵4 _2+ ҭv\Nݩ9uy,%?\ݾ\3ԞfI󹙌] P{ UK=/|;7p\0 ϵ;"3}h^Z8q魊7kNcwfH}^r:i>^ ݂hTT8 ]ݳLSk&v+R\<<>O$Lϔc9.n> iٸNC3Dz9nV^[Yۧ/i _=k ອ=rp]nN_w{j\JE9«U{ڽ6 _%yCgG_,Y\2tz.n_g/3L9rx7dN7=9ڶ-?vߺ.70Hk$㺝zz̸]m_>l' MLȓGZk48 $4zycBzM?Q!PnS)}ƆzJKK1'L nۼK7 x@ل^{킦M~*rݦD,\"7A*3GvJ't:+|0M]WUԼNZv~߾nmهkZvlm2P(v]ՙ{~2A*/nY[&[)_R)ٙmLC$:j4'h +;qC,^u [zB>#y^fn0e9#wi'P"NOvxm'XE=:>T<]T,HMBhsZmikr?x!+T: G:$}l/L sr=y͘Yw;DA:opgDq6N׈C4RŕfRK dwkto}:vwc͋w:6hZpھ":=>Uj^m"wzS;;&j.Ѷ'}AJ/D6dml&K. !{_X۴B6TOaրB<%iR!b/ bQ=m~EE!Bq: qDsX/!Bі`B!BqH&B!`B!BqH&B!`B!BqH&☣Fksc}vB!L!1Y."H&dJ)$IR$I1$v+HӤi SBd!f!T{qy/m6<#1y晌3K/ӻwo>0g6oLvv6wzbܹ,[ Z~Os  PJ}|' .JL!OzB 曩FkW\8hbL43fo3}tƍ5\Ӳe]F2䢋.UVqeѳgϖd2I8Nh b9]oZ$a(Sn!!`B! dbY>,gϦW^L1cop饗[ѣ ^x￟Z 2,O>|k_cԨQ~8رc+9ӹQJѧOopgo~,S& B Z"d˲D"K(l(//o=@=HRhmT*Evv6A0h JJJ7os!2sL6nSO=ѣ:u*SLaɒ%`Ŋ>B! &`YD"A("A)E<'Nc6A ZzZ6oЀmXVo$< P\\̬Y˲(,,dĉ;TUU1l0^}URO>$YYY-šBqwx! n:իǏgǎ8ȑ#lٲѣGӳgOFK/Dyyy ] 2dɵ^˷-*++Xvm?0[n{/cĈ̝;~>˖-oO>|6Zc6f]m{ BJWu\!{F>B.,B|$ B!B"&Bng2$ A Y"G. Bѭ,KK[wcF<%C$B!e)\E< LqDL!qlW5`$[$RT^UOA^TJ!< !(2KcݽQ֑Bq(ID!Btfh7:k*,e]:r9+m.BË ![ީ(ߘ;LLFTǩT% %}BÇ !mh[mݿ}fLP| }(ePʀ2?M?н931D"auz>)5Hk/f5zq0\}5oH|h$m_<>%=`B!DY}.Ot²-Gy$ p]|mPVfc&X(tcp q8~}, KXʧԌD"Q,ˢ/rW`1l}1c h_y1-w2V84DW_}իWwQ@}C=+W~ĝw0rd#B$ ]wEaaa 쪮[o?M"&h ,<> { T%`tTA)Ec~ ^t>GEH?yeS 2k TN$ ѣFqFF͎;1rp h+ B2לg曞iO@zPM,u ʧù3_K,ћrE-?qʹ񎯒O@<߹:ds٫<ˬN"0,euTNE@ʕL< ?H3rH8t֬Y'oYgN4D[E !/ !ML8'<ͺ TQT d0l`*v1g'޲ROccSf]̹Hƒˣ$ɛ2LN-hu,\ރ˯dD"Iځ" rgiΕӤ[$:8Vc h O>I?ز]I]zMb1.\H~A㏙}}}92Q`B!@;FMkގp&Q uI6۫0O]?hh5ϔaGydi z\q|^4phՓ}S{qEcBlۘsVR!N"[CauO~H.j<}Hc4ᣕkxq+\wdJl7?c1sT;wݝ?~y"zg89;y'Y? fSU7Z Ya{6ߺ&!<<un-ݚGosH'Orޙ#6OF~wAeb581yl`ś]J)Σ8[g¨#).I}}cƌG)?e,fٮC %ٕ[ PSMmV-m B0i0!K0!e4dEKy1>^Ji >4/0FZIV-_BzG*H ELQʲ3>t$,Hm_sj8sT¦o/12N9lNAb5WXΤSRio9Ņ|;qO{f?x9|k9aȖ`AɊb@ QٽTMe^6ή,Vw+J)\ {(=nj`Ƅ)#<3bUTTT 9un  s͊+B{sy/=O{ӟglX~IcѫW/Μv:?'4z B6R>|񌞼l 8#JA]|5柳s8⫸p\ d*,4"]zM*m U4k !H`EUW^~[{SgEӆaSKǕRxUe>h&5ڀ$waz䡫c{c1㤁6 `)c /lcΒ;PvzoS3RMi],`9 }3~+ؚeoN\揽t''}wӶdlZw+J)4D۶hZ]>Z'CYDH[)Vm[> ēOz#q裏Xz5U[Mys&LAee%,ZDj{%.e…G~~&QL0!b7Pv*DxeF)bBl\W' ~})s~I7Ɍūyoe\|u\xU}ϻ8JS4n:7+رq\Ke\]W%SIE) 4|X.i4lC^~69-!s~e0 ͡O>8cd7gɋRTnJш"Pt{ X3NJaa!-3СCYf 9_+z:3g^@M<%֧욫~@,u8X|>J)|ߧn+Bݚ?***q,.r@#{Cf6B:(HqQ<b\B0NPߐ7 sqm 0 X|I%+; 4 WWw y!N^N%!ϟG =Ky{7\ L}<շ|(f +X>AnvzLO8)(/o1 |{!Î>c n:}͛6qE;}{%Θ~}Θ6ɧLa_­3غ~} JnA(&=`B!Dl&L#H|5tJ,hc6EI[l0@eӚ@Pku™9$|Aa]U{ߊ 4eSu.z҄Ni{M' kQz;-h/L88C-mfTVl1c…_],] `$7m$\x1/`NߟۖL`B!nohK4inCLթKl( S _}ѐ j^9"J_(t}=c8^cU|nvh.5A`C=`Z>{?w7f>$B!XfɚY[p`mr!1쪏}*\!W0!`5oB!{̲qɱ@m u8ZoMϵ| -~!L)E:YmT!peYtM0A`'Gmi'ّPW(m_cZSGaQ!đi1˲B!jjj7U!G^(eYmbҤҾfB @!> ]yw!Hai7rD{MP!bi =Bq3#gB!>]@!B!8D$B!BCD0!B!8D$B!BCD0!B!8D$B!BCD0!B!8D$B!BCdbB!XgZ;(P9VP8mH&B!^(>MɀއJLk>S0!B!RXҧ&9#lo=[JAWH~i{AQ!B!fgMҢlas4[+pՍd(ȍSّLCv%).w !BZ0(usNkTmc-Fp똘f)ENV]1,sb`B!B#sdP*3q*2sŌ2mc2ms G{B!Br SL!B,l:cvmp8|j"B!QIa7p~^'@^:cZ'R{n.J* |R40i B!8H RjV}E/g'A]X,{78?Ti H[̶1լ[]3۲]} ,l3ϩLӿ?KR؇A#I8B!8(ع澿&7ǡ*oSLd0Mh[{jZwG7 Fk}౰5}~x7M)DkӺ jZ8t:]ʲz~X/ B!8L&8OL"?djkN%I|p<.ESI5"QIY>_15)P&@ecA2FʎqLe9X@2 R9z$B!yϡ`?Tz6=W6`P恿gߩhCfN"~=>ެ0&I:_w5g ־l҆S޷?no몓x%C+\>lz}>|+KW?ә9< K_y{^H:Oԯ8.?s +El'oxB!B挲)M |? :*Qg+Q2~=+$rWㇷrfI%;@=0r~N!Z?go`8Y |0mBCq3Sûp,عo%:pֈTW'ņKon&#Kpl_hr{pp,dUL#j1/ Pkĉ>`}g#i)/Sb6VK33rޔͤERaD!B!ȣgآr4QZc1qk6$9يʍINܹS[/e,bFc)P6&@#hQv3x:Y`B!Bt3 )Jyɹ̯inm>|q\q=#1g6y ͢Gn4eB,vKo02ذ>y?9mllR&\7K4MAYp*,nɇ2 r0AK(~&lBBF`B!Bt30b]u-tXI2Pc-^[dXCts* McCIɧ321%QN4erP܆jwg,% Slr0]ÍrTߗoc5?k'̛ZX|x&=|;3'jч$R9)B,zze!C>J!Bq8R 64}hc=~1f ҕ,[+hT 1',›o-fJ!L=zlc (˱6WM}4MϒS 3r$N4kGl%F#Z' ǘ} ,kHb[*ӻŲIs#-kr8;V}Ȇ">?k26-3zپs#t4gT|2ωS0^ɸ5Ifb'r||lc>q f)E"H5ݶG.B! TV9_~ɲ.3:')4(l4~`Pvf+7V&3cQAdRmۖŦZ\GQ": ƀm+6n_\|ҡ~&sPN ~`pXXpOlbW]=sKp/CB!81&(JY(4w(Ik,RM@i-˲P&3RXJe@cPXbĻHkR9fT- !Bq5\]s/X`9M(3;luy|Щ]T(pI/B!G= B!4Ͻ:zeazeB!{hJ.u⇣UܮY4S_~qNqߝ@cKm/YB!`i_a_h "8솖R6$i yQ6J} „C~g~L!B=P X<ݚh1шcBT b t:h .!K&B!^TGuՁsaYX}d]B!b/.2|;`Xt"B!BO`B!BqH&B!`B!BqH&B!`B!BqH&B!`B!BqH&B!`B!Bq_`OIENDB`DarkRadiant-2.14.0/doc/img/EntityInspector.png000066400000000000000000001142021413722237400211610ustar00rootroot00000000000000PNG  IHDRm :bKGD pHYs  tIME/ '%4 IDATxwXlcHQ 5jM)7^zS4Mύi5Ѩ1^0"*J˲m?<ϳ̞s朙9SV*KE/. ЌO mr4 5vAfFAr"P ZAԂ `DA;&  1A@- v^$ t6D <&KcBjb#=qLV%AgM@Q_# a/31PY}!,ٴ]E;._)Qd2`2`“_ǩ {y\c4g&^&9;9(}JRSFMU;{e)-ĚyfQB!I7%%ɳ` (Z2|j߲4 mܣ,yڲ-sϸU1(QJt[tusڌ<_̝YOܲyo3^pdƴ`(28 jYnS;K%M*B;8:QZԍs6(;GWЖܪ6k7ia5)r(.3( ԝaێPYbZͨhjEoƶoJkCߦRv(ئN{QI]/~&4%U2N UHJ6g'G}Ӵk.pz}>e9?\Y׫*_n{~#JNIUA t|?]T9>- Ӊ$ Ԯn,ٱ:U먺 \}07+CH~CrSPȩ97d(=Y`;ɉv#'2-zgLםxAjnmq.oBtg2+ U [{iy>ߧtǧZHzc _sd|+L7[aPf,|HgU?;OA`4u_ 0.J*2 LX3qo-\ .4SOM~ګ)(;.Zܪ.oqڌ'ƱŌE絷/F_<2s}ʼn$ZFвߢsWٸ31 mB GCu 3YUe#| 7&)4N8;(#)ǎ׎6oA7hp K W&]mPȡ+";XS\4ihͷ~;dz+m ˶[8;t:%'mO.-"{=\]AXG6׽H#9s$ms\}aAⲌH.t O&\:_VE"1hnĻWMCKZ6bjd_vs$1<^v=q$$b0,.U7?f0J@ƌ`mxs_3^C7ԩG-pbnd}CiT}vb ?W hw8wIu?K$cz)f4 蹅3[n&3/<9P @=r^U^2yǖ2ӓ9fo?2SYZrzrx3qo]x;i."q[ó TWյ^W`ys菲蹣e&Co\#ʨ1CU#z,KҸ KED(ވ.NE[Ǧ`3gɓlmg 먞?uGr3ipFu G3ØC1._gw۪O>-P`!k,,Rp$cKdH] =~>șgټq_|D˗F@+ңVtew3wPC2'W2ue<|2޸(8>N2F?gU hM<pEaYUn;i Em|k;=TaHZ_YHh**i 'm:v$ itG0!NAd:˳f)ՃgHt6 H-Wغ5"Ҳ 1 S*[V&k0/=5` Яi X} 'yYF0{Hw`H.OQz0w./wy}qNg#7U.=j1;M'ZՊÆ3vp'Jzb48@{nmAn5X gWFVnz][ְB8qgTR&C>U_5Xr= J@?bΊzvaY~0)JIEq3y\j9:Φru?'jY؁CϏzA+A(pu5SX$σ};׳>;Ozm@P9XRCaYl5?#R E-5o<^6HZ|](8qiC1Oڟiw$EIٵ|^Wk^FzH*fJ|z$IE,/ݵBV!<#hPPjO6Gz"Z+8ˉ dIhݎtY2u')GJO~ʾPBx(VbO1x>5Ci>ټ^x0:)[|64l 0brUvt@97zՕ̪M%s`v˔H©ulR.uut>^c !Çi%B^=e13%o8ƈή֍[j : pvlN}r~{(|`ݜ:N&ƌ $LIcj/כ[auzԲDU,V`tMrykUg&>ҳ7jzA~U'Nw}+\w#} ДYPlGcI>6`&=\ި1TKEԃĿl0[[dOÖ} m,dZ' qUx,+/k3S~;Tੂ󧹤녇 DŽz~G6u^` 7p-Wٴ|M݇&g3+;Vo[RO7C̫HPD39rax_8 tGH/Ր\:qOB,$jQ2bb8{Z[]a`Vx:Xee!Gfl[-ʟS~fHLfϦnC'J<㨠rfõQuQJ~Hˮi\@X]ρ1ȈIYw`Ht(>#YJzY Dy`I;[fl*B;y?XB/?t\JݮQK8u#CYu{^a*1s%\G3tJ$> 2v^Ba ´`bJϏ2 Ue$.PӥJSy(SGwv ~CNςlط)8ʟN;2W?Rvg ?| UUĕKz)6i%⒀]~zմt|[M2STM˷nLBW[~rV\#p__ڣVi**9%n{XAjm׎\ ZGΣP4r:SR]XLY6$':MslaCۺuXzJHvʋ`/YƓ x+钧lq>v.DTt wG8#AyÄN_K Fp@STݾ_ٯo&tEnn]ЪdfޭbCO@BKn!T9յL*^MR2s *}$p()ȤC W!8;9]ߍ7Xw};B]7292~bA0!ԛﺚ[,ɭC\.D4P1Arw=C߂ B}k -BjAAc"P ZA옸뻞dV PS"P#qǼ Pߪ ԺB* Bpr,{   1A@- vLjAAc"P ZAԂ `DA;& Ԙ`Ũ\v+bԔW@(^)ŐGzzz)Uy1͟}Og8DeMALFj_/'uX'÷tO JDnT_\c{oL1E=Oݛ\eϻJϛ/ڸⲞ8⯤cjӗANH_YrβT2 z{Fk>Fβ_q*{+z[T %5CGP*لtWRp~c2ʅЎ7aNHX0A "E&Ӡe/W&KmdoQwnC= tFQi}զkfnۃ4@V%XtWd娘}.o9bi=X**<:3,r/?Uch.<}X= w)D.4,cgv2-6iJQ}۔Ζ>⧋j#Ч3dp:$'ImcJRe2sfv{cV]:g*ofu4o᱇,uT8>*/b1Jc5H+Cĝa'į]ϩYl^͕)(;.Z܊:5F\DƑ,u/'RH9C"=q$$b0,.UŝO9 RU|[eDr c`.XI_?Ojt k?;PMUm&ٶ./*U B-|bG AڗGCh-A8%^C@ndy]4rذݖ[o6 Gw7Us;tW[(Uк!9ѾWOӜACI.٣LQ%𢽯O"dHNQgBPtew3w.a. wc|ɜ񁨑;>0'&J?Ŗ?0/'z2"El2LhYG 0q:HD.eA@T;c I.e!desrRv G3ØC1._gw۪O>-PPDbl,g3Cx Z:TAJEEc\%@a!k,,Rp$cKd* H=yKm83~YuלzsSյY6,_Qr>rǿs.7A).prTK-`2[/:$^Md曹n~!4Fyl36ԥM5nm,|u[ n y ){^5ʛk{?!=]WFpO4f2 u/^ʻ'H$$g)/hх.-KpESܐJՀ 9EX@fJr Gzv}V ?r;O$nuaRFJJeϱzDĜY߃iyΝeQ G@.qXP9^Cqg(.אxΟrlՔ}{ 楧u1m+6"plՍQJ(*/{(=q*ߔ!'yYF0{H!CryJ^]u[q ża k/s_JnJaM5m@;U3V\_T}ye%pդQ@wsMg_1e^M -fN#%ǶT}V̈́U?(7ëݽ $|P^tW enShqrrQƆROB2_ ߘũٝ:>#4GNm7g#dK3kv+MFh䥐cKNCw/<ǟˎrI8aDllIc.̥ܸ˧u!XRؒYp&5fZIlh3ܪ]NO3|kX 8}VqSh*7&mYP }CݟjoTvUdi$]m6lx < $|E/ixo`E-mM F&qi;`vTİDR}4S:s'I*ꇪ+B IDATw%RMY#aN&)GG͇NL<#:HK:]JX&\%eʮuA x D%-^dbٲ\fߴ%Ze6dCyFкU~m[U|u믢6 fQLr +Vq<_ULdywC&"IoIu. O oزMV(W(,O%(v `,g˘K{0m*:S*ɥ#"98w@L$/ٚmJں]8o+A&1J<-V`m`tucI>6ֻP3m $W"A㦡W@!̹d &>plN}r~+BါA5ȣ)tc̣H@KިF(Pܩ}UR_Ap0OgENU%dKj0a<4buی 5P+^U)I+-4E0-lEo;Cyڈ栠HjٶJϻ~C__Sw~6+ܝgsrV`}(GsWmɱlOyve'}q76:mX`Մ6AMD 4@m֑tF"GZF{AAt[ACߢ) vLjAAc"P ZAԂ `DA;&  رj_xWCA $$6L%??Yh?D[BӕOFFMз  1A@- vLjAAc"P MlhA"ɔ†E_16vyAMg5*9??Y٘OT׊Α;m\H3%aj;aaNH]$WwfW6 _viѓz)͏sY~GI3]O| "AH^9s&6Yt勿?e%=M5'i@hvݧsˮ%{X?Ӻ -ԁLq5Hs|_q 'BG]`f-9ۓtMnVV"޹/9c9y1p/FeEg qhD.!SX_- b:Ď$viw[ }|H;ƕi.eo4O'F̵~vb/bRЪk?&uQjг/g\MEoZO׆y"edγ˹3tW-ն]3Xh۲mWp+hCߕKJ/M\?/EC7'Xv^~ .b0xd#~ƶ9>p PŹkxwΗ,hoh.Yy$X,OeLǾNp:ۚ_ѕc$|յE?'|pg<ȭHNγ&prǹ1?3Y0+Z Nn8z4D5 (xSw <{ %qp?ӋAM:Lmӟ~-5W ):fh$Q}ٖ d|;GVc"7X,W%%*B,|eS лo7f?~ MZr"mmmjnts0p_u 7{}+('jlǃC_8W:W80[ dpNXg\;2:I9cM`:&CPudLdMr2&WRZU%5(Ǐp&ʃŋ޻ ifST:]3!e?_=uAOsaOټ=7Ӵ)p. cstaL DUaUI2UgNO}ӃȆygF|PZG2>>ͤFWvN7P֮A\ Y,h1*O:h-SW7>,~QCڰnϖ^ufHe_ rhe187vAPQךcshmO `݇ >/&_ ۶-Q*OȠ6(?Q$=tFWi*EnC['FTDI8YI.U[ D厨*-'IGyaZOK=lv"s*v̓ehAC!hEF" R2s -ŋ4H4ȲkpM93Lm߼%K5,ȗgso[}ݵ-L 4]dddshjs!pw37ބ5qm7H  Kj{b֑tA"'Z#uϷ зPgh Ah*}5AAc"P ZAXjq-yh?D[BU+zԂ `DA;&  1A@- vf]*304vAc Ezɂ ܒjE&R2HJ͵/5#}>^7K|O]+Iac9tåۜ.q4~劶'\GRBO 2fZe:XkgiDٜ:C͒ pSPPT慘en/s;chkSVA;Ub9HHX":4x!VtsRч|j NA=Pn2 4!dF~;z$$'&|P5R #$!I.7o"uLi^N؛_wr3^p$n l[a űxJH[ofA=ГEvt"1[Y[B궈 ׯ7H6ӣq(^7'{'=.Z;URŶOEI1[ 1Q/ 'zH8CxԭSƀg`[/,73ޓG)k9>]f 9s +YG_MSo>OVKX4F9؛VwZG܆5f cj9t>_Μ̷-9S@W :łZLʪ=eƘ'x{F'6/熑~? i B'=3:NaƼ28|] \STK{ɻ^+njFF  咿Tɲ,_MɩpzUj:y`ϕUHBO{dgȻs-e3^;2ʉf.*CWyaQ.V[M)N6'_F#uo,0VwE0]]"W 8(2] wk'"YeQPd<'/I'LEW[)_ףjd\+iBЬV21 eY6(U0d5* 4bn6%oeu2q \ڶ#g#՟Yꮥ*~ 7=`|sQBH9reu@O:9CƅL)i];NGף7XkTI0'ocY1zԠ}T􉩬Ae+d6dϗ?F>j=2ڝx摷?彿GZw xx8Iz(WO+2!$r XP~>੬fe>|T'|5Wڕl{WGL[6uf~x'7y ܺ?;y{zbl> $\n\vmvޯxA@[mW@IBd + ]u]Zdx,j |>fcAa;'ax2 __!\[BltH?G̰BW[ski{yk.FK^;>/a4~ݙo;ՖRDye֫_e~? n4{:~\FCֲO-Qt'l>e}~^f·cVhf}uG[T+~3%3 2 .^HHHM3LdXl*P(pעu'^hlr'3,||ը (:jjTԵL-@߳UoX@AiAF-4w&/϶p&H=v @-4*'"g. w ZAԂ `DA;&  1A@- vLjAAc"P ZAB2R?NKPT\OeAhJjE&R2HJ͵/5#}>.;%>'쮕9tåۜ.q4~劶'\ Z(Gv_odSzY<\M+Iը, MBn: k}n. MYZMpivg$IH֎Ϭ 5R {ɅСfٹ˘;^a8/C}V;:»'v2=2= +_dlGw|.2oջ,,-!u[ąכMlyс8ׯ_ݽRzQ*ib'ӢC_Xxt#ou.ƻA?F$:Jl`zyBz.X¢10~a 6rq_==zd.jq1 |9s2߶GpO_-? zj3)NecۼןFYx4W-,dn|ޣ>#f@*C_ە K:j_z$O(H޵ʴav3U5jG7՗@Nf? P@ZC B] 咿Tɲ,_MɩpzUj3O xWwk69I2 xc4yya2,hBˡ2t+\9hAYW<3_;)ɲ,/"9`~I8dڿ&,a4EƋuG&S9$\E'W; 嚥xBЬV21 eY6(Ն0dպZx/ȯ> BC(wRo@ {e,-!;@)?lхr*ꀞtr S6~!wLR^Go M9yBQ'6Ah^n@G'0b \ewARTJxM\Kr7+pNP,VdBL9ID舣#-e0琮U/T`vkO;jvW6Ahnˤ*3)tOc&sL{=%(Y H@?Ae+ZN;_eOSt KD`u'% -X귈  ԥ/l$>L{O8gƑuT];p+>#֞omuKW+k+Z .H7 7 4|ֆ'hPں(GW;vgւ|5}1<:9`3.]@8ǭGNH3Z̜yNewٗdlIeִp)^ IDATlj@Kߑm`:\>^~*%J KV6+\g!*Ɗ/AIV4 ?Xy6JKaƳ /xv6tej=]\&!6Ĉj$ĆSlsUlE9w;pN:M nw-?9|8>g+ J?2bTW_&JR{(BXyxAnh-6έNfąqu72HFF""FsN+13+/nL{`] TQV"gmkL3Y/OŽ!o@"278tlzCϲ4C|wp.77w{F_ O1ivu;>ϧ̘uWŷΪ:Z'tcna/Geuhޙn]a Hl۸{#|0kfC7]p=9wcK*|TjԸx95wjKPjRF]a?:>uAmK`îMВ\_U\uܜ QA5T:zjuʃoPuU%jxx өS;Qh:ɩ(sUOB9S}^2y1( JD:#&b%!WkYe?̻/=d/Ε}0-؞s.n x:j +GDBˇs#qly(QFql-SUZi̋<60$ww_SCWUm=-s>f'+1rh<+>bѸO?CRP߯2Ixe_. [JVc"0=t4?/V/UkAD1SJyɦoo&Moc4c=Ho|+}G@gD/g#;ЪO*[H >ņ^FE꼎t2#aDw0 ,>52#.!tL j faʫOv=[x.gM~~FILZ;<||Yvh~ K~?F)3kgHʾ2Zn~̶WOlW{:Ƹ|s(p:\ N_l9Ï}&NVu5cG(t lߺA үpz$jo677t4 4pwU.h{u6 q7h}-COÐ9Cf7ħ{{]H_ ~Lzb}͘eů&Sks*AÞ~P'^o- rPt`G\vq_~_sADPaF#LLAFѣ>6k_| !%1š<6,Oj+:@O?uDׅ!7>M~Ϝx@лxA7%+ԛ;p w9&bv+֓{YGT7%%>B,~PVz3'!a&T>#:[/)Cs - #CdjB[v)~֍vx~Oic,i0$uidpωecbWڇk2pѮlG2OނYGڤZ%6֊ wI-i,P`2AEyʐZ-z=S!icgC,o|5~%c3iԌ-2 4ѨwjzI-oŷ V/eӢoChxO8ׂ}, Y'mAWZA#j]ql8'͏1ll>zoz݃Ehkf%7/@=j<|'^*Y;q歱/0lpwOi|^+3y|P8y澇 ÔK;c\g]W{O23(<:γ`8[F%TgԴ)t5I#o+>.lӎQ^u4n$7Cw"]%߯ŌzU~)7t!zAUɂNWo:UUQK]r:ƼoZqg2x噫I3j5 0~^硥ͻӷ 2-d8N\Km+@zHGXP)/qU/AXF7O}=gzu7-SܵYGf.Nɩ^~*KH ^eѢE̞=m VfEXGf6tS'1jmSEo.a{Pl3+^YswZ5rHFIbB4&J߱mjCC!DS !MBaB!IP !&A-BhBaB!IP !&A-BhBa8sس;oJ q SBuP=~mdV''ߎvr+~fhFIs ]rngOgesl93_ !A]\&!6Ĉj$ĆSlsUsXtL?Ńڅp;+(EY8jө#Ί(=bL#Wj@>zY3unk}?ڟÒ{w~<<w:BH4/ On?K=zO\7 ( 9>fݭ/0U(D3;8D=jh{6ä((ڏ{}sbY(>Ymj +GDBQ۪*/_ǰ.Ikr7Ie.G#5%\ngG5:BHhG}*jCBA ~#$ L~fɆ|ֽ,~Ol*[Ԙ@mu]f̸8;''裺Re=Hww5; I%ՎXc/O ;`E8y;T';!1,nxնoc4cj!O+p{ijuhTA|oX{ڝor-,ngϬ',~5OMLR?f(oNҹ\rDU~6^6R&r8zl{?!?~,za?FΘkұ|륌cem2ZnUͳ-?{r(LJ?kB8O:BX4e|Z_s j=9dop/嫝z|e|ZOtۍ;`2v+k[ m.>fZG!4Q +:@OFuDׅHH9i$ 㹾D=w9Tu^j_~魉X{{l6JU`!Dc>eHqj>,P]q5EA a( '_\??˓PH*괭.W1+C5hW3f`H'gj!h,40;P쩤mVs-# jO"LBFB=j<|'T8ce=k}$[ky?ڛϻ2tTS.9s t~  >5w^n3W==BOS_{W>Ui>?{7SBki|_Rߋz3LQwmOEϨiSkFW3|\؎3B4K-ٓh߾}'=gS`U$ sm^BG~Nꕝ#Uc{N_T7@]9 g^Tc&RUUMSۨ0DUګVP&]]+u{>@69&#1U)稷Vj=VהW\z~PPCR>~գuB[*\tfp\gddкuS\&QYNGT;ej>_KSش):FBS(skfumS9(CZJ W|UKH=⭬: Q1VrBS13Oq&y^@! xe9ݖ^kY[C NB!Nu(~Ƕ_>n43~OQ%VIFm1R W]ҕN> ?-a}0uzt gxKv%ZBRPZ{\׻p&qhzXʖ1Yֻ(媱qcF5b53~tӿ.7([=gL#*M=zҲU+pϑi67]!a%CV7rwLBBFsA}*sZ5/@3lB4w9*ʵO8#;hg6AXyH)ǖfr{l&?]Z=W՛UH͵-1BO~QLvhFjѲ~>ͬ! UAuXA_b˛1ё_p$NqlATnho旰Wc G%@a 6%٬&Ppﷳ,_T64^"yrm@8ν{Yl .F0HP *8.냵e4ύ 'ł_=:ڜ4 ˎ `;,tBt0v局W8a6^_ >xHMâldz #?mKYZD0G9Y)wVfAu0gw;u9:f-uSdkNS&q!L)s+ *ĵ 99 C$ /ϟR{+)]&B b0FauX,<>L& =G b #,ˆmh%R1l!ęѨznB k 'a9El(1 ;^&'4va$)f_2N*@ן0L P3]!ku99R7;| 0k=}:^+JY0sե \wd(CDw^ERӗ:)LjT.8.WE }eu+<DD[ a$<„hKk=cC>z€_ QA7P!.5{? 3JZMlr߹e72->\S?L3]W1E]- ᦋb8;ůKs/ Xʎݖ=n =rϛjn'%%>B,~P@Qj5r0^}Ĵ#$̄Bgta !i>UHϹ^}A<@H=?/NԔOI3GsZdxo.k(}p: fwCeٙ釞y.\q*ǐs!ۣbI0p4_> ylﶺ9d } [J(e./ Y¸9~J -IG6e4s<хvV8 ~[>2Ղ€cZ5U6N11'.=A?_rU|.qSmq<)J-~=(fŌ׫N0E|+\T!NZv?+]ފ`)+MW>dEb@lyLUg8 ]v=** *K;ErPkw&%v^X~aL|䢠A_\˺եx`ks^? F@<"]q yr}B?}%3;}*n[QT :zwdPdv|UV^O0 9{?*f_¬Fw2"H:Kǂ@^BQa;:*^N5o-hg/xk~TS/&q<gk?xt̕_׿DR &9gE)ot{|2R0$bzؿ71H b5#֠`97>`V{%O^@!H/;[QR2nx ̥XZ/t\4C,O (Z,5M VRڏ%o1k_!Dp/x,l0̸E&=JS|O}RQU#q0 P-E$&cB{->~\wLBq Gp5Lj4`÷?6:rĠA 7RbiXrӃW|,sZ3t$Bq:s(&]&@d*TNN)O@ ^~e1Ymsmhac8HB[V ׉W W!U}|7ツ7 ndBcзr$\ {6UաQZ]l_nNKr^thߎ.bNZG#rZvG5w $ k \GGX^\vDqkG\4E!IޣY3e9kvVʊOKO]HA= .䍏 r 8ZC6Ʒ%mGbwF> yE?V =Q=!AJJ o\k/|Ⱦ4x8ut /|0fD}nYtMBCxU?lf'5zw ~YAɴ1@W2jԵL-#tDWS bW|:i]/)|2w˾܊P؉Vk+uăWyw^ (X9GzP vd '*`HG { !8pfp{[jg祬a<G-B4aegqv 1V,YOҼ.-P8nN6fp !hHP; iNl~@!4 ̤u:.,^ͳS>a_e {өCB!Ɲ6:VS%묝qVvkC$b%B!ęָ"H=+[!B6UG(rW!8**:l llY!b9yʠn"B!iٗYD8IUy:"(,qm!BfqV"'=_dj巃B!E!lY|8.7>騪jMhWԥv79ڴA?B!L dof`Cv03i-OjUU+pS$91L<;iB!zi-ηv ;g@)B|l.L_/!-uGCSU3r(W2yL!DS쓮BaB!5k} !-k}>g]YB{KZ!8 9,1"]eϼ.Q9uQ^ W~o^LĦbRϠ:_,fŦL.-(ڴ?^9L yUqCjB!4-%(&?Gqp6FeCK5Ȩ3΄wYs|8} EoX&Au|:my qLq![L]w _enFe/-B=k!wa GdH\ʪ{M ͏CQ"v1ͬ[G3XҸ;ۺ-&P.=/g6CFv#-ݸkUPPxp& lf==nW8yel΁>֪z?Glc&6J{p)3g$\b .DY=(XfA;n! @6JJ(^w|Fчp ?).>lnr#^7zEӧ_'Of7$TMn! U:f-{$NcOͻ?ЩuOkž=^BMނZ1E֩+ ]^Lي˥K6sXm]Dǰ?Hgⶹ3ʛTB0ZF'0>`fe3Q:ci]Vzb"l[V:خ?W4 9r"x|׿/" x`/cg^LgqW0!trMn! OUUTU%͍^dwczJy\~ O3DQz=zNNWlt]PJZrq lvϫB! Ӯu4;3>e~ok]tKNw$z=oXa{ӎڵ&4cr!z=`0pGf{ӊj< .A-BR0^БtB B!4ʠ˔r!1RU!f@ńB H.EQPU5TZWٛY_Z!_?d_fX 8NkXJ^nfrȞBq)B@8+f.78-t+716 jˍAɉ8!B{T.7FOf} (bgFQBhBaU^뻼/Bk}KZ!0 j!B$B B!4LZ!0 j!B$B B!4LZ!0 j!B$B B!4LZ!0 j!B$B B!4LZ!0 j!B$B B!4LZ!0 j!B$B B!4LZ!0 j!B$B B!4LZ!0 j!B$B 34tBԜ$GUՆnN( ! 6 PjwgAmV9fOmYv03i-Q4IUU 8IN oRRmZŠkM TU%'߮l6k|jmZIHג(dž[lTdIK/ (Bb\8.rfmv*!]G4ѝ&WAmvj-n3M/qlvxR[C7d6k,6䃺)|7ټu/&^$ ۬m&u*o1<KJl1m6IboĔɷ&5)wlnlGYł^5Q$+Wqד*Iq^[&*#۬mV`!Ky`C7qyԞpO_}ag"nv}/PvϽLlcORPd/b"M+3}*kbVlȔn\0.h~^SM yЁ_nQu`gIu܁JOa{dOF<0kRNj8W±z6v)?=Y+J)c4x^a5b&^Й}Qrn>>"7f,G :>6 Xԕq\@UfxՀb$ϒ{psHNuۥG22U _crq\v1?w4@$iI!w,ȂnƯv`蚣5/cK8QXrBq۸tBJ8=o~rt~pk_̊^u4%KnےhRazo1d`$j珹?rҍ\Eup gpfFӓHJ?ښ2-|ZW #.Ave Oc R#ApIEA-۬e ; hg?3Cc*i~k(a錿K`i9#]&/ɝO=}<1ԂwYOt/#˘x^L~i",eHP|;א>s/֔0:= ߉Cն/fav!#Zei\p=ڈt~K |YX> %F]Fu{[֬% V-ݍ  dZŘ8>lnr#^7zEӧ_'W3sz]ՖhW0.]^rC{pV]*L%tNir91'DlչڟM0ГػzE&W̤ Fvḷ*Q"3$]G9T6Brw[vF?9XLAQ8櫝.89Q1E֩+ ]^LzL`F{nkt=Rg-Rq܀HKdetLa].\|ʨN}%[pѕHpRY]طdGufv;6WH:bN].$(8 ]Tv(V:ip=?2Y_%gw~dt&NK1r> OC7Ԕt_aJ?6KN I47Ac&S;ܛM&Y" #ak S" * (~j*Zm !PD + "@ Ȟ$&7%x {s?xà9˹͊M_;kZ4bpyY9ؽv8a֋<<<7Xq(j0(%||^$y.ͦCdJjI(Ú5c@ gRh#nnh[ᓵkAQO>YjO\/܁IDAT܃kHV8so~/ẖUw򹂤ZYd.ݨLŖykmES^٥‘lXۍWL=zw_B)f{ Akwn>u ӥm3W>]~mDΦY$;ItPtOY.sbgB^9bw2wb^YG^Nc-'?=1>sszvrMgtƞͶ5+ Rٸ-Qt?ß1i9sf!7&y#9%l#w4`in^OFFjKHy}d?zvxρ-+3wwGWy`Xf? g@״¼`k WEqx,^ Lʅ,nƌcgw~]t..WāΩo'D'/l`aHVRϞQ7>J"[|;D'q6Ne>og[+&:L'x G-+#7<@>I_(zW,Zv׃q~Uo ̝=羭9EssYI_MH'?i|4f I)y'ְ^n g/"%3P+{# èK_Pxn =+6((OM;EB]F3oX~19Q{o T>#>6KLmfvfi!]EvΑ×ӟ^ggYtM_%ȫ;ejV\25jqqcnGB7^yM~t u׷%Bt.4sFH """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&@-""bb """&Q3"""V@]N"""~iiiU~oeťݛeԝ$(kP*jⰗRXHù/P;rqud6Pv-=цEsxL!&K|r}/POjC5l&l"%%pS\b.VyMI#ٸf<&ƺD&S_.q#|ʓ%4l1;^Xep8o g8rƳ-Ӟ`LàËis~4(ɧQPI~;m5'L;ϧƐ>Xc,sE5eqyʥ@a-L?oȹsauS(!;؅Ůo?z"A{_0ic=NkփGv8tkjZ_7.˛> HOYƂPFI^6caDOXꥩ 3ELϥ@]'GWcK.p{&~.RNl" V1k+xl9ZH{Rg|c{.ӕhq63 uF̚y}zӋVgGiݷ.]צpo5{)::??]%a)=l>CANA[l £BR8r<pyfur JC $͓Fb2rp|E 4ɼGq/#cU"?|RI&"=199St{J0[%:Te-mobqvصSM91#9>chJqjg2>Y˖Cج~6Gp'koqzpC+;Ƃ0>UP޷w˅t+lUHS}YF@m] 68eK3}L4:gflן ׵hj;O[yU&G#cTs:ĽSRp93W޵Vk(l}57x[>AWsY!`Ľ7ekI\]xJ`-hn/XeY 5qլ;8ucYFVF>. pUyRL 5fY6,MQkn +0}g@x3왻Yl-xWLNՕcM"7 iw!^{$)ew>p 'bn̶ =h?;y-p91g9QWqݘGfIg+㭾|HVpqKud"cǖNiSo8:*+n!7|(~sm͘Ɯ7zZU*QY~yu͌R'Khg?gcĎ[geuϟth١y7U~7g hM=#3r~l溫UYɳדԏ?<9~PJZfgTڶƲ99.Wvc؈Aԩ>YD,n?ك~\"au^ȱZK6gv]\YL;IgKe:O,SÈsGX`7Qy.>]6SfdRf;Y0kN'1(4 Fs_.;ǵ?IBǧGwcgwmWV~S;Ҩki)Ks\V.U8K!v^ DZJ)--O!p{WM3q>|,r܋-n4q!TI˅g;=[!omזO=ǛHÍkK?QW`e{A6e/[bf+y 3Ăf ?Z9Pd}!oo;O>~&E;`o8t;.׈^w埢cGX6r-kt|&poX==ݝzSރ8GvO'm3o`Ǒ3/z5uo蓮Qsƹb߹.j*L|w`J-.N?fܡoY2g.}uJ?˃nm?fv 0듿/_ /A|/P.7.X,@oxP]T\aT.UadrгݞDoPvl8m4u~ʰ``~) ӅVVv/%5gqgT:{q ېG) }SmZ.?KmOVk}!x{%8puZ75}]p495]B siڴ%>q&ЬuOnx(}':ylq^UO8G@ƆM,>;l:KB.*Z rOS՝qf0ʪ=#>nF/QVdo[ļm=f?*|Oݕ |]jJOIw#CDto^_7S[&kg"whK1ꕏӴj֐t I+|k}ĭݬ 󀣻8ֺnsPtJSrQ\OxE3|ܕ{!L?Ġ18̄7rSOIJ ZIdyr|~ē+cVztINx巓atz(ȚW2O ;X'0:\Jm}PXͶu܃~z]CXl]Q6E4[3bdR,erޫ%'gS@K׎?wϪY2; Calp3uI f?^`{q4nz3=-κYO̺ݧŰIyu~4HS3 : .c>8U *':+.99<[1bU|[Q̡ KIK>KηԻ_.ָ {spW2' ;jq哕U)8h cpvr#`ysy'z'Gnc!Kی;C`-DX+OZ Xf)ئW@}K['cw2l@@Ccl>c ]s8Q78p\^n}Y?% 5c_2wazoF ׍Fֈ<Ӽ+濿 whjFW" 5 wS ށ܅UT<+jw@]|jJNy~EI^&ѥăn.}w7w3huɻf'>tޖzPt2^HygY9AZZđǖ7գyD7I$~ k'HP]mӰ"1 طh[".ܯdZ#o4iMx*ukS9[E#G0(i'aoK\ŊEDDLk$""")P)P)P)P)P)P)P)P)P)P)P)P)P)P)P)P)P)P)PyQZZ.T@?p\BHBjd"""&E)IENDB`DarkRadiant-2.14.0/doc/img/EntityList.png000066400000000000000000001411771413722237400201410ustar00rootroot00000000000000PNG  IHDR6\wsBIT|dtEXtSoftwaregnome-screenshot> IDATxg|TeߙN D::** ,A(ʮeWײYTeWDEE:RB@(!יy^N&4 Iιu>3ܧvn8s\}GUbl"RSƗN_f-K:_HL?ǧT؈\E,!m V?i##=%uӜSUKHU "cfj_;Im~cZ  pئ ۈخ. 'bbV9MZvG [ue=i~Iڪ*)q~s٭3/(.w _Z2[3{3_Xđw259_x<n1"9ׂOP8﹓uXkE[wm+lOO4M<6`q߽[a/ ;33n`ctdčXN3+ZY4~m׽>Ïyr~xoǞv* 'pCtk+jax7pW?iV[(zgcd9z[ochCX^{eN.M6"W¤L~ |FM7; eO&XlØUԈElɊcZw) ̗`2SsflDDDeK0EDDeFDDD\ q*lDDDeadvoq FDDD\ q*lDDDeFDDD\ q*lDDDeFDDD\ qe]Ue5(e.l"##˳ʼNEPa#""".C 6"""2T؈Pa#""".C**lF>л`z[D """W*yOLj$"""RL|W:7&"""Wr}BOoеVL[S,p#A nӑP `O㿿" RaH囯װh6M <|[ ʶBNm}_v +frӫzU>cvMG4pL[όזr%; =׆0vֳ:+RuLDDUTyac 'he~~}bh<!s}*w bu_láO2ot_(&{aճ=_WJ Xwrf!|c||9ؓo |wn~;|ϓ_PdbOO%̈́܀V4ҙV,% MlɰN$ֱ&vd`' CNH~Wسej铟C\ZXvYRQ`-j/H+`H#\K(,3$"""*lH~|x>E&{"JϿ N|04b^ Y4ş|s"""""蓇ڎaK6jR oBrwӣrBsHE\ؽeK\C.qWn۸{~8[QԉDkMl;n}/\lPXԇUX:ݲGW ለ+]QFh_Q{݈@O\lEZR( ?ޙ6]牛'u#%FDDe9ezljpDDDD$$$P?Aѷ{Pa#""".C 6"""2T؈Pa#""".C 6"""2T؈Pa#""".C 6"""2T؈Pa#""".f68|% | ;(Jf'VmVe͙*OطyorUŘ)8jJU1kBn5i|KMEL`)M!ZHr0*]ۖv?W&(-,8 Dr U5fʫ6sUέOq  :NtO AN0~Jm,!ZMR|vv/OCϰFdvFw[3+˔/Ok_U炘mч,˻Gǻ6afnU5k|}Tڽʕ)ƞCزßN_PJܺV&,otըY6~L󷛴x+;}Zl5?q'Zmqal^?o>N/N[}WGuqfդvr垱I?ƻs8yv붠g\= ֳpzv hϽ8~>ouR!8#;:b))l3s16'fҔNQKJ_\KsIQ37qXn4n߇Mwf_ y4j>G^OW?G9ۧeeWIK,/ƘyZގ}$kAޟ8O?/&qٜRȵԸ㳸QQڸ1UvNQ`^$qݽi]Zޥ!(X=L;s'^1SRˎ$x^fI˖ۅq,m{uKQsk7$c;`zw7.qmV]NϾ,o6x幕O+3#oZY}[{#Lf|J]1s4cs%7c+0+H\ 9E9QÊrޗFxYdž~'Fqf gp]ӟz( sWd(>\6V Ku"%ɘz[Xg\}x-w0U)KLs?1XNNſ`Ъuc,iI11SaIdD DwL6m,(Z[8LΙ%÷1MAjilϯLѓFr2~'iOɶD^hZ֛hQ Q0dԻ5'.Mnz͛R,2VIm oKtpz+~5ُ/>`QLx+g'T,6''?܏ײ`ֻ}u*9ywbrsO+%*ܞ̛᱿sCpSuc]1cؗ=_Ìly-_DE <6ʽle_Kλ1,FQlW1AeNV Ɓ1Wd{YTW~ߗE/KcwZ'K1tmn:XO.-+TY0HڟLmn{O$u=+,$,-YUsA5-|P}y{<#zu$];:G7ħ'cs:NO vΎonjI?y-/!=8|!sـ5f er5?!ۇv.y=p~ ao`$s.uЮCGrs٘+ʊwtM/Cc ;Un~Zuk{бYq<9Q㝼_;q=*x[7ggG1WK|MrbaT$~G9Mҿ.)n[9CTB>~ϓwe'ә_зQ^3㗣vh\[4\sަXa;HnE0'<=3aB<޴ (7'rPyj!*3;MѮgǷc&{y RJK|6/_~ڋzek*pvgd@'Ud7]=N3 Fb|W{0 ©n\1 -+4+e8̎s6lb-ΕcUwI'qj[-޲pjڸ?jJUGMɭ1dg`st7RU{ac +OѽOjVm+VQSb8jJn5=Oǽ:GWUx湯OMadȓ'YEለ\A&;%fQ]@BBij6TOjTDDD\ q*lDDDeFDDD\ q*lDDDeFDDD\ q*lDDDe)'{~:IIi8BslۮDD"""¦ 2clN-)\^ظӪC4 w󠍁݁|vffBtr سfmPTd:|EZ:>ɛWÁ,f>u &6,7hSw- W/zT~"""Z_`i@M(+[s$oDbd7n#~69ϽuH'4 :7+{0NaYb$4pq{"""rE u'"?^ IDATl\lߙnX$ۍ%zF`It q:Vڳs:9'"""U pk֓ᙬo kr]Kvbt#tC ?\ƺ,:viYG͊\{͖,5EDDpkJ~M?1l$q#k{ ?:>i"K8#’ǿ?g0s75b'2ɧ _wV<0=#& c_FЉBR%vDDDRČ X46MAൽk! T1o4|6|s?n& =|Deµt[π#|;^ys6Gd箴qn2;9y8UH5(:JFDDD\ q*lDDDeFDDD\ q*lDDDeFDDD\ q*lDDDeFDDD\ q*l=?4 ?|΁2ggkLV ʠ1+VeaC*;_Ziݴ+ 摗GYʒ?l83AnUK33ٶ=^Ҟ=uoMbЈWY0{uPap^_(psL՜ +Sի* l^?F2qtjofכ^-EZflKYNfcmH J~{4|6wpR 6܃3NЏ&^vL;v~ɳ_=@o;)0sVMNq4um2_op(Ey@ݛ&ގ>w q>нeakcmy;un{=Ol\?_ʺIXտxoq<{OF@P5.%do5R Qxg<]OiLir$o/_H"᱒y5[7)$eJܝƌGA{Ѧ- jE.g31ϦVw. { L2ֿO,%p?ư S=3kp#.9qq4 [RF7aCs uI'/!iF2xo8n%q,;WK>ゅMK 5 0/2+9dmFѽOeG%i4O7p5{q/W>Nް#δ?-r[3wMU|;1(wuhۍ>?a>lI$͸)Þ9KI Ō# A)2m%3#oz>Rؓ/˛.M>\t.Kh z+!Mbq{"""%pklJcҪMc,iI1.fne>>7aP gi2yu1woƵ>lڸ߉vLv׼)u"#ˎЍ]}8v-lyغ3 ]z=ijPPP@͟k0N`_Kc oKtpz+^掸<363[͌t2LgS܃ t r_oBhdePۺS߰I-zc0>~Ц6lͣ ]AYȡydмKvoIf Σ~]Y+R/BGX9^ kjW19)Ur~']RB4s6U^ȡ#)\("*lDDDeFDDD\F.^PDe!"""r2q*lDDDeFDDD\ q*lDDDeÞE1[0`(F>Ĭx[uGuُhnwsU% ?l83AnVL-zo#R+$?7<*I *kݸH(ד+*F4rCz{Фq{L=^NxѦ- jE.g3nKxv=ݹUDDDM6U{^gf)oNk߁ᣆ;/2+9-I|"7'Ƨlqٓ/˛.M>\d?̬1_(wuhhK7^EDDjj/l^yc&[w=6&<22iզ1I1P{D5v( ,mY/3r#kJPznz͛Rddٝ_3b6^Tecs-oo/ X`ff)W{w}1f㓧h{IZ\[@@IZj:&!( |{x- fW8zZ`E?g_O}VdW"=ȍN8f]±.>[r|(<Ye渴hb"L \ةG~)ɜ „ ѫ#19!>gzUHP-36>d|}+`/:ؗ˗_8Կ%!V(pb|ylr2#S'wɫۏ~όh&O+'fs7°A`!N`@S ]onN3e0m z\6RD4 4rxpEv?ּ|2s67_5Sh8=Webcf}-?\EKX46Y%37cd7hFO1yP04Q&oxS@ZOS>{>zm)9xL6DYK]63UEDDj#;'L'O'22)@eZDž/L+ٙ9'>ozͱ8¦̴y:u9:ٛ羞JXEDDѩ70zL(ͱUA4PZv*k<.""".C 6"""2T؈Pa#""".C 6"""2T؈Pa#""".C 6"""2T tpR&VwWƓ\T8b?Ƣ)csJ,~|iW`{W~- BoԸx  #/'[u"Ei{kFʚ2MC-fk\T%ƲFᆛʿjWpb3_MfLТ)?+*¦$7ܪ;ILx+ug<~>P1UƕH /xEٗBg /oKiۣil?Ngǻn zѣ`= g ̠(z~?&gWy=J:EFzt}wwI8~>ouR!8#;:ԧs:~.aΣ['kZt涇C I0Q8 5k"l do|\ƁciҸ}~^n_8='Iw# b(ΚDr4mґvM]Ș{_ oxf9r,#bī%pO!#׆{P;~ɬˮcdz_!MbҔQ,i\Uݒ2ͱ<O/x~Ec#yFc_!`qn}+s_`'efYªX8 ?fFvH 3c%oLÆ!N_B-6ٲi9a 9|s,f+5v$n^͖včk| IٳEyw14)v/dXJn47zLgmהL2,dkqp"oױ3eBQa$/0A0RE7s#.9qq4 [pwr]llw:bXi5p8#CIݵLqK=>x^pf0f|VN\΂04%eԄ[hÁ_`V\\RU^ȝV]m l+~672;P0@lB'י<<+Қ։-IW_d1DzTdT'g_7]n}J_ԋen$O.27c^b}غŜ`KN=h=3T{cS쳯=s>/Gpc7Reo}K{%g?¢Xo=EXNŅ[cr볿 Q|wѶ>[W0Dz4;hz m,a;'9QÊޗFxl,ƫoN_ьo?R*j,vh ۷>m?[amGwR e%i4O7p5{q/W>Ō]jtU_h oKtpz+^T|hn!x29fџ 4ɧKŝqO&6/v935_\ӣ'M (s K7+φv"S@e5PySEF{*#r3hպ1$\'s0i|fz<ڹ:UO]#[-I3ϖ6 W6~<Ǽ-/Lʆ}&}nӠnAtdӆKDjzΣ`QLx+g'^X pL_$#>uBk!D|?@XDoDX$uL[UA&/ޮ-_'HwwHsU:u:^yfG6d.ٙ0Yhb" 'Se^I/Dg\,!7vd_&e_^0}ψ^i׎ )rsp!KV 39JV8׮IXJ IDAT?[dW|[]7'bm_>nӧgr6c ؕw~;)+.˟]Z^ퟌD_Ggc4lA_9ߛvQa^gd@}GUoIIBYX "łTDAD)((AE@M 2i>GPzG{!s`q#3rh{f$(]Ũ~ۉGvib;y%>s/v~N53-^/cOOxg$q:̀szqmvt΍w?3Sw]s|9NL$-2Nce)$wdTwt3kR+E_dSw^1ntCS$;?sfk> nlߜ/ϛxfJzb<~~'=G0m6f{WbI2S60:FP|8#L|/F ɟ2]i5xv&Y1=1fܵR3>"s8W`Y קUD]܏g׏g6Ή>Xχ3אIZ,=l ł7Vb/_?GQh_9V\=3`63?.ؐVg}ߦZ 9g)b![W/v)Ď8o\֣J-ޙ\CW]bnsu'BkD22mezNʉD8 ߐ)^ޖ73.oftӫ:V˿vKկH@P:ej?W*3tERO_J:&GC^eotەroT8IB֯xvl.j3k{^btLrr(DDD򃍙s+9mG7= JRlwz<$%UDDD.)trɶe_6vrr)6Ә\ko䁁p/u&Y6OY7N԰cGpWKH"""Շ]W- xs1_7(JLaXXO{ܖS/iDDD*'*3TK4wMxV-ܸ8};‚0]T  6?Wp@,vNYVޣd]+&9M\ [⹡K8|4 w1]ᝨv܍$,18ŞE&K`L20+s"""W9 62i<9u8SoAg _O3){I2m0np332/ $o>{cV%~='z/{7|C-!73xHUcK_gψ8sА]rY[qq wp+o0Sk:QQb=FrnOmd{;ՍEDD./_1VZAe}iyU HOʜ?e7!dH8IZjz7,f2'쥗Dx n q<)""R% yHK(69VdL>ɩ2usxwƎc@Ո\*WҁIPի$Q"S}jɊ2 g2S1-e4[8`fT?La-~N֯?KZP+%""R)`+W\.D> {grlf~O]%!|18"ĩ,rSr ʵ&L'8|4 {݇>| ""R2X9qᗨ%oy{AIo'"""U!!!u*]Ky苗%{/ixoW*r<2m W<}=p"""RzWA) =9T*nEqӨoDNig6%/&IFDD䲸JoEUd~?DZQgG9kDDD.7݊ܜh23 """CFDDD8 q 6"""0lDDDa(؈P`#"""CFDDD8 qlLĽwХt 󫺪~qCpӽm[7F ՖOp].df:;}Ěy``3+ܮlmTN3:~ʚmq2ǝ;Z;H*GR%&'7#V<݅zukZRf#vZ/)3m?cy@8#6x;K(\L?pԑOdC%ݧN$)ڈHR%&h*u|p-̬\ztJ&F`TnW$V]^of }[q#q8wkFDD* 6bC +6[+:g1퐿w6wu]-׶n8$vw ^)\PHM_IrLIZffIEDD.* 6vtڅp JlؑàqjZ/xK h&g%CN6~X060e~=PT{Ά> 7 % ܼkӸc`$$qL|Ν94q*]W̆[g{L[$ysۇR]G~= HH0^z={F4%eqN_M'1e˞}\Hp Ҷc3Jg\ۓEwZw`s0.+TY[qq w63բʃSf#~_7GGV]A/Qbr$u;򋝈ti9% ~X;U[A"QnbC`Hj {[VsOmd{;/FDD*62lAyy`Y~5՟}c^K᳣XMaٳ+4sj"['HͱEY6֊g??1WXs㧌F&""rTyt\pq3ˆeYam>>&֔TL <":૝zhg晶,f?:[ϼ~ 5~.d̿g'µSx;륗DFO}[C!#""W*`1Jw-qoOhw;߱Efr5*9`]&N49L>ɩsJ,H}~tKv-iڔVxq:hWû[6v"FDD*yBfVnccӳ"oLF:Rg &?oǡie{Sb%}]ǩDVq] ol?,:Jp0]8riQQ1-e4[8`кo껮9 >ޜ`O'&GEk3{֎†[HhC_G{-nO ݕjJMXp b+;Wg6Ή>Xχ3אIZNת =2k,dԮߑ&e7l߻+Ow}0cx8q* ǔ\wrp?´_p׏D԰Tj~G;o8G}xNwDD12mYeZ8qᗨB ծS6z]f6򋊆+TOzk)M֯xvl.ꎚk{^ba:k)nEUD~2"3h~r~|%v%.""W݊ܜhԲOEDD"""0lDDDa(؈P`#"""CFDDD8 q 6"""0lDDDa(؈PʞJR>TUDDx 6r),z0w."{}""R"Gf3=Xa\)823m?cc_ ㊈UOFDDDsUPL֌8ߗL/! XZ{9+ߞ#XsYkGI` gȑ0F0(^^:[\ s\N]ÁVr|۬C[#܀<~]6-8v;زsW@ sCydu[JG,s7N`a,x9"_~şv}vҳu6I2GZIV^Ď 'o|09&Lcڝ`)v0np3306s<'JsLQ2<oks>POڀhH@H\OgGl䑸m#ۭM0?x>z~ΫW#ߙ\=ao>ٻ-\~sέ4St2~#amЕ;F4O,u:;!ܥ):ؓ/Ý].a[Ab`O^>>ϴ2|mOF_Wiz͉hY]KVvKY8g%IxvnkCK~?kÙ~Ҷc3I/ڒ)b\3|%9:;qrЋt?x"%.1^a˦}䷉Am jI̯N2<ΛN<^GcصfX}W6y{p, ؝oLs;#,!pݭ ؕ:ҎXↇ;{M w< />4Pҭimj,uh}C=f.4mx֣?-'-~}MӢpCJi_DžaM(K6`љ_CX<]Ow6cZ1/&f /V3s0ßnM Y ŗハDODZ,jSikbi+1fTq}^8oMX׻Ko+ۖn5f!\g,1#iSk÷I7VNwAw?x׻w"{%0wC/vZ `nvg&W_ٗG!nUx H(*_41a?IVos|S&tGTӫq <*p^$uAoKv;1 Z70xo3L7as7-ot""U7~+Ytaq" 46Җe/'ӧc}3ظjif9YO[Fqhwڟȩ^껮9 >ޜ`O'&Uvvby߸]#j{N!/z0fqs0jдy8ƼLBp  ڌ^S#(]țy^JOxt4 8/Gf m/֩;}7{Wߨ~1:EҹS=3k=͙:~𼉧o;2c }=X1S?F p??#v6\JWu1l߻+Ow} /T`Y קUD]܏AF8'`=\C'5Ch6:d)L X W|lMDnCyoj]Kz+5C!2s0yLu'(+fJ(1"u#0K7ѷOl9Ka|χ3t 2i%`/|Cwpyhѭ+FrD's;nN[sOQL}g!߫.15""i+Ǐ~ʩAqxk6^չ`Ab}9\Q]Lm'_DDD8 ݊jIDDD䪦`#"""CFDDD8 q 6"""0lDDDa(؈P`#"""CFDDD8 6TU *&`czNQ o}Rݟ-%~ kKʹ |dem&mdRl1ٹ#d^s83.^˦=IٽW7F8^2 \2Sض33b`24ي~3뗮']mDDD*NU]ßd1\[A9tX) V+{X8} a;w|άy+nQ2 \Ldn׏&-W%>;wNs;{Ia̘?9WÂ$""R8`IOx9U#'Ɓx?lյ}IٻOOb%y4lՇqvi'ǖX2c Z5"""q{`O&O^`olZBnf𐾅<=S:^ϞMiqfuА]21fLӔG%ODDD7Cxj=hUQb=FͬpZ3E^;{_ޕU~EDD,6V+VB 2N <*\hآ zfOw,Z +DDD 6xziS aX`*VS##=zzC@J0ϻG*XjEѤo7p"+/fINU0ؘ{ر?؈T+IPի$Q"S}jɊ2 g2S1-e4[8`fT?.o'= )Qͨ艙qkWMrz=ށZ-EDD+?J#0K7ѷ\0Sc lH_ 3Υ~'? pT~9)Eu Yv)pV\6էlkָ=Bv(v IDAT>HJddڲtcc_r.˿vx=]LmK!xY9[>"v%"g#3F~Qp !"""wғرz+NYX7zFT֯xvl.jSk{^blDDD.VT%OCu-~o6nE]n4jPUZK`#"""CFDDD8 q 6"""0lDDDa(؈P`#"""CFDDD8 6_`;vyYU]g?JܸAO8PPň\~ll[7ב\>ΣC{s}].df:;E;ɮvdemĺ$Hy)F4'7#V<݅zukZRf#vZ/)3m?cy@8#6x;K(\L?pȚŮ_؝C+sJQ%&h*u|p-̬\ztJ&F`TnW$Ve\^F[czG UllYyņ/WlWtβc!l4[my~0c o ;k#?c%]O59LZV>5nމzng8sޝ~>NKM6S/'3hbfd]} iНG'ڣ܍$,182vKf}qvI"Abfhg3e.^at%[Rʆ"""WY=) 3@+$*7#%AuԞ,^<@=7L2ѱK8uMۇ@#$[mJqL s!<C-RI<쉿c0np330'pM⃑19wĩv^8G|4d&x| EDD.* 6 ڝY쿗%:zYضWGB҆3)-,I,{/Cu2m?([]p;GrW 6c hHێά*qmOF_iz͉h^T Pc8 ]\6Ul^2yL4O<: 2|j\˖c$L+_DM ,M[Y2I2uDR-e~Z!?\;w/Fy<\S y偙fj,W y},5f~ώbA@4=bdφМΩ>o[ 5ǂ+6U֦bO|㟓E["W'><\:.efﲼk cXSR1/G@0̃vbM,.'O;gZ`~l/>>1ք1pϋ ֞s+;lVr=lư;o$""J(%]?!l/_41a& ^#hV[:nb<=G|S&) WeyH,[ H8ӕEUveʴ->O,όwLMV$xz[rӸYO[FqhwZYSb%}]ǩDVq{GEG nk'`[;M#jc1jдy8ƼLBp  Zm@}5|=g:ǛDD(vmFu-5Y}a'$*H݆JMXp b+;Wg6Ή>Xχ3אIZN =2k,dԮߑ&q7l߻+Ow}0cx8q* ǔ\wrp?´_p׏D԰˸0Uv+i*ƉD刈JHH v2q×GfኧEDD`S+&ڞ@jEDD[Q̯H+ Z< _p]ɵUA.7,ǫ+v"8 q 6"""0lDDDa(؈P`#"""CFDDD8 q 6"""0l{N*IIVm H')~qCpr\ ?=_Yiebcݿ㱥$U\+=D*`Srɶe_եH!o[|_e;9YTW""sUPmYBbᄓ_=Oߞ I4rO+KJ8'IƖw2ոe큪d`cbfd]} iНG'+UNH%]O59tl;vn5[s8 F |Fk{d~K:EZpZuCSϽ9ed /ճ`t|{`u³fmi؊;'-`#G~&vϣxyXnq̭s;u Zqn y>npuۼ<_OOPOڀhH@H\OgGl䑸m#ۭM0?x>z~Ϋw߂Iږvҳu.-o殁*uEa%k/8w-,xK h[s8OaPB]8g-$Y<眪ב~bOYa_,\~Lux.˞tm 7~y_@@.9YV) :?q˰6#q'}:WR_H廪=i?2ܹΑ%96,@ NznOĶ0;p|+lٴ61`KPK ]؎^to8Z;L;oמ9+I ;Op[j$Ǥ_sD+v~Ľ>}4} + >kKu.|mOF_Wiz͉hynE;n?s,r3-g{X3)-K9կga:6r='z3٥Mwy {P,پ+lvxj=hUsz 5ㆆp`.&ٞژnIiqԝmq̔$sW\4ա7x]"R\+6 y},5f~ώbA@4=bdφxᆇ;{M w< /?5 ݚvї!iit:7"=Ä,n~iknK>vNm]yz9}]ٽlRs,?77 + aYjW%R7caNm?ކn=ʏ2zܔ>-<0RI3 kp#2%"Ul#3ډ6xֻ̟<li_ ir6P ?k:xz_bハDODZAR)z~cZ1/&f /2 ^|}Fcӭ s!+c=;*e8q&酧aZ9-JBM7p%ObrڭF,b7%f$m wc0I9zVNwzuT;W =G.񛹙|2=hڼti``X 3H*v:?/0߾v>?!_ٗG!nׂMiG WʝcŔwԊImn`%~A5:~'r|} ~[ڇq< 8{4lY9/ى3s6bh a>;N5lgF"R ]GEG nk'`[;M#jWz+1.͂0o狸9=ox}j.bTfgq{F4ޜ`O'&U ϱ{uE߻Zb{*;:Daq)ŕ/֩;}7_x!)Ν_vi 7oM<}sn }=X1S?F p??#v6HsU3Y$yxשOgJ#({>DKnIM<^ sYt}Ьޞ{ VtZ \R9{|O0ŬόX*.dzdz^[ÙkwF`-FS6ib+ኗQ\D4+Kp.\0Sc lH_ 3oS~-{3\hѭ+FrD{c{Z{nbig7OQL}g!߫.15"R 2='c_rхoV/oOf3U{+I[߈_[;|WDHHH v2џ+GfbኧbZ?`!/B}ds||E: JT]~ED$^LW<;M6Ե=/|1Nly( =9T*nEqӨoD]~EDnE]5iE,~o_5Ua:""K&4jPqNADDΡ"""0lDDDa(؈P`#"""CFDDD8 q 6"""0lDDDa(؈p`cI%)JQ\:&9Y9TRM"""r]LaӃčN)6?=[J*"""ԕllm䗺\4f:;E;ɮPyI,?]cQ"=/XBb|oQNد¶埱|۱2 ex{k!JDDD j736KU#""“ʗxz $`ϙ5o=JF+޵lҍĵ*GӰ{nމzng{8:L:]hgΔU{ nmJeO\DDB&?'?Tޟ` ;H|lKT^ p&eZ>Y<@=Д?sT n`xV]yLӓICK2Sf/L: ٮ!} Wyzu(/}=#̭-K@CvlwYJ8Si?n0= r*ij"""rjl5{(}CÇkb#VW/e㇋yK*2r`cb5- /d <0#g?5*?',s ;yY%"""oEyzic_,WڎwneJοv]?a\l ~VMj|GL>)|Jl[˔i9w]&ybAf4cj*ԈT+?`_K/;E!xXfmA /85h<cR&OsKS mFk,5Y}a'$*H,XJ#(K7q/oks<Nx[ob8݉-D]HrSտ#-C{dDDD #ӖU+D\.9l}#m J{"""rY%$$TN\t?`!/B}ds||E: JTE΀Gfኧ>>ADD2 M XR,p?,F}#*tLW<;M6rp:)و\W魨J̯H+ Z<?$""rV@U]q 6"""0lDDDa(؈P`#"""CFDDD8 q 6"""0lDDDa(؈p`c% F.]n[_U]~čU]mO׶w0zh(|:UuY%3ٹ#d^vdem˦rb]7~kٴ'47uƨ1DDD*O28v*4<0 zS;FNt CiV^Rf ۖpF lVvP~8T)kqq=<[xf`Ud:^󞢋T/Ul3hP/"Klr9Q+:.[DUyqc3b:(;7;rұkL"""E,6xybsNov;:.k[_:GG~&v0wF~KrK>Ļks()|k%<2Ύqz;w9|m֏^OTg)o͈}dҠ;NG'q[IXB0cp·e58j%ɗ:05_E3xz $RځsB 'cSmؼ>e&O<:B7`NDBR8};Rb;P,>M}N/Ko(>e&Cb`HC>efdո.1l&fb'sr]-MY2ARr%DR 2oY`Ձ1^䅱ȼ]YPDD?n? }sUj{͎y偙fj,W y},5f~ώbA@4=bdφ-Ω>o[ 5ǂ+6fb%-hآ :5ٻ(ʽM$!$zQXP"QxrP96TQDA݃ AR顓@fyPJʆE=K{z0]MnjglNj<{\6'9fLQ4~ J=z/~"Ww%fAbhf$(EDDB0؜$৤Bcz)lzyp| >?-̺+# n7`PDž!33L w2٣HiEDD?8pg ŋ/8ٛ5z+ 版zvs]]@,""RIjnZY+k덁{Şw +Q-X/䷯c#""Ri>珟ay},fOXc_NJ3# J0t؋JKx6jvVd'(L;JjEMV6EV@_|[sg57f#ع>鿱bN -zIj1k/N[G R9SY4y~ iE@,9Yb)_ɵPKFDD\/ bł5sF üX8i~a oDBXF.?Bϔ,&P+;MM-Bksp|w(g01١ j[EDD*c-׉#{ʹPY7)[ׅW=vMj78\6'*<K~'Khtkw+2,_/Xol J͆/85BoBsٝp{߸ % xJ(٫O.GW% oz*8ضq%%-"""SQG[Uu"""rDDDm(؈P`#"""nCFDDD܆ q 6"""6lDDDm(؈P`#"""n=i=Fu}fFGUWu9A\wG(bDDD.b83< q׎&/׋v>q'UlҲiX/_-`c.IgyQX+y%\ -еKYBDDjUIq:RC Ng3:uFK^`8ƌbv},ЃCr![dԧ<`,WxycvH#3ׁGp4ͻ½#Ru)oo;Lg '_o/FWQ {2fB2|(~"Ww%fArvL'Dt 6kJv7 Mʼch`f$(b js QӍ{n0leg5l8ޜA񲓺eOaK8J33cRv>Y&ąs1fj&ژkzsjA>?BO# n7`P IҟQiXB&{s!{"2e4-_]#ۇ7gzֈ]:rډ&/=i絟[X)i[R3W^| A1X6g>Ǵ{=6"U~ 1$$ UmAF Xqfbflߝ]كs$瘳z']A6βlY 3q,>S;]U= 牏z%"""F>yiH={kJ}nK ||1cNiZ3.0F3{S]b<Z6O=3׆S 'S h(O83߸+̟=X8&Ă,9yh1O=:XkGwT3Ulj `ce>y82bk3۫xwrV?ãh! !hE#v.41e8 /=J݃O~=B0)/3YL.V|wǎ3eΗ̝^H\OP&v`/cijC>X|Hcr5q!bccS9""""EvMjSwE]L;9Y6%EC _7=\̵@/ylK`/aN{yrfT]!yXgOe YՏl~&3up7I"".$NPj6iaDP;,l{Rú¸aZ+8,Eaج,1 xi>b~07ogρ42sxGӼ-;+ZDZ [{ Y?y?eI iyհ'c&$ηh'ruXbĮ//gtAD7̐o㪸nw3)̛::מ;YjDDګ6ؼ0yu1ݸ 3k^pVv_Æ</;[V0D3$1Y?1c?&ngnHC[mB\8ʛ<4ހC+x&KzDbmb{ uf&Zr^!+ ÷=},iXTS&lظB퍠8.,r[K\߯WQ9gVb$ZYٛ ї)Sor>i7w> 5CvҭI/F79KOy7CpƖ.̕Wv Sm{.Xw]73aq=BhxYogmkjFDD*?20yC`H=0yZd%l&f~Iܕ=H*o0,1MI 1gN2} Sl2`8I;n֐7S/<3<٥[ED$üTjv;v;餛!vp 0iocw27,kɨ^(h'>deq| A^؜eG'0ŵ O-ilMSVrWnkxV/""U>csR払ܣ'`ڰ>Qd 0@ uw%w?734K^ǤYX`E?'9-GgӼ:Y)?IR-! 5N<8!338qn#"""rT`s..%(_ wnfs-!4csr6V z1l\2Wxgu~?AfQRO)p6 dzwlE$$F{2ؔЮk֣e` ~]/9'_tk6r<^Tb[PsllX*t7BĊż7lL=37{a_r7һ{3|яe<.عK^ usd~!)6#OZHmЮoCx-g̩DnArO^Bw67'q,&>os>KӽnJMls'GpYyU;m9QHsU!hE#v.41􃻙k/X(9v">QF̼g1Zi0;Δ9_2wRlxBxB"qR|f*V;G܍<2OGӲC{+׈H5cr5q!bccS9""""EvMjSwE]L;9Y6%EC _7=\̵@/ylK`/aN{yrfT]!yX<Ƿg {y2*cM"""JM~ͳ'kUV6=aya0yWny_}¢XFlVv4~XV\w"z|;k6Xb PJM b"*qReаnXpxFH"<+΋JUyDв[)/[4I hWY+UllRC 6[3:qb:u7wQW/΁1v ' BNɨOyfX&9Ffhw{Gt_8Sxkv|D7#O'4I_^y}!#< d̄d-QD<K^3o18N5frm\הn&A<>ySRRϐwg}n$8MRt/'a$z2[ٷ~ 7gPbnYyά$g ƌԺ!Fl qtf6ߜdϏS.C ~1Աw@mGT F& Pgf2M%K9}-تYt0JM\DD܌[\< `qI'f)^Zj~^߅Qd 0@ uw%w?734K^ǤYX`E?'9-GgӼ:Y)?IROth܎!dXDD* 6õ8(_ wnfs-!4csr6{9`P2K Lnُ'(L;J)%y!tLhDH|OG [q&r(,""*9INnAϱWTi}u"V,uecB=ٜY klnj}ݛk'5Š͈~,q_ڇLC#KIq$Řx-Bnv}k9+gN%p "8v{ڵg~RavvYkX]JSu"ٳ? O6#y!+w-a#8<py ^hwd~nЅ9&>d8 /=J݃O~=B0)/3YL.V|wǎ3eΗ̝^H\~RC1i>T #ǖ[ #{){njՎ({SBEvrl8J~AT˧\̵@/ylKP5NbGaɋmCDD*olRf 65T #ϖW>TGU c4~X#TZ+֪ADD܆ L]|IˮciV4#?~ԷÎ%o- ycvH#3ׁGp4ͻ½#Rd?^1^/)YXC:NA ήdXM>|쬛4} IDATٔJM?3'`g梍r|+ueQ$l|//gtAD7̐o835<'>5a(d˾L8xHͲlPMH˹Gκ3I_^y}!#< d̄d/EDb`i)iv Uˑ,-$ۂ_Gt=bu o|qSrS]ٷ~ 7gPbnYyά$u y;0e3C˱vR~I ֟?]sIb|seO l /[I>;_G0|d"jХ?=16Lx܇:3iyb[[pˈAx'|4IV%ҳ@CʪwŎ빎Gi%f򸙬7&#})"" ?ǝ1e<#\ʁ~$zW'86&. Zj~ Qyf*LOFа(k;N6{;,Zg`q==W1Wh|Z׬]6M$}fR\<~jύמ&/=i絟[X)iZ[p WZ+ɭ.a,?Gg }<ே>p{9Gp c 6>v'sf?y;""r(~ TV` 5XƗڑH` 'ǎ$pdA*}W71ܲut~vZSfg|?F!n'fv 64tQv}qWrs]g a V`_H`sB5\޶20 0v%$u ~wu9Ҝv -L_M@e W%EvOs}م{8qG^WIwekz3&w߈a-rgP2nWTξAm[eM0~Ԫ/xx׌]Y:~k;6~쉃%\p\K Gb ydtjMBoF9lG1,5qx=K~GNAéXix >\lP]iRƻZ! rT" ϊcg }+=yѾPP/;G6.|jc֨})"" ,$M;!*FXj~0_~+@3nYwePwY4{~ ً;Δ9_2wRlxBxB"qy #&ҟ@(B=ʮ̵qx,^z h({`/ED:0rl}!bccS9rn{])c|{;:rH5{njՎ(WEeQR4 r\[9c?^P#""nE3ӿ/CInՉ')#ּ:o^Hp\[=q777SQ՝#mY^РE!+YDD܌NE#0.i"""r}`#"""nCFDDD܆ q 6"""6lDDDm(؈P`#"""nCFDDD܆ q 6"""6lDDDm(؈P`#"""nCFDDD܆ q 6"""6lDDDm(؈P`#"""nCFDDD܆ q 6"""6lDDDm(؈P`#"""nCFDDD܆ q 6"""6lDDDmxKSS*w q 6"""6[YG:_Vr-_`#"""R]T q 6"""6lDDDm(؈P`#"""nCFDDD܆ q+f~f`B'QE4^/EWEV+R<3OƫÙ296r3Si KY><\_BUg}z8dwYL)|+epVH~}"hI.3-K"#%S}ذ])j7 '/7Giˉ\*ljNJso}nvI#j1\ܓΆ <.Kjʧ-}zcj΋xEDp= Fz޼5U=i_3"nϰ3P"kl4wpy4nޝ۰sf{*(wG.-w|g̚m;Bg0щ>4޽Nh%ьYԘ߿K=M2~g, $A7PZ_WsJv HTbFz@[Ĭ;I9Ff\޷eʟ@fP,=sS]7nW:ԨK^ùs`s&l_}G(}O&Vӹے[5(7qN)ƺm,+mJ{ؚ5wd,x$xw>{~7)XBhYN~I\{v0^JI)v>ji4y{ݾ?ʼ1r"RTZ4;Qha5I&-G W3c9yuOI/32wϭ I]ϲE/l^zzz6GӁ^C![mjXj̬~$FQsjߡWF`̒.f>ļ6&voZ˦f ~#ўn!LBvU:4̜o0MƎ_N^ .xE&vu G_dYVMgokcb[ғ?/^vҶ~ok#r>֮lٵƵGoObw/sk0zp8|v!\=vWZ\I^:>Ćmv:,X$4oP#"R / อ'^hp4!->=¡rۚg> Q7>ˌۛ<98q/<;>reg+upd%I=c.eС?.}}G㫹ߺ3&'f3zANX;)#'8&99ݛIO 'ٖxylVNiKV\窢O*3.vuO,n o5.Z5Ⱥ^o6Rڕm<3ٸ{ڐ:^qbVp~Y}Xhp>='BzFfJTYZJbW{rfVZh&me *1>DDZ^TXhR0i}w}xB _+ghe!Ql'o4ukBzq+w\z9FIH8.$8krue8>Kaή>mt͹G\;76^~eYm2йG֮e mEp]/"SMOEEi9jN,F6iWLά 2M!Aգ!Ada ?ÆA37F@;~>gχO{Mqm$_ݐ3:5\?ͷd[$YR 7>>`=tۀB++L=< ޣ!&tqcvż-Jk?W; mLHq\;l *g[nFmw|m0<">}ODkl²4agGmF`0AILLB:h8IAxF@ dܟy\rM *'·^gF<ى{ײ`Lޝ2mv7kC_ׅ6O_Q_wqoװ3CBձ/zlo+bda~o۝NW ?buGT[zWΣy'5hU`U~㰢k09WEXFIuLz[%x#H_k5ZK\m_=9~z/k}{#oʵ-QJ)m<HcߝG q91ثձڼԅm4ch&˥q)=OPy,S¯k}'Ѫ٫`cߑ*>9؟^弓{4K-^Ծ */ԁ 8hz ?eY\ ,[fSXzg\5H_;i,ޛ>޴ޑګ1QotnH[Pp7?>DD| !^vR >4uJeYZ7sq~[!\?˟FubK;@njTukykruAcm .{ _p q e)=Dfua"^Ii{ ޻-~5[?F-uy>թ4FIwwqHhk|:7urTco)Ӈ+A@y?a̘9gIR<<_8 y;QWqCǙWL/jP3>Aya|4[yvxU?15:WX^5{$lS{Blܹur}oԕ9Bnc漽%oPu[&>}~t%~fj-e9/fgn!?Jq: %"՚c; x,M[%"8+'G0DW`#"neǚqiڅ'&>8MDl΃psp\57(ԈE@36"""6-q 6"""6lDDDm(؈P`#"""nCFDDD܆ q 6"""6lDDDm(؈P L8Z*?3_*OpE3""R)*lrrڗ]ٵ/ bC,yl]꼬em~~}\āҒ'm7߷8a7.dsT4>j#~8#ﻎ\R|+ogVhO^neZ,,ϊv藈KUOyy&y<.T; l4!""Tr`wuB h>b5XLg҅|V[%^ugYT 6Uưb묊DDDb 69,?3}R?b,&~3c{Ѡwg(O{*X3~WOݏNŸ[nWFMydX:xp7ͼ/N3+Ι`փ]sk|R׳l<3EOe|n FRnon~X|3\uZ5^ʶ4&6lӹ')[ٚIBFxDD"qe#y, Їo$z}/?E#dzܪ&F}yhwy Κqcͤ'm Jɶn=et\u]Ӊ;xvkSZXd2D \YYFC0 w&^}zO{5*7/g$?fmhỚ܎ed}4Ā\t.XP#5&86\̓kbc }GZۯ;cLLb.X $$`ŎL_6i%0l&f&~aRsWyAh͆S鿱9 +-e*Õ:3^ʶmڇ#kײMqƶub;glv}xBHa34gw%𘲆 $z[Ol˩SL+uA 9{GYdnhHvI ڜY->>>̬ 2M!gy $3q,1 .}&Õ:=}[viz`mMyDvkM1UDD.B}zd']˂Y3yw؂e L'`BGhuWX] |O ))RyGHqeB@p`wP`%ޮagCrO66 &0I?I_:IAxpr9'qR]^Yx\NbkseMDMTԓP[Am~}P K*ҏg42\ ۙr>'4 ]O.Wž ٚfMݫp&v]IU]FN7TXUƨCn0WIDATOP$7P6jc$n֫#:JHɷǴRCF;8_ SW>_N){.Gm TL?_g Ulъ-hxOXۏr,E3֟sW7Yҧ;*SfmZ ܣU-֮݇ե+<3_QLz 999ܧ>diU^}{-Y\4 u Ug0n_v (omjԇo9[ _Ԉד":W::,$aX]CO{wtL3 z?fRSQSA{`A cl16` 0`A cl1 lbIENDB`DarkRadiant-2.14.0/doc/img/FilterEditor.png000066400000000000000000001103051413722237400204120ustar00rootroot00000000000000PNG  IHDR2@VSSsBIT|dtEXtSoftwaregnome-screenshot> IDATxwx^tBw`1^w;q\Il_8%ƽ- l齚B &qty=σngwngg3;kI ƛԦM۶6a """""Ҍem۶-[n}ڴ~afSODDDDDdl6eƍ= c칫;v%"""""l޸qy6o\\\BSGDDDDD$~gS#"""""$>>>ԅi(2""դJZ|^|,GS@DDIwy2O-WvcXe|!1^ΉoUΌwoRo9U^3g\33pJ4h{ dDD ^[$6Z|=knx_q>A2v|`q})UV|+Yty ]}r8~8d4 TԪf[yHsX>@`۶c߶׌YT_p}fcRDD;=<i~ΜrdmOo?7I\ܞJׄhzLVY۞ǷV~)""͑cr}1́ߥҋfȈVts%vI3CqX`Tykzbv1iPZk(+˳af dDD$Vm㳩?$356*fM愛ov7!#JOݏpMy.dŶJ" m]yTM⒳~52~qΜp2Jx[.{Ѯ-o9s61m2""G yk&WV4[%سHs^uY }}ņ(ac]M dE|j&m2*5Yȡ\zC+V݃eY8["f.p:VR #"r {~ Ϧ[6e-^Rr\tT"6Ӽ<ϿM۲닣셉y|/&@.x0 Pl0빰'bY,ӝ;Oc7pf;0""MVRS6ݻZۿ%$m+9$d!۳SN'0K–֛k~9qyXTus=܍`cll#k #ԁ-d:s3kvF up`$'NvzX'%2"";Ntٛj#1Aυwa|*_›\GաBDD-w/{- >= {7_$@FDa$$`@Qy&dF=fD3ލ3z)]UAED=p[eZs/,78]b^=ڶ#։-ll.Xw3qd6qQ@ǀrXX=; T_zĻNO' 䋈Aex8gƱr5""-Z݃aQ=2"""""k4LDDDDDb9 dDDDDD$(@FDDDDDb9WEDDDD$GFDDDDDb9 dDDDDD$(@FDDDDDb9 dDDDDD$(@FDDDDDb9 dDDDDD$(@FDDDDDb9 dDDDDD$G ? YrYrŋ, 7V1EDDDDD~q=2K`K@""""""r`Cˬ0[xXFDDDDDo,ge`l l[K IS._#XEzU>[-V'grB:&3>r;xDf)N'r50U=i~G޶X7udRêMW1#sWݫi.&@?`V e[soX@8`-S_cYyIr) Tz0TD""""" dApϹtrAł7xzR>{26Zt+zE[߹f@6)vM=&/nYS8{{θLxfFcTX@x 8܈֣w杧nadY4KyDDDDD$2w׋u,xuI={T6P3 T3*/̄Sĥmn;צ}C;ѡK z*RlB͋qDMǧ%0m!L4LDDDDrqt~=fϯvU0o1!Ͳ0e$ lѓ* " Xe5=3VUm`Ain<¯o:dG _m ~~.Bs˫eQkvILDF;FxvO""""""~y'pج6hXOJz.8QG ^fLxdͬY6oK9,5N .O0bGAQZ̊OtżasϜN`>o;rv⎑Ch>M#꼮;ڞ^ ZUWv$ձ7Cv%:g Z'v'=Čҕ = #""""rX2jlEDDDDDbJȈ dDDDDD$(@FDDDDDb9 dDDDDD$(@FDDDDDb9C:Hq@IJC4carHk=V)(m=. 8YH3gY90 Z2ť~ڶJ!%1`g%"""""10l/hp sП L=Ġd@lz=,KDDDDDd د5kĜC2kY}N,|.HP2{t;D󬉈4O d`3ɴ"""""R?#`;"{h#5˔Y)L0Y2Si]-V./0fV#"""""{j@HIN6rn XCSJDDDDD&dl.;nBAi{hk;M4VYS ̨`Kh״Y]2qd*C 0wARR)KK83B ;o ^x$ ½sA-28-*x|ַiA|8r~~N#B2b/K*28b;,SGSJPvV6vHal%e{ <[CXNDBa﬉~>qee.^  Iq8"E~GR8aT6y)>,Y.u`vſio6m Σpn< aviwX(ѦqVZ2TyɈN)\N<%85TQSR*@aB"vm~Wʝ/.]߽R8sT I6R? m@G?qp)\zj* Xx#VѷdK.ׂ^g>g#u*sAU?0;~O#UՁ(l*Vu.?q(bg쯻qOB!W^tƇEiWn{Ǵ EDDDD$(D%7⛦.4 Mi( -s0p19`eaF;职iwB9Tx@&#-W3#"""""@MOLydA!&:DqY5`FDDDDD0 WT7@FDDDDD1i29 dDDDDD$(@FDDDDDb9 dDDDDD$(plBH3<3/v;WBnzs=.4kg??nꐅ#>mrќp:$ ۤ%w&* 5@"""""rُśײq{@ӌf>_[zVTDDDDD -ǽ͵''ްl؂te?pgѥGwۺ4 ?ga6\@Rd>]0*9?%w*]ofsuL"uDPs^{k"Kc *9,Ji(l/;r"""""lP ÁsaBA9/pߐ(`|F$ፇボ05)Bl߄F/"""""Ձ2f_U%%<~m&盀In{'zmG|݅ ?n%Xw<} l!־#4inz?=n{;}bv?@"i>s"@mxiEI +u[M>ogq>(JDDDDDFe;_ ˲v~VE`_5ݖG!" qoOaSXm.?1_ƙ~_IDDDDD d.'Ng93qvǝֲv:4'qNJ,Z}CƎŒ5OR2Iukq}zNHRό耦_HdUrn;YɂWڇ-iʎAam.I|X-?F~˰eƄx{J6n̚e@h s,d}U"}]ݗ&zq{sMcV.fqbdrb&#bk>ڣgp3((Fmr9;FU4^~=6EvݜEwzfx&"""""S]'OEwx]0sy,GIe3;ݤdא W;\,ur<ړnu;O[M]|ÿǯnp#?r" lOf +`^A c'?su w^ikͅOMG5,Ep>t1/o>Wy5ZU(C9s\Zg"ը?}JgQ%-coypa>E&`GԢgB5~(4t:|_\SbͧsjNnh"r /y/}ba|cš+𲷹|}\8kgON4 W[6'4'7bXxmp?YmUEyq+Ht:~wʬfnˏݱb6d۷_2kas' ( F8}9,|zOֲ>})6]hvLٜS@7tp2Wt֪d'/f*ߏU{vk0BѢڗL_ߕA's 3M[C䩷Y7hqMDHbȰ> ,aa~%Gdb`a,:RP'+¢[k IDAT> UQ ).k,z`}1ܰAbKiyH>mفx,{ XU{-zu#V[y+6S^ƌ(߶I/>ŃU^۞) |l؎/αK`y%a68kHtB+M Q7FnY=[2%-YOs/­CY;yvN60 a::p] %o}>oGv'1=q1g~ &-a{lCcV[oO?Fx0KBta}SiȆ˹sKv7cgz__}|FXOdPPmau{/(NYosI>O*jME#ӰLb>|FV\o8IV%`yǸap6~C.^Nd=>1` o<<[Nsn#x &n Y7ElIL5VORR0 Ϳ_XX|TzM, \ ;ZLf|Żj ǘΉ$奲Gbɷxꥉ\|奔q{]07fƖ0aء ;ֻܟ2Hv%7w)Hb^i|ұ`08,|!~}lm0<ӑ^gǎI傹,%F}9B NA#Ɩ)Y})qOY5g~6QdZ;!Wq3^Y?7߳0TF~鞉$؀*Uol 141q"Sb ڵDyHQ?CTgF i/`]M[2,~?s= ٖFv#FVLll"/gA^V>H,4W?.a{3?2i?&&Yd=£ҵۙ݃_6m Fms\hKJ!ـ[X>97 uLj37Y诹kLGrp,1H=~#R0lZI11pC7G+P–uY˿-5AW[-2 铙9YW}U F'뛀ac<3[@?X>V/ Zt $NcqT..~~͔F<)I✻r aùشe#+`IʪZ^LgZj}0gedE`틽mm/2M}'!͛w(uk`wʸ fr̮2HNM&rb\EQ\z(JxvZ.tG1cTCsxyG*xⱴLRnp 7&vfrgL|5FccZ8{E, gNy/0L{_±(~vmuĉltm闸gysF+tY^=zZW.: s*QFpb<\sw)}9qЁ_22\^q0Մ٩E.cߧSe 3v%'|O??Eކv&9q#J⋉TΙpF$c?كnHΆx~^dKU׎ M'in*}7 3g~ܘw*8il FR ɆIIa)&iuM0<u>-tr bU>o5v񗇯>I ;ԗaúnA˱S#="u{>w#̀eΏZ`λ_:8jp_ 0+3uQ5 m_ ҆ӏ^iڒɤםԮUiάL%~߿οwgs(H;A]ll5n M ~<:vx08UUU¢jfmnB+ ᖜpǀ_WBS_JЋ"Ċ*nYg5J9G!,U],'?_αŸFvY|}A/zȀ/p˽SX7 JM9 XQkΧ{Ǵ|Dyv.aʼnWsyLbUSӦ_DD8V_DuHˍ#c8k,33HtO/߼1 wJ :B#(62GFJ|=n;nEãᢩiS/""G#q?f\ HG>nl}w?vw׻h. -kԕ/ " " "" 2k@FDDDDDb9 dDDDDD$Yv0V" " "ӛr(GFDDDDDb9e7H,0ZWQ feY{q.";#b%>3M0 3k}2""""rDq:lNlb29 d6M]iv:pj>9 썱!AND$ j*d cNoͫ&;'֚F'Vaq[d}hl ۆ7N$9&k%Y"oG32)mfx2lLS{„`}%;-3pt""rds39e wtȑ쑱'qi|28ۂK[w ;}$2cדOq7I'""/SDDxMj0p`>~`E~Ř"WÂHSADD:H31-!;t v G^ cw1V L攣b-4#-'qPZbOe0@UGt.G;IN?52Ƕ/[rvL[0* Zښa%u{u[Ww &s \ȍ DdqELWו{3n#!@ 6ZX{Dcɠu[7WIn -2e/V{bmT Wf2wN /*)xakxS"_[$Er3rYzt\/NQdpO.cM=ipT x.|w dlx (X|  D-c \kf =_P:a hm.29662Np8* w-nങ CNui v=X~?3dv {8?Kj/z?3 (.QA,`ȱIN5e"KWU(do;'vx5gqTUڋo\c]Lز-thH}+h !`ˆ˲c#1m$nP6om|{_7r6ʅɢ5~8.uqkmv x;̨%sPGgIvo6jnYj^)sJK~ 2^[߲"GzV!1ގ 0l;wt+-v^r |z5ftDeucϑ Iw$PZ;!rʛxQ5EgMdEQE1jҚN֝c|[V},"9D,ji]wv,FhUXUfAea5; QӏEUl;iE2 :LjD.Ee5 iо=7 V8U[KqtrD3o7Y`i^x/V ұKeoD/c)cGǙ !6*ݢxc)jC]C':"?*X9N7i&Lr$NK 3q7v!c8 R9NlRǁ#7Gaunkh"a12aьԕS%sf/YeZe3sĽٙ&@~ =ͩ䧐EQÅGykSaÎI%?)@ANvĜWE)x]ѺRrPt.祭!gvN'ϳ*?C*nh:9 D+y+k'l|m)nlC)~Mc K6 ǖ%y=RnQ\e^ՙV֤ptSWw&P^[K{8iEE>69ŲeLNO帾n&-+o\5qcG()oa8 Zdy8[bb^_֞iZgVm QvspH?;Mw6ʪ{9&dY#S~)Cjk}!F I%~9~~i\'">xy`f!͂ʸk/eM]9HbC#desyqVIDR텕d4|B=: S':'p-MOĈ\}ͷ?a4kf?9"Fș3'l0f|F|8"I#900 *|>Ou{VDDD V @m\ÖC-A0UˉX wj EͣP # ч!"/si-R t蛊s `QyA`]z7.""""" f 1mtg l>;^7)f ڵ#mV m䧕[^tzlۅ>ڐl%S1 vHUSg&hN:=Vm%"dZv]q뗱|K^?AN"mgzwoIb3x^ȈP0xu",`ݖ_^_` W2}j Mv Tm\7QetR K PX 8-` YG%g䭘ϜFfRUGQ ={tɴQvSl-gR #""""8Ĺ[ӵM[) lXٝGPMpayٴb U ~ҁ}1r@6FZV<)(ډBDˬx M+Maڡl(޸F4,pKtԉ儣2<YŲd˲%05TSrHI$ 4B H!$0š 06dKVJ;%ds].[3Og3e_p #I$uZH2 AɰA.ffZ.d~e$H$%\R VTA~y9}!aY(HjEa@V?Ũ]u!@U+֒*(e`^@ظU!䓢EyJvIng&\n}={H$I"LA_LQR0_IX$I.e ɦ&R@,J{k9˪GR]U-,%/0Dus^9[U-֛dn[  Im$$݇/s{.ޕvIyAI$ Bf@%Kk-SKd{ľ[e`#+;VSE'Xa6[$DcddffL$IfDX}f eH%J^(x^BKѐL7Ėy4`;u$c>+ںZ+3tНY$Iт (_rbWOjKoRԖ?sa\? I|_6pY6϶,?W?e$yV=j٪j{gwz=gd$I.Tdti}$I(X@AnfOWC;K$I$EAF$IRd$I$EAF$IRd$I$EO-$I%R[%{_:VL$I(Iduqa'8l/-$I%e dܒI$QCn"}I$Ic$I9I$Ic$I9I$Ic$I9I$I H$Iz.>3p>ĶyIHyzVGNaba_mBz>% NFf6}(-°>1H$IFÐsX8@l?0Acc2!͍ $)dA)\ٯ/fނQt(3z:pu?/-$I6hl) T*`錐汴) 6y̰C5f|Hxͥ4qFF$I TaC<ޗ[*;g" C a|ޝe 2rW> (@o? 8}OYϾȜ^{q!dZ_1/bźF*tXY%baHq~(WD&ZK 2ljgGu/́'OY<~; ;%׿q<6ʨ^T|8wWQ]HSs 3FźwVI$U) lFJ>\XqYҏXؐ̈́V/fyX 75WP@>%E$ײja _aHx_:Q'2:[ۅKE +W7thYǚEk֑JUrC[\zѷ]Ս 7{gLisYkH;+d$IZ55%! 3g #Yaa- 篂IfEX˂RkF a8b?`'^ԗV\'UXK>%jZDm0=d<# bث?T_De؅ Ӌ^AH}]ҭk"b TTԭkj+ZhvjVW4ѷ֪@]C6l(=Kc,^T[$I@H2 AɰA.ffZ.d~e$H$%$X*//O0$ !k@IVh&ebԮXź ɪkI20/ l\ʪRIBsKŌ=h?JR l}2Ǡy ACfxM /Ma5 wdlvU!^k27^{Y͐F2$퉏/\D)ZXr9KW/AmVF'SVYKYkc Jʊiy})+2s@iVLI$ lbfWCd006;aМd3C1k0ы!8p c@xC 2idn2Ld3{1g-)[@YTSǶ l2J>|s-122+,b~CQ^HV-He]MRc@%蟱ե ̢v~rr3$I6Z`%K\^Q~]*l}V[ h}rj؃ ▐!dv3]vl]'mS,6yC wvl32$IRhoO[Al'˶:ׁI[ mQ[ʛ%I$EAF$IRd$I$EAF$IRd$I$EAF$IRd$IG{%#po: #I=J"0jIĻI|!$I(9'k2 X*ss2AF$I{x, 7e$I" #I$)r 2$I" #I$)r 2$I"ǧI$ilNfBc ';A^d$:?b$IeyE-Y ԇ ÐU^2I$QZWkaAЯ8.o$I% CCn"._g$I9I$Ic$I9I$Ic$I9I$)BRU,]VI+ 2$IRTksOcMמZ H$IOͼsP !IbދC;Ӧ0v:ռȟp_:kٝ/r䌌$IUVP˙_ W|b?5yk.V #c[+h2H$I;Sf9to8><{Fqr˸h # #I$R9_~{&yGp ט5;_*p(M?;6Nz4t'uWw\DW=xi$IQ'\o&@Ⱥ~׾s/3r傯7 iv_'14暫_>xW}8##I$x@R^gY1> 8 *~g^:SQv'۸BѺqZpFF$I kgܐư&yk0ʹ|PNw;؍3$Iղ| S1Ku [W9ޭ>MuME[8ul-}o1H$I\-?* N>Ȥ ?*~L-/ )Z'F0aYwe$Iv&O%ZzzS[X3IJzpmL= %IsRVbuA&uwco;Wjkk(,,ܙEH$IUVVm{yILJPPy#!Y2h+ ̟[/>[MTEĨ|{_[LU?E抗3o1w4->9~pPœNg$Id*g=3?_Wݹ Ms.[_:6 9C䈱 xz^5&ACs H1k{f9x~ :}FwygxY۟1c`ݝA&ߩ#Xb9CݙEH$I-Xm.`-߅5R{f^m<<$II$Ic$I9I$Ic$I9I$Ic$I9I$Q w0 v #I=JNvU!*jNti%I$ET^c:L {ui}$I(zA^Z&I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I" #I$)r 2$I"'+ Y`(F$I"{$I^Z&I$)r 2$I" #I$)r 2$I" #I$)r 2$I"GLXŲeU${Nvj57ؼ36FZ>eztKLi;+[Ǯn|QxM;ٺ ;y_9mvcY۪|O](RݽݩS^$}%g3ͼ UlsnŅ,k{VcT| dwOŴ; ; TG]{*?oo<6ozy/M9qfVg:ϯ|{Q$powp*}n}37zxf+[|]}4y0#}_TG zov:w 8K9}{m7;=U48pq쐬Q=:[V;K+N;ScPƽ: t{j c$mݲxy,Z^xghgZ2]KWӒ;`;xt\f5o?~W>\Ms@r&3a9۷~+[)]8w|p\5Ӿ96poY]쿎t}w$I 2Fj֬eMƆij蝓~1ѧZCUNy<߿WOaIs`g=}w]uO "N_}Wϟ5(zmnvqb/kͲ9SŒ(ld/31ּ˴fS~빌MUte%Y<_̨;A9)|""7]{2~n2NHs7sO_!xg0rO~Kdk̬ȧ9$~ձu.؄|FM9ST~n0qA5oo~UÏ F-fWMםDQ{ףyA3S&$Ff;dk ?I._:t}w$I 25/s_1Oi+!8uVH-⾻l*7^{>㲀⿹0 ׺X>r'[o?Zn 7I-5z\f1Sq|*1._ǰoR.vNo2yrkY'rk)\yh.GOs;җN?n3r:<{1:2ᄏԄ2b^ zo C,YuOŽoTz8-+}8 I{y\{\qgV[C>AMMM4%s7`|g!S+l;n_Z@Uڏ C7|P]3v-+Aٱ'N5o1wε!|w =0vA> Vu;8|F޴NmʜsCyc7>b-c8  73ޣ*ԒX76pŻ\^ksK>mIw﮿+$Iѽ32bF/tVu [Wpڟ.o$55!x9 ?o\T4>w0m)RT tޘu1r3OSgºV}(*jZhgN! !w^3< $Is6m+'̸^U  lWB@M:DP~}0Y5-RW+<,usȂS910wvK=6ղhYGU5?˖:ц7AO!Pvf®ߠqx!MARv!}6\I:-,h=c >\MS2BOm>cfL;ht;~}t~z~$I 2/* r) ׬b0c⠀筢 R3jaRǬݓ-۹z>~3ɼYH YXȑgIoeAA ӵq- IDATB*վJ 'w>$3"6Kc3UwhnoܔQDp 2?[!k^zjs{_|VߧA͓wvFȤKtwguH, ޯ{$ILC~yw?4OIG_g0ep@€/ʩ7EINe449.5bc?Agfё#铑d{՛`ަ:W~rJǔ'3wl- |-+&Q+Frb;->nY-<ȏfʄ~rO>2u3n?M |be| L#\5|dr|w. 16x.T'v8yqUL=r8YGE !]ƑG /<Ǜ%ryDny9+*ܱc3ikt}Wl~p9,#IR$L&?}!'.ySOȄ/Koíl:ѵ0˸2Sp%CAL>d%6A†:Vy'. 0;J.9zà|[k_>I]IB흾d[VPTNW˨(brg0v?umdjC@>r{_)FNA1'˘>;C;6ӹqSVy]O)?Ms&Ww C8c =z c[e| 8}{̃3ic}D瑟Hߜ*IRdu~=^X#$I$I" #I$)rL$IR8##I$)r 2$I"g 2!t5)ac˖UH$L<'X2?>t>wŽO>ǧze,L[Lyu_'=a%]{!);w8/YICFo&L=Q-N-Ώ.y˫iģ>kj~yTY~{㙔B(]CcF>#ke^ۮq:jGG˛Y> OEQĬo控>` e38e}X|on⎧hy[ ܬoخ53Ν<˳WP xͅTfnSI>|>\8ye[.b̎ژFyE+_˸[G_ ︌>25Αk[o6-\z|M\wb PxM\s|oOk?H?7[1Һ?~8|܁5L.)Eq*g?_WrƷӖ/kͲ9SŒ(m_vt߿WOaIs`g=}w]uO "N3Ōb/2ڜ/rӵ'3hm_-ZdטY9OseI*f=Ûm!o{AG0)ͨg 塗f&,?ay)jQN(GA:o3j:lC)o;S~c_Mc/P~z?۝!5oo~UÏ F-fWMםDzc)Ǜ$Ix ӞU5+GpǞ`"RNRze'p 9}3rşg?O-:ZwNcQ dJlu!>0J.^ Ƴw{%l.sk8Ϧor׎Բ/ѻl*7^{>㲀⿹0 Xɜrɭߖ#Wp塹l|vۋ~{'Ai%|CƖ2i,{"? kkb%pl'Z}qHohuZZ7\|xnݳw7d+؅~n̸O-e]4n8Q|Mumg,M&I>^v{dBjkj!'z,e˞s|BcO`j~ck'gM}V(?8ݱ'icwNM]i@P.`yϽwөC{c3>sCyc74c8 n5~I]0#. ٽ 18N0wM{ϲbWM쀰ro<87b]c Sdp]%Ua@aQo?m $wd(;K5z~+h<}".PS6X :sId:jREv9-c%2,IVf@XQO]}V>?# FOo ߹ZغAa''.A^>yT]GHN ݑ 9/>5-RW+<,+o_GHoya}UlJJ9 nYGU5u'ҋꪚ7F4 2H@N;نV˿{ǡ[_τltmա-Yߛ rq\I:-,hfc3Ǜ$I C{z|SIGm=ሓ8#ӲC6rrҡ{3qx7`}r) ׬bc⠐=Ŭ޺6>~\ΪfeۼuԎ,c7v?C( B*#ۭk-N!+1oU=$Im4MֆI|Wor(oL&dfeB]u!`x<o)]1^1 S<3(`p#ϯ328baOe9SWsQbqOeAS:>IVo7f3~h6ŇvЎzL]|ʏ8Q䤨XFO6]jL+g/S7,>shgc;IQy▿r']5O tr[i1OǹY|tHd$YަOЯ_⢃:نs? sEF0Kx=x;S>;l:܏;PgMX'{AUDFd:mL^\_/x}0q2 9q<ȫzʹjC %ߟ?gqOy{-uޏm7~]@~k'xOӜ;_UÐNv"#?1>$Iu;d}lle=7ny )og]$IҮS8EMzQZ\@nsO0#rW'I]8b-ԬOkɢO(9!;a@$I+xi$IjzI$Ic$I9q inlz5*-"Q1H4Bijt$i 2-Kgp`mܭ3R/\g\K_.\δYW;noc `-|qIɩĺ;|v~${$ȈO$mlYř XU_:ɇ?u6edHC]Cߔ-47P}ռv~${fd< ȎQ#7?w's7n9 &)17FU]Z.V~y6a%o?0OXe8갍inG5PQt4}sz;z%AaS>=d;--ۢ"*zWֳ~W슺e(] 4#OiI.%S/n߼Nr;Saoo]w~1mfq+ô_Nm&֮#(.$ce]ґRDɺoz_.#$85pCZ 6/]~f! pscMUJU)ޛbFx"\|:{m烙WM7Iy U?o+p0|>_^m I);w8/YICFo&L=Qnzy/M96m~~,Ws%GjP-n>^:Չ}fx,:ЫP&O9>AYo=n.$B;;(_^Osnmw\i}i˙I>|>\8ye[.dĜq54fS:.\g {ns_^Ec<?xxy,Z^xgتO*1؅Zğ-><Z}e||qpFH;O:e6{}1cQ aLvSy!~jsה3) i!EV=LjzG7V 3g#uSXH-Ώ.y˫iXh[<^{=}{mofZZWe|?ϸpTw|4L8s.L'.s~A q'W~a*sOoPƁ֛Okg^ޫx@~[mlP=O9I~Ze,f`^ bFxNi Iv|mړH/wx12`m)S&,?ay)j1%~u]YvbXmvW˜Oyker)\&,3+'sΠ,3IŬx_pu/~a-_`j9n-6iCv,پy=_?^9v>㜜n6ǑeC7i('Œl (6pm}6#֧mqG!f wVye0Z٘^5iC8N^ʞQ<}/s}-,M'.dGQ3ßNeG>熗bi+ÛȮO>,pxj1q-/`̈]gŦROS"9|aJ K]Lw;/}6Dwb!0M/eB).bq !u|Y..!N6̛]MG$10Qym~=;WˋJchcmq4>_IVӬBy!-\sz+\8n ML0|BXXWӵ6ں;+<&o7֍GVrӥku%Ȧ_PO`.n7ěH5sS 7#8ILҚ*6l=پ'3 zƻ"| ˾}[ Zq >57wq:93.氭(֕~.[ *cV10Gq1&'IDAT.w\^0B spQt\:$P$jsɃZlLBoP 9u7&oMUsbr\C4ns:!#"b 'Ҳ zF'>ߎ{dI9`7ьlk]˖]q)]Z9/d; [ں%Udel(v B ɮ˗wdqX!_]Mr̢:$'ށuh᝘#G]~`,.m<=ٸaw󔳊P8}ƍgX:&%ѹC,z?!U} *Fbpl Y^tN}~cW*hl<:M :un]ASc>)W+d:?[9T_-;IqV""r"^mW~}:qFHaŗ)I֩iZeӑ=eWp:_g9?2+v۫ 1wS".Ϩ+Xs~ 8؀2wHME'{(I-ye?Zdo76y4kRCa#H}E/q}i[% Y?dW%\Ž\M_kc@tt0m<:E_Fպ ]{hڮ9b~8d')>zu!gg"r> M&4FٶQUcVy'4Y+cGOu>n9sR ('gJurꟈX7'Os [%O9uNy OŝC-GqեE_gz#=(: GYqɘ76ֲ = dKDDDDDO'2DDDDDDBFDDDDD,GX 2"""""b9*dDDDDDrTȈ娐Q!#"""""BFDDDDD,GX 2"""""b9*dDDDDDrTȈ娐Q!#"""""BFDDDDD,GX 2"""""b9*dDDDDDrTȈ娐Q!#"""""BFDDDDD,GX 2"""""b9 ?efQ\Ri 1 /Mb]75+""""{ ':209c& /*y`U&vFFJJ*c]a8rU&vFi4MXבa^]*XםvFX 2"""""b9*dDDDDDrTȈ娐se!rҨk3J4|""""rr˧'|6 #&'/nQkbmeywz('(mS8.;GJ'ɣUdߠ xV~X{."eC4gew_ #=1[^6e\??ũBFDDDD).>¤<%$lVPO5O±gdהU0![uP!#""""Uў)^||`-c }ʖ9,_;sR{|+:@^q9q$})7NN2s!6_8qpci PNַҬOfkQT"OfQEFv΁5Os36.|7^ro6yMa/g7mf.>~w? eԛn7|c~8،0#M9ILm:_f䄫抡tkׄïeԿǀ^LZ3lDǢ4O!<ſ>LN΁%T#{kډú9^~L]hሼoa\׾_Э.ƿۯ$)ڢS>fg؀͛ȣ`Ugj?b{x晫I>qcxI$C}O}c't^ߑӦ|,Ġz2ĸAN]InkJE`6\5 7=E+&a" ѭ  [v?A€s8j{`RZZJiY0IZ`dmas2yWtmq3`҄{kWρ֍)~&|z*z {W""""PHxn㲞qwxŬٚE!(ryAݎAe`kG;} GYosof*/%Zv*|#hv1. Y}|^|}:4쟌ӫr8.MKtZ&c 2VzHsQ8,in N|?̓3_ !09IDb&8`Çıwrˠ/'2.0!x췄<%r`k_xogtUdᲴBFDDDDg缁4YZ@ʴ$4}K"xFv9[Y^lI$a2糥j~_kpjYQ,clS429FX zlt!^eJ|k&~ɀ~)m 4)?ʒ.岿bXYqdNͫjl &?=Sh,Yε+Xm)1CΡ{&5?Q>A" wo`R'?ƿV,)2G4%! ˘EшڟIB$DgcKX8{5f MZu v7C͙>g)ZN~Z/P eՌ6|D{Qs7g.ễ@d\OB 5/si(C2;#z[xSQXTYDDDDNa$]n۸nߣXob̩{ *dDDDDDrTȈ娐Q!#"""""BFDDDDD,GX ӈa~&.L0< b]w2""""/ ]Ki/*uSX;c+""""r{(.)v-Aݗ&u_UȈ22"""""b9*dDDDDDrTȈ娐Q!#"""""BFDDDDD,GX 2"""""b9*dDDDDDr%CN>IENDB`DarkRadiant-2.14.0/doc/img/GameSetupDialog.png000066400000000000000000000465721413722237400210460ustar00rootroot00000000000000PNG  IHDRPsBIT|dtEXtSoftwaregnome-screenshot> IDATxyxT}2W@eWAD\j*ֵV[[Vmk[wTDQ@}A[XÖ}Lf? $̄a{=g971{l6E!!Bq/'8sʸqz}>sRZzB!FAOmر_鍆Q[ZB!N+%/ɰB!4MF“B!|>_+!Bq%B PB!%B ]KW@!)6֡ߗRX/& OZP-YJ!?]Ng8ބ[Fː%CU͆-+%؎[g$,]? ⍢F(Jsph m-1`Ĭ(+̥0=) k3#Uٛx~J5yJ r{SrsQ- cMB()"JJkoeI$@ h2Z'hcURR6rJVrhcUxt#;Uz<Ni/HB\E<'O+U'%y葪ǕN67&$@ #:sYL`J5~-MGmܝ˩bʜZaQt݇=c RO߽&:9z4r7xKĘ{](b ! OT:9}3827pӻ3j@zun !pHAZ]d}9_6oo}a~v{)w}ClkHnI(g FR+.CzѻYnoؽg?ix oW֡ZQݾ} IeDg6A7wJP:vmb/~X ܜtvT!64&Xo>yY8` ".BrJs8%|͊MJgSڲV-NHiL~)s yP;2;ҥs / ]9̮cN05- !h߰\ ;ѣ_25]~)\ǸC+K&ďcͷq?Νp<QeIGW{2b>)+Q@!4}(AqX,+9Dgo`d8s[N€o`T\y,`?؋.s%۬`N)}hoP]WgUu&(,)VͮSXwۑ/ e~g?Ɔy,5"Q;rHWIe'#2$Rtgb]϶5GpkZJӡy^nmiG?r`RI#L3?˼.fϙi>lc}-ڗrucMuPP@ˍUBW]y<a|x:( TK4tʵ2^уGؽ{r|v!֩2y1B;E>9x3\b EE9s:;UOn 2œqP-%'8n6!F1"$т|ġ:zM&MrBf)ZƈcKЯۀn~xt2F<&CxB!Q-\4jLG'!BIB!́B!@ !BHB!D$@ !BHB!D$@ !BHrB!DJ!"@B!$J!"@B!$J!"@B!$J!"@B!$J!"@B!$J!"@B!$J!"@B!$J!"@3o/˿_#zSx:g0xp'QMo> lז[^|1Q3BqV#ͳxロJei6P}hB!ILx a L%DvfsUV t/&;Ger8txpSz|7>?^&Jzz)ޱJ|<q5B!Pފ|Ngml"5T'yL~_P4^ھ`;sܵ h;''nJX#syO5&{zO9>O.Kg$P g//[2L qQ)D!s?:itJ=V-j;' ?:Q*'}Ūѭ/&Hj1UB!%Z5wyY?}QshAƊ [](> :Ba6x8i`|a6ą_p(ϭK8=lί(Kgd)VَsKjL34F{ ǜIdOeXg Zu",6iwa۰s+g=ۏGQ5dN!hPS"O7(_6s-ZRZ!F P ^OT[)?#yq6j P,tӞTp.`HHEojN m{O T4ZB!J JOd ֱpړZ²#n=۠YK^F: 93`5/\߮&:;YVjgow L)2ROՇWՠ(!U -ZA";;oY:M*^zZtz]YB.grd'f5=yӰ 5)èdۖ#+;{Y4{%DХc?:ןx򏼿 !5b(Kxxr 70N\2%uoԱɚKlKߎk `?7RD [_uN h"\3`<ʪ1fwlPG043-(fSLFQM!-qAǧ0Gm2hv>u3c%b$m #/v0.kFtąTOV7ǐ1i/5SKd! ׀#F&]xB!D+ }!J0b̐OC ps0㛗_ ^{a2\!Q+ޙo=5n :IB!ĕGT}vʰZ“q㝓,KB!ĕNB!$+ !BHB!D$@ !BHB!D$@ !BQ=>8*='Bˋ(M:⢂Oj2ZDZPYI!UU)(a 5WY$B˖(DYpTz PJxB!eMQFOEr>YzB!hV/.B!ͥ):d!BIB!(!B`Rx~pxlE?u5Q ՠR)-Tucwt%Bɞw?%25hZN~wdZ.~p!\5]Rt0JU]'X.ʩzbu`j1 M# UwX~ 9I3997dbtnJЃ:.W,M\r,]z4Fڹxv9esJ)vᯮד1$L,B\6 :\wレ3Uk67^$e7]j ^>|'S?kV3sr6,Ѯ0ns<=#nEc'WxgCdGMʴa3st(qzqN;of'l 3L&O[BjL,.c!v/yk1&,SbAcV]Ǘ_.cB*1*&LQ)o^w.fƜ58^W>=VNͯVT$ev)Aq iW3){j%(br|\V(Ѕ\v`Z/~iz?Ϋg#+k Yi cHUaYf?.PBDF4]SI׌=󅋖1ob ꒕ݲ #1]1bk_9{nz+зǥD`oI6^}Y8@EAc"zdžatc2V~O=?M3㇣:"x*8Ggˌ?a/?~] |TQ "i$mcJ!Di,:]\ KOPdQ5FRyd|e1'S1ymBvXº%_ˬ<>Iz䤳?z(ށfgWl b]/GTg%+e17O `C[y;Yeg ՟.%ǐ΃O?="x,//PHttBny>h [n2,[sq%cLdc|d?Ͳ m o@ćځ%,=ޟ[X:k('w'R„b{u׏u} }g~]V~1}Qώ$Ng 32 .coRYkSnԓV*S0 " .v !F2t`ʯa}k&!e&^3>̵)n}z7yM`5cƿո=e9=<o@=C'>2L2'd'Ot:_<^&WJ ӈK)+^@8lХ &#؋bIɠ .p7uSE&VeOqۿn}F5t|8*A1l|a6w>+gIF4`{P02F/lDtgBNUEe)0f GXHV`o2H#SF]Y>N0Tk y?n><=-;?BϹٖ9=w4BM@%eG!Z>D||;_ؘ(L @ զalΪq;~xiAx9Vmm5kJ>m7 5Z@Vdw>V0j@1u1UcXkՂpbAuRBPT9Ǯ!$:SS8sxPnNS]XbOz4L@Iyz씻@g`]^gDИ:[L>Y|9Nn^Ͻ}۲qe<QU@Ai="pAf3 턅\2[Uڭ:s(A~5[a꽝!X J>t4+J6ϿeOx/ng )&4q*{#,{k}Qq4nwTt111IU(z#:iup, UPa֠Q°VX[l>ۧpU;KC9urogLI]xbRYAKP *=44ݹS'ŌFP _-?\Zm25~Ss[BV,""kկ%u6I\_Gb^`?P@$c"Bƒd{ SnH72:%#耇N̉#xÇƙT6'U,h{r] :Nb;7N|ґI +R|W*!7Cd$;s1krY:Bžoo?<0 *9\{UzX:֞^Zupx6oz|z IDAT#cE-1(zqyϋE8JCYFJ9Ħ;ݖ( xg’qSx qi/ BjsbuPVu C)f(ěxJ9ׯ .lޚM9aCܒZ>:xFGIMy^5גv!o7s@;\vMFt !u(,]oUlY |1 pLd@OH\6^ }tne $[уX>; !.c~S@熾U ^ջ(> hB:3_>woMT@1Gow0>U;<13,cNІ$04ז]Kz&_t KGܩ<: \B!jSlvGuiqd,%}=3[𛏂%yYLwOjRVEw?ϼziXD!.75ˮytNx2Abȸ2|m?W4oOCƔJxBI1Aۊ->.&!/BLi>> ZIOB+HS Iʣ7f$I!ITҦ؍B!e !JӨ{EQPՀN !BV}3D#4*@M: lBqYRU"fSu#Ȏ#!J!EQ0tEޟԨ%Bq%B!$J!"@B!$J!"@B!$J!"@B!$J!"@B!$J!"@B!$J!"@B!$J!"@B!$J!"@.J*q}BBEab64#Ȏd`6鈋 BCw=(6"mQ$Jɉ2bn{.IVTRI|0‚M ( a&ۆQThpJoDYpTzl %j1t5B"#NmTU$Ei$D]'BWs$J!"@B!$J!"@?sh.簵 Kˏ\NJܜSS[Le ߒm>֦|ިxlE;syN\Iׇԏ0@9kwt]鱗E+d/0/8lՊ|Bdk06Wl[x_F.\~KUsX]GGͽ4|s~%}m!G[D{%]BVͰS߽ß9ΙiEOHl{:uɰQR˶$ !Dkq.k IM `ޏuZ,1ܣ?%%Yck<=x9Ǩq8in0޵v[4<ss[g٭#{KUsXU7 4gZP{%]B^T\2cdVe}l_w>=bh|/ wdsnA89+f0bBTt{Yyxz+V a/پa?] cZIլ`Pd:Iͼvye7M%Ӓmܮcm*fB ]x!ȘpkN>Ǭ俄ɦfڊ`.}q5ZCeyU\V*<*4k?Y0gș=?28}nKoj]|e{YGȁ4k~K[}/ƕtMEL֡ELXՃ?/g׻~Dh}log +$OCaROӌu]/ۑu̚ @LL:)UŞ/g-a|쪆N}Aq"GyIrϋmuc=k kUM|6Ц}"W]?[z?vs|'|0'{V  dXǦ}y| !pݷruGskG|6k)Rhs85^5 djXpеq~{6 %t z-l+'6B4 Pv}ਣ/IRa .d4w7+;>WO$5€ElpڿϺ>쑉tRR;*A$aLND<ʢ%9ҧ168IG"򗥜 NfA)Ed^gGbBAbW韛( Keii+޹M4/]|@o BG;U3w[V́i:eGYtAw#"+Ffh|`㠪m{}\{u$y()$(9yײH(&N&=҈I\.U*q"JWQܖjFAB^yi!I f2I>J l *Sc&HzDžarmh<]ˠVK 6%2qj߮dkԅRNE0 Ƕ2c!+|Wv - 88_]JNLc"nwq ?c4\߅87ϛ kC9{٢/LEzxU<^_[B(t$Di!|,ZtrMw1Wg|ܩ g";0b(M5wxg?J[|j*}N(,$|">_ʓ})AK%leȵD1Q=WY8O宧chTI38'z&JM3_Ȏ-z25_qu\U|+Pk3.ۘKKxk_ >p `8}Cxb֝tӽEC} Q۬sVzY1s=%<} <Fk]F Af/Vdps~ƴדfBoU}*D衲 ~E;[3+,wbbjrAl|wOH&,qSaU]'[&p:fȠ6F%N|,G#;/[8#*Q= mcUE8\] sSEv**/p_U+ሊX'e+A$to)؎ 䗹q٠OB7ۍҩmq}zvm1CFYBł(æ%r )V9ț<zG!.T#6Q;C7c&0ElZ} &2M]J 9{?ÂobF#'񓩃H2_e峗R%:'h `çTmuvg5k3fd2:q^ꩯ^Uะ:([A8k1>˰]Ҫwr@Pą75zm,ZYBN5\z-RGbʮϵAa7 \ vqsV߱jaVܜ߾Mq{GYW|>/pV_O/v= !.dSH#A܅8ndtIM&KGN aLlk s:8t'#]3R9= IG,T^Cfy߲K$ѧӶ#SkHǘsܬJH2:;s1s.X̉#y77ٳ_ݶ^zB4f|Z9i8bX ϴҩj (}t2[s,A0=$caPE(WMbbNjXny=iG "n|;F;WAʁꭼE[dN6 {M$zllB`_&_ȝldXb[Ս6Bv._M3knDXFOΊW=I*)u"7Dv#f~geI 7q?'Q0fJ/so?&L'V[JֆUTo신eXj^CI3so)U_5tn4Q s+_/9ڈkjpR>z=+_uHHd[:w4b>nȃb3vdz/7`4՚ H>V_I!r5+3ױ;=ꧺXoaźUǨcI<1m@Ւ*[OҤۘp|&K kt?- Iw|R~=': 706|ZNgbl֫ nKNÿ*/װdު{FB%)_~BaC.^x0g?6)Q8NE4}1,]oϴa֜lZ0>NbHg:x>g D~B4_^%߰&.~Uϛ?V =YSߔ£/fJ'B%!DSlvG }e-W͡O K¹/1Zh\}>׶鑗yW%cSMk m&.?;9)g-{Z%){n*2.. Vo.CIH n Gٮݫ%&*`=0߄5j8.Mk m&D$J\ l*SH\fe7ƅ^{XZRY5i&dy4ZΡMk m&D$CxBqB!D$@FSUL!gZݏ(hFr!)91xs7 PѢ"L)Rz *e)#*ể&E&}PU"fS'E9:p| ( Fp3s߫+4{(M:⢂.}(!BB!D$@ !BHB!D$@ !BHB!D˄E9\Tt2Bqhxݧ(jh5~1M Plŕ$ #8pE,/ 'A斏 6Mp˓!JFiڰB!Dv;3f^`z!s =]սP^}Ƕ4~@%?fW"ݤb?/\Ζ#eQ0Et`35Մ…~T3w@tތa";U'L'~ΌG9WWt}t$7"L!yu&:w،;Pj* ɥlTVg GSjdJWXMTgS)ȯ~(/&2yT:6P䶊4Bp= ٕߝq׍4Ϻ3[/0G ܴ-0|tˏ>V}5 7$Ib!ձvѽ;vfzJە0j^]:T Ѫ3#&oa95OW^ߟ°$59lΎZ0>6:SV?îWG1]së8{dG^3흫cu,*a$Ig3zK}_^áC(ߺ6{Hb $K)v-#rrr:OeIby$}H.rz~ůofOm&UX#$wItƎ]&MKNNtN@T7@"D NqWqyHeLG$q ]U% Q2|Sxc#|p8lrZ@Ձ*N``#E;+%IM1i•r{)Mr:۽k}}(@竮Kѯ$ μu\@M7<e޾U]QPa)/8lCY: 7KzO (?>;swO ]>T<4o'mv(5omdޅ"VȨXr3;?aXt9m=$/Pzj jݍ!':1H3\P+,[%D+ʆLFQ qT9]p%?4 g}sd$I:EPU};sؼ oeH4{P>`A$2$I"2$I"2$I"2tނ $/LĨkeH@Bp?d@s!T݉$504񬋓6>J52F$*.L5gK%ȊP$IRD^“$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$IȀ$I( $]z2_MMma6r.9AʉSZK"~ g}a:VU!Id#KҶ( {90 ٻ#ut*?k2('Iy6Du$)0 =_ tIY_: J$)"J$)"J$)"J$)"J$)"J$XaC5|JJ$P5廞^ˉS.'Lac`<dQPZFaq@{Wy,[ݕ@0rmRĀ$, {4E}F2ub[rflV >S2 V.cwKסSk郼QVk4"/9$EX˂i?!ZLqr~2v`f1C4$%IjQ2uդ윳v<ν?zא1#ә9#9A ?w u;S>UώG'L+\_dܲ^t8̠K,ly 650O}excO5 zc'YnBox0F=ɥ>wxJZxIA5ɜub͟/X9 $)ѓ$yw>X5@g!5[q]ciEgu&>ڇp|//~ê۟g ȁ kxmWȴkܺg+M:vsxz{S>StEGJ |$e´ɑ>Ϳ/ \7u,C;މxHf8mg;dw_ÆR9j0d*6.(fqq?K}aLa C|Ky|5|~@i8̛)NiLz5r&0|gkxzs5d x=ދ,JNQjw(IR ~}.:fGPuxQW'P- ɤ _൪P~(ddaVx1oFz2Q~ۿ·?LO/FA޴}[Y-$$FO|0$ePJfM~y?+f3g#0g,fšǾ?ȥ~^ \Ϛۡpt;0@ڟϝZOJ `79Pmg{q3=X"l*x+ !8A{K^$I@@de[+~( 榿Fb?ɮw}_^ _͊ś\Œ/+Պ\ 4xC㗨N%&ю!=,zUnWw2Ԅ4R}h˟xg3@5eoa$xm]ǞxU//aJ8wHRaH3=71kxKxaekꬣ0$Ir_Xǰ`ݶ]=j\%cXVRm<`ÂbcX0ݪ-5`Âe*F,S1`фT&,Xb4a2 ]gߖaÂvgN番Lb]:Xǰ`T$ kV~IENDB`DarkRadiant-2.14.0/doc/img/HollowBrush.png000066400000000000000000000014671413722237400202760ustar00rootroot00000000000000PNG  IHDRaQ{<bKGD pHYs  tIME!&VIDATx1n@FaW kIiMN Z0 bq,}ʻ0?\h@68"a9DFD\Edw]Wf PP(( e2B@ PP(( Ð^pv|#"/l|X9~8DDv}3Knuү^//oqoN?^࿘O7dn68Χ=P.01_9t2B@MߧNAʡ(s e\9~B5|{X*c?^_cU^߳ӕ~wK36$ftP(O(W;PP((sSp e2B%諚qO3E}+G{@ PP( ]?w@<W;PP((sSp O|ŸWa7K7t|@~ )rt2B@-rt\9~B@ P+GPfT?~XA?c[mKk??}<ϩvnJjX~=PP(( e2B@ PP(( ~_󝟙 /0{IENDB`DarkRadiant-2.14.0/doc/img/LayersWindow.png000066400000000000000000000262621413722237400204550ustar00rootroot00000000000000PNG  IHDR &bKGD pHYs  tIME $Vx IDATxwXvX"KGXޱGɵh,)M4Fssc=rc4JH ]X:FQ@Wd1wgwLyRLOϰqppdg²`@XmCmcR6':_b&e)J[{jXffR0Sq #Z{FzD" ![{2iZ%HH\FJRǽݒ51tɾ?I$$6r[yĦk0W8(N5G}4s]CԘ wxF.OJ}90N97{3@ɝ26$˹j?ܬ<ĻPr.<b`++-8@ŪwMQsص'?εF6;vW@[>YE3[F_j}՗{됈N4  !O}*YOBJ'( #"v?+s}G˒0W~[mWWxNtfV-py}9PUarBE]2x6. K54j}>dpP7==s)x]mJ׮AWpR5֌P>`xt $>Eg4,Xt[,MXקw/\"+_3 ğ13B3)!k⹓5 tlUHj+d&\Wj@ίD;nN/ɟ&R;q53kIQuAZ]M͵x{;53$%bqq W&-I=[ w˃1TE1]ȿ+->WקwS[:B{x!a !a !aQԶ< B\!=B\!=B\!=B\!=B\!=B3jZ^RY6u{1dwȨuzVn=hk&?%n`V74ǘK<;S=&nS >Uk|lYGٶ}Ⴂ*Ɯ2)Ғ2UUV(RQ*ը5z97c*57JŪϯdffgg \RHL8'5Y1߾5ƌGO1#˦M*/OϜܜ-zҥˮ\裥/zRzrZj--M)O:=u7ӏ)$}ͫQ`f2[WNʸn5/Wa o&9?KU{N{Ο$~ K)&}wcb%f_ҏ\16M)UTD!!I5mncFz*+uq!1̊ Ozej@`P3[1A5eՌE=]Mى?Y1CR!_~4)عϙԶupCч"#l2q͛7O4i-&NڹkWؘ1{5ߗ>;{]`Eƥ622}N6;U5W5춝?;Zw i},.95/G,=8f"w}+>]k9 ` : ?ɂO3{;mV꾘|1,,Ñs#͛7CC >kķ6įc/%859Wlbo'_WV/\iFӓ;s;w1w[w ]{G--*ea wyDy &l޲5tOz{c ^cLEKϜ=[D/}ՁȠuR, ld2fШ_<7 >(Zv)AZVtr%?.NY ޞP6W />86"| aVuɒKօu_|t)'NWJ\5p];1JܨE#`l酽?~1Xa2a kv/\HpHtL؈6o0~M{gW<:q.1[TWU*Nioqݺ~/|O&qw_RXfĄ3i͟xTI\º1BJx㗼7A#w||wYvwԦ׎<"P>#C,P ЖVw<0666r͛6ل_:lW{С}>szT9|ӆ [t߶ܹ]6nLڵϜ9Ą3G>z_dAvAhi O.²Ϥp/0A.bK50ܼv]m=p̰~]uk8;K YPN\&%oWcƌپ}Gn4ܹ3cرcƄ_M _mpa7Oٿ]iSʂwml F9n=4~jš-L:rV޽v_Y_'xf :rwFq05%tSl1Kxםuv2c9":|PS| c#P?4sp'v7>c'7}!nLM1o|'n۫Y^?t1aaa111aᇢ癛))]6nf͸~rs>DE m^7pvߍpu+Y;Cl,QbѺ8+ j=CM\1N/XkՀ\fmaYU0~iI=Ҿ}p@G(1""(h⢅~~V3įM>|8,,,66vac=;6b3O{63j{??nY6 *܏Z^E#M/-ݺ#e #ǟG>|эv )|FhM4׈LHHpȥKO93[{6 ȄXZYGicZu+glBo ^\J&tnEdLW>Kʪ9{ d͕Xį_!mEwFmHw۝D#(ϡ\I2F#?3U5P]0?&bʵiXW!č6D\!=ۍZVSWVln7jQMpbMݨe5UڊM4vDn.Wkk5tK-4>e˫KzZqdo5p|A;xdWe2(PZwRP('UWW~= ~7oRʲ``]UEru. -~3Wػg&Wwo:uA5=|>˓eYJ),hO2Ⱦw͚ i~~{FUiizR,ttJ]}4ʲD z\UWW:qtt8wÖQͪעhMM KbQ{}qMϩ+/BlE;*;`x_>eou8ZN*2x=^m'oܼ]eAC5{2kJAc1 ;}R˓0mݙkf*? 5]NZ!&ߑzӮ+4< iZ$ a 77Ϡ7XStn`Qf劫?^Kܸ'Wͼ\, <ލej)Phկ ب7޽{{ْ'5'ҔC?P4~%@4=w섆Z7>4^[giKWu0gf(}{GsI%_)U);1홂v;g2͙X.ʋdT*`blj}׬X?y?-4ײ:|Y8{Ϙ=`fNʼn:^Yrg̗o0dVyyLmvvc׮TފqVqkW(1C5단 C Wi2z(`@'_ە9]HNtY_Nh'||wE>̌5*HJTDq 0.R6;;_Hn3[qzJψ^]_ʺҬz+eqqZ]䙙1OVV]~dk3?7/.n,jcko;>57ؒT5#tX" :4^ CZ}k|3wPJZ&$E:úYRNû0O[DU^qàח^^Ps9ڬbTnO?(WW;v7*JP hܹ{|.>pʴP8jtW|xvݦ6 SJJ ) W/ZY^q}e-eF$_ȖT`i7y6;p]>,"(B:tκYa/aȻǬ%n]-4.9*Ν+ظ6?y@X{]$s U8r%,]Q]][ |@U:K$BX=7-syd Y~=1iN+bEvD@ΜJv y"&A!^)<}BuuOIL% 3݆v"⍿#SCR[ *s:f B` МKUYY`0>oj_z2Zndݻ7Mp;i5"6 ?ڻo{k1.LxatmǸ8daɘA%<{\B ^_>hn(˼yb\s4(vPmZY+ׇu_DjDWZRN@ݫ>=ZDm5}d;1KD/ȓ-o"XȲiӿ>}k% ` +M 蓾~%4ćQW>:jjuQ8[`mb-R+Zgҥb#w JąqȤ0<-0\њ7KtRmF[w <,~ z=<*HϭViN)Ž5IեWTYܳlIog򭺏 &OuMK:jҫCmꋳ *m||]-3x?eū߯f6ERPx4/Nڻi9`3S4X ;}R˓0mL-rڙȹb1@n)jGVr7TιH$;Zt%WN'Z:{XkKrSPv`k;~nEm [QdY^ug J0ۚ=Jĺo&'񤡾6&+ FYRZ#m(-_g i7<ͪr;FQ埛YzLqE#Q;W|,XeGDRG:Y؟bX}f@~3\&YgX=<}<- 1sqw'3oo.'|G~<put*ջ 66̝jkNXei\E-*- lm-|S2֮A><ՉjsZ ϦcD`4CNtY_Nh'|zY z;֯ ]V6gut\~Mx{ j+{!Nw s \,u˲wʜزbu7wvL+*.V%,-v0J.ۥ_ QMyi >1߀L&b "y̻\<2d|#ѱ؊+iczOA#Ӡi}=Vi@'W}]Al,{oOKHRV󅦕+Fdӿ8\Rnڥ\޲ XN" I)hYH7JKrj  %:Rcip PuqNՂbe@BMxsųճW~vx)YY4*r(ߧCbK/9 # kX6L/WC +ʵ kzB_YZ | Ҭj}Rboa[kGҋJմ;4.ɿtMa 1?3ZM%,4ZH s=c%b_ٻG>_;wܬ[ jSkG^K9L*W,2̃ūhY`x慠l,I޾u]A"޲nJIJ]{iNn^LᛵenfiJmh z3R3>!@Yabl?2iA1! F~.M 7]W[63,zMPNi1\eY.TX6@W]z; q;<~fbιZ/W[[9ջ'rg+}]{۔5$̭+f56UV?^ɱiUoF'CcaG[laY؈`"z{ OscNf>n-3){"n~y} ٙZ0\֭]¬ZDRKgooR!_/qՂ(5G\Va!wΪR;;V.ttrsvj{I\CkRʺ\/IeB`}ݫ s<=lcF,B"~c$Uj{pw{g*uE>oD*5r8ZbS?9VBs_%$KTVWG"6crʙ+2@{+B{+B{+B{+B{X3r3IENDB`DarkRadiant-2.14.0/doc/img/LightInTwoLayers.png000066400000000000000000000577411413722237400212440ustar00rootroot00000000000000PNG  IHDRGըbKGD pHYs  tIME6% IDATx{|}'mCi r*'AAt(qu0+(NeSV)*PAJc"DS9  mr߿?Ԕm&wy>y4Mz6M޹y睺n222(((hsy͆/vy9~9~9~9@֯хB! B!"HHB!!GBB!9RB!D1C +_Hy)/奼R^Ky)f%|-%|-rFn/~9~9P?~9/B!BT!Br$ !B#!U!B B!"HHB!!GBB!9RB!Dȑ*B!BT!Br$ !B#!U!B B!"HHB!! `|z)/奼R^Ky)/Y `}ė6Au=`NEEE'/ǯ(JB!JfC"2u%!6ȘT!0 B__CBuDzRfcJy)/[ZT!a}# ϟ^6o,//o4|/TªT!Qgzr7`3|rs-u=$T!AԶyzQ^_?=lm(U Bb{hK(m~_dWP3vP*!@yIxT)/|hovw֓\X fP*!%o:_t=9dOR{7BOn>T!m ͕oɛW䥼-(JדP R"ZPI*奼okyw *!U!BPsrt:uJe}65|?CO+dB4TU- IBB \@G dݭrilc֬?a6jqPm*!U!%=_N'ռuTՄ x3a_ []YFUUL&נLfӃHy)/奼o=]o}jo{@Q4 !i&bmz_?vݧJ|)o ]~9~9`jmT[8u_BQK>}QQQiMԦzU+"D4P8!DX!MoR"y 3R"δ\Ti!Ws;xBB[_ª“X1e8DG߁.-yחPXߓT!QLM9u} ќ++ -5N[PB4V!۩SٻQ@9]ٻSJxM5GBBYDЊYC^RyJ&8N,j{:bLT6}r5f[_$ !DRB3):VܠgqA(( :s9~ͥQTTzBHƤ !D;k u EU_F@dn\0q}{wLˤQɨcln Rrt4z);~OR*k /M¡n1jl]| 1J|N;0l@ttbVJJ)-{=~kƤzRT!qTDV,[4Ԯ^)&j8EI/eWkXOI>9 gwA+îlVH5WW&fбN|\4N[؅3׬muad6إOT$##Mi),zJ.a~{S[^N_sbiZeIxڃ ¹awgj@hw&%1ѹ:Nu [ٹc3eWl:}x;[c?EluM1tA]5DfRSسw?x z镚^zѡCEAU_=/@Av f|233kͭ}[ ow{ݿPi?4O[_ܡ]!ŗ Pq͵hQg7p@!%*o?DM> Mo>kC&1k{u)\Nދ}r&zp[}aRo39W;uڰZXHfvvvy9~9`~nn}ghm݂R^|r5[t]zraw>Hr(**ʪ*11w ){Pn ZXH~nnmPͭʠ*0wjS!"څL&ݓZPф-w8<5(ACBV!<Vǟ˙!?ݟhLgPe"4BDf2J| RMBahawtޖB> RB!"Cj &NȄ*!)!'O{Ζ*(0&!D uAC?B?rDU-,DHI!?&;T !Ͻk\Dԩ~!$IQ̙L"B!ߓöL (tfӃ/5cP;.++]R>ϵ uRmujmp^/iOmBo, UUQhf_o3~v{+f~_߽;U[]`-Tۻnw lTVV6 =/ç !7ɀ x P֐ڒ_I㶈umNB:gmNevB- ^6Bls*R}ߜZmw*?&5<S!UpU5=Fii%* V2ғĴƩqN`!( VQn.MK#PO+EI%Im<(`TR[@&T :2A*)"&LJ]([İ) (n. ?R\A|l }zviIYt]XqG&5KXk zZ:TTVQQYC|ltH&NȄ*!Z& OJDEPtIM]b%VQĄX*N;]Z@am }PhQ?#P%D}oMPmNT&49DD h8 MBJBj+Ʉ*! RB!!5@8U!D) B!!5233ɑ"bL/!U!D꣜@Ʃ#BCjL U"Ҹ9%ۻM7Bb"ho!@sx>w[u"|UPx5nHXj߭_ϬYO{.|?uvF,3fA|m3'Seee{R^|^^Pv3RCr9Vm{hg 9+~#ng}{5ۊ(q 5w|P&+~Ӈ_Gg<,_G}e˗Ï;os(WqiNkVS):0 [,, ( fi3~v{+fBflsood_vy?!rt$ZMfQYY(z^8_y6'?#KRV->^{L?LT<_D_pޖJn=@^4XFS/OysP,~87\.'Me,yLt-o7&O˗kac`5viTTTČIn}Mad@U}kk[Z+$33Sƨdv@\N^|Ƅ(bՁ\?gqucs{[l(mNk'\GoeO.^9 OaŇ|(k o#eK6=Mtvirq o11sel>|g>ę'匣k3f5'NV$t'Y:juL8+3uT>گK?ww9XVKa_f-ɯ7FǨ(:$'kǎɓI:˰s3w.ƍk=!C~AnrJo8m}Q)߫Oqu wLO,^$30gpSeαtQ+C!&.\PNlbKԼ;Cyd泈[OR#$['G1uT-[wÇK2Ǣ|}_ngxTA|e=$fƌY嗉Kn~}cb^(Nۨ0yF[Y֮ V,1n=/,3,SUG`O9:^u'cF_|-[\tͨ/g8{s uom No{;Մ\pEĵ! i䈑,_ɓ'ꫯr 7V07=2+@kaӺpX*կg僩Sl6!+?w_y f\4?t&NQ+"O~n4``')7Y=zJiӃܺwtz]pjc^(EQIV:БrJ˃4ѭ[I&Nʚ5kv$ϛ΍?@ضq <(>FAQU՜#|z֋/fcEd@pSDUb ͩ>ACqql:Y:r#Jפ^VJb\u$rW\9léWPV\H8;<_s턉\>~24eN[cJ4g䈑,[ky3f;D?'s]NA/>I{sF _~}Xk+3i$ָ\%qT6wC_z㯾Jp0W0mGt~'52l2PM^^{2? g *0|WT:BU",g'~F7~)\2 l:c-7ٙiՏџ/t8w>\pO.1h\Ajm.`#))+Y~g KCy}_4c`3,@zyY|,_'|ym0]l&Nb鲥?|_O23=~]IVŋZ=>˘kF !5'TQX(Y]BJ YYYnA:uv #sW\xV0Ea@jti.t*yoeE~\ہN!U>?Ko|[?N4:p;֞bC*/-o FF\0d 7Oᚽb&Osyk̩q9uj׾ o#G䣏>bĉXo+V0kj>iRmv|tML[⒓]Q K{b{bcQ͵OQ% Q'L :NC8ԺFwmTXDh eق!̐;֕I &ʧqrο?[3C{=Mc{iC$>޲u g}6o-~'\[oW7uܹ دYf5_Q::cRH2[YHMB69b$mq.U_2nܸ&Z%'M v#C$G;uk&ҭ[7u W_Cjj*]h_P׍1BRh`_ʇ^?o1~]q*jmp^/ih, UUQhf,֙^?vZfIMoɄ*_o xu@j٨lP={^Gڨ* (Jb%0d@U}kkHm믜qCh+C %">JM6P҈!DDCU8🰛 %|D"7UUd'!5B-5>%̰)nBTq^C(q{ 5qӪ:B Fea"֏QTi9!j1sĄX t]XqV8c6TTVk Xu(Wa6y m0*ޡʽ\lP#CQٻ$gl-St`.!( VKZ^-6ZB F%!f"dh*qn3&U!>6:`Tm% 7y.!7ғjpY3f`eHq1Yfs?Zl:=WFhQOldS/RRY 92.:fJiie;.SuE!1!J2BJBjriKP ͩ 6'E[7𦽞W2~Hͩu; EJBbNMMA222!ߛڐzBK ?''o砶C m9~]w_uM}-//[---:( (J`%6P Rzew(uzHyƄo>l6[@T0 m-y5~8"28dB!UL }2ACj,\ kV v3뤊V&?7WAƭ%e51_z:U՘1ݔ0vZ~=iiih~ĩS%wX҂Ba*" FAwɧ5Wf* f~Gzf?#}Z8[yYM>3nWwG5tjjs/٦:%%%^ eT323zoڷi.jttd4` ʛ9S/d :sr3?-sM7yx[[]רt;icjT9ieŦ0t|&g]Jzu.W}=WSod;I/[Κ8 uFKԎzܳg/.6&4 6ݪPEŞ챔y,9߯mɮ*mַ/=MC1TڅtB͝jP&!Uq NyP8cP(:r<˺nQvv=_=13k̩m<&w9<`2wY'=쫘3c!ߦ^/;p1M4'˜f돦R4u=Gz]Ū-ŤO+뷤bIMt:J֬tz WEB72`l:w{!UfU2w*BٯﺇɵQG$VȲז?j= q|CUH>uo5uSՄ\pEՕqm;cbIܻ%ڵ T6Gwe{h͚իUW?W?ߑC`a>  j%TK|^|^ӧBl~9?[59@$Iݳ{/^$ 8^.zI0GE֜8e˨ؾ\.A} ?gePg|^Gʇ&Q5Bۻ|^^YYY-zPllyݣZ(6n;/y__3jRscXX,R7 f) `\m6o7sf{S|{̬Q-,l6JQ~nn v7j@j٨lP={^Pm o3sp!!W?DKW_WvϠx3ãwEZ:s-$e\N 3EVɧǩ1׭xi;Mh];q/TNLwcIMCI?lFz+]ƏG&*1 p8 נ m -y5T]g˲_6A KЉdft;˸{%IX7;fˠ\>&k?&?2ɧUw UWװ/ѣG(H6(QQ22H{A*Ti$REyn3~%!Db>g#%#6ѭOx2: wΡC8qDB*$7S4floC \n%Tbsc#w^oԡ)--`7C4C2Ȉ蝔$|HaL!BT᳦&T3`7E3Rn9 )u ! 1${"o![qfzP҈!DDT7µGU&H"I-Xq9ZzSUE!>JFzR@_y$ a8N5҆4a13l@J!b*'B;ąSP c")zR7 6CY0;Hv&a9V\AbBlؽъucX-L{< !;T)!̻$'8Zl ( V{m0*T88J&H Ѿ*qn3 6`İg6GYN!–{Radfg׎Q%tOzBHa|))dee>~jàz?//Mm Gjy_#fZܦ׋ih֦6:j({vY'b;I-93p{<І3X,X,TUEQw=_m6Oim6M7pyh'Te͘ǟPhC|wQl6*++TѦ6)"&LJUQp:5 5Z;|,Eg-{+#LGTԒ_9/*oL x? J ٤RZZ٦=e):K a=WFhQL0PJm4]l@y8A8.D.ڇ{|oym0*IA>b}=+HBeTwj'ͩBڌߓ*"FU9B!AzREHq@3mNPJB0eTvNFa܏-h}{wSZZaÃ!D0~Ha>a3!B;Y} !0H후%؍1kIKKQdԩ;o,iiiAh0~Ha˳-d RŜg`? vS|L:3/}:V`&D![{b];wtK#** ?(maٳBrQq#;}NŖ- {m5T1NPL0!5V,M7LzAnQphG/LH}lYLf>}i=*jL&pywٿe ۯp:E٦M8KK1duJmOM蚆rA&!UJ}P߼Op0L俹$-\L~Anapv;vM!ij,y+8*錸FEY'E,Ev)y~}R?*]/~Ʈç6œ2b~9$=K:'V79_>ĜvKG(8PDI1.n{-g͎bt{̺sm UٳUTEnObvX)8 dF& &.\PNlbKԼ;|Zݎ3c~8OԇQcSVD*:c!ߦ^/;p޲q0Mti:>z:);U[I8W\ooIMŒJuYC(& TodDuCjEno|k|5cFpocy4#nl6nVMӼ.۷%]XJcz{_rY@5zb*f.d3EŵcI5<&`Mf_g0ŷ_ыP,[){\Kdp p(e+~}`8{ ΍.1Ϗ9ޤp47 :j;I7L_!m;c0NuSv¥M]'`S<[7 QIIgg,)xJ4~(f#S;u{nł(4j꯷ř^?@L/ϴey.?SzOEuxo:!łgxS%Ϲ6KUU222PTkҡ|tԁm|7ͣKqVã?)Jtb"9SWݡD]w48&jmSU}kkHmz2qB!"(++w7d!>>ȭ ! Fnv=>/?r3ՙPVRe.,UO uH9^y]DIJ\|4v͆gDOa{n1O<9REͅ&&N#Rd DGG3nN2[\ӻ.W) Cl)&\kÉX*ڑ7=:(;GQS7ŧS6^|jBmoj h5}Rnݷ͞|C-׆}f|cc6WM%@@]9T_`TQ}-گSLg~0"!UJS7 4>]U!|ccOR^^즄IL;^S5`bn*Yg (3;;xυ=+`3&;ei?i"{y!;yzO,L)C3SMïa fCh $"R]O{ a(Q˅R^}͉[B14?}v<RϙCs%~(!?ђ5P[y3R]UfMVz=)oM5IW](u]Kx2 MB9Od^_gu_ʧ32L0$!jgryzogkt;z6m*:R%xl^\Q~6EGGCt4i}TS)@ INLwcIMCI?lFz+]ƏG&*1 qREsl BJGss ~VMTwfGGG<&ʧqM1pSZ\L}'k|بaW_ңGy( "k3H–Aڃz_UN#1~Ha}z6 ! ݻwСC8qE!UQ#73REXz -]RƩ)*ht҃ ьp- %ZX !Ԟ>3B&NЖ-UTe0fG#Jm]B"l瓙SdffJP !EԸTF|?+- cREHpYYYVD"`qBDT8ahy3gg *DĘ6 %BV"hB4m(EBJ|q !u~ӵ*`TT?,ᇦHF̟c]Δ)mn#-{a^hkyyj3NJ+HL 7Z8sx^ gFPUUkׅ=322j>x`֙lJFFm.u.TXHΔ)mM`˷cP~wyUv  CPoCCuϋ`Y&9b;E'ң*ZLQ3 6m8}aҦg@-l82VIDAT((hsHmǤ C_b*{ /f)2&"̄*`TRE n!"?qJ&N'&B!D0~H!ψ<6!R"lIHmNMQB!!UE Yi6B!Dp?ۜ;#R"lIH~U?4!BCLF Z2J!h"$yTkɄ"R"lbg6%=Aa!Y3fԗ3RY>k f$??v?Rh׭Vkt]z4 M|jBxcXX,(^/@6z[ `\m6oMM2JQk'TFӘ`;l6*++TS[d@U}kkHm믜-"[GRB!|c*'*?7\ mYB!D?p? *aK͒YB!D?8qBx'cP+3;[~"hjGT: VBEQZ$'؈2IrTW>s2~D>ȑ ccӳO!B+h`7o$z2A*p3'>/?-oT,!Uf7޽HjDfzN-\ /SWch=;OW>Ɍ%qa&cl;ٺYWv]j(ز Y 1BC*5|efg"2 \ZVr[NlqOͺ~z7g?=,[v'X c~8(y\{ظNkjף aB&HE BDX7o^cΧE~ruV&zbGF6Svp#ߗ bظ:hG6 BLPT[1oL@&HEL,DPtA =ܫRسx:W->9r5:K} Zix'GXz6O`4Წ>&9[~nnd*"҉ ヒ2c:s# O*ޒ6v4=I9G9"k/B[e݌"$\֌~Y ]/X j%L3~=[ʵho<=YD{.g>pQ%,_:~{c&3f?YuΞ6ΒQE08=g«l*DDPH.nCiu_J- ,_w[kK\ԇq([/ŞE̠t་Q\~~'$P`ae~wH !UD8s}5=̾W|t^|`3.xc}U3(JE1$l9צqODTtJ8ܝJzڅ023& ›MiT&y/{wFy$[ZEvl'~ Z)@[ܵÔeѸ+Giז׹+se\(7}奤(H @'Z޽?Y뮤ݕ%Yݟ}~{.풥ݸݫ⛿V{s #erYDQ!""+~Zx!U\FL#;Ȳk!/\0>޽{Sgq{b`> g|jz~ZIo@QOND$IB$XS}-2m?tHO,?>}4^? l B<`FTS|?ʲ ߿&A JDL HH$5/`?+)bvDD%I2A<'""2;'%T8)*)"""˳~Z"'`gJ?OJKj! !VkQQUUWd&Tl vLxPUr;1"$S3^Y7NXq4e?2$ QeAČ> !\N;RlZTtN`WCOOOVg/Khk6DD9T@̆UDDd6OR-V8)2*""""b 8dY$",'+TI/+HaJ_PEDDTl<_@ܹS0m=^Q3P.!MB|a3>ağacΓU_Ҏ*W%x.ҥ׿ڪ}{ƋڪJty=ČN7gokkӽǓh҂>Cېl}}}XʡC 7&#WG﫪 EQ\ZZ T* e|m YB >M\pjjj $IBx< iixYuOSYAջ~~/SE?F_ouQ4)?1IVU2!Qy/wBS7FGG!4Ubke3%bOÇ#!w`eĆ1yuq|_y7S|W;uBZx?n͕%)@(? ZP~K X/ oőS+X׶;.FΝ ?>hq!ckwdxG_8E$þ2مlAs3 PGWs F<[.[:pw]͍⥃ob059?WkQ>Qc_pG<;/= }R`UV7cv_<oGR RDs]SqѮ. agqm[:hFM^Hx6Zؼrx8fh^v ^y j;l u/㙗obWzAmP0=@^5"ghh@]5ɽ ;GhyS\򠾶`G|I%\)bVNч軟6GݽNٷ_/l>+\^1?C[44Hj 'X ETBUyی+ >8sEE8iL.ZpTV

+p媷! ס4? ԮI;Y]\GN݃%hH\Ï?y/|PBum|\$IB$XS}-2m?4@o,˺ׯ B6F쿕oTU/ ,k@ !l]-cxnl!6@T!<(!BÃ5M:O.؅?֋W01:q MץNa̯ی˚P[)!<i'jP+NAAT :vߍnC‰k&+o?oNtބ=_ۅnGwD@@Dl&l?'Ug}X ETl===]6(iUNF0 l+T'ڙqmIJuDDm@K B`@Р*v4bU<έT[#KUTvMRE$IVw. EwಭGnU(|swcGߜDW=geto-↝F8!+'}Ld$U4Tq swU%lX8NM MD5tcxɑ ( ۱}cEQj Ǥn - 88&͸|C[QS: ƎW*ea 1_;\.Ա1?wKx\RPRnO nN+;VkmMA<jd3XX;նiV࿰a](K? MMP~ 37e9r8HD cs6 >Oah4PY]֮ntmkD#I9qNiv v=m]}<5mp-"q]EF49&1L1&\+_N# JnVFO6/ald[Wy}3ll9"RMd>9Ej˱ x630M1VsR  RD&-Uy>GY J39%2SY$5"rZ?KDTެf!թ2%Y~I%"")$9%&^FY?IMS8-bJdM=w+""b$5~VXRVKRcOʍf~YFLsRiPUU9KIj\ J[U%Jn8U|Amw.S3^&%BUULxrj;Yے9O 0>uWlJ&٨r9/cbZ„|!r92AČ>&%@ӎ\Jc*--d5}>|=oGK||RrV=r7-l@mUX*MjA&t:r^5%Q?R*@׵vvoo/[5(0,c`߾_|___ݹ7_mook9?xwmm)|ڶdSe5 j[ V"d@41A"?Ij6_gUFvRZ?$e~◿^"dv#@$5+dj)"b"*OFnYX"*R3)~"Rd&%I%"*lvfYQvSmT""%%"*LQLRL&qGXiKDoɶ1Fos; "*/f0I%"2D}3rt:&-x7S%TY3^脕I*I'~ i8*Ix7:gT4=Yi97&DD&8}.5(wT4A$]zot<敦1fX#v 2x3>wOv>slk!_o]+/˲g3?Tɪ,T߯"#Iz ?xB%$zDD&x?~iSތx3LIi$`MɞO675N*[a'x3^_|嚠;qeJDd&V=N\.Գ1Su?o'KDa`JDdz lwɤwx3ޜ񙖝kj&DD&j45;siGf 3gbmR[lLRL$Y2s]zwzot<[=$Ȅҍƿ&SR)HfAg˯V=$ȤIT_uZHRX+_oV """"DLRtĽˉKDDDDd*1|> x</˲?og/yLI*T""""2&DDDDd:LRt0I%""""aJDDDD$LI*T""""2&DDDDd:LRt@e] a<x3g<=Sf IIENDB`DarkRadiant-2.14.0/doc/img/LightInspector.png000066400000000000000000002170021413722237400207560ustar00rootroot00000000000000PNG  IHDR jU2sBIT|dtEXtSoftwaregnome-screenshot> IDATxwxUܒ{ozo$!waYu]uuwuk]]ן A@B{- rSn ! x?#;sΙIygyG<ƎO>m2ƠB!Rd.5y?:oޜرc{Ν7jޗUUŴ`!JI!]8hPZ1;!p>9֓ݫ/b={^yr? У?OLN/B\EjQ>h9c\]犰zglF+eeѼddau $FuҰ|~(`'_q ^z͡hrs/ðIA>6BѤ#Ӭ'bDnZxMvt>v#a:q>:h\v.-Ct=uI#?S=toL:_9vv̱͛X{ Ooº [.@H-uS>$ÇdHB +LObxB,XX^=Ğ,f]Y\0F:уR_q]> p;gD|>F4YY+NèAO`-,S-Wdٞe"aH_8%KWNSCew[r#AB\4y~VyK1tCB;6'/BTzj?8<==`e^Oq'wN :GY!"*;؞m$,. v[L(B &gSjo*?7DfҘ`\.v<-*?khO".7D=2&1 (~bϞ4 ÕzI-/e]4\Put%6 cB\t:O/RTH )+,CEG zQf .Ȧ|9Wz;ZCVm+ckRJt؀ i)S=msT-7 },3A#24U !yv?_4/.'tT8 Kx,kի|._!h1F4]=B*&vJ)<\ԫeBC9fl^hQ1cB}UAr+!"EkGvt_ΈpQ¹Gٸz/o&QV!9K|6$hanX;] B\rӏihd]V;)==2عa%49Z 8{]8϶۱upAÀzk!w]ζ-``` G#z3VO6r-XWKj+o6w{6q^ldXoh2Vww!0A6nΔdcF)bAN/B4lɮ@=WUCf7{wo&Uſgoaשl$<}bk Rm[+ڙ#z@Q+.> ڝ޽ݹed"p >]IωC.x9Ăߴ}]'`P ʮ R5ᥜ = QABkF[0͙K/QJߌtJzFG!Zԥ{̕aq__:׶\B+ӂPmF#oƚЭi6CۄB\.k!'u$sB\>kB7"'oFwڜlXa Nbg!xI'Sܨ;闲9C!hAΧ  Ƙ>Fb!maB!B8$fB!I B!pH!B!C0!B!RJ̥2Y!BQ/y B!pH!B!C0!B!A!B B!B$`B!B8$B!! B!I B!pH!B!C0!B!A!B B!B$`B!B8$B!! B!I B!pH!B!C0\U*v!B!eҵhm|6m/"t=~z ":KDfnl=Gaȭ~xն V]/B5SP=ϻl@~7vt-|b6m qt1:YS{s,[ߵW+I= r]1v` z떰_/A+`bOs\U2g\zfX[+N=GA&uټg!ckMjBqu$-#:KC0\J,?X3[ rp)6*gv߮ n,XB46_>!ׅnjcFr`޿ԲbVpf p琎8{Sq\B̭g[NMi<46b K !vl`仗`i6y+WhKmelJƀøsZokُ~M\|"?~*Ӈa3FvU?tnuQ\`d20"T%UcӞ 0*in:6ΤĮ-8c&r:']yŠM%2i[3%R4xug܌VQV|͇)E[H,N!eh/\5#.}+\m{h%cտyai?`/4gY|JI~$YWXS8 ==:z7B8nIU'{9Yg8(TPV"? sG d5g(&:%%P9}iÒӶWG?pk_`fU[daoⓘ4%̉{I9{!X H2s?)9VHљ=|gl̻Uή^$>'zurg:m1Zs_}:m BYUr7\o!hX>aO /<\yу{~7A?/~ŧZNkr@|jPFwཝ`޿1t3Upj>* Fo9HG0sbY X3q&4ӱ £yNow?~\ $vpqUw.u"V+(Xs}Jy*Xμ%iijE#=wv>F.`q+ A[j&">B!Olzi'AE* F҅뎒aR]GwWs>%U[xzVu^Ax9[#UUmܴF< 6T@qqä`V.SK q&%nA6elhD0{Ltҙ˙3~+z'Ϋz#Gpb'O痜X5w/ 4>m b9_S`Θ(7(8[:z>UԬnǮm/)\dhK%PO VhP-7sR~^Io/M~Bq] Ǐ^3;,zjS<2yl*B=Y}ekp A=L zzZ/v%*[;V#ߐt_<~ =rV-`IT O.hθq #W@SXC+kƗ{9 g'FFw `)!/EaA" p{hp">Tx0`.bw>"ȇXtWޯH!1W!`daie ~guŕn<ۍI/QZ@nE=7FM_|,XY3gBn%֑qI!{0s=Y,]>p- сEL;ǘ_5]G'zlfY,k>w `K>;hߤtnJBTkCN~EzJ>ә1(!">ˣk+o!hDOz@G7ejxխ=+.M˧%hnb24>Y1s=FϷ!Rp|<UYJ\c~xjZlUv=7>=â7>4xt?;ә WH<#tF'ybG1҉ξr׀_8P-҅l3Xf }=EFڧ4C"B)%+}sR)>5t `#j7g;۽p%/\B\B!ZZuTU,^VgX@ c&wB!DKkA %2$Ŕ9i($o[Bf nNMB!څcg i6iiiMEnyk%Xpj(,,mlIЌE!ύ2kk7E!ⲴH`WU Dm[Jp("C!EQ.dX?5j&'#fikԼǮɵcqj!D=dPB8Vpy ,}3v_);|?*=`4E c^}O}'x@Օ9v-"Ϟ|_s-h+ZdBIRb{Uc/+r5Ե߳"#'P{ڣb55MnO*Rב֟[3A/EPR n5I a[?CT* RK9~ ?ft ֞zYHKAaL˃y!G!p U]%][s f0D.$BԥI-E1xmLQ >Y3mJxQ_l=I]co{LԺ.?)kΘ[qcξ=o=)b|*W:H'-zچt 3nG*0{63#;*G|z _C;Dgܚyq]!*vqzTwo~W]do3}\̟s(Å}4FFurkDA,0\b_1m^Ey7Q5"u!zq üFe|zvcSNEi:'ŗ+r L~ a(fH DPVѺh)1{0Zٵbk?}8`#R0x-ĸC|~)n}0P|u?(vjZڇefߺ,IrŃm[‹]Ez@"7̜a~Zo 7@ r<NqFR^kڍP9g@c$4P8ZX,Gҏ2F0dT4ҵq.vn'ٰ))o>i"zh:x*{{^~igc9u(J{lW= nu"r_yGN"2F"d\u_,h<^x{qڅ ] %j7j%?=W/}B\$`hj1}Ҍ(n$b\ۼll|ϣG;8|1->{'`j6I<;sR #gP˅ $Yy]Khl;܉~ D_L8 g-trPCO/ÄᱼǬ̔rY7g.]xç'>YҔ{hC8#&*Iaa3=]`4ӽONዟ8ٿg\P[ʖ'/ 9 Wj 6T'aHSi#WОZ|M'U\z|O"{ٳu'GFUZ|LД=*$g=s9?/OS<3&!ĵ v Ww:t ?#jI'a?`R75$T vpCT,F禎Pa.$+u?e{A~5>6ICC3\E3̖"S9ױD˷:@SAZ9| =`Q&ԤQPj:|3`K|~sgbGLlΉH $8討h4Wv{N]pD舓eW۲C~qn-8Z j$v@cR^pwEֺy|!ƞXA^L:&G5m_Eqor>ƷZW/\y|jx (CNU(6Jz(7@^Aemi졡䍻9XNQn \qO\:4C݊-Pn1ydgQUm .=h"SOY/yxI-D:qTz2_L+* I9Hcj !SFry1Z%'Ttǐ.:RwN%Y ^ cGOgS/ؙ\J!>qKRY`53za´YM|toG Y\g5l9V%4q5>5ŢU$We1wb̯dZd*yyU?x3/rG uۻ96*H:YD`/;%(s _li4`֌|"{~镜IP8vkHYI<\5p6 f3EQfѽ{G$pJ) THٿ]HY :"ΉyX[$;}ٖz%=vN׭ sؗm!.xD3 R/g}zB;X zNK4'ɬ荗B\EY,˼k.GRK@0ch89:w1ybB3S;Yx wMG[3zZO{7LO?sni=M.R_˪ߗ59]Lsso2$־3=Al*NbZ7C=ٺ]>u+Q8*P7 (ŏ&埘9:/ Or [Xt 9 RAuk!ڶKO,-k0J-q8V1gJ-]DbwծoO3|8LLJOp0BTx%W=9KB\} ;ʈ|=ıQZTHBXh x1bl@FMSt=VpFߙ}ڸѼF>3l"\tx~} s?RHwIruoCޡ(DBrÚź)0vπ Gw?ǖf8¢y;֏NjKӏ>l`CX<:%ҽhڃv~Zwºi Up:f3:uvMDH<=[Z:vt-n=q+\=gf׫"q/f w?|cNku kwlRABrs윯%r2]rrދ$T5gg7ظ;V#(~*ZmgmʬUz/Nw O> qj_CsQ y"K`܂0MAϮ\C"&9fl vmbɫϳ_[M(9B#Wb^ӝ FnEJpnWE}0kdqԍ`sX>&5ߴ[Qʮs`3ZYDµHU3<0u|^kOkDݏgX'|}<7v_Gl9hj/0|w=xwgl\Ņ['^$ حm8WFuh0nxa+sk$w$Α>݌6/+3nB.K=CTxH+Ww1.f7KKKkb;| I˛5c !sdҳB\u*3[9BId`B\~=.VlBquI 48H!NH -4K+NȮ#;cnƍ=|;ԥI-E1xmLP5JƆEYsci9[Ci)>b|*W:H'GHVxߗSy1tY8K>]m֝4}CÍLFV)9+x82\ܗI3ndT'lm]߬gWZ16ō.T6u0\(/hI`0!D%I7˖;uYϓ<6Qџ#ђͮX+6'&Hkq9A:g*ǖ_W 3'_|ě,VuQ|rt6roLNsOy>|>g(A2θ0rP'{kBAh<^x{qڅ ] 5ʾc"mOHpj?̛0!DK1?:K҄ᱼǬ̔Ձ.x wqqfGvoϠ"."=elKǟrX7g.]xç'>YҔrVq{~p)oC)q3fLpӍ##'_lkxuBb3I '|6Y}~O歧?9Y|c"}zU6<_BNDGu =# eWB$ !y"7}sWW&!}K.}jWFeWG->ΖSB łb-&*8u4k3lp믇㟽zD@w!'wrwYtRťH_.Idb#ɑ"$m=!D[hɰ!6?1"hr_0!Dk((BQZ_ǎyV60\m˾xK?w/(F'm`؛^>X:T^nR;x]\@ nuکv3c!DA!h5Vg48ӋiO'߄Rȹ+I+u:O G_SwNWZE XInh^vJJ/M ӘqW '+h _;]zW_BqAs:y#13 hVѺhXM kV[uW?i+<=*ge6\qE;D7w۪͂Z{+z/{^/N'ޤZ&W!hE*_.$U~Y :"CAQ)>= !C9&Bq=:PRj!+׌hNC+nOԒ~ *N19>]WdfP~?欧lZ4k7DԀ´[8WŎj +~]{DW޾܂vALV ;[fz6a+(>lV;THkï]"8yaV0cKXg DRw'rLHʕkIՏh7grn7|hlj[yRˏgö֣ CVf qU筧x#%޺NZX!Mq, QMKKKZ1VU^xGxGGA)BvF$bNMk~<>r/kF`D2 cۉ,!L} ݽ p\ /?/<$3:걜^;.>p33V;^gs).$QfvjlS=10VVUs)s)˔ۧ0Cͬ36bޒd-9㵅B!. E%0taZ)SWuѫRvGZ2x8|KRXJ{ʬ'Y˭b-g1P5Kda$zbw:6|=ݱJ֮-;AqqZ\AѲgS>I p!pv_toMLT6oL@B^V bIGS{ !i0a+HTN#/ickqw3[!ϚctbfB!B8A0 \BfYjIٱXX,v\Li ^FMUt롬:峑g+i1_`uqZI{dg^ PKN7 Ih<!:!OeRh4k=Wv  ڪ0wˆt:oOGKM!O$3i؂ɭSu₻I鹜s5m9NoI^Uf_J֎d-j}є+:p_?XWvBv3=Z}e!Z1z,ӻv~sY-Sy!@ tkżixGkҬì: MIM Й^.dv`܍=gMb Gt)XrQLa4IY8tңT%#Ialٚ nW݆.o_21lJO'"{iNJZU!B\! :Վ^܄XՆNĺo>8+CYуD1vK)gva zO"z}(Ĭ'XFvvŋ>X)h\ ~ssYiGc!7|nb#k xй]ɖ\PnW ,?v[N#_t!B\6\;EqKJ-d昱ڜ jw$/Z/|J"geefpy,"B83= i6iii\+6Fn<^LzýZ׏slY5Do BѾՌͬkj'kwβQ^Ei<Z_>:G n&U$7qӗŔv{B4JFX !D p1ik~AE˕ϯR\x95 !D["BwNfv/b䋣7ay-'yq[7cl jLV֧cV(ⷽS X*ٻ;3d2CB tDAV]*ֵꢲ.PPDTA@ $$@BzI&3s IH#<̽9f>/y-u޿m0݆Zk3Yz麟x{'6p3U Q|6 94:\ږoYyOL@fPezcx+V-e#1|/B(,MƋNBo'WzJLQa̿=Vnp9414R] u˖LTI IDATx8J6Jʲ|4/.i2囹uH!,ޟnU'qxd83X;c$DHX8ӥscB#j zUBF$B4B^Xxov[yojL0_$gZyU %A+8uYoVτJ%|1,L:/ƍ %aaއiXJ=%tw[ҏr9QnPe%t^˗^ϖCN47RV g]{p,ꘝB#Bx詇Mq*Ͽ4i.Wn&ⶊ`?ê lPLi ?rPp6 gQ_rizs9Q\K"?a$Di2qY(cy-yɼuBl4 6ƪ}T0NMK7h @Jy;=a]WI)wfR䔅'B46z@%VA-sRv?A~JM AzIM lNK>C+2]ϲ !h$`Bzp3?&t^jVuV%lS`뗇f&0jeIUu:!8!h*&&iCL&F WVuE\{?W,T L*+|[(lOEi\/e,ZI@%iw>'0,X1ė U|E6n ;鱳}zns.吀A!j2?¯ jFVr\vyk IJr.猚59x{ Ai?S+YOd:&+GJ|\wmKEF3a/:@;8qt]r2?(㶑!\105sKHxzuV?x\IT̈1TS0jڨ46-֦aǧ# 1v3j$+`K^ sW OP,n" !(G!h*T5SNcr`q){_y{3aMƷV),*OdXO{A%,\wl1ѳ.F@ÒEVP6xyfWT5usâ1̙;X/WR }`'m>N]}B,.ACuh(]Є2GosU#:Ɠf&vGʟj1]<3}qz'㨒~c&^q&}Wl\^]ٻJaxOiVF?3~c9a; ~?˪߭oFqd-`pR}lx 1sk]Uד:ҟ~>x,ggGe]bn/ΒCq;)l3!.O=s槺ϭU.;W}Tӊ5YëX뫼 [5{bP4RwyOÿCWqu'YRu=;jΧ^GuuqՔBPtx= m`Qlz8(7 do>MN5JsOc>CpY !AA]xh/]i)?sq@0*E9 ҕ[جMYYE+8Χ<U&A|6}ބ$ fS[nP︫y~|Ihb'"zEԵSOoװilw <Ӻ"n⟸*+V^`<;J@} ObiG8?Ѡ" FXK{^xgN3ynȑ/ƲL+Nb@p}l~3eY@@Y q?e;C߂uc9K5;z k&[J!C o H:~ң ' q7c AW_UQ:쫔~groIq15v^h^:}Xk/U) m14L$}uO~ +;>x9?q(° ,^ Kc0(8m_o$Pu Bs!c;ucDJ U _cYk;.,#WB !N!DhI*t yw6fVl^:;FrMD2xMV&|䵌2HB@8YeI,zu!A}L/|b%geüQ!B!.*zzv9A؊ /Pn>C ׉xtfpl9dXމ&_k*j=A;Ѧ'2b.{1+8I*DpD40|4 a+ԃ+.ktsX,y!⢔_Hp),,W}dZU!h2BṦVUB!BH!B!D$`B!BH!B!D$`B!BH!B!D$`B!BԨVz*CTR&Krԕ(| De5QXߑj_ Dj8Tz.hpMUK.'3r/*h$`eX0\ idX8c%:n&/bfU^qu&=|jLg;/nr7f͞A_V7Y§ϼڰ#=m&խVFƶ|dJ?wI H7=u>lދ;܋_B M0XJ+fW.vQ`&+-u1,B=)BX\ksEhvsoWVjC-aoK1aսh'#^wz<:{tj,e/A\{KooBqq2K'Ep !KI9%DG`6ʅi4B(M^5n'("Ehe3,oDuxxC5T-ilZMÎܮnv6$h|\zߐVPiӋB[ 9yDG'_MIQWGAzfafv?j,EvfK^ sW OP,n"N`@[?\30*fiVn.f#)eqƱX%]PsA\hl,{k.oJHs cRx~m|h5¢DW:dl\uHJ˦#=Qnb4,ɛYh5eS7a0ɌhvMn3|X49sPG_XGs=,;i+qQ" θrm&;b&[ e%;+'0cԥO}{09s>IyYO<̟:0{9|2_{M6%6)FѾx~0fJ7" EfיItZߺu7qՓÖuxoaN= ]:P:I߈@|Y^ qG#Z3)גũ;1qoqe>cq2~ɂ\bV,`"{p͓uo>n2e{ J"urRMq ?8?, z(O-[W\?] 29o<O_(c~(k>[:rÝ3O3|u'\gQK z44tz[G1 ϽTCgfξQK{6`P-I,z]`72(]g!ݻ{AYvJT}WWB@Q/i ŴoE-S6UiRxU =}}\A[kGٚs,CkV|-޽G1E>{w.~/ID@?NЕp:Y%]'o~L鵌ywGp+M0' {"(t(VO m/',C-`%,pe4nn⣮h.,Sv^{9񩙌*Knw`NIG8G.KɅ;Ehp)]qQancJ/QRZ(/"zTk`? X-QLQ9t޾xVP-) j$ { E׳pvͥTpޓ)x6Dt&ծ>t9?_78S9VΛM%ZUQ+`>~8 !.NjJl >>Ҩ8(ȲANb473@vN18 [lVlM@"mj* 5o;o[L9N&|<\QJ+xfw?~µ_0'χWG_FMU:S@vySՁ5o,ӹNFG.-ݧД*էԶ !D]mxInllQ<|~Ύ|4o1YiTQtԡOh֟چG!ZV0ԅS,aCa(rQOx%A#&rc;w9Fm6U(~ +לj #|۪զrfo͹_ػ0`T܃kM$dfK 5Fr k_ӝVAf0`>n ?~1xyҥRD~:/^æ`Û̸{*cMw5OܯoY4OD%k <=;߮a^W?"= (XcN?SgLgJ״J@} OiG8Fo٭`u0Gn:7 IDAT@;0}P2o:~U0w'zz[4E10ʆZ%qY9mȬO'"YdZ0ۻ zB45b-i?)y՘YP35(;gOcUM!i Jٽo8y q?^5tZyZ.>K}g`:カpJt8Ðj={2KRzXx.Tqqq]~e >]BJ$'>niiiGxF}FhaظJϽʩ9WQy t͙uuï\c1@@FA)>jaNbhwEsBD*A=a!5Gټj;E!Ùt$ŹR[z"E P*kU?#[U,g޽.mQL J~)wst@<ݮ+fI'|F_BFŚIҶ+uOJ~ylh2gko_AmG87Y"JVQX|7JwdƟz_;Y d9CKy vuQSEcBTF΋Kߓk[0E|>kʂ !E ը*ZEU~jHN+M`Fͺ7ԇ f(}?7x53m_ƺmq]\Bjz^KQ !8-z_*gTVvo w򯥂 Qp+^YZݼ|nWsK!!B!PNrZRUNOjr7JVϤXxЛwbf "c:Xk[^.E?8yB!BxE iUT ķ-|)m<﫥YI} bk*Y2NlB!BxEa*\EUG`BWBYͯIE\슘4 ~I\t]3%'%t ԃVwc#]qbv(§-\v0Pw*Oa0y$zl*^!B0xʩ竨zEgHj~+GEe9 V|I2(tecMefX1xtٕ:=Ήݩ? \>2\B! E e*<śמyʵ)"^\y;]Af^muU<磃s Q\7\}sqhەꖂ\(]іB!BxE 5kUNu +ϟgSWSzp$7S!=nѣIB!Ū ʩ1kɯ&q0g 1QT ^Q~{8#S˒ZۺB!5hCcrZAG$0rBB>bڷo"!B&Ƥn@B!BԪEQ4 Ei;T!.Ҵg+Sv4PQsaUŅZspXr9YFHlf&B@?JTblF,jUݳncjxƁ{xՙPg;/nr7f͞A_uY @Y >*k;ķ㩖PnmKh6d~)so<}{|w^)h5zQZiZlO/ ,ÜSu)KỴ/#9 8(OcuxiSg\ÈhcNr~]oٝVS1-֕B1Rڧ= 4ɉ,|ێS)$wM]MR%?mgzyYO<̟:0돓{9|2_{M6%6)FѾx~0fJ7" EfיItZ,`"{p͓uo;/wCS.)3 @OP'jcgY7 [5?:,h$-兹kHŤ'Z|̫'~~*@B%BT}BsՈN$~Ѷ'?sLόg`\.3ScdUҏc+*rqJ{ugfd++u'?姅[("} cydx<^VnO3#_m!ϧ>w`K;gQK z4 O~C^m֯oc\e Ce(ЙaTh90$.k{0~6,\Cw7 '{@.~/::;t%'Y'p%]'cFڅnp||%眒/w55ъ9K b٩LFFxKێW4;N =cV `0!DancJ/Q!⫪5" "V՚OPJ:C̀N?QS/ހt[R 6|)N_~Z6iD|L5W^SJ~X"GG%ZU7+`>~8 !Z+Bf Tnb4旜{ LA)S>JQt6+fzS ~@VV 6LSX  jr)_ ;R)J}yc1sw2:u >PqCMpE$ !D=lmrdl_ ^mda(P=;rFj~V)}⯀b$<ؗe%E4W~!g;20#lGq{7q=>>&HO1ѯ[%)v$Jg>]sBYZ*x:wP'0c !.4 MŖk9Ös-kwbC!1{xcLٕp}>q ғQDۑ]8We[4J3~clۗLzt&Bcw]],2Sp$-\18`+͚/;rpi[s|RɼBVA`r;',$?5(Wm(d8ΝDk9ZJqr{KcƷSI]BFրm_ꧻ-ZBv>V&mWrб)w?$=])`P \9=++ !Z kv&I&EJ~ylho_Ar-Ds m)\[Zy5X`K]g3mg׺(MZ[G̞4.5PzBbu;/jr4/On>5Nd!DckA-` ?]NXbРn|wX]?˄nLb~ܛFFvV(5b:s+00 -`oS0g˲y呁5Jv l=t ىKǎgv*Zo?._HbP +'sepd7?:@@xl9L(pJK+B4YVKP&xgE12߲}Uk?G3N v~c'(pl kҏYs@Œ;kjj}$<,-JbpWk${:?!gi!i GU!Bb ,"/"XH%((AQW]}-}+Wno]xqfgqTǑHe\E_"AoX7!+Oԕs>MV*B!D 8M…VªSRNK}:UJݏOQq&h WyAG@ڞ_F!B AtI2pe+;,-}OYԧxFFVj_(HL2Odŷ[ nf\iɛG&YNpH^KC=>!{7,ݝ_YF؎l\}0+vܓ1B!B\hWsA(8RfKAy[y[+lk51 AmYI' @zn"C`䊛?d:RY(rke+}Gn=mly>tڦB!hk]/F jfvL%Ӫb$8}ʡ .GC"L*r)ㆉ"Dm߲hA2JFk 'c|US O`rY{uJqJ{V=Q 3)=|k)B!6b-jQӂkBU ⚻B!!)81Qu'--:#+ !B!j$)S :3v; Eߚ(S{׼Nt[!O &7BQjUݳncj|{OϽ |ښ`Pk/u/)s !H$ !D=  .c`еօZ46-֦a&QoZ ɉh 㦃  ! BQZ5E%/兹Huҧ({v7wB#B4[*ޚۇ)Ru\k1wø?μýxc4vj6<ÇEc3w*^",tf DNڊ|x:43aDt5r&;b&[ e%;+'0cԥO}{0hXY*ɧ SH#[>#ʣ#@&L1>ʣRְ<_Οf\E`} !w^ΠGӣ:Ej]po(j_ѹzV8K MSP mU A@@ӡSUT2t:q:8*)B!K+vgn :C|1d =o=ǻ'Ȝ]s瓞1(r6H0\ݎz:t:w(ztzWˀNQ) zݕ{陬uP 00l]ufuztT:u<>Fppw°~=c[p͊;ѥ@[?p ')rw30a8a) #x䁤*xҤ@~$G=IiRofA8}^$By5 =i6} IDATG"| #QIR&N'8H`vVԑWZtcDZԳi[ߓO[ :X6/58 S||ƜGg0zY?Wo O^N^Z 8YdcYض-۶=yml eyr%l,,˲m_zmcl,+,lKmbv,۶cw<׶,}:eY(KzmƲ=e1bYddeg,k3v6e?yM=U-!|쭏[ eL+^,w`wa|n2jw_"WñitcVotGͪ]uh VX]ѝ'$g`ͦsX c-\'Nbo 4e33ygM% MSGs3m$h@Mcd\r#KDblAA6%gh (C9_R$1 dHI';ȏ"H)h]7-BoF \WFj$:H z&D!h@zu|pG.Ћ뜑{04գIh>mpjbzx7vagPr?es8ȱƐWs@0 Unlw~ ~.2 ~{F k#;7K*l .iC04Q9I 9NԶ{csy?ه:"DAI{bT$)dtA PBPYߟ O|S3A6'IBܨ&.07kj)hMA]:a\3XK-qF7NHW"@^D/ ~!" Ba@Y[+4΢O;Ҩ_?MZ-kI$XhNSZWW >/XGRIl+F<JJG%Tz,I,)$${4ɒτ=|I~eg 51hR hIUiRH45h-'WEnRvuk= ֳq.1JŅ 0g.,A 6NcuSoos>_ťoV͕^Ns ziN , ڕ}8nv%f8Ͼ;*ql `0Nd/%[9 jzM,> й;O4Wn2W/}p)sxt~_/,jՕ4 ../|5a)`˜.7w[Ғ8SWrِBPagxlRVWPR\8`طv.O>&sWPG}3qe+]_㮻/?hX4t~.~tv=faJj\ٱtٹ5}jW\ JC#B}ΚX̍Ϥۆ?"I>,`ԧ/ghϡm 95Uf19,Z:H 43zvp>~o}}$`"U(1l Ip—yWo!R*IOC*J̪\ I2(ʐL$% (Ccڗ!#z봐AO$]~uh.RC \bt~$р$qfՂX=6dy޽_I,g U6sWUyx2=b.;f=8ֱgW`Xr=o9tKy.9Yw*/?b[zn+WX՝OGv"^pU0d(Ɵ\R24/\sÙAfѩ[_}\rtqؽ;lJ\):1]?ɺ{H |4sv-_DƠLa;sX #&^F8Nu=,/qO^cc^oOCQgfqmx6]K?dBΚt90ci [L,= 5nf?*en׸?ݰ`Z{qɔK'cݹ[7Vp鹩Ilv>4)_ZrL9}wGL_ .~|!~_gEw+ˤS.STϯ&MHﵱُF_k³{>ˏD/ޕq5]ֿΌ';k0_8moy-<\'9a80)wW0qΥMFLB5ͯl,-EM!BbXʳLL$AH2, lH*fVRh,H|Ф@& )0(W&ɂip}C+}yJ\"A)G$|R9  ֔E)V@ii)mǎ甧WAtn;=^x5U8dVf;L #اIX\Ƙ.9(3:;>b kxr%\Yǥ߁R7nmKqgWw&Ҷ,^F(?\{z'0]?y+'sɨtn|.e=/?{fdSNnw`)rs՞M_1^P/HndM O1c,VFYnS/Jy9@ qw="!I!X̏,ؾɟ!)!"i|NE OJUyN*22$6D7& 2Da ڄ ( hkՖGV (Khq #BpZ+F иBJp%Q,к5dY*mbȍѝ7~:.FJk^S.o|7۪g2ǓO6?Ke7zWd"K% ˘&Jp-{ _zw[Q >ooNJiF!=;m)/ZqdOf%O@jI5U;c EL5`@eQE""x8]+q3[JR. [ٔM>r&M{!1|dHz憯!Bc1W<= *!ɠ8O$~!.T!WZKYQo/0)<(A)5)-)a& ^/hEkGvqYʓiW#]:B#p3.` J\! uɓ [_!EnArb &Ϣ`0sm7ٚn ̫a9%عy#{.GrYӰw]g "ND CR.e~K`dzYZϑi 4P`b7#Caq \; Szp. P6>yH2%3xw{WHW.Eum(8%]`*>ڑ~rҏ:^{N>wmӳk7!B +ITg,ҧRkȃS$ 2E@HEt,4*FlI` >Q0u]\ȃ+pu4R^Duq@8.P B MSK#@ַFyRNoUzsMnàLeKTm ^H{ B.\z(\*©pj1K#ca9?5'mUK0'h)/a az6~[8xaJV@3nC!>|ې؎8 &]£ϬggsfR^[w6y 7 x-6\ü>ȥ׏]"\?iw΃?yO`Y,/Fct?g$3_J\IÖUڶt(e1cowc?%9w8}qeUwp"D8RB ː凜X ~* G ,RX G+r&ʴT!]HHw7_~󊏮؟_ƺu()mYL/""D8)`[-ly d-Rf!(,~+D|!<)0P "~TP8ycҽ:U`HxBA#}=1CCC\ :W6UTQ;.2Ᲊi945Y`)vyvv{չ?FegA+O9²q~" D"$IJEVVR K*ke[ߍO_\?}   cmLG!Ba! ۲>aP !SpTO6MmoòPATAyiC$$I N# Bzť% o" H&a&驴:U˓H.ڑ)Iz^,HRʴ ɨ(%qAbڀԀP`BI<`<E}}Ig!BO6"!BJ)x+Ky PR(K$Ӧ&GJ!0 ?uk8CSm0TgIF\EI%ZJR!/ NF W#&Xa>5pA% A"AJ FWǶq9 RF!'a! !Hʈd(TYzv H&R5Jj%H)`^ 6rI&ߧ ¥< MG$('MҞgAi -ktap]/KKڄ餧v BF`l_$/ZJ_+B!1ƠUHkhFY"DED"Dp@IOI'J ˎ LXR};:eG4)El IDAT Ѹ6CaH#2YU:0f%(Gc@#3$ aiN+ܦqLN]"B~XB| $HA;4И0Mr9U5#5Rz/[ض&hhC"CN5,JY!L*ТiJll,IB2`5-IJG5QAt@JҳNz>LV$G)]\)jӎLh$+K`֩:^}c(gh2((Ϸ4UUsaB)mp\"D8"&Y5A yve'BD NNXmۗ.Ist*cJFiU %ɏFiU1!LZ-9XgBPA>Z#^E #dȷiKI?m4h-_vd4F4`HОR%)uQ44D!BN4D!BBlKc* ȃ[2Us!5)PDiVtSaH!YY$Hbi4E;"!ҩBJ˓4!lv\ȣWYG/ U ֖1 % ڋ>"`$Ryheg Hm8Ne!B a!BG JF$a ]P"fU5 ˲'ލȂ )S^!dVJa&Ȃ_N_Y",IIIC$0hO]׋0BI+IPI~tÏ(X_ ~*WS1#%€-BjShecY Q1'SΊ:J~Y4ޭ@f{64`8ay;n9 NQ=8յ>5ދ".xtO*492 ނt)RS?Y|Rr[;Jtr>&cnrƯl?5lXVmR~)b~pNV†o|XH7o " RY,B{k<;? _󬩯eSm~,0swo]MŜ?g?wsUܺ+t#|`}֟CzS oeRO[cE-B0{a_m;kH8݉mKRRCn}{Ȣͯ֟Hp<~s?}q0T} U6~h,/hQBK!W7گfHQi,E"ђw+_Lu)KYO1 zQxHhqׯ=!\wXG P3K9 ţZCm>XPM>d10mA.~\6|j}ԳnK >u@C]=cPl'r9;48~:l2m=#B8a[E zǶ2{8kwУKbIka_ҙp39Oqgט3\q:sT}5~V Sg}.35m6Nҫ{RH- %E9|sPdk@r~ }*ߎqk.TO*Җ2XL,4R{DB `|C1$' Z?KmLJ|V7M^sȣ`I,ey5Dd8y+Q(i0WZ*K)iAgMmidX]^|m_j(j'ԲY7rnEmC> g+b]d A!226獣Q{J`jY;k:oWWaBι^F%u6U,Y+Ǿ_G{\O~Dhǝ08Θ,X ahC=9 x *oX33~ّ̤HԱ~,Vù9_֟.Ȝb.W 6/\N:s헮f|j4{ ٽ'pw˯O30L_¢tBė#)K (Ȕd} ~AL’$'4aN# T*0($xg04`gI2%٤GTa0AhE $d"I0cAk[t(%RKZcF7N6q%cRgc53u^[2[.-UoHLҙ^@c(0vI!_Y[+4΢@+Bp E>}8q\s1?CʔY/Db33oF9K!E^8{KpVA35))D*:K|  bdR^$|Q0Fȕ.^dV iy24ChZJ' & 2 '"uB!\=NVQ_82*M0V*`i4R[HZR4ɠ}3Di^A9!uhaȢkB9팡{7tM]1 51u4,N N3q2WJ5NЍ7{_|wt[_r*?o`=>S\3sȬSO Y|J< n8%};HPڣm6nD]O?ϰY2c. ocw䛮gúfZ4+IpF}9;8_hE?חـz,4g7 "CrqZa0p:UT;@s->᯿ý+_Y-S 5kg?`JdquC sXi 0 fǵn~fzM,> й;O4Wn/}p)sxt}W+s92!pNZINUvǿ-gAf||3YR9Ul}cqߎ\v- 5S΃ Ҭ]IQ\phk{<+A{> _%s8oLc~“œ\sÙ]fѩqili?KHܷ9^qma6x8hkYB0{da| \)svo ZWhZLѹiQHP+'ӣ@Ry/X{k*LQ2pTesk)gQ$qxn>4ѥyn"0׽/9y=9{HJN̚ǿ]C7n^MMvX-mq%ȓ^ojiMZ~>upOo.tle2ox~qքtu[QKi*l .iCRJ$m2 m\h,A :)# DIs*?J(=jm8@«&|KGģkY>zuFݮg8v:pIݱ?U:{m GQ3<>yY,\ư> Yx(áh]{xIN]?彸濮fD2<|b)s7%׻YӟN53~SO;0tϱ f>6-|;_`t`Ha%m/ qޤ Lʮ5.^ɔ7+csw~-~UqAi˰`Z{qɔKsUЇN51Nyf3\?R6u"+|" V+ض4deޓoÍ{_F;Ooݼk?ޙ10%L_Uˠr2onV 6J=&p͜]笒\yUjyԀw >`;>]X_.`z͠?nm{pc53;UsCcAmgYHe@۟ax7?|x'Vܽ׳zK.N^~I4 (-mGұ\U صٙ{9+X[˙пCз/G"}JVkS{'r= hbm*AG;x,XќHxcT:م3aMx2j׏m^\2/W]*ޟz1ydy)M5اG a*s8&ApLfZYoeXh-d ,Uc(($/Y-U2m?P|Û m VQw:ذbo./C£Ӛg'ڒuC{V'Ǫ~[6x Oũ#ߓU5ч2V'(їwVdC?؀} #:Pk[\Zz=X5dǁ:kZSiT% " OTVAcbh\|-~"\N&M0 iBrx8xf| (?VH.(,Y ETָ@{)enjd0J*p}ٕ_N(L}PyX޷}:cw4ϥaDZak8 8&=8y_lߎv')XƲоtNSr=9׭C !Wv'݇{3ˏg$>3e$eYt"#;W52WZ}R!gt.o%@֎O&apRY@ID>E"8ewؼ/dԵ kRm6}5Uf19,ZۻI tf'{q7?Cۧ^'dys^~2^[*~*j|Dgr>]Ō9g4?zEռxat!8ct Zka{et{|iO %3]$'A"&25 @4)x/CfoUziOSRO`H< 2D} ߃`Y zi *\oAy_79 ~d!UI;H덯dH$('$RGt@I ĘC2b:W ZJ pr '~_ե'G4ΖB=@Ś$;[X# z;+y:vU|crF,vjfԧ&! [3yf,/ڝ} @} >5D<,`WeA#/CP佹q\2s+U9`?"|" CÖw D!e [@]p t3PBa U2l?p/'عqtHJ*CO' C{*2P UaZ{y,_@)/R A*e:2gARF뛞=˕hPʏGR{d.RHx맥gDГwرq#Zv`koBX}'ryei/n_Χhp >vn8ѓBdz|) -zWv7屮0O;bapK{a#a*H2uUp:e`^3M'X`b7#Caq \;|}ye .5f~ o53`\~.ݛ(+cΨ'>qٵ'N<D^gt^6ve{2mItBøeܾ-aNh& n k;0,)Qrz^zG%ovl0 =8ꛐ#V=16s2L-V/ܭ}8nK,)΁Kyme@bsU@+޾qognM:pޕq)Q6-;M4.9Ԯ;`~mG鷹cQ?&:v#)䄡,O,*vlX{ʩa+{d!gM_g֎@ŒYsYVߞEː._dk6$v@>xZ;e7G~FGECNY# IDAT]=eӏ3u`؈Mlxrږu(j/g=Qd?o+3od9ٿ|'-wq wkiU[r]eqRlV+,}+iӳ/5\ڹAʙa_Æm,"BV; 2g KR 푄ӭdGRFٔRXOp"5OMdszdWIˁD,iVN-{/S2i/h{囤h,I.Z+/#GU\Z@x (T&ȒTL`cdoOԇyֳ/CG#^Df5<_#"Nan (>?{]y깷Y| {JJDO4|kydl|bG U (\Kڝ<>k/զ+c֡{Uy{|f& _~"ȬO6e'xKyꙙj< WLb\hu,Ï@ndkwij.;'wf~O=S¨k?u5;[Sf3n~gKq[cӥM63d\3~?=c(+-AAqq EdiTګNmeIیETL&M&cdd2v?!PP)"Ic4tƞiy:C*4ts/7!Bt➅|]_ J^5J(J"纸^s95K.ss9,^sl\6Gc6K6Hc6K.%7s,YY\JP#m4K,a-A='\|gr\xM\:Xn&lbҥT1' 9mUmIn$n 6h6{~`+G_}WM6fsZ3˯°ۺ)%%%0iRNRKIgm"0),ߊd# L# 8xD!NJm60!L& 5 > 3!0Bjh0X6(]J@ xB%~6}2l6Kccc>7Zfɺ9R9y͹heC6H}CnMC6K?ݾMWͶ8tډ"C~5G?¾qT]=TVn[ gnʱ G={ 5ᅂϐ@|/ V~ԏշ^hK,kˡ@6>RsK~^ oRX*̓hlKغd0![$*$#[7~'A΁<"↵h(>|HR4\-UPR`=2R"L" 45Cb-F0WAC%26My!gi꿓$H A0$H@vdk٢d3&s. kdyAq'/mM䯤7_aY@cabh# ]G@ƚϫ ! $Hq t(ZުC`zahK87f$.6bފfI ~_s_B4c,Jh7͏!iͥiCl ̹w@`{p! $Hq tDWQ*6lŏy |YV4g65}K^ޡ!4Cc%(4TaI#ֶ 1!^p ~l@7!JS-p~J A{09A ؀x & 近"l@bg8 #2BěM{Q7oS8'FhTW~)~3BͿ !M"r^WجVyh{Zr A :&C : mp&bMtEߋFJxA2*5 Q8=ͮ[BĮ2j-< 9灰1S=x盰փcL9[xkD81OB9эLZ~Gk&H A t %ȷ}/c9DwyEh Ex6'1= M(Xn:&*dIʫ $5LaQsN$|(o™MGyĉn9H A aH Aǂ AgE xs٢!ۄ4YQi*&B"|vⓌ!hr 蹅Ę\{-tVǠՖ+_Ȼͥ)pR# a@G}n}k0A 9$!I $03;AF&j mQkbD,ݶEA!<GȁXfG @cWcס6 \&I'Ð A aH A i1ԛ{i и7ׂ6tAn|ڳ {拘c?Ujsd!~aD忏\O}}6$>_0B/M0O6FA< j3/V }+86?G`ڼl|*?X*2y}t&o.FA'!9Ag  Aؘ3*z q392rGȊo3!o, >bPGS<Mffb爨m#2gޜ6kQҐR@ĂO¾I*-yx+=÷o5=.9QY~Fl%o@m,/d5l,ͤq=Hذ'鬏۞-Qx>ZTmh |HC :/ OG! y7o&ǽkEF,H)U# -ϱH' Wyi0cؿ,ⱈ( +9ix+Yar@j };AEdSV[pFfbkY,> 8_\9X A퍄0$H 4(}_Ca4V?+1t dM7'"~߆6>!C/aHy!0øb^A׷s)a a_ _,,)Dvct9cMT +8>t ҍ^%H Ῐ0-ݐOʒ|Qa:6ojݔĤ}a,:]D*IסX`s1/ alAkmcmBjBXB?7䥥9 6Q#-__~[YzBv kxxl=0ى/$I[S5ZǑ?_E# @'$->Q֡IHvb?so`ϨP l[w,`ʿ&Kw,i13- Y5,Zo~'Y6+'nްd@oc YH A۰= 61|pwҩq,XA}+[<4gSOq~;fgNڟ.N[f5d Sλol}4|3L_ׇp0b? 3 xEfoSFnd\{F2GSoJI!c4R7-ZH-VToZ.GGmG$?7 >q :,D»DD@`VH!$E<|i }#~n3BoAswOsr8FNsF\ȯ.ޗT el/ eiņ'J*:RUF1,z.n~f ˫&16K,坵}.e9)Ċ}-#!WM!%^Ix'H' m& $網Σ1/pFCQjذ|-k{RٙqߞʡFɟO {Mfdv=q+!ʴ63hB7FۏnF{VhPZ"FK4Z(h0F}l(٪# &5Z*d#*Hh*E;Ekn&BFD!e&_@ݷv ~'Ƒ}Kqhhzws#9qS~y[\bT 0NTkdq9f0k?" ecndiwzZYrǏa>iX\?s{8QF}n$HС 27%~̓+Lb'|V! q y?`]V0`C=c;XX4|^@PͬT`yDB?1j|z%ȓm)aZa(W@6$xί扜imqsޙ4ee)7n_7ē ~j:!|cX}t4i?Kycn+ Ec5?.HJJ$Hg0dNx6*&p'3y[.`bًYv+up&>7]b[:%hOqU]xg -F#jj^[ɉz?3=Q=W?39+_ffz*LkO0_\˗<|gVsqI~٠C%< ~r1,|}6?^]ews}z|U;]ܟrC $LTጪz߹?N;sO؏^-I5Vj ߸tawX'NbPaRΜ~& ,jbhyh'yl]N)ܶkhXo~??{"]jSs\ ?o~+s Wdc==*v. <(FWw(wȬ =E޲ LЪ ,]wxVN'Iwyvbxnʑ`R^yUz:]{AJFp9cAѫ{ W?lY0ts'̠rI㖥:=c` 6ؐ-R Pq%BkT#qP%IE;ZB*- Ji%i!h؟m!(! a(@MCIF P(RN7a?<rSJ#s7(/Qu#:DOo= D<_ͪx_\ܫrˁm`[esMt!CA`ly4؀5*;Qq0TGn9+j;ptaiE}8򄣽6>䪻#mh4cl,}$(# O WpkZ۔5R8A;`u5R+h4uB%  르-Fd;b8Q<_h IAgZyΡV> 8hLLj BBOZ+cU?8]2gvEUt7[ؐeC*MNSzcBSd [j#7r4?]_c5fRQO-k3]Ί)w RH i$iK"7ymP=.F*ؐ$HW#Nh!*R P!PB \Ac ȗAH!d0X9$ v?\p7y!ޗXQ`V!QCī;C cEBF5AR&}ڽȲgylN}^@ON<@uq%H#d9o km'dJ1AI仧0{oԶnEGП|Ȍ~ nr yG}! ƥ YWAvEYFg6\e77XUt]yC˙Brә1+\|t~:}G .Xȇ,|Pn DB&Sv9 !( ATkE1ګ`?Sʵo g7b(GVӣ+lp;uU_tD#*r<_kd)YS1=Q&"V~Bq%hKw1= Ѥz c t}G+?S$H!0VGqEkkй9:.~ƍC'f~CM>fTo~t)r%#vgÙu+z6:>LV6aiR̺e6w6>7AU)[7>FC~y:Or5GЫT] W,|>9п`8sYs# QDV"z|=ډ(aiqiF2>J A' )Vnnk眫H9-+ʇ0~zOmJ0)p`BK*?9z7x{%kn V1oPk$Gr򹓙4Lپmf͙iS;1֔ĻZ}'s=x_/sO2U| ʆUW?g uNyOhDSF\ }|YO-s 8L_3fcm ]x.ETtŰegjOTErg{u}l zAឤ_+W^yT!N0}L:,b FKih3x-a@* )ppl]' xIUHM+Vf x}@q-HYՓu$PX?BHtm4HHDm]ϱncn8RGRJDxb6>n~o*) e9JӔIJHR)INprpR)Rޱt*M(C:!IIgd-M:mLt:NI~*"JJtsA:)r#qD:8AHgȂIi0X#[дW"Ų3P~ؑ!i)%罺9\r}e\־fX6[;?ۘ{\]\W\k9reihl!,Yw׏W $.]Ju;t0ܯCxrC.e u7^uv7q]vN mZ B$Y le+.kQR*H(G\W:HPB!ĕ.2")5*7(BC_P˜1QC߆h#m"<}s vCBaDzHX@T۞k5J*7n| GfpVi9A yq AoF/Ĭ+ĥghqGA*i:Qh$^<".i\mSJdžHߐvQRX =*]2 T#ǔiU bm _-4#=AhS(:8a0X6O0aPàlHQB~y\< M,aGrq|Z T1XA[D$ A  $J(.-C)rrR8iǾ$)aIi ]JIIg4n2 t*JJkR)攊%R8)m~8BB،/Yx5|MVM n<ƽ!I~hܦ!IѰl.K6띓JnNs]P>y dM3%$!I $HW$%H AKPJ ʆ hQh-JP( BV[`E2-J7*\?ds(mR8aOO3^ 9_\0x\/Un^Lj닫#bBeF^<ªs;j'H A݅0$HC)!IBZD("]if: D98BxlZS0htH9F<4y< DѰ+' ِ B>5 W7:ik5x  $H`@B$Hᡔ I9.XѰ!}FJ-5B HҵWS$R1sXx d3-}A!k`=G4el $HC :<6A)hJX]k%W(#m&$!fQ2?TS"优$`!o.c=0Ti= [XA6&4ޙ& D0 iX5 ֳ"IY`/%Wmkm<%ak?kNI $ pK8Z H#PZ!!qgA pBx+.= g0*ˑBlAem0 ^" ю{"3[!LdI*H M< t 5 Iή+B5*W|d6Ϋ@/G$al $K 0ڐ˹1 !@ P-p ,1@ F/z-KiA%g"t֑q0Z[B ΃WGKT @@Iг 抱!Ebp#7,z˄dfMRB 8'?qqش]R@bE>+` [?%A :1F@VtʮBYX8 ^tmr%mٰ.Atr9^M,YX6띟f#u rHnFymB[sF3T.4"WfCRadn'D\.g 7Bm?/rԴ4ζ]W\E|@q?Wn /vC\e?{e~ɓo#x_^4&x$HWA)*Bʫڬ$5JD+G%Yo+{蔗$8qHn 88R#H"%C3DÚ:a0A].5"YT^&ˑs֓y r^ո0Z ZT``?,!c YnSڅ3#9}hv1/و͜3F0gٰx! ach&Anw;{tMg?F͠8G׀37.0d?J#ZsSof>:_uGU"ȱ{Ŭ\:eC|з("dVlzyd&o؎eяl+wkr9&Mđ#a\4MWr\yWY#6xI?1 l Kοo9<:j5g|9{tPw^w%עvKtd$!A{% V-sa"-R;(R(4 Jp _MBiTmRʱ#wA;8:EJIdAx8Ȃ}1'*iUkAà AWz|uxTTnʆyr5xHOGΑ7A |:$naupfy YRC<;*v_6귱zviK> ?{%QgIFfƻϾюXNYoY_EyoY.O﮾kDIK[G3^|kڇREk/;ǖkNݺm@QoX5Ň+;sɧOq^>?]uW_ƙ;=CH9PYSаpYVa< i(@W_':0Du C!&EIDΦM] JRk3AEjt ꀚuqffXcRW#[ς>Gڥ㑅.]sSTfw=' 98>']D6\CUM9ku0e[ +|G~IUiΈ Z*962n҃8gpXV^.-qY}<{ULoLن9Yxyl{]v1hoXmawF'ݏbY>pK8 _:ûyW9c豣~=8oh-zf< [Gka ߽WZm?ǜ|B ,?Ǐ=2Gj.d¬{f?_&zS sf,mҿ}8g\.n_0$H`ds 'vRh apЌ4#q|WgϐdڐDֻq RJG(+vV^&H"܀XyCaTx(B*TTf6ZUԴ:lU'$JBp\#9ݵH;'ßWw{]hxDf2>ަީ;`I-l~A,90|= {tFo{t//R*,"J(o6g7匃{z]W{c{[8xzF9iay%[\iMǦ^cC%9.!^Cc8[h=;Użڛ,9vQH*K5ذupNR\ E;I:GOƷ䣚tmW{lfb^]bH9< 9/fJcѮ ՞WU.W-fhXu^e RBwLoXʇSd]x_V>%ky}ڽ>AO{X:oHwEA]ٝta.@VXsNATe/*@:T4e)7S3rtvȭGIL4IDAT9چon+ u+3B$ʀ:6k))3dFKu'U%'Eeu_M&д ]=*I_=NjsTGm۟tJRݵ]ȇw[.`B6^Mܹl8\u.;\vO|{?J X7)1u>5\u@2kأ<9g @qo&^-ܣ~z޾Zn_=M=vai.Y3Ϩ5gCC.CJ")KY3@`,p,D`rl$DZ:\8)GA8V[!C<!E,͊J'rFy\%Ъ YP!QR5ڍecr"Ѹ ƕ ~9o~g𓛏ay,_ÕC*)[VnCo /T[ҹ\Sօ2"=ݺ9e]JpŝF `thwķD36nǂk55jt) 2XGΰ V^lPC.vߝvs=PI{e["Ee9bw/A' 61|pwҩf [yq=sz,de 8Wc18s-U!א݉"'mqzӛ/in,>SLd6 |蟸{V=?+0u,Σol=4|3L_ׇp0bSac4lXE`q1#1Ҁc`H16668͌8i/8Ҿz5G#Yy $! |WAk I :BGuu@⠢&B8l#K21Uuc)T +W4] xx I 6%m$V=[`Swp{4\-VG0o܍1g%wD6M\.Qȳ/nbrHDT f0wwzNH[!e+0WiRa/' m& l1/pFCQjذ|-k)B3=CwWVcko>{52Ożf C4?eg2fǞNX̧ QJG718~OT-DPњT' '%qFIǕ8^9H7|/ Yu Aؔ-ߨ!"USCj# 4)x!y::@Z}m &ຶs6 */ :˾ydX]6ӗS/>fzʍ;}&cNjį~'O2Iv">͑=!dWƟ/N}{5;a݊P,aQiU=4L8/ޛ1*wJu\;b1=qVDnz!_}):s81,w<冿0}v՗X l^Wƫ8gWpj2maw@oI?Aiؾ3_dֲJw#{XLR Ji6@+羕d3)I8A:\#!@ 5ZK%%^䉞a p?KRLi9Sҿn~6ԡHQ5x,{ x96fz*,㯸&p s+KYn(&mcDYe/8g23iҩ4N* RZ#Bz!1/q[Y:%Iymi988Bz!VUE"d&JLVVyٛ 0XtXHM~U/G*6lɫ`ɑ ;V-yWq# K,a^\ }vQ=\7rT{`N݀KRc|HICpFU=͹'GM;]!|?oK'1 p;,\]'1\Ұy)sgo?_} xCpz8YF"d?&{}?<., +"U*Dps3m4iZMfv4N5MΨ1lЈA R*˲]0I¡J3Ԓ HZ (J&(6~Fc $^h*x⬺oGҹXp4%My4>"yZT֡!8*'d!@XS2D'D &akx썀AuVY~_fߠ9,8N?'`<+y }?]Ky7| m[0=^Yg.g/d+{^9`o_fO|pNz{CGtgNrJQ?g5AfoGG ۇqm Hɇ_:}3hl& &vÚa͵ž3aYUcxq~nu{j>'3aڔrD1ҹ5^npήQ蕘\wmJ6! k#1M92kI h\0$I4} }#egG>  "P PMBEA.,ֺJBZZc(JBA81ogwr3E|W-e/! (ʧǟ. +WaOs˿˾M =Xvشk Wefw!¼4L\ƒW_4aë۠j,&uCXLw ~'~/̛y:C U-np &5D3׌){'Vw d4mK8a.3;S;j,lf׶}$jM}lɎބ1eC5hh]J3쬃]@u^c.:qA+ ڴ58 0H`HM'gcBKQ^hk}KSy kkĮPJDR&4 ]$ʕ?\•=(o=n'dEzz *<'Ufhz~s}XM/5؝.w)Qޅi2Pri ]a1GǑ)40e,zf/>Պ^/>GH( ˂|:.UJl}c]лPTrc Rɝo5h֋XVj֙0Hr[3@k\!͗v< _43.g1ٍDM+ ` 7`WLކ"bG YAz[0d(J&ɬ568TMnȊ p >/ ;b{)Jp羊~߸ɔݭ$CfqZ'ea1-tH&CycXK *S[a.76vݾF֜r xA36c1*@B5Ec* F' %YQ۶$U y,H[ӳ[iܖ[U($?RM6E)dL&.Ҝ1ZRa[#ׂ$AR0D[3p8N: f߶M[qԓT PT ܳTg7h~C?euN֯Z͆Cx&Cu%gxwytNT|oMXL(1bys,7gڴ(N#?V՞Μs>`u<6udٗ/b=_o|}x#o^}ǣ;n1{-_ (g䓈=XbGYb%F0? Sw}t?7DM%鰘A׿y}~Ùuz3ˍSݽFa%"yNBrKkA AY1G6 _3@WeZc"텃*)fgI)*.(< nz}R>j0hn*2d|kӐ2/(" Bn;΃ѝ ͐5 šMs]pp9xXLwuAPKR *Oo&P*| Z> NUP(}?\*" Xks`[ 8F&'y?ŵ+%I$IԻ8q#S(*46A n[]aD(@>Z6 ؏e:4yc{;(tZ($0I(BSrڵ')* vh|B)NsT!Mu-nYKQ/1&'58A!w7$bc'i?AC ӈlY4A4L]_1}zCF1~jǔJ1aP" Di1:~vmG r.Dh_I-u`ZRi% ָ C71)1.1:N"(&cDBA$AjIj5a'8&!l>M!)HN(lːe1XPXj]s|j+mi*"ebUH+ >-c8B $A%IU t! Aƨ >m%>kgVHJم(_U>MY U.|t|jڦdMƸ)PIm7(NbLR pdD0 t8A 8&")`ufh[x2sIkd4Y1` t*-``!Kovƨy I06 B p'VnRjvKNTR ?8T ^4餤P*g"ܘTW1H%IbWQAA*"AL~~ $>ٍXM3`gPy삂LSJAA LӒ\:TIHqжƞ^   l%  AA"AAAv   B`AA]D0  ."AAAh   AAAE   "AAAv   B?\ϋw7IENDB`DarkRadiant-2.14.0/doc/img/LightSelectedAndUnselected.png000066400000000000000000000060221413722237400231750ustar00rootroot00000000000000PNG  IHDRXolbKGD pHYs  tIME6" IDATxKv"-r -< sb ty*0U9{w\ =VK-4Pmb_ۿ-fs:PS)%:'@ZWme H@ $@  H@ $@  H@ $@  H@ S)LT"o}[ַJ)p8Ti_ۿbow  H@ $@  H@ $@  H@ $@  H@ S hv;寿ᅴZYm6c틨\xxj<>u)IV]4Mp8T[ݖ?V{%nRu?ۿ-zV! @+ B@ߊF0n{@(xg!`oooe^W[?Rpv4U]5LtuPkS_[wЊu 4%5OhHBh7f 1#wnv8hh$48l6(9 ׄCE@Bbc'@Ga< P39 )B]?S)?GAҍܲI?R5x~TJpt 4Pmr'w4)(a:w(08Bnq&0!LrPn_wr;eQG>&< jk_Dm?p9wxZ<> j} j???Zk$@  H@ $@  H@ $@  H@ $@  H@O2MSՋo}[z*Pi~)o_ۿ[-$@  H@ $@  H@ $@  H@ $@  H@Zm6c"NIENDB`DarkRadiant-2.14.0/doc/img/MayaEmulationTheme.png000066400000000000000000000045101413722237400215460ustar00rootroot00000000000000PNG  IHDR!obKGD pHYs  tIME ƔIDATxOLix&+6I(ً`$OQ<(sK@E< @/P+F$M35 3yyNɳ;3nfۜio7DW(@h8 Nh8 Nh8 Nh8 Nh8 Nh8 n>iFQc0'q-&?˟7ٚl]>nfۜion8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh~\iFm8czJ?.4Mggq3L|s :vk}Xz`:f>pujK>Y:p@ALmV;_ 7\c{_<^ky:){j煝urZySkO=ֆ=3bB- P|v|kee1hZz_֮ovՃkk=-M "Äi-R)OdHpE%"CPU"C[on:#}1?#}wbܹk+^{ū|Zkk7~f:z-/{]Z=GhIwWdz^6xwޙ~OnIF9t:tŶok+-.u$43@l:bC JhfEB3Ć%6t0+fƉ ] 4s@lh MB3GĆ͜ 4sHl6Sb4 Eh0 B'4Tؐ%4\"6 Wk &4l( Nh8zCpij4=sbp8-*8<[4l3ͭ'4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB +5MSѨ18al^Wٚl]>nfۜion8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh~\iFm8czJ?.4Mggq3L|s '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB '4@qB-=0Al^W08e^XcZP3_NՂ Ԓ 4 n~jHj{KF޸6kǥnBX_˝^y,Oo\nC}~Q1jvo
 #+nTDqe5EQxk jԬLb-beuaҸ+OSdq hniΈW"-~PI՚/a̝\dl,Ffx%b@4B.\UƽWr_ws8tZtj蟒Yw;_4'˛z}뫷X|?4^y又{Mqv !*\u.#:_[AQ1T󷡚][Ct߫*< РQK5B[S<*|[EМQբ1f/pOeZa9s4h1c4b[pSE[qB:"s~:% ;C|P 2H:OrnzT]uTU:{?:̋;ȉtZŎc~iu$[4)/!ַci_KZWUSwFH.Z8yZ˟jJnbv ƺ?w̓tmQxkq==6W-&]2YC:EVHҶ|rиޯk˯|Od?\\r6&ޭ{1ީDtMUW50{OP*ӈ[H_0Øy@W%ՂiӳpGٿ`.[Zw4;Ke˖3ZvGm!WVn,L6/Igg*FAp`Fߟc??#O$7X;GeT!~>]/MGҙN8f:/NQm*99@:tֹ|#}PPڹAՋI6b-*9wS*Ic[ǒa[-*{P b}sطi&յV= 1>^Ny~v4w*au쬺T Uζb!6~Y318ԇIBk®ORj&Eݹxe!?l |Gpֳ#![ů-HR1a jN%eQlApd s{f Wnllpoޅ'̾)O1qXvqC#si֭W_%O|#x{Pә=}Q%kߓ]8X2 fN}y2ml*:GfSUVy !nU~m_w}{/UT[VSPlpi3iG9Bߡ5p0W#N{jz3q@pk;O<4Z֮ߔú=9hc˒ݷ%!ϖ OqVtʶ~d'>c^SwȦ5P"g2ߙSr ko (^nt(3䋵10α&v7Ơ ׉^!!&fh҆W註SЅ)jWui[7xֳL3z؝flz( hr8AwT7"kr6[GZyRQU0~rr~} &Qd} ?b@"zx_$-ie;n(*R1@>颸ѣO+ShZdr?ϺSϔEf<*YRٽfiu=,XQLp>Vs|[Z_:mRصz}xdl.q0;{$7ڨVi;bNʟ๕mY!KW~n8,n Ǻ%U˯SqKg5pM֥yŃ ZPN^R 8ww-\|"O?š5n3yE`^m uwLJa mkأS ?|t9X9^Jm(9y*%\US íߖ~.lG'CKZf3$ݻ9˷њM5/I*;P -$d#s>_?DթWJDбCOE[i kNiZdǞ#I s}_璓 W~Nuޑcl_3c vz4fuWF TۯpxN:!h+)Tp|)6hK!V; b@q "SaLGv;X}]pgsĶKq`C;KB~O\լ_o<T+Q8ؕڧk'|(xsh5 8 ܆Ho>K5K{u1[(x _"y<ۍ (([;UH5JkȷZff_ [lw g@}7o/ZǖE.`l}'B+y e]/דڢwvŽe+Z]*~+`~CiapBGi/. zb[fN&:`ЙNUCH %W#"%4{wg ]9mYq=o~?]h4$2wR>}Br87ӧP?]<>{nfy6{v8x$U%m?+79]#EX(Qe6?FH[g_k;٩fR0$zYƧb݊P"1$/ciW{-4*׃X-#p֚INȫv};B7>toNcsMTpr?hԬõEJsVPE/r=9 жg539?Gd9 ڌ`˕SΑOe 2VF*~.atnS{9'"Ecҧ%Evy>l޵G4/T3Oiڸf8GRmu~r'$!쿕qbp"=1Voε/K4(8U~ wfo^(r}Ö:-kva#N ?o8į+c@h \+WUB:{5Z4jkjwLӢ*& 26n:BCC+|?$$FꍏR>t* ѳz9$$V딾\zzzVpj5 zj!!͢=83ї֤܀-}IBX{:YcPӈ۴{;V!c]OY2!nAznBQMbLB!hxB!?!B+!O!JHB!6ddd4v;mӍ݄[7߾} BX5WWWh)k׮UB!Ξ=KNN5O*5,Bqg׮]L8 !BX EQX,:tl?!BXDDDٿeTB!B!mLN !BX 9+Ba'BqSB!V<իRThͨHjs[߅BqZWF#dggc6QU[[[\\\ٹX/_\4޷HT@f_4<3w{|999`4wggg<==qrrTl ᩧBT!MV৪* deeDvdquu% E<ݨ\Nq1ۄVw`+.(X(*,jU'x7[kή*ϟ';;@ڶm] III̙34k ۰>jD-m<}xR1RX`* M?$;zB5~ ѧOZ5/T25_c6t˨.hSI8~MC5Ib3mO\jQūDf3z*$&&_Io~ e^Vg5P'7~h(%[׳Y k !57dffY :ub֭UxWM;x~'ј5iUcQI۳ ľ#; pN4''rCմZ-l۶ 77 OxӮW7|Z!Es\X+6TdBBB)YL-,໯)ھ^}g:666Rq+ȧТ`cВ/^[GJj.-dؖAV:bms :q1iafNmb?@%Bs=@%kBƼü*$Y.{iؑ$XƎ26YTi+jw+{% $fSu33'c߿{Z}ic4oVO\d`E{y8\郳_y_hcX )ݗ:ϟ^y.+(k5a<BdY͢e[9 ξ7[_*OeM ^Lyl,mB!UCvv6e /+PP0.{ˋ7݊pwsa9ŕԉÙ8Ns~Yz"T-c9l cиIA\4$nęS 8{t3Q ayT>v3Ɇ=:chޕ.6F5^FcZDnv6WSP[!{h& Θmn}iNcs&3gOSzQ=#)Hbm.g.bi,GhwO g]M)ԨWTTT6h׎ٵ%מ͕|cچ1Id|˖ocY(] e؀_`؈%Kt7Ùq- Wٲt3Cx g Vփ mEv?Obi鍦<'OPXZ$qt>-0qjnRtEN]Bq/;޾~//***Qo^su ,NAԏIA{2,>‘c kKK};UTrڂ;ZX/5C*m7U#8Y|fAtR=l^Cx z)ۼ&<NbX=!S_U#Eˣ7zWŇ'K>W|a%9bL%@E5qJ.=cݮQ=i#9ť5N NЭ'OzivomE/c,tQsT(Bl}R߯j}[F?8?^cYEU'SQfK\)[D᭩ $q|":т"(2;%<9*W(!.&~ܬ !ըgccCAAz=1yl,wAA}؅ %gⓡS%BV쌫+SNeulV1żU<>ZN'nv6ޫ'm;AM1}Z>O.<ζM(Ȉ.ѥssV/q EKNf"cE:{9@ặjoif!񃂯y=cpxv WWWфZ@3|'|yɟȘxsV !ԌZiK!2eڵ!CB!qܹstB!'Ba%$ !BX ~B!VBB!'Ba%$ !BX ~B!VBB!'Ba%$ !BX ~B!VBB!^/Q$5?'"BQ^aØxPl@!B&+~ZEٳ˗Ã>X *^W-ǟ.ף(й1{7m4g꾻eV3N/jǻk^BƁB%S`o}QK` 6^\8l,>ǒ1;}/ͼa߾{WlR2Y*?u}MXr%}ErB!jAN#88ooovQXw*> %h& 9qfS~1L3d舻شEa(jUgȓ l5)F%^㡓)833pr9a>?2fs&q%R/MB!4v*(5UUuo}MB!z ~iiiDGGW9ի1 ( oMaZ}?!BkS`00eOVnx?..>xP,%P!j~w,[ ___ʦȇ~X:&NV篼X5W\60Qx\>wWpB:fE efD=`"n;Y.Y%`o~֢ |a#޳>{>^uId{i5mcmNז^;lk!u|Ol>9{ylt:WoB!= bbbسgAAAeW,yY/oBq4d)v9v o႒zoz=F{BNm]H&?t-U>@U? Ͽ m̻a½2 έ?|Eb=G\HfLy5],YO!ضf'B ;f̘eBa2x"3fhU?}וLOfVymQtO`qn[LU|z06-_t~<9峿ՅcJC!^|:ăKc^f{EacI vbs`"^`k_1'B s1 =$L&III=&WvCBKX, ^aḑC[ogzc̬oIxBK]9;8)j>v2t jQw4q5&Lu.pRtl5xգ{苼~~:vz&qe̬, ,]s'xKɩjB!܄Gx!K|E,+Bf7!zPRo+:.EG:|w>cw׾=<%`ENDƼěbjjB!vZuȐ!2nܸnB!I1e0ul߾Ν;MB!'Ba%$ !BX ~B!VBB!'Ba%$ !BX ~B!VBB!'Ba%$ !BX ~B!VBB!-(wRms~-B!hl҈rիWc0*|_Qޚq4UU&GMcov:t }͍Ţ9d-5ܚ &S]1j~ ɄLN(8)& !f\999z}NE; k.ݧ.YŎ<ՉZhٙYX5;lK1_Oצ-Fk!BX&J~?#'O>\pV,deb!Y.+~ʩwqבw>tg$N.%eX'--'_{^}@F,jIؼoY(BkJ~?cT4"UZ3$ם->sBwxl0+ ~*[V3WODT+lAdw'/ Tg\5XRIUEB!*d``޼y5Z'uTx+mԃ;~"RΚJdpkt+X^B G-EΒWӼKbhʥ=,isג6I3yS hux{(DD|>e˰ =J']A!V?/S7dVpgUG|£ ˵L/VKSu86sdz]!Uxᕱo?O΋V'Ѿ>~ 䫟Y*ͶfPh%gv579_ûEz|Z57B!gOޫ|~*X֙3w~mg~cm[&Nҷ♧L>0k~:I1%c9OE u&ƲPOPG! ~5^fܐ١_u۟#i;gë(wI$H7EzQظJPQبz^T@Z$Sv$DJIy<;ygvy.ӵXyD)SqFFӒz֯Fŀk4{uB!_=hO|'r#]^eFWsXq#y }dB13yB IDAT!wįѸy~|C|%odVHoz6,M L-˒8N/:j)1;{ۧ"o?S(Aiݬ!.krM2S<9@+$B<|$+2x@r\{ <o i/͕aϯ'h0`L=tzM ,UKҪ];lCtSI40msVh͠eڭ=1qf1.˕/ۓs^hOŠoq1:N [i3{=I]J v߰Z![aT~ _!U,R\\G`cMS(S:H&1nUߺͶ2Dfm_(R|O5̖:[ 7uʯ;8eHȡUӴB!Ȍ=VMkYtG/ 7Gt Ӎ" 'G,U{2u:EM|+W(nڌxNq|]:ˈnpe 3fsq׉ [-uPi7b/X{QfK'B2oI2Y]^ńfq7_pͮ*0TpĨ+ٸS^ɣx["F!.gWgKSt(7?F&n=BV6F!Đ_z8'3hpznBp`ԩӍY9 w7-1Tq܊A+`ӃKM#:["k6!ݺV"v ΕGZӦLj !7ȧ}sGy5fgOFTp1`<}O ']OrBѡ9'ML]| A7qpf8QJy5!^oDvp;Um{̊TчFK>bZJw$Pp!"|,K{>j'%U T*&G8)f'B$ sOd믑l1Z^/c:{T$q6tfʼWEPi8#F#6jL:};>t}B. !7Sl٢oߞpwy()Jͪt}ԓQ:2wŨ\0K=MS} ˧t[" '$$]vѰar+mHILŜ[=.NJT(㉋ƕc[X./?A-z1rm\\_㹹$B!n#_ mb|mʥ}{}24#9kI:WGGMc3UN|huӂgf8Twu!įS[2b,6zQ!Fj}Nuf+}pB!Ŀ$~%ч}tB!O9~B!%$~B!%-z6Pq!B9ߒz/!BO. !B !B !B@^bZ֣u+RślpBQ2 .W"aȯp*WiTS<u.^[}=7`~'-5D!N9Ω4,ah {o8]\ɱx̺wv(w*({4+F?Wr9z>HR_ErG!(R≱S.#Ad,^92'xkpKJd !&3~f#7'ѴcNǓS>gL#t%%\_}57:bBQ\HWD[`*J8]@iHjҗoǚv«Cplz18>VCYoGze;d)sk8C- //\b?a41{5ccQ{ا#FOH8e^k^q|ꏠXb }Q8o?f%qR, h'֒6e V{Ci4ױѾ{gmg:cW,jF魤\՜U'cԖq8nwE[k`Xq+8tj{LI:0-=C(fI'"$~ŎRw0㻠FH}h\]Ip=C<-EAqFa l(VPơ\':^źg IP*<6b{52(4MA .:‰Md;5:-cIY_׳"-d*xîӳ89X3r$Ϙ- JpyiԨGP帐C ְ#R7ؒ)(A/Sv`ZfqFm &uPjݹoh\F6Xpݥ2vmڢ(qv)xhX IVK# X!$+nzu-J6a>?}ql=ԏ9i7u?0}Ut׹8haX@G', hX/eEb?IC%XM_ԱM03NLg_m84YK/9ogkHyk,7k!yf*!6%UTTGqqS R'-͚9;S EѓSo\OIBW\Q\n>!yōGniKG۳K+zU O= ,Ɂ h΢)_z`7nv`Lz"xW^CG?K[*]?7bYFʴrˁ[*]yP^Ǻ/o_˯B Ɍ=VMkYtG/rEn-ƣ%BA?ut.눫u{L>(zEIA+wsuGQ {~g=9WÒ ҿ|bvynQD '\ϽNaݍfo+(..@|v⊢'疐 !Y$+n5.艉عy#N8:_kI~- z?fάeo[F|L~.lW \_7"vW4#et*Sm/-%sn￰.9]SQ==Z](ܸπ[,Ѯ<ȧR !xȥ&(:cpQ4is ?"608c^?L~rO,)Gި7&zYGA$S7>feʜP[`tL_7L8FbN8e[ w+٤phsNcV04m!K6py Cyݧg9$1es]r`I?!y^Y´t3;`CŸߐ?ˁVs[s- ID^gy3:X0;xS8ˢ}t4%kÑ9LɊ! -6jDZi˶c7.`y-eZ,v"?.Ohi3SK}piYtuL,E؏^n@y=׆cm<i\Bi 2Wj[N!Ŀ$~ŎWLűOBeۦOX[׾'R8n( =)-8D аnNZa8<>'c:ڙmX]@7Q8l}(30_pȷLfR: F1j籬U;ѲWSg iYG7ɗqP4s;:+p#bT,g<C1%-u>cH ^ aKw+X3vnQ?{`߻1v .^'c]q%cҏBe}v7: .W"D_3<B!/®]hذavI(v(NyT0'Ù)NGm)h5GԪb벭 !x(H'{|].7$b."{Ħ?Eت&;),ߟ !&(:H֊kEsbQ)n Ht_#B!$~Xc=5n!9~B!%-3~ɱ1*!BqݒUغA!B!JxxrW!O!O!O!OhZFQQ1HM^͔ũSS _'į(RKOy[;Z4mc]D&Yߧ86 zMu(voͰDrĖi;B!mEbes*=G"}ީ| c]]!#<b\ާhHO4\'S32 NJ yjԺ,ٯrpCG~Gt5ɏuskVHoz6,ǙKxP=P tB<07gb̝5NTm<1.|֝s]Jf )Lc*ޑ yof==֕5m#( T-Hvpˎ,\Ko(󦎤е%1p:;:6Q{UkwS9wc*O< s21;\MКA/ˌ[{uc⍱Wϱ*1Tmk|qrky%^ І11N%YS)q$$ lNB78bF~=4:t!({9O4wIX SœZA(QDܾUGTNb;H RE1a20YܨS2Փ/5E;3=d *R7d5k3q;dd{O>=Esr~PI~ BȌ=VMkYtG/rNO#QS)]֏^=!). PuN(14.du WwRuW֮܁(?^*פF~=WQŀ97<œz P.e'vt PvF~~9 oLgȐHlHYg苘s-<"6ϲepe_h01*XOWʖuCߴjJ뫐ta%|nSLBi`+N RwN۱e+.BPįQpoƗ0mLۈ՗'bҰ' ({>j'%U T*&G8)f'B$6o33fDhTŚW å`FD1w,"oɰ@]E41<}f[VW|?Z|zFB!TKѰv cXv^ۏnk4d:)Zdrb:u4uEBJٲe޾}{޽硤r^B!'$$]vѰar+eM$bm8{\< "xcB!l$(2z&ww#}{}2rȽ0.BJ?Qd:͚^T-gBa+(EC>:ycB!l$gB!(!$B!(!$B!(!$B!(!$B!(!$B!(!$B!(!$%GTur{a}aI' BQRHWE)Op|ԭ-6.cF묏O>֯6 zMu4y;xM?f)B{OQD.P;:,_޳X H p*ݧk2?~exP2s!}cS9BAG!OI@TaXhQ̑ۉ~iÍrKEݔB!n!}ٻs;FyA"B,,ٟ[;F {g;J_a2$'[RY#5":/\ ϻMųl{ٲ xnw7ӕe7gڼҧe 3iitރ ڋ_ q'M !!_,/?a5,/OŤaOP=VI1|&O^Kn>*UMqSNمI:^mfg|Vω bG5i[% KbYD<ޒaicx AޅLPl&c3_~ΦyY&-mCBlٲEo߾=tAPʼDYpzQ0B!NHHvaÆ2W$ˢHILŜp(x8xE}0.BH?QdM|G&wd=̱ !OŽ%#b`nfU0.BJ>D1Pσp؅BRB!BB?!BB?!BB?!BB?!BB?!BB?!BB?! MǜO--#R2%DqߤBEQ #f)N Yƥ2?:kÞ\/CI[&fЇ[. !(IEbes*=GOņѸ~pL]$+6aRa:?brĻ !dOI@ۦF/3y}L*yvXC3]ƿ@زdT! 3~f#~Z-G1i۴T{JA茞UuwMaи\hc Bq?HWD[`13c*v͏!rg:߸73k!NB|wLZ4qsQ$Y0zi0C){g0zFN_N:Wi4o󖏤] :g NǂWUZ|gmF졥̚ǢHqH]ַ4dǢz/L?D}j>ړa#Шtk\?WWH/oPޝҟZwQvlc\wQϬsũ!+|N's@SmFnIIįICG Qk{Yr"/N}lAMLPM')F෸y&D|Բ,VvT%0߮qN-A!3c`y쏿A'q' [CZ޼4 W`v2g@e 6/y =|Sq˷) fK1qц1skO3hLyԫY|#aqyj"+\2M>_8P1MZ g.ii@-8C,ac_B<$+n ZŊ;k$uzѩxB'c/];7rկ~IARfytU޽#LC#{0&6]ix^v02Kҁj2˵D2oH8][ӋWϾ]d+9_'NW8ZҾzU6ƘPk ?(+t6}\mLINkK\ι}so|qrky%^ hI $k*\niGIL\!Ŀ,(fsJ#CӪJs$9^'|Q⣈J.~MS(S:b;H RE1a20YܨS2Փ}'wx{-:j'%U T*&G8)f'B$6o33fDhTŚWh&1]Ό[J2*gĘо-u=~ n16}9&Ui4C??;`="Wjs?eY7wI 媇P-E).-BwķϡݢhTuS>|&*6 t ij!%e}ӽ{CI)RI=%J:>ɨ}†G!"Oᄄk.6l].E@,T̹ b#?cYW*EMʱ-XHMp.j!A+_B۔KwTЦ#'ꀷ_m5!T-'mL;\~/BSsVK(-1us)Sj4cm! !EB>D1Pσ[!BF BQBH'BQBH'BQBH'BQBH'BQBH'BQBH'BQBH'D3eu^RP(N"_񧑑^ڒN^X!'I(~zm,R^~aOkf!$-{3-D~|=m-'k9OǬ?%B"r129frD_@D mӃXHOIŖ!7;.ⓩKcņ<5u^j];^/]ggyZLxv=|hd;ZzF )tA?q'=KX{oQX,3٫4cS,zs3RteaN!B2wl0ʮrġM{OyIYU'y[< :n!$~E$˺s`13fbkXh2/w{M\1+gpΤEq\>'8MB*9dnwldCK9{%?ytR )u_N<~efj8vIy':WҺ˗dbz*84f֜)Dgr.k^gVkyRƓpdո7Y h89y6SCQKWq;_f~܍aj蚹͵#on z8OMIgy %> ! _3^A|';&NfD^:SR ȝs->/ NRZ9|&oq |LD` eY2:<ө;Ja¿]{[2 Cf$>lNOzyi|,f0-d΀l_/:j)1;{ۧ"o?S(A͖mc cd -ׂfИW~ FG&7è6yNi ѕsH_|D.'?Wd)|ؿ:vWq.Qb@3_9\ӀZqXƾʖ1\2{7ć8.\r3xR+7=K?w p>iDoȰw?ct_o %^;j51dp͎;ekc;ĉ#yUB7gb̝5NTm<1.|֝s%Jf )Lc*ޑ yof=xc4u@i}~Aj@Zk[vlgZ|C7u$u-ŇgQ.˕/ۓs^hOŠozGli_=*cola5cw:xo.gPt$y%g.\j ιm asT5/5Rn.#$&i`Czn ! ;AЅ*>%{|I _(Rn_GTN ?RTQLL&L7ԯr$_!d +kicK11BiƑ'm8Nw='4tJ<>=n'r/c5nc{O"tz.u3mojֶ|b Uڴ˚ox&4y7u.P|]Bڗ¡߈A|×hԢB#2wvZQ>鋜HTJyEiOHN(14.du WwRuWaKnK91*$' 91)G=RW.[&=43,ؕwu:Bt0]3j 8:|NN$IW{LmW-O教dR$h^Wnɻ]^&u=OφٻR> !Ľ _1]ՈC ubgڍ]^ńf؏! ˞ xw_YTTۺ#s뇣L 6$ή8+ 14Ff%&==rLl{WwܔmԀ|<*3o2oJ@D%wgc̋V.u?+IsY9vų;Y>3MEJkbX4sm{*{ ou OQh}~ĮCW~=F32{.ȥbFj@j*g~XRmٝJ&:[= /ھ0\7&u*冻s ջ QYuT<.eç6ADnά~QXxV.m gw;>NŌ>3~lHjn)z&tavAlNؕuҏKmIcb\Vq܊A+`Ӄ8 a r Z&3|Yjh3{d.\Ȍ}sGm}h7֍]DذXkXr*פF~=WQŀ97>O5@ɟ1@61!C"yu e5R/b"ϵy1ík`S~ acۮNqGټ4[VXm۷]+{XȑʮǷ7Ư21vWʖuCߴj3|PCq JNd&Ba45**e;{#=7^i9h 1\TYv"BUsY/Q!^& 'T)o7|g՟{ar^{1]b!㷾 {tPsg#}y(hې~`s+.mHW(7 }6{ KmKo1iؓ+=xwR גOzxJ~ov#ojvvW?_~s"H?{E>p;=l${Rī(]FT^(H HhDz Ml@M<ϣٳyϙw_&عp>N')3mbˑ֢n_-|g{Mqڨ /eg.W&eؐiڮScyL6.J># ȽD@ט?-ٟaTowZ-ϓik~?G/Ӥ@|f|: + m"wgsYJ'5YOK9_糄8ͪ IDATϢX`2&r7kI,̾'|':PO|Vhm #mܸQر#QQQDFFx"*w&Ebg{3ypIAAE.]q@pW28JH/ XvL~xYȲVjH.wcbwc}G>bYwU d ֡ }j}:EAYI#fP^+ErUZ~Ȣw5Bw5_~&޾ FӠ{_QT 1q%AARB~  (AAJ Q  AA(%D' PJOA #%;OiFk' ¯HT}FMfGJ%/ot *?A|.ѫ> c6ʡfTFu<*qu;C뮾fqSH޷ӿe{ ck+ж< XIfǴc-_&t"^A6'JMboV**qbSʸYZ\:Y1&aw'ɾյ }E]Ia$Pdk:0yt .ҀaX3{QNVI ˉmJFYlq s¯{X~̹߳X<.PuQoX!Wpl,L^<IZ3Hr %s4 951S~d5TlЉgQ8N]IhB`(i]\^y+>Uiߌ)8=i[!9[f]ίaҠ?oN@-9l-.8g-}֣)z|*RNF_z豠>)i3ۉx:?x?MԄmC./Kֽ>j M\KZ~9/h9 _[朘㗏 n=|%@%q5ΰ ,8lߙEWZ]צti[Kړ~^99=ނϞ m_b=acZ)~+ '|>/un_|a U}TlYhl@Jc8Y$X2&`)OZKFRWT#FFźc*Ư$A^X,; EXM+nOV7aGBڗ ʥ5spa%rgHy}?/f閽sV'ٺ)/dwc<31Ap7ƛʛx<<=Y:1b8๦Vx}#.:Ghl8i.z4Ѱ S]X%*W|ªVB<é ifPc;͗sVq1?  ޼j~;zΨ[mϊ99[{ff P8er S fq j_jZx翃2n5^KY?S=W|\3oBm&:Cdr9Uݱ?aPӆ4on_ɳޔ35u ͞]Ǔ>!ͯ3'IR$[uwwx:פf)*(Z.q.I*(bD 0y)x$PĊ.ײ-O$?[J*.W0MH8q:v-b쎽Ljb S5STS_>C_Gmm6ړU5TEƿL@B^sZIU4ymɓ>Ie̷>Eyz]$߯hv!K3з['sBޜՍdd PԜs|$ U|WXpԞjG%7w 9ˌ`MM㵋'++wY:s Mr޾~8HLoEsMr6~EtL; #Bh(GtLo#ܷoȩXJM ny.E'P;k #4j2~^QGU7 3Mպj}'h?d=6#~Ut`>X|dxoX&qd~Q V!+zΓsQsZgHq_O CTb7B3$P]NgbC; i=rassa];,4yfs0sMSBll͆4oY 19ٹz4КTzЂmOD]0a~r]V4c M>}0"=q?<':U˷j8.* 4kRM?ϝB&T=CbIApTeOIӏ>/va>eXm[r^ q{[=6MT0q c]R$Did=O_MA/?F0a'qx5ofʕA]O6,OuLV"@ @MԫRCq;YHeBұMD=%kxfiөSe=eHHZo~bC_A2wzqk%R~w*? _KA(J K8sWd8!D<?Jx1ܦJ.ߓ7''gUdz}Ӏp?uƟ}/ݩcS h:1狵KŚbƣEwmK}BVߌM&ze(`#nQףQ||eXr[9EV ScyL6.J>hP@Ԭt~_Ú54k͓"JOh6Կxu}LC»\U |aC:V]&|':PO|VhmB-VȔL?Yb#O~M| iƍjǎ"22^$C53 ;ݝK E.]qU@pW28J׫g$ ~Yf*["FRGU{}KA^PlԔuL;yl[ާmr(bYwU d ֡ }jHw.A{E~B,9}6ZqZjE}Ϋ߹A!m5("  .  PJOA  B)! ?AARB~  (AAJ Q  .;ٮK#Pɐ]33N^J&[Kxfܿnc$5&t0 ŕELIPq^qޓ0_HY+rj4 w], ۘ1r ] ]_{1|@ɻ#M!9[f]ίaҠ?oN@[6͔>c(B?AS+qTl1l2Rka]+X2ޞ`"tHjr"~7jӨXwLed5 :s3Ay+)yI b["qdۚ ,t3G<呯aҙMgég9MoFJ5/AKK-ul!&G >A_I#j W٣oMjl;-\[ӻ_OB6'>ٙ iaGFFX =[szgDp<*C:s=|9gC`(Mͻ߯ጺ%nOږbMVE>Ou}S#k:6v_S5w;j t:}_]ʢ͏λ?o32ﳱDx4~>̼Z NAqrG &c ᝺S2Azޝ …G!Hqy*"QZuIj:#jr {bnOɁ^HWNGjρm% JTiׁ"T$[uw ǷMM U:~>EgOI! +~wko\º<>ܟZS*2_qPl) F 'N'B®ELݱI͖1[ df|j7՚Uqs˧y˛զB-]yԶjŦw۴~@ՖDžϛL"_& Ԕv+o߼AJ~%d"+$WJ&)~Ek \I/%v?ݒ=?n$#Kמk#i{5ōEp(cˈoӦ y폭  G~%x|Č+Y2"}% {D>l_LUoAu'2U4\;ul*^g0|cuXUxT(.m Kq̛U9En6ReL~o֒:]Hڨ /eg.W&eؐiڮScyL6.J># țD@ט?-ٟaTowZ-ik~?G/$BAvI7nT;vHTT:$I* I! PDQQQt҅h7n|qW Dw Ú3tHz} }F?.AA(D'5e{G;P+Y1 BI% ?HV>AyT3$  %6MD PB  AA(%D' PJOA  B)! ?AARB~  (N^! %($IE'׾i<֮  Gܹ屐1=z'!w,ۦZ9֌ӽjvіt-fokX1 /--V1mXm?Y Ċp+5QKX272n<5y:ůfVL߶s櫉CI Q BQ`C`9i=D2^5 oK1?%O%1&$$z6t`'Ad]X`=g=۔6{"'%2W\*%ctn^1gq+޺5WD)XU tlS+&w8s9[5i Ԍ2֞U+G`Ʒ[rvM1g L!ͺ!5l>30eM# IDAT8xxҲTA5y 8~cź8r! ҺKLqĽ0sl='F]3nTqܳo5w9]OH9eELbڣ@C»\Uvİ!d1=[H<_GR̷̞=[^Ħ H:=/a]+X2ޞ`"tHnh#B&LZ);:lʁ&  ! l}< A t, g>^yb=acZ)~+ '|>/u_Q7aGBڗ ʥo'/bnaJO>?J^n^٣|> *is^q+{#O=0l$VL) ,ݲsԱez:3f+R3$^o'1^.ǒ1 +M^y| $!>1-|ekdLl:sN=c~@*cn0'C,|=iU#,x5]2!'_^l䫵Ѷ_q?|l-(?lni!Y0} @V&W{qt3>߰m|#L}2\^Cnm{J nN~= \}8 48AsqZ _l"s,y_}g}{vO־=xx3qv8u7w_ͤeԊ1Hehr)m^?CԎe{ vvWFhsD^?{MZm"Zmy5?yf-Ll,^v"kNO<ޫ]k橏>mxr Wۼeէk9eH9ϊ99[{ff P8enRyx|mO^}<3"y{ #':MAW㎤[Rmϔn? kxvtߴx #Xm cN@4y~m૕P ?7%$cpUӨ#4Jdpb@izRh*bF$@II"ELV@yz(4M_ngE7u'fM&E7HScCCPC+Q#)&ǰ'V!T8.5t欈J;-/o1  =+޹\xRz:M|[~//[IoM@I:Uu?RQժglgσ.'חJ!''@GF}ߨ?cج}y֧}NGNqvcߩ[Nר* -4| {j*i)߸|]Ng9DbUܜi?jkcPFd4mM]&fRg+DI\R6<-gф|^&Ϗc6mKU;^[IbSe|| 8dkfweReՃ)'9BWA$&.WNAdM=nme x?r͏L"_& ^^n/XSPp>O)h~CCPp])Ƀ)ա*~!v<"EąuQȲ'K8=waƾyoA ?v,hj)VĊ'u+7meMճ)% FRӸC>}-MFdgΕGȎ.lau<3#@\vMμk[[F6JApTeOIӏ>/va>eXm[r^ q{[!e~ȋMKxF[<%>gHO]i2rs-uNNJ+8^MRϯc7Pzؗm^#lzKv42ЮF䈞Mg vr^\jy5gLNcm>mWM[#rxs Y|+y?&M5 0+<޵!MNI4ޟ̋Wz"-dTy^.5GʽOy2:$kͿ _Y{f3}ZvqkfZJT{kKɔ`D@ 2TTM+\9}_ᷣHTS2&B2U4\;ul*^g0|cuXU쨸9lS3VW)l_LUoAuWw^ɛ/FytXU>eM,p9RZ-㋜Eyx]cUN;Fm(>ml2] H>5Nd3󟟷 -4󱻹oh :):})CF C6nܨvؑG}^"CC !22^!z3dž|xdW "?6~ׅ&eo,Iq}^ݙ򻴉OE.]q/E)yM^EݗRc~X.eT(뇷Eэ,[mƋr=:Ȱf׫g$qm$]4P8įW|hѡ mqs`K%faV%6Z֣g0~ޏyPS1;p䱁#ly%Ğ8ޥ8+P BJӤr&PQ\ovOS㾇ġ^AA(Aht(j%AAJ Q  AA(%D' PJOA  B)! ?AARuNĜ&*rhlTEGf хөC5z뵸FE@4(Zp :TdE^ pf#!c4Ȱe" fp k$Z=[h2 Boғew!I**#ݠhpe ##FH N;, *a0q: YˈrFINvU$EEFFJhJYNU`;qTZUYb5 zťb2dY(Hded &/,cgawfc6{VT /UbpEr/[ŠɫaŭJdgˤZhF^5ՉѨ9L gP.'UP7 pśHkГ< \v1bW3g1\DVV6nѤǑ-t0eL {v&o= Ʉ,e@3R xMh%kF:^\(,[j5F\Nl;zLL:шFp||}geaɴga4@+(ndN"aDoP&m8h5zZTM:233udgmӥFHH%2mZz6l?3Ltvv;݁ŗ4dfdcDנni.*Wv( F Ki6xIRr F/=>36 /f3'NR$'R zL#&~x4:\N?ӊZ@=N医<0OD̙$u}j*OacMZm^:~=Tv.x~;ERq,~Tα1|KŸOxL^"+=˜̙;WY5:F5/H2>g.T7^cv2 w<xTtn N,&LCB9ozYY*v(Bz "*)wz&eYmuZYv#Ljb2f vkA48]N ^^ȲՊ[[Ey,g6fҭ6^FZ=NY& $'Fߗtk&l&3&p (CJJ:lQؒ nҒޘ 6[Nѧ*aP58h%ɥKJR<:T7l}HMNCr;PnTDZۈF+AVAj0PИ,$]aIW19s*[DPP Vt2,=er%ӎK14d;\]ܪ {F&f)#ΐdCx $Z(hЙիSPp[ +Tv۝Ԥݬ6'lq)=B,\K6ʡfTFQ7ٙYded4"؆vZ1~d8;2b __u]z2*ɤ&fcd"9!I3heA$4ol.\ 7VNJǑԌtt\xhВhxyp`6hd@JUր#e>^(JֹƓa#i- 9)FFrIh2iUBƀ@3% ; 3Y#I 9PDzF,L-s)>_|HIM!9% VHm.ۇN{f4oI'pHJ A-v+ Ae(ϖCpnq%qiCܟ1l^LOT\MaMLzy3q@݆6 =rg>I-|6vKlTIZª* _Lmʡ'РˣClޚH@v4%QZ܉9p7P*tn|o)4iXlt3is!2"ZElu;j$f'rYʔ#fŨsL elY\N5j-V4j:NwĖHŠ$&\!bY7VAJ#dfh$- ȲkЪE%rVNRZ{aweFDx{`\HGBV@JPnL8ٙv6kLBB 6EKv*~A6mQϙӱԩUɋ_!R: FiWhP*I !\:}f+ J\8u )}ddŠAt2恐*Uș8r8m-CalqX}H9Fzu2́#T^ȲɃuMx?I=s~a(%_i?{fYQ&~{9휻'f bVLkd +vň &tO蜻oI?8̀ ySUoUy:U7IF D\ǫf zxi&l濓b Ox+]߈˞nfkEbfe.Ù{!i(hpz:N4cd\n1Nhm[MLǹtJ(d14}| vZt5˖gavJ?(m6HNiwlRcdS}L{DѠ5+/`x8}Gqmx<N#y`b6]2Q(Hg2^Kp))Yz;ae"ou:rc6q;]d1:;땙E Ǩ 0<ET_6=pu>/&LN)iTWUKmU\l!fP"S,{v OmzU>GӉ?PI墹IțA6ehx$5%fʚ: l!,깧;fi7:N֙PaXsL$ IDAT\un|~uw{{ )"X4-}5{XkQ.䛿|<֚|ɳNwNS׿ A@'_@^*Es|' X+fqš||Gm7}O޴sݚm>ߏ=6EQP2-3W/m~u0OVy7쎁U73{2"@S~ ''H% ?'/S{:C?|L^jf^í߸ gj̱ۈװ~Q'88B Et+tMP0_&>71[>Wl[|gC'}#%Ge. 4QXՏ.F~a~/,_vfq*&LLt2BS*hn#$s 6L<`{"k.0LOdBp?Ţ&ʂ wEMAZgph'YUre<%k#Es08~$q\6|M$'0CShS$tit̘9= JOj"\6VP0%m8zJ@$'+ik'Jc9Z| _$Q/d1s5 7@K] JA$U2TD4wu7W]}9Rrٲe;cSxNvl…NBU^DL, |\J8PۆdrH~svُ^ ʵ1Lm20<~8FS?O?z (Ds=ˆ9>_?mQ_ޏo$W 'HU_R[9_[?Y6{ 6V,kʥ!|OaoY5= kqqM\QF⡟>>adsrrmF x~C~x'[QTL'ƣV&:5*('FEnIe5&0T׌g'*0YPUPJ%g0:8΃47XV9`A&R*io C1^3J?JI~.шLٲ^:qMTVxyloƨlPȗE=a'Ns9}adEA][<'TQEoc8"3"4Ϯ$JifvXh:%{2mud29n7ly:K9E4C4 ]X",NGP5ds*~'@hTA;b~Uj8vM9y8 cu[Vp\}!6}}UW|B|O OMn'3k|$m~t,$$),IԼۈm>q^R#Oءf*3(QGO1D >q- ţ/aX?z Rykh˪_)yzrLqi'QW-FHp5Xx7wkmT vp%~~w/̳W}-Gz U+x?0]'VCW9鴅o(oYft|3[#>.\?ܚgNsǏ6nnJ\/I|>C߹7|!W|ش=WX\koz7+f~}pە|a AG,;?~,m+++{9UP JA.aeQ1(Y'b8*Vl*C.RUF4%R,Z%I*" P R]efT@J躆`,Dk6 bMf6T]kLXl oaulLh%*b-yvޅ.KChPf, A7!ft]GѳhJUfq8Vf20XvNMЛk"0Yv1 CzJ7>F%"GoAӡXuA)b d dًfL:$ UJ:m$&1s奋Ip\bXؽflYvE ֻ`F~~q#@0TNRquf/Zp ǖR:!(#S:^ֽf.a]/‹N^/}ƌ  8iH$11uP | >{ii=BR żENq:a0/b*}:)Y~$ kQCJz+߅[x | m/4 M`Iַ_sNe2 W~{N[|> Feee[g~'M#PW[3a("E#_.Z!biDDيc#uIx}ҩ) $h ,ZI#D4"#< fق^,! 6;LX4l3𛈄$`X<(:N Y)򨆆bG7ĢQ\n+EFEb14l*lGl`ē)LS-^A X壯wόlG)e <vQQ*%nkEQKQB0tJchA?dŁ"- D^?|R1?fh8M&6PA)bllA 7LTɌR%fs If ݌E)e C;\DS%\>'Uu#/|qzh)wIQbGTEAkF+م{z] =yrKI?#1EBr?ge@*D+>dtHpDCEBE+f0I`10R"fDE)Q*iX-6|>?llAQbY, T"@LM.@jtT.d!l&RrEbhTIJ(T5I6rzBEW͸2ZDS$ BJǨA-)h6t"YpV?DU329,K^tp8`0?NFplq &0Q*QE:DwӁh죩=x~ F!4]'RWWI`c\ F06tSs4b^TA/k1`Jts=]zW=rx3s^L"cL' ?]A5z:}a-~3Cw>"| n\DħX vj>uS+]۹_/W|af=^?^!}EX$NE4>{|%cq 6^xlAMH횞q>~<xA/F/^*g1 㰻 /@uz(%KKy4"S LO(dJs.lp9<#HfƜ8qlĜ93#ǺMBQ^JGK3sgD64zd23i /En^f_x1jIb xFÄ'ii XU)wW]Cz+8u5 u񏽙n-w28NSSZqtg/bB O<vgQɌ81 lF7d8ŗ^9IߋdqRWWO>wgc tSG[~'U  ^ֵxeK+"3{wֵ:)5E4 X:r[Vl+̂?y{>9S۞dwƂ3|˱x7#b3*5<7eee3N+.H$`32!*㣈%!ihl0 ښb,lx)A.8CеQ.[&61Z6366YMTUVs]T|"ņ_Ӎ b5 5{f& +;Zyv,6>gb¹;xk/CQDx)ϊ ̮X^^NH8Z`*=refOwQ N`7Js'Vr &INʵ 2g21@SCrIZ:xb6dٌZ( ;uޞ~̟υKئʹ5 x1<^'/%ɱqnZ9IED4fFt,v΁t}&X_sK-Kxǿ\ʶndbb;vWqekhpdcΧ\BKٍLl-y*AjE1㿩XJCB wfy[%_j ?^ΆO}kvPiEQ潋w]'.p sK?āy5q:{?9<]n*'ȿta~Ʒ> >Ibu6Ȑ9h'~¿}&e &诟%v޶ݏgU͟dt mzYyƙįTT;X3,ZHNř! vl6$hyN;&N /IG-,Xfi6?0f X4JZ&ػc7A͌ roo"a(*+#ds*kk&N@pTi|.ˮG'RIunx lUW]@iNSSSx8;7c&bKOv.XpUSۆ& E F3H,A*bQ&gqxTY@w1_?} ~?][Q5I};~[R _,ַx!O]eo6~0(>&J8f_#WQ͖I7-b_im&ڵ3ikw T1Nqqm$zÁOmg՜>=Ln >/2"b%j :5 SSWxO.Djjq]G|̞=-<%RWbN{;ْB, ߵ]2H 53[c*!3{H*gW ӿ%.06c OlPb6P̦Wr k3[&]d)y_q>ylo1_W2+++;MHan/aCu*DvÆٜrI&bVLL 8rd+PBEpfϞgv ~vH4)(* u8ap4/E%?N*ppZ-hKS|>KS_HPD\t 629+NZ-6v! != ;u}Z1ʙ ?g`8N"W$ˈC._ IDATcVJ,fW5 dT,`ƣS4TH*d|tCES Ly3=.b0Yc*>Kgt*NMXf:;OV{Foށ!8^ ń]ee/*#g)jY@j?4?$ 9 DbLR K% z],_>Yv 8_JmM5^W{vPWJߍ.܏`ѱ:j( inmC5,BTTUzC02hH̺K.A4(3>03p)$] P/'cbd(FƸ,u=zvN ݴ)fP.a*a [Uh (lcb"N"h_ BtA` f# =@KSZĵ׾&b)tJ$ق IDc)ܴp$MD 8^&&"LsYVVVVVV@z[---bH.Xeeeeeeew&+:6,1PL&|"J>Dbq!,*n}@ hᰲt2L=#X/g`v"6}}e`ɑ $06>kSsEw@TVz,X6lr I%"DS}+JfD\&RԩU z{zhinfhj6o}L2,Ys D :"x}^*`D$ Xٿ`FGN QT0μWu-a{%/È wJ!K*BD`ym2h Dhtdn"ry*BhA2`F[7^})]Xj9gx AT]dWb압YWR%Dق,0!n9W_̜D"Q4U'>I.[BSsV!X@!uwa ^SM<1} Rpʍ׭EЋ0#>WסTylf4$AG0Td҉8{k`eUԦYnH82dSWB+=yΉcD%1Nz.jn3[`9A!tU (b *`ӯΩ:Yn $mݎ'T]˚akv1%(ēIL &P&Y;c%_t)S䋙Wn͜Y}U%,<8$- vNˆ'R\ OD1قTVq Z,6;d߾N:{ xl$biC$DIFE Js)NDP,He"31hLPNT8IeEzU(RQ[W(Lj~/ }(S8T.O)ZR z=(E,1LL ݃N/H40 $ t@Bd$Α#9҅Fx2L}m ux~S1yiVXA1_dKؾc.]BPK 1I&@0U3i*GԷ-++++++q5~`dEL&Fcx]Y]arr ˃q] %"MՄ*M$xyr^Fx!kEp`m>4ǞRW"S,rڕl۽DAAM0CI=vQ15 }{eXPp]H}]]=c,[>LﳳzE<_:NkLL (. Ԗ3w|M3}) ymmrDxpȩ&),3B֖VjP8(cYI "JEe:(K 0K EtUlЊ ~FBUnB>k/^*s`'>7wN.[Ɇwұ`]E.g Bw(򂥜S 2rb d' dGQU_C3@D"hH!  jC~˟Flzjtr!8F{{ NHLF=&'1ce" -DQfwP,eqyAՇx{V~kyIή[VVVVV7v'0D N$LgaklFAUDD[%`04MEtTTtAC tC7fb.I!37[w8il ;jpW BU41"kVn1sњ=|Foo7, *^z1FG#HffP r1ZZڰV6? J*DJ8=̭9sZ EYAa(#` :lĘ=o ᣸lfuI$l6.:v"*$c)ȲL2<ȱoK.eKYV]t W=Wʳ}vZ+[Hy}_H C?ᡃ?j_uKG&_Aseeee$~&D.d$k]Qɪ!̈́#aL&*kXb5Q8}b_AJ9`FЬؐ14Y4Eee%Q@@ h`hH28=VN=TWqD?C}d s1M˃ ! :tH :&"1w\LMME ;;o~'G1 lf+_|Z G/}+^]+1c6zᡑb2Y@304J$|7qnnB`_Au~%zBwz+x+G_uKl#u&8}~ V"3Z+5#K$($S (H`@zd+Q\N AX`Fk y#cʃngwvUV*V,wƀC' $$`ئ`p .,YJZi{ٝE |(oɛWW{9<"*. "aF$en&28V'e+4Vb5ٷU26 x٪ c]d:E-o ~Ϙ a8x\N<ɚؿw{wX~̛W`.R A41UXEη0#eED3 m %3|Iԩ>Ӽ+eIV27VYDk TMAu AVX#a L%KR_U2&ikb T ۅ2E@/c459D IcgGZ?^W7/AqIpOCb <|jkt%%%%%%fE3IfvF1PHi^Tl<]ٲy=/dABn X2K(4CY n^(KډG8=fu'SQFH %&#OgG+Y uUƶzكIifʮDbQ0E=΁Cii#63M*+*G~;PfAGxի/jj7h4Ɔuk ǏGWtQ[W?`!Ϸ؈W E0bwj^ッx'g2}%iK(bR\ڕMDCQj+?} ^gNעyCAU6j*`I}^~y3)N?ĊViR8.L1_EkjYls%wǩ8< ^Fu*HmՕCwn.,m~ -Zpjc|80H~o1^!R0oY?n_O';?LRfm_wƠ؇:;ﻇG329M,aԲ`󽷱׃^_}+ `f___.:G[?cgiWpbkur402". XhZq%liA/D>7);Oț}/|VȐ9嗟*JAPRW+P7¢RxIII >v ͎I* l>L&Q/lGP.Bh2NGk'Ͽz E8s1k .xi.]xj:SW]m&Y"1bQ*+*pz9sE]$).j)r{ÇbdSi*"`V+ WlXxGT ʉSg9pxj8v0L*G^$ᴘ )y@A)2Pf Lf(dUM(~Nx"u]0"lQg)-H<`e"D#1e>U\K])L\$*,VIF9cnW~ӻN.6D_"w+'K Sz|_g徏-?UOL 0`:58{cµ$Y ~Ǵ D(/3F0_yr0Gczw̵u`E'-qAN=>u4|5ɠppn|j7q~2G?0᦭L,:/k=<ßT``oeUQ/9z5zb[ik̞?>&yܒ>'LrmͼΛ˰?I\v7JQ@U l6bu7DEط e'>B<6+f.=$sߏ_ᬬgtl;{3EJee&tLia^MMG*=>lgnovo92}b u011Ftr=U_N8:֭[9.'ǘc>祬pwߵg{f'SeTTe9C2{OPb9 љI\@nr>6 AА8}MsS2/xM5<3Ս87A}c-w띜>sƅ8NF۝Q6|:/>t#8ij Gˇ pп?͸*R󥏮7 _/a MM~_%`Jh9~ӟz]lz#Qu?w/@ΠS/ί$?̗$|;{Ώ4ItAL6orS:>ɷђ?-Dr߽JWl#xz>̲Ǩ>xs?F?"w^:jV[Ǹk{7U]č︞ #tqo;~M\QʷW]?)&o;|Euxfo?{o(_S,d%OURRRRgv?IJ@.2;EMɧOe&rEv(q&3HV?d03?aS㨆asU4zN?e6Q$Kdqy=x=^l7vW]ff&BuU[.قfT0==MpzEu&,Ń?~0x*522xd"*|Hfђ$SFGyٟ{}#O97H$T2KCc.X,]\{TybYc3 LJ؜DM GzNrU ‰S(vme4Uq/c=KsK'391&ʢacoDa\- uEOszI CeoWC]#}'[>}xFT 4\IKG(GD'~p?} Y8].\.'2E a(W.new뛑I ۯ7_RY=Dy#ijF*#M2d5$F(t7nU(R,) IDAT.-mF>˹x)չ _kfˆltZzʩTcs:0L"h]wq[19=C,bw!I6z `pwY f;W ]C@hh"ف!\GD4T0Tҩ M mGHGLOOCm(9Ύ( 9AgB,]XY6o=,^^xyt/[wl߸ z}H@m]/ >_bQayw?1`pnp Ò8u֮%yLfF"tU#k1g^ES@7H~}QUTV>u~.nW[jУa: O@k0j2F\?!={VGUQJ$qb8ev[vR,^(q]W-> 4 "Ncb2sHs8I]cwvI2ehB/&H- ;-$B9Aܙ ΞD]]WIeRXvM9w,N$pҎQ'_BD;Q@%tmnM !"h.XwNcTWsPU3: f5ݻj J5dY$Iksxm<Ӭ۸ڽx<fgB}eX,VRF Mpg&fe. 0(sgN;osh ̽ ]|}Z~6DD QE0~5CE)8ۏՕ=^!`­)W韘$L>H"LQѐ%fD"U?t@t{\Vo R|~qO?}%+%n/nf(St7XtnMpp 4l#eg0NŋۢIA#M0(OUc7y|sk jx nܴӍKh |/ة1) >7'KJJJJ"iWC$F'9y>&|&C:{A#4&sAV$ #LL22@@GԹ)D]e AtmKBl  FV.fǮ=\{6=rک ڛhin$+ Jn äb)Ks --laqx葟*7m"8gx:>L&*¶7qn`d.lsa1 ¶^~ZYDS0 {+ f ! ""K(b%>kR`7^k;^LвPpD"AfnSDff A&_SF!@?\/^dP1Mxe%+2J㫟;ͭN) ߰uݯLO[?< oWHLH+XV Civ%sj8ņ, ] =z7Wsh8'zrï=ǁ7PΐrtY&5eMwK|fZ'FpXB3˖h𽗟ɒ_Նpһ>Lj6 %:l ݍ~l i pv3.~%%%%\ΤT,3#-"W^~J*tgNK%DaLv7BںV9-<^Byǃ$4֔1UlVЋn誎 HXtDCY#Ev8C'TzNX}{)eؽ5t$Bj2<4n&3@T5VXSô/h7BPuV G{ziko$Q,"52<:ˑ5Q M;oSxN.^8j蟊hB7"sSޒ8Ynvp, *r?\d.M{{?񏩪C͘mNN`~]V4[/]/pX8s19](zMS1G-1":?bhYλ>?nn\Z>}N?- *F Fv~vp 3>xsdǗy/-p湂R3.nN?ȇozh!7\my ;>O{y%ڹ}W'3[/_JM!<& cly;]#w\o/mʹ67q 6mbpds}} **0{]z'N8rb'Htj9xi, wd"P Bsc`XbiZn˘N| ۍdi.)2 /v% RV^Np&D>_ tCeAG;[Ce&4,1k1W^y_= xYj(3qriH xVᆺ&B#S{Hj2ȣ#a ԵpF-Z$">||gsjH:) K[Ij Z/*5gz9M/H8ڨqԷQ`")kk1~eK|6 f_#U6d'7~:HVӲ2n{:o[o|v2TͻXs=,"kqx݉/by]q2 :6|{>N^Hjo;ogyH&|uҚKNBG&_VlTͿί+))))y/uV.Ylf ###f0y#=}lؼDff&Էv!&&q̬[{Oo$a|V^d‹(h`h8mvASm5ND&l왳lvv=^~Mg*&GF `r,M8lNDZ}p$Hv6y'bXylOߙ.Z,BK4fj6a6D ,^Cר[KH'S̄:K0hmk"_HRSUIss3/2׭s~;~?lq8sz?N rZ?N*7K{kJ.Ζ뮻MR|dN2)>T楤'x.{| /eeU@4 d6UM96 fXLMӈ¬]@E9D+:cA%#Cd v:V({^3nD1d|"D,_v̕xY[$n RTPUj 226C6 %TTd,\q-fptJ633&Q][KVйTV Բ1n75US1 PV/ϿV-d6aqHEƚ*&Ƃ OT={il`~F'  '3e53y(d8n.nedf6f%x6ErLB>KsK3xm$bSLO&B08MMm-kq3.؟+Y.~Q^Ǥ8_EM"Fvi::H*!HLNT9s n#!`߲^ۮ#Zd~+* %f⡹a7Vp07':: h,, 14Y*LL's2E3)\چJ?NɄ+H"Z QHe҈x& RSLoB^G?GoU())))l͂(ɘe3~ E(Hfr>$N2?:W\u9M(J!O}kH&TQ9ҩ"</%+086!嘙 o ظa3PU]IE`hz]'ĎƦ-qnZhng68ƺ݌ #/XM"5fZC)"RM2{B4]GCBQR6L2,l :97$d`%\v;U^?N[Mq e.Y"{bZ7^٩/9oG{T($`hpťkqmL8wn*oCNC} ǂ}eA?^аLMp9dD._wZUdrqNi"#w())))))B*HHFG[~[n@ ld]S)2gtd Á'\TշlXACgtxְHA}}7p9ul2hE@]Ef3|Udz|0p[%$f CE*lA:i*NnF<# &"8jQM%,0?Aa`BZMs8UG4[ TpvEIb"^*C19G2)lߵU+0lfGQVA'"mMJX"(҈_IIIIIFEv *" 3Em]aw fd3' ;؇R؇D!nFOmCڱ;vhn|"$hB4 C LQSfa(:F>'H$@Km5&]!kL&/j1Bwg=vPHEDqDtRYGtNa\rL==&B!VKDʩvehikLY>'pұxLƅ"$){|}H("ݢ}Bg3[UL JAMe56vPtXW Fr<2DCۂVh_Pl1"Kq[t:*XuH]rS۱ci*bk}*+GQU8eVkxl"0NcNjzI;9vHb8x0 ]~:gzR' q50;=P] \zq[lg_s<>l~'KWu|뮽O'li_FPX|9EMҋFL:Mu+ 5ajb>eNJH]N/ྒྷH k(j7bM"2(9V!;A%2Vl12>$nCf3<:.^ʑޣ|Cwc&Rx\r&'P YwށǾCGyhlie04Acch#'0<E34>uFX۱Dv5U]^̾ Pe+.ݲG~AY {?4e B-&YMc6nXN}{ @5ZoR( )-K8ec&&?l:MހS"N2{^L*ː-24> yMMlݺMgي Q;wFh*JP@L$dFόSHfVblt_YjNLuIԘ%I315I._( )/rY8fAF+(t,\HCC+p յ>\nDD,O ïd^9ሌlrv\>'+׬G \D"ͪ5Of|dvOb۩)Μ>EvSJe'O%^L8.t<$0tMѨpZ1D(%_(񸜈Tp:YD6r9GE*4-dl"Oa;д"Z`T JJJJJJ?_L& *V&*V@Je<\&l\&KOyyM"h\Ɂ,HxݨfB3}JRT4"5ud"Pu:Hɋ%@ ]2:MfZIg-VS`&F0tRBa`jj G$BZz32~\"4$# S N;: #2dl1D\^X,`ssoJ,))))))E?ф*[Hh:hlѤ! "kDe_YgύY,f+6YI%n<\Ǎj|n EHaE$ cn268I@WCHS9lJIb5ۈF(q^Tm^:>;{vű}|$N$MJ JC#%aAQT' H U m&Vԩsq\~ٹIJj }Io.yь滞GsE@: RUp6254ǫ.NpDMX,4j਍U0O&EBضC+Lg%^9@t:.gNcAYLPhtf7JI٬CYAuEe c(h)=ۦHS,o4+Qիt&4W=VZ-摔sB!s,iw'|szWw֫DႳw~Lh9a](q=gaZn%B?s3Ed4䑇pz_xNwAFN\e!.Gtv*E3*:W8NZ ;iJy˗( JszPi6Lãhi;誎i z3>8wn7~rqX_?=ķo:6$ƫ,鴻D$9‹hMx4"RJ:g=Σo_#YD]d 3,aL9׾5ɷ;T+7h{erxL^X|ӟ$'An{1vӬod#2 МB!į:~fxĨ ItF1]4S'Lc6wh֛LzcZ^g?$!jq{UlŜy7y=j iӨT#o^!Kc4cū uzт? s>ϟgw_>YK0PUZFxy껼 l.R~W"Gl[ן5x1Fy_8sϿB+/R>f~8yKrp`偏=ݛ<3ƍܸ6oyPٿu/elmmP̃ !7iHס^iш|O_şR[ٻɭu{Sɿ}?O}zI.ev(N>~'q5V m}sRO!yuS48-5IҐ;rg4qJ f}^Ksp ( vupR1LF ۛi̧{kPorwuܳ"8Ib>emm'MNXX 3"a6Uta@Q%O^g4yI6yNchC8 &4.qѬti>UZ]gsSvIt} " 5ar G> 4 Gy orUN^&r~p`NmF(~O=7M@'?l2_]tM'5T}|igc>M)?=Z㕗^9vU$'JbtmyLg$g6$|ڇqM !W[_zf3-f 7 JnX[zNٻ9d'l9h4$O#ٌ&YݛdfUUTE)(*|G|eY\x#No%,v'iZQåKSrVW['nA<4EQvΞͿeZk}*^`jCދf{\{:׮,&MSNʕkl:C}K?ܹ3h^!QPՈrT*,OuktqKQa) A[ef ndGXB!g㘃R(ILuL%iɈ^!#sNqL^CXz$€"7)R"+e\b0`.`xċlBVA R b.pHML(9$9ii"L biSrN&iƱczܟɐzBNqnZTULz.yЪ',T"'bc&i-"J"\`F^OlKNj[7i(9%k LOlnX hiꬬT|RB ˹̢IXl`M!n@)2% yHYc<R09y8 )]/hbI,5,ۢ]AH+ju$Pn8\q3tuK& 4-B-2@Q4J 4GuM㈑?&8W]0Ψ7A@g8%;Bep7Mg&]'^FEQr h ES(  81M<c:=IBbhdI(r( H((i`h m0N0J:)%L.] e+SBCa:)YDUV5.Օ ["B E! s,&2|FTKpk9bm;~`<-WP!%y6&Manԟ3,0 I}\58l*vA@D]² |֪$QD)=lS&]+ ?GQ 4+GJ.apHQ(*0'C2Q>5-,@!B ~{oxvD pF@tgb ;;g2gw:>&t|<(~Vy{9ܜFm;x{?q̧t汻*T߷Z֎}`7;^ϋ2 S;[flrx+By'B$$ !B, ~B!KBB!Ē'B$$ !B, ~B!KBB!Ē'B$$ !B, ~B!KBB!Ē'B$$ !B, ~B!KBB!Ē'B$$ !B, ~B!KBB!Ē'B$$ !B, ~B!KBB!Ē'B$$ !B, ~B!KBB!Ē'B$$ !B, ]UU8!x?!!$ѧ\x(lmmrP!(}vvv+~~:CB!eQUJn:)IENDB`DarkRadiant-2.14.0/doc/img/ModelSelector.png000066400000000000000000003724111413722237400205670ustar00rootroot00000000000000PNG  IHDR`}bKGD pHYs  tIME7sd IDATxw|\՝ϹeF]dK{4^C$^Iٴ$,RHvl B 5`16ݖeIzISo9#w˅~ sw<9M+WqeuuPhB!BRY3DkjjjNgvvO!B!A=\`רΞ> RI_B!BVZkef@)B!A)о.4vt !B!hB!Bq3 i u `B!Bq:͆HR)CKBP؁P }\!B!&)}tM (!KӤ.zJI8VT2EQ[5pIE0L;$pilm^{:TO:īs)A?@w$0!;vۏyC#OzX7UXקy FQUkO2zd/t3Yx5ےA9<;Lh1,t&{386L aJ:Vғ;f# aBqҡf" A0CN$sC 0!ei^b80IeȫS9aֲ٦LIy>n& GeиCf @2p2β0 lLSxCjiل 纤3I)Låy[Idө1ѶI{"y:#L!EJ& ^Vt}zB=tueSɃV+L!e,|)k qƹgs֜1D M:`0Sbl `W; 0Ckkm0vZ{xFJ6nA[6F`;KyyQ'+LxL|BXN gRP\LyQh,V DqY_91ٿ5Q䆰 Vl7CP6ql$hifгi"9¶BV"EC h?Fm4,&_ܾ8a\p.= x`ٞ&˄-,k{{qؙ4C` xCP2x<"/.z zyKw| 'ѿxE"m[)q&W߅m vn⁇Wa:ϚBk#w,?]Dgд|O.&лz^ W.zl)t%t&X߽g F1*C]C!Kl=FP7;;jڊ슈 *AiEGB!z =7mL|nU/)F[~KB< c\_XS?CI&(ҧ)x;dט!'`l ՟ƙ1UKBzyey<gEe Q[C 0}tgGuH!䍙)籓Ds΢/}_Hbzֱe(ȂPi3*a*H0kB ˷lɧLGj(AAT6LR)p3R:h¦.T %c&3jz%1x O("H,=E`wt29|0!B!88F`eNg|dB!BL&gR _T^B!BR( !B!"L!B!K1!B!o 6!B!Ļ0!B!8BdB!B!B!B!B!&B!G0!B!8B$ !B!bARB(PJ>F8JԮ|'`tB.O$s)ABqP(\_hw inj ۶\B2y<; `ZkIN!ı#8$)9HQ(<'qPJa[&?)..>B!f̚5?O!A1>=xKV@WV6Pr+vI&B!xK#ص>1*JIݷiGp =>J3*}[_\ÀDW!B! {.2t =p1u=<\#q}ʎ |Y||ޮnWa[l_]֞MIf 7"|{~ !B!w0,l_n[V緮 :`9 Lsg|PO2cxR 01˶ceY>@Q"AkGsdo&'7J`G=9ڣ5az>ޣV'B!lޔL? [U2d\xǮKxx*)'f:)C μfTwfM?^+ F x|N>gOc8}140bu&Xcv\#Ȅr*D7K/f.)ɜ9x ?p>זj[_FW!PXϔ7Oq..ixGi*ϥ*QxA|⢩bO|K?Qs\B!-ТgxfԜ8yuYyEW͖tQ/ƵԖZ~}+յ\;ِP;/G@_>±uږq ۭЬ|Nnw-&RW0:6Ӣ )b? KZ}+I-cpՓ\lr˜Kk0l^݋6ZyMd(gy}0[k̖\߿fiwC)B!;1E=~LMZ ;ҳ/|B~;Is'V營{=_]Xf!3NS0u6.`4ߞksgp=/n{T ۛL?Q*|3* c^Y''2Mn|> .㧚= P sO6éT420ʹpc[qci{6\k7~ p{~r2J!B!kC{xjOB*#}+7;HػN!'͘gJAgZ4ϐ akF֥ 5knCӘ tto_jk lN,67fx $*ٞ;P4&:hOw,% q0c<M cz~z9.H2aB=lΐhhĚ<iZpb!,oކǴbBV5ny`B!BDcxh5 OC~wMt b;iRigJu+ܿ2豵)dxO,h_aïïD]eW[Ϊ!lZ% ϚN`5' B!x7:ff$ۉJ1}\ p `"ָCleN̊jO}*]p&ɀ=+3hI փo@(H}ds'r2u2gdZ0`ldܳyӉ*eaj+]&ȫ=?S(YFX/P :3׼m,^2)Ph>IgϩfcQG2ıl^^j6s*ŭgq30.n ZKB!p Aܱ_giz6N: Bh7(.^#)p'?b5lɳۯ?r{F6R6~5T kk)d2@l>y37(A;ۇ*ҬZx'w/ 0@> I{=w^R= I9\`%w\2nZTMfSq)|vn ǟ\5wE̴\rލK5?/L'=i6?.$wSs3ԟRy36wY|cH0z|梺l[ `B!Bx"y5քCnGmfϜF^^.B!DZ9K![&JK   1$x%B#IBw{Tvq!B$ !`i-`$BC%L!.B* `B!BqL6O!rH'3z$B!#8R_ O$zZ)GiᎥcaL@{?aPO>QV?y>#Y@B!`~ =[{߹գxg^\OFCNAJ)6b!k:onRxM<4 zءК'VQ 0P{Sϛal=,wc-B!`7@xR 5SQ  v]~z ֧o .^nNd0Hzsϝi#i8K=:;o%4Z=do }ΝhѨ;z??Pv؆y /RzY\[x5t9ï[Vr=H)l_|;?=Rkn&gwKȐQÏ]xԎ{յ3H9{7M B!M.>UzDk t#c1M2*BgC<\)&#^Rթ IDAT=ˤ6?V+<``=ŭI1 #yK珆L k2m\!}͍k|3wt0tm-dpGO<оß~WV.ݑ4@ݎ/ twcCS2Ң3Z浝PYJdX&w6=DA0+>/SpZ_COAUƄD߿Hxxk+?Ŕ!B!J?.8?s(*07:+g^0 w>HEz9N 3ֲk#/&R [O8`"6`s>gN,U7py#^2~E!kvR~/'?4c9?yIN~\7/ps /~9#6! v8)!-R db~;Y` mI{g\;|,e7!4Cq(,_{m3r&x^|q1קa6vV!B!=`é;Kc64>z _=|׾׷A fԉg5 l.PhܫQ\/;WN}YTt,EAR;ÌIt~.CpeM]>W NV0#j"]+W FJ[n$Y2b.V_wW\50a9|Z<1iw9CĆR@qә6y~)ًf{ X3ԦypqHSd|^iՑVsC5p/~ 4ld_E9v$Hm{~F||s{{f6/*zr47޵b2[IdbE.|s'q_oʕ5T yeczE`wAw{-B󪫾w-kމˎw'M8`HzNrW}jyF,UǏ%EgRm)HUcdt5kGWɜin7)geby>2 2n8#"M4/(dV1,\&|g3ND J+4i,e!PBj'M(=g(u* 2i<-~D&L)0D8n\ Eӎo[6 P0H0lxr=OqQH>F _F>5r#% L 7K^o3o]#UIPogy p2pqJ\Ʒ?0{Z8<6-˞O7|}$ި\2m;@eOs##ߟ5]—x Lz [p]* v.#B15UOG_찻#8|^/ ]5f8&0 ;zھgrh>h3gdT!BIf s'L<#ͱC9ӳ2$W!g:hvB7'2vnhR2$W!g;hX2X~m_Bqs"bdS# B#j v'Y%A^)_Ѳ>iϤf'16?Dt#au~J4)+h?օv}ӚP$h:u|2H$vu$( M[pJii@ȽB!pl0006Æ5߂R m~7Q\J+T|oK1miŬC)Z>q}ƌ_oӵ=I{Jc)w1-_Ҟ&6A1F9ioMY{3jTf!6{ B!Y s~!V3zq*kT Cه\_;_@(t.q6ɔϡePujC7CIͯ>;M4&}/͌}9ikT.`% J RiQB!&Ju;Ա2, O`[B`L<ۓ4w>v0_<u}`Z 0<ބ`#!`*"cJad?T"0 ܮH {z\mmJk<@!4#f(5I _ iek'lەmS0lZ+۠L*B& 'Hed1`'z>Ɍ2 S;OA6PZv4z&mP`o(]Mqdmp}0F R윴^vwHgm"J3{|PhIeDlҐH{xAV;@A4$>?P`_!e0о\`^uFPU{1=Kkx+lag&3Q}l R \'E ;S4xxVv~PAAE6iwB>IhCQR<"V84}i|hLVG9-_Ǝ4C:-U) *I4=.s-(ڧ+ͶA=& 2&b`¥3ЗqXJ@Y&E!JsM[:Ҥt6丞kXL RVCweNxL̷ x n_- 5! q1#-C>x4ue *#6wI! aB!~֖ec&DsI&4lX)3/,uL(`[psR6Ѭ{MOoK;>(߼MFF犋r w;oJ6o&eam׆cK,}#5|q\R6Uhӹ+bsR'LkM0ĹT+-k{󡠴+>TB| :.6egSON996t_ܽG(rK %΅\靣==r515FȤ+fӠvb}_)G\lYƏ_7M{r] nE }P.?Xfm!~Zki傿8sh<=# ,_^W)F׀Krn{{Tnok'7ʟӒ.Mys'_~ni%>)LJPMi?nv'Uq)Z3ZUqknmv 5&e6kV(8_~|V] X)I$y`+܂nB%_9 WN%Y阜n >Y2iɗ6:9{O ϭ0W~nkS!~] nmcf?\^צ EΚWl'ƥ7bڔM7дn, iԅUDIBH.P4 R2myf>/? ')+ͿK)>SBR 4q2ښ-^|# pqݽ_XDq LFմwAAYnڡ $b=J&Ç _hictgHD¡ǡ=ˇT*\ǧ7b7LBI^5jx'AwСsaŚ/6yLT#,K!;̧3C@ůaP1 J xcJXCi:2" lC[q}mpI\n^jw9$=1`gm}4 Ӝ69 d͚eܶ&IC瀋Zנ}KWae /wCr-f!^o %KO JG(\lѐN9u'y|itЦq}b Dz+Ht'ql܈A\.,rNkuK(9|ˣxek0eK/49BvEy|B>-1O4 "eYK\FlT<0 吧RMOeQK$@M K!>ф9{i!vuSfKrC !$va_ݵu@WDP+]Z(!@ɽsM! x{|>̙3y߯ "'Ɖj`a }c}ֱzzqR};=}og1 B)R֍sϠgC8޵urH0Zcb)(KݫklD2KfDbQn]kM_dq}WOذmT׸}c 2U=:#bFd݆*nmtCLɳiWy|WP;Tu1TJ|k w?:v]9$J?VƄr#EMПҊVɪ<6_?ƭpvN3W~(IA=aY 2 IDAT!#&X%im#[&?* $,Xg$82{45{`僖J[H%IkEqQ+{X]屁[̪paz Tcky&9zvyn=kk|IubZJJ8ꍔ4IQJ=sH)27dXkڴb$ "8F8Z)b?3cuO-&Rs#ö%@Pl,֘LK1Hi6V@q`Vm+!aX{ ]0i}q,Q- ц )Tf: H2b>ط&YW90j 1֣d;dك,˘xkx)$*XQZPC5[ *;G&UKubֶvuL^%[;: Ӊ5M! }`hX <4fHb%4!$Rx$`XX/|@,eEiL4Q f@ASX/(lڰi}h`mRh)%G,XU2}A@ܜ_9ICLRNNNΡj2srr~*ZKxG3O!=a<}R4(8gQң{'먔4]`xfz )2OYߌH%;V8k>S]JSCA(P(Qaщ:h@x*ݳnH?.ںg!y,Li]N2Lil,Rύ_ctzc/@ӊt| x45sS[oM+eY ~ė2|!mֵw=J,{vo)擓.f̚K4x 8BRcv)C,cB"8I)%R 2Dk0 |B =x5&I Jk:{OK9% gt6%(wPhddf6ZJ}|JB:msosxZx8x($og#z(%I5/`"4MICEE"ېЈS Լ%mI$*D(}6X^1w׹qAX(7 'zbAD!Qo|=)j;F;^Β&)AX*4OpbI BR=XƂVܯLF&:NoOsPuRHS,xYJT u"+l Z ~@F*BP.X2ʥ2=Ƒq: Ԩ7xHchJPN\Q, !1:C#Usٜ<- 0I9rj/3{F6^󫫮'?N' 2ʊ?}?աQʇ{z@7\e?_1 ;[J5GZ9ju/:s}| V#Sc´7?o;E`K-hs8 U/_abI5Z=Ց|UèPdSn} o.f+_`}\rٵ<8 uY<מ4ysO7-49?",o+GJ%9:d#5XsЛEE|+箵0^B7pѕbK L[;>NN?"uw?s3xgqo"ϿǹkWs! 99/ܷ<_srrrrMhTGqJd5(%(J^`C,zxWCy眾6J= x?g.|+3~WYzf1gpG/>naku, qfv6_qkǗ--엽}üu97Ok>7Lku37Q-- t\s3 7_?QsY"؛z=+hUu^'/u S[y\93>㣯;?=2z8o?Q>S- ~ #- _S˫egp,ws3!.G+ NM!9rE_7393o=x)WߟIG|o\N^zLۆHg6HROrSW݉Gw3NFNk5x[ld(@-+au $||bBDkxǹu!x j;K}NNNN!0*06 A)58L܈Q5 \$ *Ői3R5<9d w`(/2m4lbٴ~7^m-ݽW_m%?e<^{QqB]8 4RhIssya lΚ1GdŜS1bГ*B 79WcB|x,dǞY3fⷾ#'L!q̞1S~9sKM/BdF/G{:o~">߬jm翋-:MLj PFJR7Gs$3go)!\ٍr3o Ϥ䓨'z%fnN8?a[NlZi5O՞ybac+6魣kbN;ZxsƑ's"o% sH7gݪeX)0ceV%M  {%Pd= T/U-tQ,h4R k {P$I,#5JRH*xjR\$%%A h휆:WADC C8*c$$5Kyb߉~Vt4!R $M(I%Wkˏ\,HG1g!K1i[-P{Xd@HA)[؜h*a] kSb DȘgs&Z&ԺyK8(KJغ64S~ e Ƒ1 QAgJwsr%`af%iv _^wn|8,QƂh?^zJ9R"!MZ#Uu~/sU)N)!=ݞx9~q ~_Ai&z׹J?١:cTʓ;d]Az{7bG܏^H\N^dU63lY0KWЯXa62GOYB3`5['`qIQNNNNNxgh QDDj06! je-2u#aDs?k D2Do@$uMZOD$juC-1D*JQ@1 I!5454%(cA!kI! "HxbO=[ռ^Q ;\;RR`qux/uVXv Iv`7e*o|ȧ|2|83EXc nJCw3T)Qn?4[3+.2e+ @!|+M)e{@HɕW'Oy-C\o_Fǡ\sA(`Wוw-}/n^ng8jIc'!r;ם9ǵ0QsFHoz(7~.o9shaN^;zzt~;|vީ4%RMlǹ]؃ lna Gs/ ({o\^v׍S\,A{hYє㻳ѷlΨ氖989999997⋌Ȭ0$zlٴ($EjXJsxj֭* I#i 3)oq!4dyRJ*@ἥ$>ʙ Aăg{*Xشu1סV 8vLh6Q^ޥ|{yGacΦ79s$*#cLT44yKh`I#&~ji07b̔5zv&\`|lщa8S)FB#h6g n}x-ﺙߎ6%ndk7vL Ii⌙<^7:W׾ʏo{em֑R=e{XQh 8?w60п\ÄHaX}|r99999,J ѿuBI8Ƥ<+y~zp>Blx 8pzJR &F#iPO z$qsE:)RdJQDBarV 6)$& 8ya]\ IDAT.K.PRPKQZ3:sg|.(^O4fr{]4u ]g,>1~pee/]"r M{w-Iy=If='E@Gg'^ϥW6B`<5ۻ ;]h#S ?u-W]~}[PjNOZi#dTh21ItvuZlcA>_\ÊNqbOuE{eҫh覣uk{`[?K.XФg-@PnSOBȢz^G<7\o/ˌ㏧ PU|_]s5^MܶtG=wW_qF@y42lXƏo\xqm=Cc/K/E\p9yȷh |2nqO}|G-ģY֩o| үsF>w,┓ӿv> `?a*|R7YzG߹r,Us.'''''`D*I^cpprBD! S.h˝VI҄f@?R6xHS2K;Y%sR*ZbdBb00&ΔE3}YLKA3Os=Q:șBTk}.Xv ;X9of6>9̘Ϣ9sޏ]H$NdŽD^x;CVJ Mw/^Cߛ?N;y5(F2^uOZ*cY^s=wPe_TvO8vކWU=WO<n>LTTkutbc!ZORwK.x999$ ddx;?@OgrDv)e'NcZٵYGX8u&}-Ib[KPeaJcYƒ)XBhj8O=)%Xc1&+B҂$˧J[X`r饠P\ QJI0KMl A!$ 1AUV:xW @)%%:sH }x"%D#067rvicF$C笣9{{oßAhڦF۴?~Gv.s B([tH 0 %ib%M-qbx QH3V1I#%JyJEka(yHysZe M@+сL Rk3@+ H͔6 ic } GPғgte 1zfk\&1V֓fXQH5R rԂ̼[ h41*%P#x<@HK3@"q(B T*~5 -!=Xd2)P:DkE`M<ȝ9O-gC![7elh3&$IzR 4=I0̔ XgI8 & xg7bs$n\.Q(H)͢Y3%L48TH/b| cg*٦! 7rrrrrrrrr,(пy-C)F!&5&kiM#N(GF%{RkJDD|JcuA@:/c.% $AV:5xZJTXg/D %yIJ7o&Ir/Xu TG)EJѱ RGGKF 316BX0֢BxZFB#DȀ@I%I%' BjHú,: J4 4C$j1Y*8iblR1CyʐR!dp&jch-o(f[D0 `!޻ OBxITPJ$)FB3kfUˌ%ZbH^u<]( Z$%Z{|yJK8Ex)8k{vB l^O3EfTI"SFDDc3o֊Pk":R3A_6iū.fR/5s?_Tk4Q?z?_ˆ0!Hbfͷ]çxx"{)q~|eL3SgpۘF w{''''''`"# ladp3(Ƒ1jz5Ό64AJEM_RimzCHHRPi21!$M &5Sv9$"3ؼ{P+B%2 DB*YxZx:B e -%jdE˳B5ubK{\Yv|&CZ)bՆxr|Cd^|3nyc62,V!OlGsFmOx?}CeN8!vs"<ם?i{Zg}C| nvv#`lWu6}ynKW^Ks+3U;!wo:GwWbl};'''''ρc,icHxz @$ ꍔ9GCKC*fr:(xwqve~Is&J0(rd[6k0`v1æݽ.\^X1$ep2e+ǑF#i }:T?4ʖ1s8]sz {TNMM (eAY67BuTkm"iFı,D5B&@HI*ID:J&TM!'W>G@}/} RV_·i"+& F3rok,>YCy?PLl֩o.`xE_ }Ԃ?T"^tzql!yP"{ vdhv:k+~oA&7˫~ΎI|"n^3&^I@Frcqgcw ˠM|o$~>̃;!!!!!XOn Ѵm\$|"!0& &W46ai##h#4mٚi)%De1`SfiKI0#Ze!90e`;=e) ozlʘ mFw-GڙuT`K6Βgn_E<.w2'"l\ J1f,B?kg{qXp&߿H`?q'.YHEL2s6,mӵ؏ڰFcL%%h*OJض"FXVT}&7ŻǸomfC|N[z"u Ӛ(3x⩴Ksݓs2-3gSxFSٸr5=A7zsS80d]n0x31Datw-Z?b5iZdƵW}^8~-Wf9q{{ k̠ۖ=ziE/q=/P7{!*q:̿fqg2%mw?͎gp=l(7pIJ\>w rwSu -lN +_xΔ%'t7߸VO>\C|߰%yWW1E{<ק)}{)ŕw`p }JS~gхƅҐcv&36[&=\k:y駸Wa&~xp/5ey6<6= "{"VqVE5P}OXYOC}=FȞWL<=m^ 6ўϘ&y0SD:BQG W`Wn?>#+m@ck;]|m)]m,[o3P14%眊T&V|i)'͔}gnC&18%'5e~Oq1!yo pXfuٸyg2׷m[ ضChwĬmm_:^_ss[bӹd;1LHHHH!@YWԻ0p$X Q]۰-Q(ؼq ׭"6ֆ ib NWDrSaHH&2G(Ү.!ȸ.C ˣ%J@*߄20V ZƟ&MCX!mJOˏښ6S'şB!Aԍ! @ڞ[~2%iSچ̃L B2 _:Y W\H5PK@{,5,=\)Qa rDd#~%T<  &4A!v2n=vc[}מ1r'-m,#?sO Ys2'AvMutMBCG%$$$$$jThٶ BGi1?2 QEM2,%(uJadjrQ>Ꚛol+{ c&^'o\:M:¶R6J4uB ()({>wtqb ,t7xMAP #M)0,swׅ@2B7ܸ;̢T wիLZ-afT2 QL~yTp!,NiʞHx|!}.K1Xܳr2Ndl&!JG~/=߲.QoK([s|;7=7.:OEhJא)0P5먞,EnGXw]|>o9|} a*/s)MO_5;-ʮTL#[G{=+Oy0,lwѰ}5 W R/_~#]4N'~OO Ie}0б]K ;˺OmϒY^m/vvMn:ǷABe;:[9m7~ƞ2/pgqŜj3I?LHHHHx-l!6+! (+0"ԆBm[8"  ɤR(ia0nℓJ"S A>8f{񤨐`[K ^ }%֚>B+鳙G~#vL#D m` /|2;Ŗ|1sή s{!^ 0Nt:{7]U^hC#fRk4ȷey 紋[p'O|\s+_q]δO'lxw6ܜT,z{8`?w䣜زa{x RD^̴sۿ .wpu7_FYv=,{l.;crfO҆M)sup[꫗}e"[ P!!!!!!(l߂#*H:. H"T7ҳLV6ϣTR"CH^12aljq7^~Uhm%&:BH0P8 A{s4OO}CmyTɄ7 X*)ZŐ@cٍϣ#ѭ=4F76Gؙ#]sw?e?B9ٚz5>3P"L:@D>#4dc)ΐ88y,e*dj=l55i__]kw?АXFFgeQ)8-PinUgwXcgOTe(TQ(,5) >T C8%u5=]DVz~(KeG4-2B@ DȤSG}}<℄7BEm!AeYԏNOoWL:~UZ8!!!!!! Tvb7!JJDaH)Ќ2l 0dĈfN^p*˟}eI,[Q,ɒIQ|@)|3uPR"׫+R QϏ( ffΐJÍ"`o0^QDizjBBBBBB)zvaRDa-gb0u6\0k/R񨯯g#D\kUdl4H*Pq-1Ƽ~KeaDm:ERNʢU,S|4h–Q,֔Br0gB‘HXBBBBBBBBABRAeZ(%0S3q d5>0D1۶5k;GG>Qؖ_(][RD)$^Bcd<|? ͑Nh߲8K_w|Ԩu"^KHHHHHHHH8!Fk}q*yOV#C1TIЍ s5hcyL8 !j()H)1bT ua<ϣ~~ethlFo Մ#%$$$$$$$$Bvm& CJWk㧓kEP)@Z~NkjݯJi@)y1HmhvlFYB$W T e!B R9VQ}PW+`?#[56̩PH];mEh*ȯvcFđr!}z6c Fk0 4׃N8IXBBBBBBBBT^R_BXhHE4L!0$,={h@SbC+en*I$"564>hݝAe;(e1t{l&2$a7ظݯDlmߊG!t!{~^_ˬzA[rHkxU_y'xOBBBBBBk7؇k b /xELl)վQ6^CTJא916x]0vT"R8B`?(W*QO8Jp5`?P60HkB5RJcDC}%/[r$vS jrCfrRrHƫf ؅| 7TLڼC,,s5N*Cm pY+cځ$Rc~4ԏ ͒r~m49l͜!^*&|>*/!!!!!! "4FF- ӆW,4m@*aFBmH",HRT "KS$: 0`6JےHll"Bքhh0d]$ʘcK8N9t eʤ 똖E3տz X|Q [Wp#/UҌqo;{6ٴEʽƝx:/ @@ǹ6*F8D."KᤱBZزo‡1%L̃,o`4H7DŽs9u4R [_x_S.X|6gMoE[G Y| WPbϋ|;ӿ_~zlO|]?5>ΪF޹i~l=!'O+ >湇^jr $/6p)`g4-)Q1AH\FGev]ҙ=]R E1( JֈQ6Ŷ178!)  LDz(˄A\\MQT* i-! =$wu?⺛/E)uY䋈a]6\s.fLsAZtrDobTXU4O[8>,mebٗ2x߷LOvk>\\m%A*iμ|`A'˞jcSs!B1K?apݗoΕoYT\6CxW7^E%({N_:+>˲^ghiKFK0;gϯ}^ƒ5b._CG?-'.J&~x;筌~1lhذy#2kA}>N?F<]0˜lKO~ݰ>y>hP%nwz{gobdBBBBBBczٽuE:P +AA6RHaĠ_AGٴXH0He>r9iD&_eS* tR[C A @֢l/aRh)ql` o01p\p#`R-94.e|3Zx2bd3^ɣsW'Mm-?i6T p8 :5OJXP?w[nes^\" wA(K =ѣvٸ"v ]c0l I?/i>y)˪" VLcQC˄ BlT,lhcx뢱6V,33[m?Tж Q"gp\'ٲs'ɵ27m odW~:Lq'a6tfzL{\N5嬅HaCax v( Ӿ|[) @K*DFE0XU*Tv '²!E_Vך^"?r2r0:B0E&!!:k>[0jfdz&dJd$0.aH G !BPK#PD#(yAaLDZP? !Ad4AiG]sU|"G&.Svl:"SI3v3~*c&Ngy2^%$pk:V \)%#C߀@#4 ']@Pgl[e (mh(E=_aj6a{uݑUQ(5,Z`VнY/Ώ\;.z+:k6J%kB ^GB{ } tRGHyNRceٽkw0%j%25af`-=N4Pé],܎g ̟=Ц@qoTni ;? Ndǚ?`CE`UJ,"// 7.|%,S1mb ֪z(C=^͋۷9}Yl?};~ĕ7FpU`{?[Z]@2~W,5Kf5@l.:}<%.zBꁠw#̗|'1-53io|z:ل]ꢜ?z.+&$$$$$$mkQ2^%!J 0kM~R**" B АV7$~G.nr!B}#AeKlEG!0@~Y׮vle(Iv Q,BKvc 锻>nfH3i-3rbaz[ I7c _f[PϬcrw/m i=ZmXJ8f+^x:܉3И֮>1sfє ~i VT5ݴ6/Yp~֮Ġv)n=  m/0-um[̟9 ?v'?Lv+xٳhz:v4LƼ)#0o =eFčz |KO|I _ 9j SrzRg0mdֲ3g̑ l]rY3Щ:ZatBGS()4h -DBL:ů{YD) صmJR)i0$u P7r<#L$ *(շo^Mpc4R~ɑq7aRkZl"m@+4-"įx{Yj9\ůiMiQP9֧`ppsqߥX*c_AaZ"^1{,%p(0&0!aFOTRAc,*S1TLMuU>1R$(l?|vo[Je08$+7{1~y|~xb zQƪ|z|>pr`{/U*#\y~<8Ć>[VaIȤ 2:L`?5ʹLT6a೻m-E mPr']1:7Rlc$aR,d.Rd#RD+^GMjeޓp$uFHh:EX`)_A5amT>BXR(BW"LHHHHHHx"cjLR iEjF2q&QbB0sZöm?²$T<5 7}:!FI@P  hʧFAK<)h$I"W{JZ qƲպB* }]V$ B6ADTq& QlO,{t!BRl*G*[ϨO1^BkRN ,\^`:Q#$ƀ z7)RL8f$,!!!!!!!&^m;.}](Ba)I؋kL5 E򍣘0L|)& |:'=씋"0qL-#'xB'wl0MIP -iPBPkױCN6AD SIXBBBBBBBqH,(,ф~k) b?0RPW@E&B\(&LA&cگX)( Q".\Ibe"oZpSv+42u|/c R*eSdk6hIR]ױ( ˜ RR nB I:mWATFՔ/"pH$$$$$$$$G!ʢAo*SmˢDBrm$JB ٺE|CY66xdilL.GR'Uu\ ,;Elck;RJ\!NDkM_  z!e_B6FG8U, )%er`(yJe!z dž>vx=!!!!!!̓!$ ds9^"Cd" 0^U "mta@yp"ot&K%qmFe5n*H| F܀W*;89nO+ )"ZiEEU[pӂUj]jXPsD⮠";$I>d;޳|NHB" f{n;>yIT)BWA+xߧ>sy޿cQG_žk{Ams^#iyi=/G+ Ua[mGEd!NRZqBB֑YRxR@Ra|d1Df:<$j8Ua`޲'/,i0mͱTI__/r$!Kb5HZEYG#Ȍ:K71PT訕V+twfݫ!xN$/ ?Pmcڵ}- u3ii^C=7wrogHpMl_- y ;޲ e vy|_uwxDEes]y@Hߵ5G1b hAAAAV[nF*Ҋ8VJeKY~ӨTjdYJfL 1Ho)!:J16pҨO<˟PaR b|FYVR.cbdih)&%О4Iec4HMRL-QH)*Q01Ɩ %QP?&k7~Gٺc{VV]OYA[=;{)_<4|&v$oϿ0Vb>˟C~k%Mx,Lp_ga1B}PA[or\zٮY H`߾ $sIjh&+1,pa=y* 0=RbLf蟻9%#IBH19 * 4%A"u{JQDd!,BܠMSZiھ s$I@i)vhEOw.eh=H #<9`Yf9d@$SlQg|26N{g[FZ%aGjvs%v>` Oo?|nz}~?Ɖ/ځۼ\뢯k}Ͻy~ IWkBAowϾ&6G=7/sUzwwn\zO?X'mwrh Hɒ&C"P0YJ<:È,AX*?{6G% q֐e4 HƤyꛉISD[#߸Vؗ@:QgKjہl,^2~GȨy,ߟHˎow7Ɗ+W' ŶٸmFtzzKh$IvP7sL" 'cj6FRz9vNvz5Іa:W<ߗ1?`ry_1fm6#ɿhK?y"UF\9=٧RQ.Y|m:c蕜399,w^})j=4n绫^ޚoǧkK鰣d97xI F7˵BػG؃\U _~Wۮ#.Ox۳Iv''c,/}+9|%O=uٷ!¦1"R@:aGs,ŚA^k2ʕ*9!Ii5&c֜%t b1DH@`۱IQGjlCx)Of,R -f/\"`w{~v͵|Q+W$cǘɼh!;DZL? O<ޡr4.amx>bn`cK aDa6_p1d2GrJ_8o8E JtuS qs^^| ':Y՛ɋkM>W. jtuV(w|R~Z晳CFn&:RCX̗hmgXd`_yޢ 臾}m #q*g8_+|X g'QR{Y73` #Ϊ3Kq K|$w~O_-v[Y7p[?k+n9=8#ydsO9#fr_;_b^=. [6êl{3&Nx?pcxQ!|+j,8 ">Y=Œߟ)Y0m-QXpSRsNi|$qΞ>tP9ѭ Z,jg/֘?6B<{\s1GK{sdƑeB58oA @ g,}xtzM:jC0@+AfStC`!@[I2V4&f1J8_? i/I>^"{ѼW`9k˯YsH㔡CZo/5; )H!*y5V72ζ&X{睬.vt+eκvL@MVr~&}|܋Xݬh^7S[FGwU B;Y pdi`P))Vuͦѻs,y,R22 6,E0w}p 73bwu/9aBh1ySyl)>rgV`zI %Qm m=7{;k'#Ny x yǝ6Q0Pp5r$AAAAAA{BwJ&1YR*W霱RARQq?.Tґb;Q:lz<>QAHҬS߱GΊ\_1r\XcXF (4:&-`G*M9R ьփZYFh$S֊Z dY{\'cnI~FFGGXj9|yBn>l4i5ZYDYcݶd@bXro<\IaMS.qLbʦ~|%v?g8zXrױYy4]8ܴHfʁ27klmrm/yvݎ=+`trV-/[DZ۱;=ks9mNsL?5'yʩ䅻]Z=wJ4X5Yc8`V_a-iXyqN#~ 8k5 .f۸srp/o>Os̒2n^CY/c{ ? >휴4N^KݜX }+k*ݿ;sm<5oaEos?ʭG,7Hhoظd]3w6abAtqԳ\GGoZ乧_4Z>Q, /‹彯9N5I'ts˞w:U]U%_eΛ @_o<st'w=g_,(((((x!`)<H+UҶBC1S4'J43JP7u>~/)1Yʆ{neU3T^&F֊x4m)ڑJL2 Dn-(lTK娄ZZZXqFGHN!YG3Ni&BB䆟H+LӇ@GUV۽磯Bwgi*9vőZT U]8jɱo|~jWUu)t,dٔc/l 8n##LƄs9ώy=uE`VUXr<+ b_nlQcad2Yt]̲] 8eNYSr=%CVhݲ{`!@lbGY+xgJe ՚`)YW>l VBE)YluS_}*ϾtRR1?ū'ϕX|,vL 9t+ϣԞ,EW3ƂrTB.+/fF *sԊTgc^o|+Q:f5gp$}UEGg']38ϟZG!jsxƱ1&―'^:U> Euj~H=$vի\.G\PTY>4Ƥt ޖXOJ!#Clw5Y"\QB`edxkn \y,&M6R:BiMj #S1iQ)twK87PJRBx2ʥj|5aD(Wp IDAT}(In)!6YGfJD2jԩ ¤iʬY8!?{ʥRFGq3ݷb-v`vn۷ۙ>f xWBPUw$}~U{nm߮k28{Ǘ^Κ3;_HϞ縓;~!~vRSAeX:~j`E.>n;GAפVeѢl1kF/v?B{ rK/?9zz oA !5&3. 0DKgld[0Wmcٺcp0x *cD@,K<1I2 H)JiQ:dbUUY2l`aFO-/Pm`Bەr"k9L%Ro +3} %tUBR$x(7gS'E^gժ#g?C: !}sAb_nmt|:29S_f3O:o;of>̍W_f^x2̱x Ic1IZ]QD}|g *(q $ъI c,=#6PAPh1:LRBӄP{Eox as4ZX"@VJ81!F &M4A;k$J&Z pec B!Q V0۲/9n5ST8p8Xr~+(((((((x4hxI1Lk(ХM>d(#4fHYB+Iޑ(aIcJQ(&IjKFDs6~Û@xuI!8Zek!P L*/:prf@\IY:@ % 80B k!zQ )R yXy1)BXAAAAAAA!9vngbB){G5@`q3'Tf4Sebk" BJaH5IbH`$H%uv1sBv9E&-f!nLfi^ -ےYfclFK jBwSCJJJ!t!J^ T 4;2gIL 6< I%I *,D!LCWp筿CMi}( KT,T҅YfOǵ"D77ڽ'Z;Aj'3I) | ,%BZrMR ; v"ʃtm߂P|,8V$Ú "$@+JQrDOv}$&'W= Q;p{~]{}8x<b?b ׻*7ڿ{{/鞭߅sIҢ#CĘTaENj< j=96I$PJIlVҘj"%*5*.%W9f̚Ρ81g-Aub8 އiM0@=c۶ XauX4x&P #HccJ7ھ l^EnsB@ZgXGwAAAA^#7$qR!ٱe=IA9@8RH!h4 mz4g}Q8P]+pBRɌًվyO;}&Z'YFj=/T H%߉JXRa+ZsaѡHJQJ 7Gܸ|X1i *"wIE^JfxXKk:k1rTnXcqƢD\a=yy\DM5SmxuF'Z_|J:1ylo\?OXn賜sIF\nz>[Fvs3ܸsOŏ/cG|Dz_}o6?Z3oǍNoms|'M ! ?o~<y 8onf(k'JUAAA!QB1ΡM mf=X&֮IӌRAT 4ifh5$qJڜ6Ǩ"$ioIQ epb1Xk0RQq[(E]Q82`Z';5wIwRjGGX*STݔR @a'$pB;O3nh%[Ih+BDzV5Jxβ4μXq@dS䵿A^Ukm;c7se-x y=`:n#Bwc twǕ7 pӏ9Ύ=!2e<qf^jvrTR޷7Wz(RX$T({|;`au%C>[?݉fG\GƮ qѧg[s3y ΃0q|?5簣<32 #Tsߋxł#E%Rjٴ.Ҥ׆ XR ФJ騔\uPxG -/HeVo3{IMJ%XkęgyT~RR(М`SS(- 0K 9V$I4i!bsRJ :kƒG$eۓ%Aʄ; 8GhIP hf<%hV`]BV d$iD`#P)x+n($ #rov!UxPC.fR sc9sqI3u?꛾eX4ZzV8cl(S͌2J L}3/p'mN22 [ɗPF],]QE$)&M̢ }39X[.Wjٶ&=5+EO6w26"tDGg)!a(GyWD%n6OEw4,穏daS Fv5;JM`^jHdj1hX:gSQGxtr=jkj!vǘqO43dPF"U˖U>,n0YoJ B^Vuv1BSVU|6y9ȱ])??˿ÑkKEkUf~m%K1 `|NtWH!pLO`Kt4OslX*#xr1Qg/3J{]' H&xhI3֚->1Fa-4^:1c0.YOdAHP:aJRt1'd&#PIb\RBl\w{bhS BV- [NTF&K:iNaԀR){2i6bL5PP})\.lbC8 Dh`SyZxQYCQZ@)0Fh,Urvi=&6n5wr OΟA]{sl'z3كlض/ ηBWE_xl׽7uO[Pbn٥\(Ѥg3)+af~s8И+'fIgY01bq/o3B~;߸I/> xGŜ3oy)_j\mN>߰) kO1:mgŝu nhK}JpğQC ".=@B0ռyEyDT\/\*sbz??q /}Ru+405*߹~Yuox9즛/F ctRsDS{ 5^,߿r _xGO}7x~-tB *#? $3t7W!"yWλ;7|YTO/f~0da F.ȇi9mŧN_K9^G^; - &䄗=F~AAA!$:%Gs@)޲)<{2HMVR fBY! L)wv$=oqvlF%%IA@T*ǖ;G5grc20&Ƈi tHUR% BLYnj%tSr{VD=L oZ RaAK"w uw,^qIܤ15D@G!skRFV`@*5VRh),/%JmZҨBGA"^d1݃ʵ1J}| r/H 8j ATa**^6$|[8rtJ//7xUn}h#P ;_vm,7nepf=c*boBHǼu%ߺQGѥbV.%;JJ̙EPf݅j$0-?Yo(+̞KYV)8lJ1ݽ}t=KNl NJvTf].H;Sm b3%M{1ݳ[L>Dp,ߺ`*Ͼ7wo'MQ)H ,Il}̚jg:~"5Rg7v,2gl0",`R:{2o~?A!Q!$v 2T@"[:*,c,#cI T#V\hqb'sW@Gw&h_m3`3:;LV\F0|_hdvq6IuDK .:1ʸ*RVZm M ʄ ]%KV8 1{HYK@"&r!. dT ӿ;E&@8Ǡ8 IDAT:C22əs<ϙf`S Sc83۱Qҩ=9Ǹr|~%egxKXJmm W{vT:KYݒwD#f`J3Dc9"yZ*DG7WczRocmPO7˜r%z=Ujn6q'ι ش`EAswpQ17 OY6hEiQ!7#}5 JQc|ttV-ژ$K X@&d5Z[4#8:^/60.[E<:1_ĥiN$ XP* &Jܴd˥còk}ӔB^[lia!.āq =,\FϚ"tt194͈K֒B㜟R8c1b#VtRm V¨& @猍a(v7g!YQlKπ ǭYwuB,ܽ!MR H N[ǿν^~ҌbHmV[ZB~OW}|p FN)KBl=)(7m`*("3R"asIH oAD >W6vvgOqT K :8~NضGn}чѽ̟>yO9Ֆ0n e3yO-/vmz=-&]=CϭFmKhe~^ 0 m0B/Wkٱ;7Q)%%B*qt)cT+g9XhmyT$19Ƒk [ kB> B؋;YD[%_ 5#jaT22dp"XͲk0:?b}V{`>z (PvNR7^߹*=#]Ws*2So!S&jMr j/]v=|F-wS[@VӘМSqKҬSd鯡F' :)/: |St}ڒj4ҩݑ'M&?/U'ab\xk,pm_4.a)9$]}9q;>}>kC^Ιi>+ wv:Y?&ҬI3P'473ޯ{;!EQ]+;yS/x53|>ϥϮ\}˞j6EZ鬝R*`dx'XpYNXe¥ki6ٻc=RD9͔@)0$ ,YnMr-3B+sI[^0DkY0Biܤ fheBmթ ƬW ?w jJ,M0X k b%^IffiڤHP(ZQxO+N{Mbp"gŁc8f-ZETF6/=¡nr4;}wftu{axr?"J\tw]7>OZʋNezducrqMB 0\w| EĜs) 5.K%[Kg,dWlS_BdOXIOa5(xYe-7W~nı4>BG4cz{.9@,Rf&]7S|BO|ẻ;g+/fq PwMcmw?Zŗ9Qx)W9tX,kp'Gz 4 }-7 fq+) g+_}|;s:U8L,X{Y P >t kp߻n(b@B9 |_{BNwxy;[x|e|vሣ19$V{a}ᄡ콜?786q!gqn)S?FOAޤh2 !GkRctw7HR>/ܦʿ he0a@֬3{2(ßsIÑZDp T(F1xzA$KsMR$Mꥻ9Gؽs #v !b$ٓW30Gl;T ) h&&BRA"$u8ʥSW7Ӗs,W@N-ΉVp3&Vq8GAn_[-BK5):oy;#[͊c !Zkbd#|33H ߾!*h>SRx,i#GGQiF?[MP]t:Verq'$OF~an13g єgwu1}S5&LJ>n ܵvp[sgZ`}>~3xDo_fg/Pki6oZ{Aښi!"Fg|d흿vg͡ݒJWXc^uAR)/hc 1PRT1i VhkI3Meġ8"ή*R*%#Lԛ [DEJeJKXɐ|}jAXC1("p4SsPqBsTzvu~\轡B7ftRJժájMOj7J'e~~m7A^G'u(F ̛Fk3B BdL#5#5ZYC]ctn12`PCS}!Rm<~/. Pg .hU(XQIs!=]`-(09I B)3t&ƨkEw_7)Ǐl`#GY+ 9aq/9 x? 6O$I,|݁{VZ̆kHuIuIW)\mƋR j&$3`%'N;##`V/$Ys8MuT*T _TA*RdI(S*B`0as5>Y:9[uP,Uh 1zɉ  XtaXfF#Bl݀94'זAdXg$Q C1s@y((`8c@!B@#ib\o.5FZ?' ɱܷDa<}/X& fuSSD:TL_ҹfAH3I4q Pʯ^Lg0! VЎz3g.Shed,8qvPSkrn5VD*Re4O{]I3ڴ&ӈe'JɑsFs:s!T@yLYsX$IA/u8T%93;Cرein@\ȴ),1<kO!O,iPc.f+$J)Z4Öڠ |AĜyhEKW !%II5:hX|xE*P8Z=pJR P!H5m`߱RHk '%4tBDG,fBg|Xg/*;]tT+,l#U 8<椔Xe1@s)RTnHr1ZF0 ٱ} s/ZĴD.fBaCH%aVW뉄OKR!a0bWl`%! ֶeNP,q :[{=W8;c~9k}4 IRMj ݃ (U; 6x FmƯ: ޷4K( ch&>C |2>|ֱxgB(T`T=a Qdi;7d@IdFYC܁ڋihCjt9JAlz0 >s4[J@a ILs zuEE%i8QcmNY׍{(I$ 0!RLꍥ8& %yMXPb<'sbd1{ cb7~YZÜy9g;}=R !p$\[_ o}$I_)7N 7<|`3FmBbCk$Å!!O C(ђ=qH blzұxj_w3d‚@6?;7!H!E(i3%MS՘\#$Tb* "5(UQJL,ZFX}F1Y8J]JatfMTrM-?⅋سk;q ! $p9 csNR#Jhghf8t@k䄄,b&zU rM'QFS짣u)%a}^t)O6^Z34o 8'EHAYpuF&2D:pQ샯i_6x3`Q{#l3F._y<[L4wH #72+,Zԏ4 wW}E4OW@l)[ֺ-cy,pN &睲tEJ f#yvZ (CLꗀr[b^%A(Y!r39 9DS$Y۟c9d\,fkmoZJ-Y1911KhUق @ RDPA+&$-۳c3jaʥ"(fRC R(s,E 2#áFc LYyPDac[(028ynJ \NQwH\@i}gx؞{?t%;{;퇯c|'Iá;OrI<djx1QL"ckyTTNf>C# w ظiMCU{zJiH0 c[J dYl(M} _lǩ'"* IDAT~ C0 5[>"%9l!SI:g-v(4Y=8! !:u#G`a t5~Yg|4F!#oޮW QTk?GGϼӿS=]8o<:OG[S)}]ZJnݛyqB>G_6Նghk6~8e51{XlBp ĴIEHe%%q㜣X( WבMjd%+Haj*hwސP,ϞIFwNb@$\Ov'PA Oh|NJ(BZMVӏ6 ߙ%iyq 7T:{gFQKݰM7l"D䑭7|rVDY6dpoeOdɶ_c#ҌYN8 3藚b9bbc|;@tr>CwK-0͔yK|1f]oS'p?íkT` s'~vcTx~ AJ ( _ C\1URH56I *f$˲VpFf*X,=$T"y@54!1aIYR.STe둜CJ1VC9DPT0.ž7> .zWbT%f u0ơ΢I8窭ka39̴GjOr9"ŠT ( ag4I毉f)`44( GdT)rgw h\x3$YJjJ>@i}nLTBq C*eA꤉DST UH|uh_qv C:IF8\h3mV8PJb`c"ܤRy0>,Xh&Fr^f aL>lfaĜٳG OrLC[,G(A3&kT{g< Ͽ;R4&Fi8{P<:%);e eRJL[ kW0 axm0!عoxk#HIKΥ7#`rCN|9k fӨ9y&7(ʕq@s]άzrr?|tϯ< zNCr7s)s|q.?5!##5DÅ|'%Fqcu2@lؾ]^s_د=&wͷ}䲷Eo$r g^N| ;TC-uW^Ʋ|xr0Ms璓Cu\w>笝-m)+Ϧ?Lm^|6{3=M̢S^ZE$ذ@wv3n{KB5P1_{͜ ?+f\vb?6pVe=߹RJ>q aͥousK z-~(i"'{!笝00r]Qҵp-g>=׿*a7s`L,9L.>{-!]߹6fP]Y˺Ȍ@ws㵷ж1D\ .⵳ |k{1|)|nA^]ș{֑wG6’W7beWۿmofByC(_/}Yo~||GhwqYpI |fTD=eB9n w>Ė}cW^VN3o7n+.e@ 7/|.*\¥kHo]b7[Y$CH$V0{%F^#k@)B10{mζ-Rܒ;GQH;X)Ggr>jMtu2hjRJHճlA` A V\Qr&j9iK_lt+>%cݔ`dV0sˉBD2f`5͚M$tni_,~£-IHwKilgZdՙoC~Ɖ qk”'{՗מ@Ĝp)z Tz8u0>®9g9n Tzrڅp)L~ 1W Z-r`Ā RJmܿD(d[Gٟ*M׸sC+B(8 -fYtUzo}|ۛZj_ CcH%۹އٓ(PO-~~W;O/|I()&wg%'rFBؽn7Nswn)9vbv}I][`U[=eg5Zh}v7ܺqw?߸f<[Ϯ{"[L7+fn*96E>uc|\{+E0[z{e/+W/!yO]ܽP'?,"8kp%+Wrº,Cl|WeV#_.IEIPC?`p|Yn Jzf!|lm>z7m"va|rZk8~D}t?d_k-yCZ,#I3\kKZ_gsR)=}^2{#k6iYFlBҜ-Οn5E՞hTAR3Hg\Ѩ@!-tTdi.Y:MȳfgxzfQC)T{.c՛dYNk&M,cp|N: v=Wmπ9GNN#lwx `a=,= %K3 J]kҤ'^@Kfj,bV #FTKN6@`)YAdȅ#_^jײ[e1 p$ Xw ^{o<_jVV2"N eO;,Y~YS:>ՔVpoh#憻&3||7p>.z;(KTE̞86K?+/}%-<+/XĆA[?x݊* 4i9t,իfFMeD~;qttֈ-};hf%N:w.[ۺ|:* qᥗp5>t(MPxϷco=йdy1M6fϡCai՛FmSd,YXxs5UJŐdC|(jVLl# 9D/is4ABLShQd9;eH b<0aup$ Z~ c蜿?xnmDF6Ǩ(A8M⪜vx?yd\LJlsHQH|-f9p%4޷լQRH#%.O{q@90b, 6{%`4aVsŬ]=mgeӥqXe~*@EWb:7|cFĭ~,YQa]"1 h d1TD,d,rM5FPbV qDgLGHwp_*92mʮ-Y,Y666)$&!$R)$"!B BIM0l `"WuVۧv;ZU"/̽3sg}y0(iGa ZB Mm9آYr!Rn+\N{v&Fw0;{c;[3ADMY JEX$Y T( N:=8.<^5MrYl>,N=,VZC󼧉GV^ءk^ʻw%o;ٲy5Q27WC |C`~o.7v /z!p♫o/. rV>圎97Oxֳkn#g~\@vo%ݒS۠B}7gd aksG /{e,ǣWQ`Grw^w"-RT!uc" *D@QZYNp ]xI+ :e + "P-mnڴ|k7>͙[k}MV0ve\"QEȻչ98'"㰾SIQHI襮 88xS>e`噗G'7^w (ssJ@2a!bS8c-gQZ]ㅨ4IY!J \Q 0Gvޱx-gNC[<̵a!Xnbq qwcnّqѫ_˞x2V-%v wz 7ݱɩ]d@#fdR:[ISff[6H{u5Sfv+~7D d̴ȍ9qq!է&u5ufcͨw2XOw~:>k[?7.-?X }5.n6N*8d(?N =S(6gE's: {NIG޾38sU aQǼܷDgE-$ћoc@ ͭM275\ʍl^oNrҖs9gqzNY5p0c9Ga+7qV_ܻ${&]@dLNgEwW=w1hNgqq:ImN:їwYuֹ Rпl$߸&ZL(Ӓs8-9 /\ÎogҘ/|_yMdbV;vk$I,MyFi %LuNdyY]I(BUPY+( b L7֡VpR$EA'4jjP`QAzHa:6DB ]!bFEYBTbQYYQ03MqeI@)QJc8qӳYr*2_==0,IQ+_wayFXk9Ś,6E?.nkL<_{˹YJIe*qk^J6PSO4p>"K(ra9MR1~,I'8VPJv:B.7Aܨ"u _ \ _O3gNnG A_\4ktS<ږ:-7o)>g?*P?<~#2xysǸ⦥C$ mZ.IuS<t3z~ T6`!K_! }-8k7 sNgJ)V[ù'\Yo# YҦ%fPtF^(LF)S) 6 䵿_Q 4y0/gXCftZm2s`͒tڴrb_| %8v.t;zzʟy~eg7'? ^Uh7;n)r^Kӈ,Ս/m~ǖ{w5p5$s35/a8rdYw혅`O~}\[L&pOڟ>r4c 5b>ɏo=tlh87Z[ؑ'[ nf ZYlyOManͲoƔR3Bb9A@ٛCIPjX!3t 8Ң A0:pH)P6jgHTb Mk!Z TdEqzGqkLyA `9^bҍM]EFXaxLO'T{҄i10fa Va(Fwע {BRQ<;$FBM_UKw8{"+L9qEi6>Fׅ&lﺳC򘍋l{O|kOaz6EFm@0_! QeNMfj'C|dYdXyvg]  =AF )ɦXr)1?E%4'رw ELkm]ǘi p^*R3wNϲ}(ghNObD5]SdF,ZZpX~!،]CKX㊔{G1#, tfKV,G˄ /gه\*ɱ}d+ \9R[ӌ0|8@7'3202B$S/\2u╫Y%cԆ1G/ IDATXNX9231&4j58`;NS ,adA%tfsJcˆ$S)C+Fh<Da@6{hAcp +]m'Y0|Cr+3hw`h*FzzI&gZCX5LAgb,ddbBgϖem ix`j>ƧZhZ(H1>gXrlc,fQ]bד^ZO~~8OI%bYvc (] 2SD"~Qq@EІ<+:#FJ  (+(j]fiԫDڲ/@o hS cɊF+ lF U@&YR"THZF "* $ #dw]sueϲ#År7AuVW~)S6u,IG[w?a'͹2Ӛg]?(4Vp*(m].-!!(pr: PQDA$Iӌ(pNSa,k{t A_ONz X'0V`C*D2-b@r֋OW~),,;0`A)$=|Dvg儐XzL󼧸=ćH(@`e+S?0sv9+ʀp{PFU9X Ԝt/ 3G~s{ҋYv{ ,`q0c4ь\ ʀGL) P0Pt([ƠYΎwG7q H!p(4NblYaA q֑ xr*Y?jPH7k]p~n<Yn;dt/[NlGOss3le/ Rvg@ eIbIn A{LB \YQEjaL k@(A5²"iIb)ɵk b "%/ ^CVGFaF-b|y=&'gtg|y)yq7ѨFDQY<q2ZPAYc()к`dI4g)t@9⬦V1֡u!5`Q-B "Y9Bʔsm4:\Uf5[@ zy`y >VEa[,0N% Zٜޭt*5ƕ EY"%JH6w:t)@ Q_esDqVCi2]P5-ePR6y=|yy[,As)2ɛΤH[L# *e%DbL(%De&m$qRF5!eэ8 Y:iJR^B- %sm,'7kdͺSh=`y0 !)(a$MNZNDk (FII,QdLt RS9VB'I@ D8 $Y,ZIS)+fjtZt$yyY$M0PjI /&+r7S[p E)Yj$k&q%&2AVG! DkM[9NLL$Tv,Qyu0<{U6O %5^9):g`A2;=a`mNiu'Жj5)0!Cz \ߵΚA D0 P ݵ^G_;tJ%&M+b|l/O9PbK1΢5( 1;qfN #Tja{k:*Ո];& 3SX,]K*v'/̡YyqtQ0<) !Z,ZϏ=EH)n(=s'l Mo"sqRGNIo_Q olL[Ta+$Z%$ k7lbph1yLeKX:T,y8X0׏T,Y4`L |y)!$+=aBTySG2>+cX DD}4e"=;ᴳ'rsHx&ǩBBkcZ+@(D3cdJJjY!B=V0Iك,z1X2 k}<)אxS=nP[£7ta $"]As ۳[o>aPQHR5L PJiNўځ+T5k um@Oz -@\A^dakDLog|l'ayZA׮9k0TX BGAsb\@qk!˗-~0((2|-&(eкE;e}QJg 8F E NN(% Ct"*L%"0@HAk: 4zjt: Y8 YH\YQ@o6'P>yXO9Br`sq?s Z8O'$P g+uD;|#N\\{ qUB䜣O5b! Qd0EJ@<˨D !iQ hCG6}u@uAQh(" :6o(Z7?ǫG>.c0H>zM|O]0|#?`a Z2;3Gޟ (v~!FQ'Z6`p:0"#c-i!M2vOL"ф^F!΁1L5anR"43X눣!X Ci\SzzhInHyfH=;R=؋<cA bʾ=wrҫ#&n/~vuo6{ ~ü{_ ؼmٱR 8'_9UgoAUvB4u_YxOsCC+ƭ\;yIgv]?lG8mz~43Y+6QH:rKAZQhL72ި;bDIJO@Fuѹ%sy+ to}5֢.粺W{n7$U6>khMY.4nヘ}&[9VX{9\tJ!O!8w9l6>w3>ni:^tzBSX%u]I}p%|j. vy&ZhO}VfӈMg? 6.BH`;x?G|L姜%D8hb-)# (gb:\;U8 ֖1ZUj,Z2}6m179A5&#CbQƢ R%(,J(R )Ҽ`vEQh %(H=m0Z!$L<v=S{9/{s=Et~;yKLf1Mi]}wTTd¶[Gx?7BE"ܲzk8o#|)04eӾkyO⹛iW|hYmM7񚋗|=CX` [{v[l8q/5 m7s;Oz#zfn*yڎ[ˆ/`p|_ݛeR(L>}_Jq7oE(gn|W٧R8o~|- gS?~ L7i-h䕳@oa\l-YZ fht2M(I8GQX[PR $XX'!j"^QBNR-&d>7M^xc%/=dgNadLۼ>n]/H%̻E˯\4@_n6km |8a:+yホ DF?;?2xZRi^I ޸,',I3Wo{>3'U_ ?q/QQe劏|wV7 L_ܗMz@=5AWPsK{ 8ts8)PR@!DI1V^6ʎB$ͱ!Zs$I-* ڂ*d~r;aSm<{=8Vxt|kSM3<9=UKޞ3woGb)1QlX8JV3D==LJ5m\btbe)_Up1e4eaᮛ_;wM @jRRP#Ӝyљlg;wYw6Prt]]\xEǼ(7#,B_z!':ndlFtY*`n·,3_,5ljI@Kp’2%k,CGSIbE@`'/TYn> )$Zk(KKinZ!81E. BFp(Q6C`Sئ 'm8coycQ`B;s0wJ{i|⼋.dvZ)68;|zk_|[ld/se"@ZCbռ!܂TG]"2eu_*`C9׿w8[»SCtoP=]uGsɕS:-RX]{'o]F~Nnd67C3ˑ$ CbT`K8}Xe e}A-< m⋖?CKF2`t2EXDJam4YcFQ0`E vBXT#ITm暨1o7:6l: 5r8yGT%aa/9zX<.;RWCӴ[M:9ae /J)0FI|۸Q`s6Lrofg"YN#k HE?RU$j#ˆYHѕTbJ@j 9]=}E,)6TV*"a[޽ /^|&Qn6@),?g-RJ~\/ufMlKmZ]7DsȦGWxGؕhN ,ZU' 08 RDQDqLVR B5`9 "݀-" qޞ u QkTsLY\01o!څ4Iuo|c,_F6ac$J,c` 3ĕA)9Y ]/:0 crJy^(I T՝%KBdCZ;XtKeq=&yOGI4vfc,cͷn,S=)Ꭽۘw=|zd{ct&Y_2ªD@{|w홦pKsҪnRaʮ11ᄢֿիFh9n]i ֲQ{n}l=GlXa]*@ * /c^m[6qkF~d%2U0j3dN]XhMs{iWsƥ{ٶ{B\ˉ*~nNҳNYLڽ p⺵ 6.۸&qZE1KzW'}h67Zk-j?I}c``x?A13$a@% i^6r.ݥyHblق%P:PT q\RK'@Y'ϘdYM$diJi[}<4M6o>$9c5B>|+[p>lcpdrw?tX{|dt{.<t`SЯ>9|RAHkvNj*8T*1E)֖uRue_1u IDAT1c 4 jq *紒c-8Gid[-$enYҥh==c?P_ʭ~NG~qu?ԉ`ك}_qC{ "kL P4; $s"c%aSkG1B t 擄VbC 0PI@RD$iJ`b|&z=* <;ބ ATVM2C'BЀBH$I,DQFqـYkl!,cX%YSN=eW`y{BA' 4 D2MQi"lJ̲qRP$990@Hg,rl2n3l,x^j:I!y_c{ܕ#>@{8k* Vk%RHBQYZޅ,^MT룓hlʔD$ZyJW"0,KI gPѨ81R3Yd0 IS|y=^UBE~=LJ17w3J$(T 8s;HZM!శL+tP_B FM՘#RLTcdh9՞t/yπyySX¸ʒʞ_C8jj2c֮;ZA4떋!C@<}dB%VYFBV{ȳԿߞyO?yyOB`! c=wȆj24֡e8H"FksDaHXy*lfj>a1LUķ^<{"0<{1FW',iY ZD_oc48"]6]}WU"*)gtb 4:dhHhgUY҇,$viL`O?B6ԗ?v7H9$fạL)[&9dqpGN`A!NDڙ9$M:'l$qB M|cMQΨaLDA1 /[ !B8=0&Y.=#Op%/ж^_w;OzFQ=_y/@ 0|;D~;eW\:lKzag>o/og| w$߹C 1s /UG~<{85!{ Ҝ#KZ0?3A71:%BkTâ8G dJ!EȐ;Z"'iB ;8֢uqyc9 C:p oa=:Rԫ)yĭGHEw59Zϼ Y>sUVcRj_jބ:3 ZH"|{0{ 26ѿaRTdi !QXgi4OE![fyzz?qN,iE!Tj̈́'mgCy0+by&V\2@$R1=Ї!K793sY@59Q:CbAx0 )(9Fs010ď̷KN}B'-;9pi|n)W93hRWs+qi\i,P_zo3}%M:Ve7sC(c(|}-h~EnJ Û6n~dW԰r&KOᆏA7JFs)Ա25O(Rq#<86D&8cA@Xk-YLu'=aB[v+S WFK–L֩%y=\3-ʻn<͉t):i%׀c5$_>nWji}jzwS8+:>>xLiː5B_ЗXq}?߿ 8gҤ29:uxfi_(fƍiSF: ֕.lt:FaıPY=/D~+O?hc >͟4vkH c9f3tK~-5'e)|#vu|.:S"_/! BP:0`ź(l4^QTjulS`䄙GgT!I iiE>c+ EBݰsJ!llmiXTId@Ej#{Rׂ{5w4e-+֗9< 7>6\2~0p &MI7V/ uk<5ؖ6h  P/1dGڴ8I;lsXn._0T@6`KRkq/8_3. jmwT>9G3bQn`j|~{ :+Ja --@ZОF+GjԒ qX60s*NX 1>ڄ0q$+_2K8ꙣ8˺c>{s'UK!T=]R!Fu+COc%U.ZLuF?T)$BݰX?XY;2[\m9<L{8fKξ{ =]xR]=}DG6p`cOѺJk`AVҽ~ $E!vn?9}vdjd>i0C\ROZTW-fC-{h7iPLJeH6gbU+ʙkqR9$MOԣ<-ˢT R&U-JZ0|iz`Kﻗ><R/Q2)6uiJ\{$N+yt0&JUYp, 7>ʾLĔKexWe87YSb_#NfIW̗~M+[_Bb$bOs@u4!i58D1gdk$TH5$ RXZJC4e#_Bv3 C n7z[hH=qH80c\˦5!3G@8JF\w+_?&C ~u[goW Tx<<_LO@ieٴg61#7n]iƼH(7#e }<Oz h.m&7I:z!J<6JcVo7JḿvCTcF2lm [nn-Oj=We1QOsykF%~$.mh c:LmߢOH_x-x(øLqXɰ"ľ 7QHl QquW0nn'Ha*|v1ր#u0IE=IvzmHU=ﶏ[|9'bUD&Z@m,N< x{L 6柿;,Nՙ9؋ۆB=5z,$IIRESK;Qf1dy6." =ys rsBq2Ø_oij i]ܐ&Sh"M }t?}oQ}B!v1 QTJHa)PISAkhׯfk$I#)Z2"uƤu72Q!v>}3Dٙ}fB!֦G[.h` (r~Y>!zPT C8%}4rL6KghDbs 6o_JD!؁]˪!B}|1Ө'$aEiE  ׅrL&=_uk \!OI\.O_:Jdsy BQឮB0!Bld҄bsNgh>8,(|MQ!А%xJ!o"_,4iL_w'q\}$Yx!cONSKLJ!&BKBS3M 04G ICjSV5 HRC&Ak12v֭]E6ʀt]I=l>FXM4$> BWL!xbL|s;|mPJc~߳Q~H(%Oj8О9K\i: 0i 1R2N2`M2!x9`B!īR &(rELL@6W`d-QbKSg ʢ"PRc5#P$MƆjlƔ+u,Mqj18V(jiLVDuxtQ)E X' B ABI&BhQ)Qi<=W\6"RFL45845^'B!y>C u>SK&ih6O9ƍAR-~ 1k ~ !^d&B!hyy8N0aCSd V+8Ji18O69S Dp{!x0!BlGФװ2i 0P(0琣^|ϣ\ IRIq1f̙{8ݝ((UK! s9_X/1yL&LNVn3&xuL!IӄT˃tw)x^%ځ={* $)ȅ>zMSF4 :GZBLԪD,&Mdf!~O0!BbEUdsYpJ

(K-Z+XPYq@)u4sfTai`CP0R8KxfrG!M=]}!xYH&Bja Sgaeh*@XL{ta lyރs$a%"BRerF)Gj @SHk9:F#Ib!B`B!xA9L: kozK) IDATB$NJG&ߊ&HD!B$AD.ZCf3<|1ց 36l@j8KTeLNB\ƞ0(Eč̈J* !.L!/ kS26LL˟'SC>I9G& 襥}|ut[CxZaaD iE!>G0!B$Ҙ4}4 Ӡ5m% *Ȅ!ĒfC<ȪOQORj2qBh64Ѓ1C2& ! !epbV5eg6q,ͅ<~JKREx&NQ3  (KuBGhQVXrLĚnJ Zx'!U1d3:"8H 8HJz!ľA0!B94sBh(WӹvUPY3H6hG4#2avGke2<\VXFyD6&{B!Ğ`Ը)_Rl&WY9jơE<В)KeYr9N5;UJ˜ S ^אL!{5?u6?)4IR0X-ɐ r}"Jiz֯"1r8$B B'9N{G2ЍVP!ۈkC-F)5M%VXQb6g 4 c `ިpkgLʒL!{ a0X3&RA>ZAS!COJsK8kYdBqӈ29<+&xH&BCk)o$W͔1Z <ZbXup5IElH+<>Jj̄shE0!Į!B!iϣ{=˞Yk yjQb֎18(6һj1iB!o 7i GXq6%56Qڞb%B!i5vw& R.MȆJ3qSBkIZ,i\d|Mj) 1v2&MzM !v`B!9Q&KPac XZ:|`=lP7)~!"j#ݽ_B BS@j񕢊GOWZ3&Xg)1Ԫ(?Ϸ2zx<8K?&B! vcH<|Jkl)ATm#ƒ/A1iG$t$LBWk|b_8,~P(e|EZx;gԙqLZE}/ Rk*О7BR$Iu!ZJ)I8m6`(zA{h0Ŧ)ƂIRZ[[M hmIcHS'eS=`\R,㞅U9G.I˛8Оf”uECg-Y_PK!^msXkt1)Pc'h$M I3MBWNɗB!$ΐ=B=I8 !B!+d !(vs]k-B!Kh nmLna&:1,6͛>-m2]!xTcǎ1BHa}W/cGXRj6c Zk8wT!D b?63ZVZP#;9cS| !/ ]BpzVcY܃`%B dRn4fz(Rҹ{L!I&Nr=ÓKW1hvcX"~/^ryo~_8orݩxY p;~ 9Ɲ\/𳿬ǫ;vVg.w/MwM)+.6X՞;߹Oo_sӗ.ŗCe_꺻YUn>C91г|w]OO+~joc7 ,\ܱHڲBn`_|͛$(?O_%c_;tٳ﫾}^@PRNӝ89ٵǍQCvؔ1Rn6;5 8R.6\8rF]]I)c!Iy4otiFMb;}V{[9~F0MuPoc7DfOfz+_!BtvXD<ڂ@w6v2j}/RGEj7W ? }ogŶD&I-zPlJl{䶮M-`m#-}^UMۮL)о>6Mo5t㿝~&x c~Q& IB~(5qi[E)pf%c|(M-ms̒8jHVYl<_ǟ(1cȏ-K7訍׿  2$t1\w̍w>a2?@biz8}4B*}t`QC4 }Ĥh:U[po~<^w7< Q#9`Ѭsp;>\Wgp[#oPZW,X[&Mao³{NwaC8gqذws7qcI}8ԳYoӾyVNHy;l>xMs[^zch} <(ʢ"B!Ğ[=` 0CUC)9|b_`m5aѣifqBSZM?9?r_OXP1ynAYΜm`,Z| kYdN?T˘U>zGw~:5<)Ǔwop?L@{ɼY߽ʥd14;b2gt^{`;kysTW՛bQ'f_-@e<Ln~o;+/{?*OcK}IyG.䊏[p__t?wzϥ(g|͡S/7ka?>u6UWI65Xm~Ne|qkSЀk<ȃIZ葍-s3 m8o1hG'pi~pHxo h?4.B;y.@4Q.S|˷wc5=z\te\Yt/Ks8+7?Q·WkԱ\8n|7+xͻ򏿇cg`.ƶQ~5߽u)~.7u{<8D5'bW(UD8=n_zW|tW.J0܃TἦmsyyL?L.|x\F8ˏ3c{f ׹ya}|g:8H5q@=?.R.>(:ﺆܳgr$όN.o}ۖ/Frͥ]ąo͢;t=V4 ?t3F*|G'~\mGW3p.죋y~ec.~׿{'#'/84% r&BnA+u:)s8R\u??ß+c9Љxq\去\gsr(fc ]˫L?t>̄bP!w?8}HFt3bDs%=G6T+Ej(K>]ڡX2:@vo~ӛ87͸J0*`!+.#Hs?ʧy2:OW:t GΈ&B?O!~8G2w&N?3Ncy͑32zLְ}Vy.C0'9ݹ슑(+jl*-]QGLT@w9߹<:[zck"=]25"F&^PD,z?6Ft-^/bB/9 IDATs~՝\McŧK40onG]ͣߡ+c &U1Fp_n;H>Ph?:~<0!&b)nl]Q$ӣwWrs;r-a6?PôŤ.Mn?r (̠K?"ȏ4ebңrե`jctЫ3= ڡ}.z(yC'>}:С[n?nj ~tu ]!]rp6-U4l[[QМ^tJ^v{Fx)ݳT ̛x~yP:oG^x'J$I3┺ A0!g:u`Yb7APP0H("`1v ".'WӄJǎ TՔ(vdK|=6X&9E9:l(@|i*?b39( 6X27 3 L}!PIvMVdH ˆ[ s'Nn@fc`<fMbL?D+ԤxD%>1zjP oyk"`X(ѠosBA3D 2[;?gȄaD>vjzT>95TZ q-@Alp+ӅTA 4 9/6|'{C^*_!p&hTa: ÍޯBqYCUZEǓڪh9׳&;dEVPiiĥ|E(86Vtj 8܊o6rڵJlC-!-·e4u=u@PQ_ٓU:丘@W2 @ GOeٺ76c7L EOaEN/NC!rY[>;s9B4ۡ 0+E=rg*E8-!RML|{:pTJ5ҥ=]9[3gfʝJFJ$6_0:v g5 b;Ӝ#$i$ISBajҧ0&;l0}{}nb 6t{Jٹۢ]n[tR3$8SL@Ic1nd$u^C.CSiC ĺ22,{}8]x#4' ~6')HE_#MOoex|]s?I<ޓ@"]Lɘ)T_gC?M&1uD\S u@封u2I5"c$1.dDI$I:N bG}S柔71cG2!U%Pj{.>uߞYs{1{{rz0k"#|^JɨQhh77x/ﯱƐjMu-F0H hD,B @"ޓBfÜwxWYP\)"ł`Kt3&hΒ5   =`XG[cOȟ0+1̢&Hv<`(L?Ŝ_eg^{(~g5vs:ôLX_l{%@v5~z-h<  i=k:$dD6s ?3 w/&c([6L]={XqH}|~}D[IU_SSmnFE $ӥ/>ʜ)ݾj5n2L! 3 r,Ją[ػs3/.ƯkC@fF M×;+ihd?3r}G "/%{d{1eƠ1CQ6e T˗kۅó1nLGJO+T\U)&Y-`0a Ta6 B-";0phfa_2PXH!, 3UaÌ,GfA0&|)2֛,ش[Vr>Dۡ&`*"Gc3 8=5޽O?]Mq$I$I:3NPubINt,}F#m>x<4&uwkG?{k7 ]]׌ ~ySf2oF6 (ԝX x߯lܼ]FJ\B.F\Cv&`EK\h'd#! w#Ue+!~ɏNxܑS䈉%)1ۡ*1$:baN.i3z֮gXJ{ʞPZ&!:Ց˅m?~>La%S:qsdq|ABBdʙ< aҊ xC\xbm w, *؄x擨GSz_S\ˡ%1 UDw_;IH&1^{)7%_G{ZȵSF\r6`E2ϻ o~>.O$^[r$׉ $I$Q|R[SMFF:r f"/ʼn汍t9AgNpgƉKcv8ك-c 2j#"9QݽUQh.fce2G~!NyaEюZd[(i,3R6 M[ulumMfwu$kdU3'`u%\7Ú7Hm0M |>ږ}Աpafw,\#4A;=f~dEO}z3ZoaLdذfM /<<}oz i*d/8~;)aYYɘKhJ(]v={&1)˲p3i> ^+!I$I tރ~&N섎߉Mߗ mo T5m6'JA׏w)-jV5+^@Lc2*IrY5%[U[=*([ǬyNZ׻j%ӷ4Qxk?ylGU*VO֣bFZ676M)[;aG w[6TcqQ'qm8,gd +cEWs^۵._ӿn+x5[+H7 1ݾFd!| lZ+oy}B^aߠ$Irz0IE*+_Υ۟)x5pw&4Aw۞6Z1~NJ87fwfC#ò+v5Sbp.'$MuvYǝ78::H&QG\ˑ$I$Cd&}GDlRItKۻ~ W2yԱ !yI>zi@u'S\]wrG.ۯ@!.5#;͝@^#DzTU$IStY%kzOs'|zDBp2u8<D7MK$It&L${FcL-I$I!0I$I$I3D`$I$I$Ig $I$I$II$I$I$!/9 pI$I$IoNK&D*mE.EQZ2%@L$I$IS ZGLf` H0Ɗ(g=G+km(LzQH$I$I$nl$?~) (.]dvMv*ֳrn, PU~_j=eWOۉVۖ0EA=Vd&MfXii 8bYG- ankI$I$I0ؿ{}= {S9j+F5bע43{_A5ޙH'D630#0gyd##(($I$I$I6R~6o^w ԄiYҝnY/ܒ0ï˺ظx n$]OY:?K2aXn.\AɁ*}\.t<=( r&o@@q&oX?>ǰ'3`;Yh ~gƌ9eg|k%|^v)C;:D$I$I$I:Y$ɱ]+D\=[^rh=ՆnT꽷yd^p z֗zftiơ|2#t%;iܱU7Q;5K23JlmlUf=.| oA[X>u*S)d'"yx5NXNSVV݉_quQT_yurߴ6o[ %PUI$I$ItN) :rV93^7<[~lkY=ux+]?=t%* pœBSA q/_O8o/H>1wmCS{'kWwr׭1aLwbBذs'$t?~q Mu{>{/7Zc)+Tro&pnZ.yp'K.'L/I$I$ItS& V|̝+T~tUiVSCIöDvA?h`07E0C~@dқLY ]r`aaZDZզڮ,'vy++)Ɗ߹')* 4.E`$I$I$}=QQK#>3Ay=9"OKO\v|'Et0*Ba, E^7ޟLJ/X.4GsS;}$I$I$}/)M>Wf&##Ei2hjl `PlxuASu%~ǛH[l^ó! @մl\q$I$I$-`N~D'Z>^ƚ=34O!Lx쩳ߜ|ߤ!P"J$I$IG_LQzo= j:l]0|W\m~,*vlb{|*4YT^]$p8ۻvOQZ*}v#9&qߜmqvW3J!\^Gp,  kޫ<`P&-.'r ŏn֑h]_MҘ{sXQ$I$I~:1`cl*fj au>T2g;|cj֢ډa;\Q(uTurxM0}wVҨz_dm/~Ȱ´c¥^8C.TWḬ1n`릾ȓ3g؛)q`tY͌g~&.Coכ"#S˓j/3yx$I$It81`\?sƁ 3w:ﻜ(՟/csizB&y(T'%&/Afa` _|ʆ$7CEUڶD[O^ Y(M_c^/skYr~왉鯡dJJiq&1g,^ xA< ;n3d*uXe ~شF)"ɥ+Xv/==2sb*ۍOxR3dDRdxz AL~\F?J0}6qDSW h+Q}݌7y}= MkU4!tǁ~i#$I$Is)&Pme"hg_彅4{fhqV/O쌼k$۳7 u]|^:G?<+ ydtEB>#|TG)b'I'j7/畧aSj4a"8\n?}#f67' oʒI/vidtT|J0BȻN}zT_") IDATL@[~3nNylkTЭfl/:?ȧUrpra؜.7f;ohkX;K[MlqsM#s!\#xW,_܉pow HW0!겹3jJ{W3؛4~uٵ+yw\=z6#n&t_Մuvs *2ymۉ<;{$,0/kXH-׺傦 өj h$wr;ytW:1hR$I$Igqֆ PCR\Ɍjtb geRVb#6! ~l]AP4E 2% "oy)ٶg᭛gs}azr9Hࣗc+LCIi;m64]Eu{&Fk,4-IBbD~5E:B\0+t#hY7"BIH^t\S^_C9b(C=ڜp߽\RYʴⱧÃ⥆Vr:(*Wa(HṤqBG?ž<2 ԡ*#B&pH$I$I7n(`Y! aK ,0h"xF^~VqwϾ?u@,BlaPg .=Z^F()ahB2U((4xB Lq@ap&E!?1y 6ôd(w<}ϛǴhrno5۸_H%ΛD7ďur~x-v}?6j้F:h_ <]F22&/ ^Vlξ:nOiY C\9?^I$I$I:N9 b EEutM ޅHjY2y2Klcil2(\@GoJ>֮ [yOT6qǧСs;LD.`TfddJAgߡ@OF ';@/z#GӵHݛCbKx6v*{f!=c93ޝ6MT]tMR9T< o66y_Êvf[7BQ H}S0b٪]t];>|#G~p)׋8PSQ\gE.M;Hxm0r`.8iR;vWA j%I$I$Iq SUQASӊr7o~:͝@r#ǎhGyq&k籟QkxiR~{LE']y`:moGݹp% ԛN.w8Cyߓuw^Kݫ30Y"SUQR<ޑΰKϘy6/?,@m5*cih uMYz  {rW)o`*[Ddyb,3^7 ^SV4t /%7@7;@2] VҤFY\v8;fkScݗwT2Ѯy*;`fWRcB.$I$IeJښj22Q̂uXvfb} qL`צjBҩ+)OU̖uIoGDJ8X4XmJEDST[3WZɃUl~@HΣ 3@e)k7톔. ,Li`]rYmnu!#!wig9~C`s'ҹkȲ,'h)؜d@nؾ!Pl.:v!/l@Udk.냨Xw*SF15}Xnd*-kmaզ}dEvl]PbG$EIYEKhJ(]v={&1)˲p3i> ^0PMӎڇeYij4M~$I$黦{O󟰑`j",,E=v B(q h;X2,@=FUWd<^q/j :n}"'y8b旖ɷ{o`$Ig7 yiN'qqqB! M( p0N(p*>M84Mbccihhf3$Is QcIVxtcW#i 9FuՏS땏 ǭϱN+7<ֱ8rIAѣ|L:rl6a:ƍk׮0eˈaΜ9[e]FΝٴi|Q -IA(B4l6[4B!כ@$IN!I$44IJNogٲe5\ | >3k,v F>}5kC a|> 5Ѳ,C0 p8 @߾}aY`B:wa-A$I$NCzI$鿕at+,d߾}̞=-[M rѩS'-ZĴiHIIꫯf̚5RO׮]e…|ү_?̙B4nv|>,Ys]wIKKc̘1ロtbcc)..frL$ItΒ$I&OMM qqq~t]ncYvNcccخ4Z1M׋i455#&&UU1 KN(--eʔ)رQFüyغu+]wEEEK//`$I9KI$I'Or\a<BaXp8餩ehCn'p8Bn[ :={2| Ɍ3SVVFii)%$I$kd $It4MctK߾}ٻw/.]C(**"99"͛GRRYYYt EQؾ};J~~>۶mk rss^`\r%G}ĦM픔Ю];RSS޽;~;^Ν;il $I9L$I:iaj*f̘]w݉?!##}l2&OwC=D]]/ dܸql6fΜɖ-[hjj[oɓ'#5[n3fDZ{t3grJfϞ_fcܹrW(ǂI$I]C}= '7Y$In9y\.'+V u̬,o@4,nw ut<%a*t lq 2I :AaGUu6݆iddf@C}OZjeQUUҭnEwvU$I$U0)`4ı WTx3%b2㶫Yקt]$,4O( vDjǜ|YX{BN}ReKtSU@ p!I$I笯 Thj3xPYEiy?GQUq_.Oj]~a!bR „EЏOFYŎѥ"ʖ$I$I) 4ԏYl:e2}C-qĿBiӨ)mraq_Ӽv >B.~x~'l_<'beA rm2 !a]{߽ZȢiO>Sy_v ]쌸'Qhyf6)CUX[Ǔb|d!#r-"mNzA%QI|n.<@m=T7yH^(I$$EQ0M5$x\hڷb__: R$IRk8 }0#$w4^|SF z{9=^?[ ҠpO|'l{O|5syE|4E++ci.?.d{-fXk/Lf#]័o N^#7P` 1SV`>J2Q( ?ݝ^ ~,/NwAIJnaTliEvz#]IdaV2Eśijj yPEbJ,x߯GznZLBjIG)0-ioϏD{/L:,^$IҩXPP4z\WA!?̗xFCX!Kw:.+4’hawꩅH=1~SUA8:tN*S:VoER̦r? +R)ٸm`>v-12f@'b֝6`hAgij+ /!q0wIĞXsTpkyxI;><1~Qc%Sk /==ǟr]A $SI0Ԁ<ՒNHd9u;B@NDHeY!"6MUEQ,BPioI&R –l= ֕wn bo0IPs>xer;tJ8\lr-oC AW2}NX+.FL.wqR?l~pw*U(E{5T5c_Kl{ V&Ɔ"ql);=Wٝy h6SR=}Sf`ZcԱS|]7Qlzҿ;|G32.[a#Q3.aRN;2?TNH4Jr'tX;%`yl:79RƇdfʍpkmƲLn1mU!͎yn xI<f9AI _B $]Nz)ނ0£cǰiMXh¦3oĺL& /71c:-uu6ҥ6m`ĂgYm+97-%HP\\E())c,[<=,QES_9  d֙ILw`{ xu9nĩG3@c,c" ̙W\FoG s=P 'ompHa>LRZGNF^AqM Ŵ dЛf~SֳGWyeE |a¾4qn$PIObL4K0Ik3!YW ds9owdQL?X=8ۢ֕o C6&Y:q~LQ"SYx80/<8p36uL| 3OCCcO{ n3^!gBU`&f:xB~&e:_{!<D;oAx=8g @e|TeOKְTX:F !E9l[ *ʼ/#LuJ˓a,o}XkR^@Jɖ-yeBjjYxQ[[eK),, EoD,ݰbh3 llt-GYIОv&En޶SWˆ[fbVbg,-?|.**b#ϸtR)jüCm~cnw泻Xe,mU5(.鄻BLӤ^~>\Gy+` F]0BU}߾53ξx" Bë|t/\8B3{Mc51kF_ĵLBD5z fPitb:A8hyV˴Pl+ xYB0 0Y(ΦvE\>J**QVvס I~#JY:GA?gDX)x\p-S.nfw6ld3{t;8=o}2n jn7x=h,(WjBtl7xqw"G!4 YqiRb;knPto?8ĶLGD&- 0cJ8ʹ7t~ѵ$SG}tǚNۄ`cK^Y(ͤ7G̛;58Vʽ9O_}>sB ݡwxwm'3,4Sh9^pwa NO8M݉l奇~ƈ>^@*kLp;ix><-3k IDATnID[mI)ߥ!J7wRф Ot5i; w7igJmm6W jI)40, )%Ku%ԛPQEqWoY XAyyGkyZM)++OWxbatZ(ʞ]N˕h1MwX]<<)%+n{a~ig^Xe|Ʈ&4} V'q9,x,ͩWErIр\ 돊qu10ܻ9d sϜE.QLؼjVa_wܱbb݉7y6ݝBOnjl?*kGOHiQi7WPI-ȑPD=1P wACCu7ra躎m>l-Ç`fav<';1@gIq;ω>CyX{ЁҫW++h[RJ>;4K۞YO#aʉGsc 蜀0 Y IR.`Ohop!U,,eӦM,Y]שdEA?|NEQ=.䃪FQÄD1NsINg7@2`@m\5d9ʬLbiIЊt rmT]=g -HlZVBVQ2v8cz| PH0rN慜2EW(u(GcGypy9zc!m}`o~̝= T[WF6t:i`G|?s.Bhnʟ;&~L:zH~̅>Y_\@ܓ`VAo ^A(țG~΀}0?N~T 8lVggb㚍8RN8f:{1)3ŕv nܴq WuATe:0EQe2 wͩg]cIyǘ#{S#\1p=ݭ$iء[0xw99^az9yqxpns\h&n9s8Riߏs|z /.ayRTW;.?̸?[ :G㡒=zs7/&9C׸yMSҼf^k6[ diN|Gϻ*R̖ <ގoQKn`@!S2G"7s3hp 0Mӎ5nd՘ɢÊ|9<_>akֲؚM,Sfqeb3q( EQNIҜ}wش~YoyX" ;$riC8eTr$ So!2݀eۙc@|ﮋ(bՖ4h^7les% hχ+мz ^8w8v("Hw8td $ 3k؎ï~~y^w,ggp}T>σJO::YDޭxw?/G~|Cr< ްFa͌1  ЩI)#C:&++F\':B G[CoDQe/R(WL[8i+=c0i^$)HtdEUf_47 Gsx$iĊFzyTc2Ay[ؖ6S8Z3MJ,gkp%p%53g8dC4go}‚xxvyJ@Ё33N>W?^E>b2u$Y,E bSftc1<)qEmwjL&wò7ޠb[sa石y&:1Opij;λv  nzQQN`(^eKV+Vi<@:6i,3Mʑ6q4fb+B]<4iB>!AypL)<`ֶ @)bu F5g~{>'C.&{AJI"Ә|xH$:7a=Ū˛[~Wh~rxߐ\MK䟞uuJCɥt]k6QcWc-455|ZN :N:'ĮM|>=Km[ֲf|*zUbâ bQ4]']~_238rQQF`(^ilQ7/ꀝ$Bb#DH!;u"ӵPD%M La<93SaB>$>.Ɠדg1|v5 &r!HRxZyŔAk 7,$_ qܔE$S|CI[l1`N w Xӯ #)'Ub7:0q|>=z lIUDBʗ8'1!9pN13=49cl@RS[eߺ _a͜uټ̋L8/:=l4̙KCIҝ_(0EQe:d3_\ n/)%wtNV&N%6Db v{'%z2y*IA"0X~n,Y14| nCogeX9z}ӰHøYgr̔Qx4_-Gm{9-􀗑ߞᾠO2'3д|X.9ݮinp8 @buQhm#YUԠ'tdʁcuB݋7u6gϞS)YؚMv^69dнw/t  R2hpXS( 'v;b^xՙngN{˾ߢ( elGqa|rF N0 ({bq$5u ]^hI[׶uLw`Z;ƗC~+҇pѼ) Az\OI:^N9؝77(J8òm,ݺhykZsk .7^aSrrBq/D&9RH8}֩>TIʊJJKJܱd7ϳ\FC4%bرݛ݊81|8=K8s&c0:QJ(")n[T]6sIPA!v"%,iı'A{W_ H I*'4(~ ە̶[nwiF[EeeWnS:GGZ ]ױ,kUqhF,:xP B@s IZVem LYǀm!ܡz@ N#C<7x"⡓z"0bqm{&iF*jNNRiHԝNZCSs)Ut`{S,G#L=궠(wY!B nYRzȴӞxuB4hopkr E*:{B4$mZQ!S!aԡT#%0tlGk,3 k (Jp:*m[%>W ^UːRRW_M[9bhqE9H)uAߞlReڝ&%QR)(=ʾVh(%}}ƩrIa^@voD44!:(%lۦl-ۦ0EQD ((ȧOA^Uu=y2ᎱP?ԊoҭC~?!ޝ~^B Lkgܗ) |^)XM} + @`-v@F&ߛ(Lg-֕`!~m8e|8Rv{muslC -|#L^(6B`65hʌ(r h=B,DJ, H5+R|P l c|Y+uJ8;Ӵj~EQj\ [=xmPؾ! ^EQd"O.in(}jM]JOVE9tLMj(2aq*kEQ4GQEQEQeQ(((>0EQEQEQ}D`((( EQEQEQeATEQ禁+3X'U:=SBdE<8έ=Nǖ8Ȇin eL8K`(rф mT5&p$14r}nMq -ncYw x=:>NVA*mIHyP[{Mg|F !DAQ&Mt]cZ&D̊(| !m8G?Rw& BxqڭW1 ϣz_nK( tr;LYG+m;Db)sF8&h&,C>88ZT"eZtiU ($iH() 9 gKPmVݮrHCr~lA;e}BdBtfu:NL!0 <8"19APir7 EQ 7l!T`U!C\MgĔGqkR :in``))Ȍ(QQEQZ*:`Uuⸯ'V]9$_ EQEQEQ)()օZԄ@Ӵ>'Mh#TN"*ASEQi<LUiFF>m_nQǎAVfM"[f$4v^И a[&Rhm:CvlZD`t̓;Sp[B 0&ǃEM1x㥄,06O%ڻW9t M˥th}5'^n0EQEQI,:bi܊s*KA46,|,h4DJ[Է[R 4P][G}4Aڲ5-=Οn{V۞F/mD"N][uv[ u/7>~ShƧ=΍YB9Є$J0i:RiLH{U ; }#7P$zH4wf$H5GXa1]uku`:t!~P @JT:jc8fx"4ˢh-~LQEQfR:eK_ߝ iw$ZsK23h0^U!sR8MZkger0t-k6A*B VƋ?8ɳἱk+RHۡ鹳nx xwZ=m1|q0 /sS)$i[R<|2=y֐e$,kfC57tZD:m1'9͛tAURëպaw($h:)QSvlLw#0غv=}SY)bMt :9XU@ϱ'K=l=0s-lRwr+je6bwҰK]GF~~.:GCZ9ә/.杧ϙR1}-~zŌn%߻T(( Zܾw %ٶ nh;tTu`# ]gvc#3-mٙ.n˖ LXбyx4mFuRS P\c۳,1s.e mv m JkWYvɭ2S/SiԔ}<[ttb X^A?M=Pۡ_ؙVD}''}F("hS"p$?^ o7'"ǀG% ]k{wiZYAi4HB?ߛ 9fڻX4sC l 봙t!I{vJzM ѻNIDG'8yL dOpI\s$ 5 x㡻-+1}+/*SEQϦW dJπ@YYZNof=I}C;Lh~'_|tD1$Z8˙soXsV^x9\@^I : SndJ()Чw$%Pc6g:='yi}VGnI #(GXĚyG3 Xxb$lr9X-}Q>׿!9XDbO?2+Ճ`䙜5<:Dֽ38e5H hXze]٧NH yrԤ 9g fOuLM\8 xK8B`Bdl>||-c-@.SQEQ}@B\7i`*|AA -<ɸcYkT7qC8Chxg>7y[- #ǐz@jz??*[ox5#Ё_8@Ŋ,f>Dp/m;a}>~7QG Wۖ? رx{/jl IDATDF03|Yi@)'mVxhQ^ozo\{' tDLQEQ>MwE]z_3ɔPWq%czQ?2ff'POEp\ͩOÉۍC!cݏ̍G(A_>>r}<2^M$Vt18(/?O S7DFtUzkɡٙc { '"'r@MĢLZ9@kd{D7 U+>ͼ~ >Qy,id71{8x/xiZϾN])Gsfُ}.'У7̴)X 7pUpn0Q'hNCVg_XEcc/`R,~|">}4:;sˤS10z&ql.;dNݺl:VGm :əc@X<HGy6vǟ+$╿n1aSQ?S9:{-<)N.?<}pM'ߧtEQ˹wrPzإCqƙ$-m: t0dtMT((BX$շ7s0o\)P^[K\xwL@UU6qdBM1d:`>cCUЍ,%+ D&С&U>M㐒Ы:УfqٰcuZ%d bU~N5n%mG4Nf6J[D^Sbk8f,N:6W lauaTTР{Ǻqc3f{v)X["Q6{rXZU`b቗WPmj8 @-TeoiSw.Iʴw't"Yr4K_QW[IAP,IۤR@d30#chlf@znWk>)Aj =SJ(?GmH N㜜Bန #G!d1>qP&{kS恴ecP:z27ůn4gPjSۣ(({MZ sk'V C cUeiJg԰~t+&1$H-p¸V:EkG*XS| 3qD ml}䑌90F $ aszeTH%ic-\ CDY:URSS7W961ef'hCu6dUúL~CDW+p+o)05{ @рVez aȁѳ[]T @c&qXh?k>nZ4 ?#;zMI@ɡLUࣲ͂FV=5֎aK2&fS䘩3X-I"c' 'y{S\98@1 Os}}? {A 2[2@r,7WHc %K@{ѿ>P RHةGq:L'xݮǃOiHa& 7xtp0 0 ]׽Av@>!SO'=Հ:Tw8>>ogx4Dcq̝2زaA4_N ʠѳ8SYwo%3|D^l¤tӴiaNj8wF#srEl!4L?sgL ?uwFzRKZH9+1} /dOA_.4Ty̗(>}w?=?>?uL]EQET&'L#iDzp3#u% 08BCRVVt Cn҃mUF0Ca~'PFS(UeU4 ;EYFh:Ҍm[Cnȏ&&l'|f4 4RH!GQv$O sZ$ozCAQvC )\<TDZ"qi(VDnh5DXn!-Be9WԧDN4F&-cXD œNz6a BuF-*j&"hNm5D!Cn8e-۶OK<~?9& X#56yE^a=B UUluqֲ\& Zm$m@:زi LޝNf,YZk-2P@hXveqsޮh{ȾCB9𚒳4Oi EQ`,nےX"k 8&$X 4mKq6 $)Uɾ Ic$&b)chDc))wt@ 0D$+Ax:hP@/G =2|NIENDB`DarkRadiant-2.14.0/doc/img/PatchBevel.png000066400000000000000000000073221413722237400200370ustar00rootroot00000000000000PNG  IHDRhbKGD pHYs  tIME  _IDATx]VJ9C}jDZAT:?c025D/V&H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$,3z B 2Dx !`a?^,B b>??SL7B 2nc!` {Oh>ق,Hh-4<X>bZ1E8kV!Wg!@B @ 1+B @i#<Pwi! BhJrDv !-j!JJ(akZHZ\!9c1TVŰKHWNը!'•-Q9{ 1bR; WpczH;\!G 1!>??| 1l3q`1D % o 1=SHriin7dnbY\t_Ex_H8UX4zHM8vxKGȫWf9ݣݤ\K?dd:j'1c2@=6 ~"'G1Bڛn/M۳`?]BKMď~ 0#Oc<%󕞈y\gDMZ+7E^L%2fYJF|NiwXlsvVB|^LkBK[_+~c\ p3k?\-G b|1XXP2gd`UY#u]3 ѩs!@Ws+!Aβ2f)}%yU[5GltP!8KKgVr5P}! U_ŻrZy=EgOŏ_k Ayܗz[8 Yd؇VmB|Tu$UIU9SGO*`.{M/B51sd[Z8 A^"p qT1اa>]1xb--C _9co4Mg=Qzr9چ8g' `:٧{ k}~g>OW%ЏWڇ8Tu] 2q'ϢI 9]3Z4-SÔ 8I]K3!U&-Su#p θ2!^(\\-Sl Y9+W+zWdX(vYnm6KMɤ `X2/QG{?NLmd5Qf51Op Y6вɥkzފ/2K-b#T%vK8Z(R!ΨɁ(|Y!D=+-:yi>++NT߇#|}u\_EbmUe%Irr Z =!MZbJqJ}B|'Tm=ٹ̝G7# /'u81V}ǷWRAƟ1 !~"k8կCW|^w9xp '81csk\ݏousMZ1^tr;JiSʹ1Lgb;*Y/Ks!FI4Z~?}!X 2Mrlpb.Dsrp.!H@òcB rRkɌkN lyB)&e{T^;LbDoBC.:UH $jyx'!f=QEsB&s "QB@ޢcdIǼ1d$|&"cy 5XRd\ I2Lv& 2Lk^i|3i87!>!n@y^sl'؀瘱L@ !$z‹@<7i !(z*襁^j8B А!ēEOy_x-K,cUBL*N=jZ6c +ю' p"eNdXB|1 "*TZ+T%y#>_? "cDzXGIIg +!`*^Kcn3?f}K y qnS Cs Y; q A@$z0 'k#uDseE!N@aQV"ĤDcqGڨgSkbD.!NT !NFs\#Ôxe 1AU"\'$+2PPpBTDtn.xF*Maֺ1u|l+LPW&!' ~89S1@oB pYM= q&?9|b;A"j83"!%?cV"!.&ǂW:c`;!. lwF@Ex=F/ce&L9tqExMB̷KqQje!. ?Kn)ȊڻQa q}. pH037stƈ֯+¼z4ta nѳ6~Qlc pj{"VB:F^Vy/欻\—i- ċ<Cf!^Xwz,]f/!ft,|s/1ƘcL9D޽\m*&ZDoy BSUorbUn'pXX)yo݇Ī 0Ia*\]< 1oy$D3sU]\3'\Zx3Z%Lw XDaR9puHB)_;@pL@9UYFbx ]-$3㟉{9YY 10%&;!rWN&Ξ~O}@ eJfS01)x-3xP)w 0 1i5%{7[bJ0%ss ).R`z+zp g޼3m=A 0S^! 22!gS2z7!)3_voB27gӲ8%ggQL!;[]bƫ9=W5^8N+MϦ^GDWL[-yK2= 51'z2!@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B  1b$H @ !@B _-bIENDB`DarkRadiant-2.14.0/doc/img/PatchCone.png000066400000000000000000000245671413722237400177000ustar00rootroot00000000000000PNG  IHDRPbKGD pHYs  tIME ; IDATxi6a&\K5aFLO95$>&??~_`no/B !؆lC!d2m6 `B !؆lC!d2m6 ׯ_ׯ_7PB#dP!hBXV #d=!Be 0i$<&̄A2?k`P+(~d 0 ; dNq0ׯ0!hB&==V4ġ!: <#d4AŘ_@*x !G>s^2@lr]cqfxG4`r\3^=c1 !dH)`JznZ XGY2ez\4ByYmL&N+MyN6A=ϟKPdVmE,m۶Rfy `fn'GC`BV\u1Lml4B]o7T㭑ͮG+hjX{f0mVz `!Ur0arzpkԦg|bZھzj'ZHJŴR͌H2ئ i~J16szgdĚB3A`@Umyg|ϭ@#hPC`9Q0nیA@\8LRhZg!M&BZ!h=UH.ӕA &?z@`Zܸ KW(hfA~nv [7ҰKT34m IFs=w6V_ hD`J19*A}Jh$99lA!nדZ6n3[м_DdɱubfAd~>s{c6{!H&H7𻪛UӍtW|#d+4F{W22jn3![jX̎ͼ.f2d[ՍjڙjcAw7ٌ ANW3tDBad#7ZJv+iD@n3 hO7Iė ZRUzfv2NDɠb$Wahhg& f2bǏ4oF=aC?cn2A.4第i=n3{FNt1&XfJ!h"d9د50n7'֪\A!P5leZ;MHKZzT*c4kggM*IBjFBƑ4PzÀ]y,f62Όtt5HV>]e.x,f2N&j:Z fz2&;UŠVrC+672F47Lq#ϟyϙǬ|߿ջbyiǏb<}f2}l+ Dct]Y|jB2U ` =2V]epL9T3{q̋focԾ=FF7Z=vqsԞR ѯ_mҿK6^~D\rU2'x#d. nO0=]M,@k"{9J?׺jۦu- di˭ NXr okt B氕*A^i|zǩ*.ɅV{Ҳd3{u$X1SNg99HCS㵆kv?1M5#hwS2+ mLm,QgT32br'S{qO[xtK,#d.YbZ{^1'pڤݮy*}<8B*&?oV+O0lw|GB%709~ZeMۂq;bg8$b`9]n GchWXy33:/Bf>@l =W+]e3 SGl43b%l't e^DkM>834q!zk`G>Ͻ !Jaհ Z잔PZ2Z^'.ܢL&X2g Q;Dn y|xldsK*BFPzjϓz)ZN>]fBF@1uC0Z 2+]f1\ >((= 3^￙PgфLHέރgbDŽlNnj0#dXiۼTXqU{=kM#`ރ"d\C>:d󥦔K~ϭDďyk4^{E5;Bf8Lch&Ҩnti^N d*Jc)/Xxռ0!2"`iЈ4w~!dZӖCVڎAhbLAk0#>~ ѵ2UژEZCۅ?T$V>nLFmj:;SŘ #|mza֮ů;xLA|Lev}G/$wL7;2tumZߍ.Bl=N>[[Ad)5ޒъ;l׮XY-A!ɍx^M} r} 4#d&jO7VЩ{%^76\V+ ^2HB[;Vygb|YIIۓ]fR2k!ٹ=<{1~n6\@r>P2B 7lʎpcq:}l25 cWr3,U:<,JSiX>a=ԍQϸqq d3;AzjܸTs;B怛Ev֘T<7k{!+g?JoTWq9=29#;X0; ۷5)s˚Gj+sx7ͬi'z>=OLvAL0` }ku2Iҵ;)FgJfSzOC;,fѻ6/2=ps2tswdۼT2N\]wQfǐJfdr,4zKJHik/yѳ!36VSZaz;,~]4oϓiwﶥ팇}|wmUJ(jAӶڌR'Cf)m=tbtdBPwSCwYcveOV2;*hyRҮF}%tȬ^+U }v뵵/ʍJ=S\|>21RBȕzO^a<ِY*۽Kq N#SD={ I=iG&XTȬL"$^":{Ԑijtw?m"=2۾Jm͓7L4ޔVX9%/oڟQOL=fm Lt:upv{f کoSH YbM5uq1s3!35nHky,KݫK ^}n}q3!ʭwiuX<[f{pʺ5s2}srs!*fN=&UuLZ˹V!踌<빐\wY\zhכe7gN?zQmDVؾNo{ oXY\V2ǭcs<2ѝdm^cOWZ~y^ufl$tfχb`p2A`mǮ[h~zZBW tlBnx,!] oa1|߇ +週X iui9_u_k4nsW!Ӛ{4\iӭ$xabw AS-mR~d[lm/SP;10oq2%;Gⅅ#Q+d?, #.wXFhnB&N߹ ZWZi&dJn4ȹ{ l7ڕfa1 .CFKz P@/oweh40Khsj\[%;/&k#d.h- >,ZE_zy>Ðפc9py(kf  zZ>9VܲW?3Sz^*Y.BƊXeON\<MȬT3'H[k~Osĝy\u2Z8Jwn]M7.jy MhY7ZZ{`9=v"Յ&&dVAXeUa!#?Z {*' t,9+鐑x`vPjZ[ CFǃ";`jZgI+( n,)oBԎtځ19|'nBDwV(^( I`܄nV)-KK; ovdG!|cRxj;9کgB&hԞ9 z=2qqQ6*{xbBx0dfT~-nΟ=<LLǝ1Rwwh>£!B~bq }U ]n~!|Ȅw0V4!)/L>9Lgvz +!DU@K̇DXb@ W&BfgF0!<|[U 7BfA߮׫e!`~G%#$j8Ȁ0"d8jN,)U-ud?̠ 0vu~g9!R02km#{2HCaL1Mv#M @+2 8y m껛! ;ۛ5 ys3Va)dNJfTw5<ق*|>5#i^#18YЌ'W ;XGdw{х%ǯ As@EYeWVl3l{َ]:+{GdmYKlkofvvvW8ʱ]Gg]٥ NJ"fQ|D3_#>`w>{fY^H VxqB>`3YXϕ)C ~kH|Ym蹟~ jvV_/cz7+ C=O~:`3:qkkW~;@3>iI`F#lbwH|e/ #Lm+UhSмY YvOemލ eU_3 ت?ÔaqͲgDJ!{ߝO֧&ۧ>Y9]QԀ>ؘ.`]?{҉wdeU[xز>׏[笢+YEU{Lwe =2K;hآכ=GnЪݬzm әT~nm9{qNsRZ?@UtVʀH0>sK33{w6g6d5dĔe!次JlcUWC*E4mz=x0g^l ^X!>`-X؆$`4/u-0ilO0{@SdÚWR"`q, m{DΈq<'Va`z90wc>`pj228E AY%R "!:Up<lQ"`rn~źJ, 7SQ7UT*򾱦ȃjm&U*`QdMmW-070BTZx,=9dmoef%bM^h++( p8^W_aftr;#[lo}7tz/}(V 9 RvC;U4%fS2` (0ZX|rC=+˸BrrςT6`o`e+ ޏFBGٚ Ѭ:QWɀG.#_/(=>RjJ YxLE#lCv!N1,!U^KHUbNـEx+Bh"l&‰(Kـ1Cn㪃|ev7XDǕX"ОCM- 92Y}!bN0PW+E6ZVGKlٷV&,܏j+(ci}&*,.V%Vc PA>dY&`3r}!jUdP'߈"ayK,ʠe;*X"`{R14|V%`OK Zaj%rN<63۪eU Hicfʱo|U_eg38"RD"mKOl:CV Yw"+6;) y^-ԳzlEnW4Ku&d%"B%wJ[2`*Qsz죢R06+3,w<6~Sl,"ՂlVu4-&̭W FU#ɒì2oɀU$jlCCYR}:kX5(tkـ318:bـu%xC[3K3kUH dgߟ,bJ|w3fVKLDiuf>[:`+j VE<)#)@P=/>1{EN)G83 آ6s +|O"2; %?wr1 eUY08-:lxRqO[kqg88gf' u:2 ? ̎Im=+3"`$`Q@>=Лe#`/|+]$V}9T ŝv,ZJf}~'h? X ~pNHI޸Kf6{>k}`}0 `/,_ׯjR 37 Ƭ3د3$/ ߹5vPT޷#μ7ק0gbƕۓj<>F,lç">f ##7 =g2ggsĶeL3^9Ƚ{ncûz 7'{,d!`' Zpxl9lӟCdt=j"rl<CƳkeZ?qȺUZp-\߂Fp/VDgrxhʣU v쁾J-t$`AE=33++_3V %`gµ&?wX@ҟZœ罷OČA̱'o[B}nͺkU%t5{*y;j?~iy.=A\: F̸B;ipA0sǢ/+y_,.K$^Ў$`: u=~̽/'?mhKZ^׆ XN~H\ X"{ v]yJ1%'^0%`7\HVK`sM#`8W;k]:nM.IVd\Gc Mr̸(\E;>GoC7XFxI ~LO"40j!;3oo: 9yZҟ&^ȿ?k 0 r6rf_~tg!ON+<e5o ߭4 R2#`y5< )rN<$+nݓS`]3+1p#`]9=r9+2>'`yp5r7"˸0ڕR7XGC vl'zkLXK ^"z@CHI|彽(gm@4ցA?kl/^=f_BI#.d~A[6D  #`8amƀ>0RFξU Dm{!*!`PEs8s XGf,V`0RN̾>=32Y;VX .TJU;=8N&`e{rJA`5֙z0D?H -/aOvlރ@,fy} )5 6F ԑi[V'`]b ` ```Q!=\A="`}@~"7M`ylD`A۱ qk<Hh G&{1a\m١Wgf6 @ y <qU X "},1C*weV&`1Alf_1) XPYYW8DLᗫ33E"O$2,?~H3H/Xa@'K uLؑ \g%aqH$`X^|VA╃#bpx!`\#^XQ"Ff3B"^Xaۈ E=K<$Ol!~^ D;ȫʬ~LeY%gW ī30Xx"`cő^zV<2\ьǸ,ʬkmFsfdMvp=uxy00+..^ CQYX7 >0xw̺FEċ#%^%`fV-Wiu.#D^ge?ɍ=%31ۢ7R2bqyexK܁r|(w4[H܁-<;w`+"ؒSϖ.y>rLEx;˓ d#g4\YIs?l` '`^xa[ 8[erHV=G;@2yŶ<J{٪;avO[\;@sM:[ykOk~<P˶<@qG6~>llV,#ؘٖ5;#_S|~/t/>7q!I:6l#@UXm\`sg.>q;٦Mx$d}1`uۦGmXnL1;]w( 3FN:0wM?|(fy`C.Hl!Le~qxCIxwSN˰qbL0d/,gP;iv2uwP΁w523nxq(*Yv /,bga; !P^.G;۪xq`k/D~&*wD.jmϋ;ix/s;@!yUezw(F"ڮ£TwMdXcӻCAOLc.q;2_$;CEϬ'khe-q`\eS1ur7!@L!stߖw._}fCѮq\}E 구 >8z\H\.WW~< >)љVx1ķv6@U.fM#H|K 5dZ-?zk`W֩=qom|௿b,_(ݖV=0O3z.L~BL͙ޯb8 p|*C{j[[WԏU}K{k8BM͟ޯ bsrVΰ~˄Um\qgZsɽu5^pߧ/tP2 ClQfxt¶նr}52\[1_}Q)~u4V} |'؉*M/l˿V=6#l!{k1 S|lYij.E[lCdgv5PmlC\'̜ڣ_[?_\D2v"u%U3ۮx܋ǽߥ{'AL'qF{dO'뼍|e9!LgU|Lq2Zɽ6 "1>L+}n<řzF_LKZ}L{^-*>qr=mtNsLPD빬 k%ZX%y+9&1'vEHa[^̘ڳ?gzEt~gGž9Z"0g*-rq`IAa3(៪O{+k {υ/٧AVT/.ǓsN|G^Xrrb-{'ڮaH]z,UqvE"0ƽN`<1ګ( V_xSٽN{Qr""qOE#Tajj!ݙSN#om{\="OD<")#kUY^ĝVf;+#0jjG_qM =lǜLj;ܸz' "y?3%q9 HD\ӻ"?Ct[Uc7dƹ \p!D\d5#'d8 =Qd8z޿q 'E;ggBO#'q; b LEd*zUq<"qkj1 LT"\l(;]yL?]{[c铭[>#ƪ}yދ *3 >g=?=;?_BۛsĽHwUx 3 >ϼ=wM1;t4.\D ݇wiڌ89w$x.籭_Q0ַ~Ľ(H>g$?Q,ĽH'hI9z~z6G]sd^X߁u6,S;μp17"go>%Q=~C܁el`șLQG4TVu#!HǕ?q@"p+SFN>Oe%2&DSu=N$ +Z` eȺnq%yd>/!;o{d"EXf Hx5m# +EȘE7#!qejA*=# \k<1=ձZfkgs/~W{~I8y"X=tqigT}\;:*!S{mJD5D>q)^ַx= z1GY,YI};v|l!=^vx S{|N);ĐآԾqObjAܓZ(S~ĝS2\TdX#5UܣH1`6!Aܓ[xG\ĝ\01V!k\.SĽKD[rBNy'7.6q/sU %E͚M">Ż E]D{l'uwx[~⾙QSS;⾩]xiX+#O=4֚%'wZkx2Ge#ZL;<Żu;tQ^'SSYEZ q;OMse~,N|>fqwx1z:aզxx𑁸sڙ)>@5Y>K [Lq;92Ż3=v/IX)>zb*>&ĝMb }9B*qg{S|0E[E`=cb qgSV7ca}aq'!31ߗmyBUϮzYbr'5ϵ17;A L=eAGIwEL ,ɲ{vZwy^ĝr>ݪ@Vv.Zw _Wع&'Bع-6lۚg^S;\;۩y edӟ-oGޣ)^-:h^t7Cm';\fjw*Zψ;pJ>ᨿY(sؕejgWz@_ň;#P@1ň;#P@1ň;#P@1ň;#P@1ň;#P@1ň;#P@1ň;#P@1ň;#PSnIENDB`DarkRadiant-2.14.0/doc/img/PatchSphere.png000066400000000000000000000353231413722237400202320ustar00rootroot00000000000000PNG  IHDRsbKGD pHYs  tIME T5 IDATxk650{^&47Wr$>$8@uǏ^@1=g@ -@`@ -@`@ -@`@ -@`@ -@`@ tؕ_~MgQOx'Tů_~:8 x=YcOX'&ڱgL!D D^Ì@c45G("$˝Ҁ3(HDYaIXƺV[*o.*8Tܷ ǘRm 3@`RpNJU; DV>sb[uI8@t|AO{m&c}2ܷ0w1RihfcxG+UxM-OHxK\ǴpGvm{gf=@DOЕ62#Rӯ܌% ~qA#71I`GW&ۯ: FD V kr3ڼ@62V)\Y/egq:TEf7?mc,篧;5kGQڶiq(*;VwV'fݓ}BpwĹv0AQ~q Aвꎊ o8Ehr][GaRA&c$lP!_o^1́F IDjo݊:Tmcph+zX٭௧;;UIlҹl4_]:Ts~8V!0" Ӗ>ooqA>|yB`8w78>Tˉ͗'08qbs]WG6v 0}p* I * dul?G_Ϸp ɯ+Wc,FAX`]yX[v.U3Sw}֣lp<,ˉk‰"[O{o;m1gsx?l1$apWl3^٪c3z‹n]Ζ:ɳjfbt`:#"Z'r$yFo*4>F ~@`4We ցQExxK%)Tՙ7#4/~@`!32.z_OpvuNcoD$vLE8М0~f0d(ku]',1k/OƱԻ+C%28aP> )1+z(xW qmkXۚ2p9CL3cK `O3͋<}A`苟Ye&a5HUVIW<"3It 00{8bjmt ۳ӏH|f| LdyVkUpFuT }HcS>^Ō_|' M4]v+}qw$'@==)_w(jO/2>l<߽{gRs#m?O{0tɟ|o}_:C;{VO ϐ\;2FB 89+DZH::Vcp\Xےgj*a N{mXGC[ {\ׇbw~Ҏ av'^Z=8V`8U evD6 TyfM O3+ݛzOD߰x*T\?v~7oc0V6=yQ;Od4%v3oY}Ύ1׷Le9[vȝ^j"!񼣝 %gU_Oϧdp2;2q+x;wX|U14>[s1 >=nàqg$R8n<곣cfUIc}bט>iU}.^!!H`k罽9LąǗ *>%0K4r;"kfΓqwQ1)l7J:S7W?~wi1:-I&(O MdpkWg=ev3D6T1.$2۝)d9ɬ#0cL]zށ:GsjMg|tyP>#07U!^KČ~gs'32;O Lˋ8fNډsm'0k9$ ͹G3]9x)Åwtbb >!0O;w$&hHwv21<Ήc@w=/.$e +2PFMw{+G7ќIx|8[wd9Ys߾@TpB{/ ppaUl~q2$yW_/. 0 n2-ի'}d{yB+z-Xϟ9Z`<苬x;훧}Űҏ.pCI/㛣jW! lKˊw.Wcϥi_%\Th.^*m >mNqJXlm;Kl"iOd>+0@+wUy6{y^ONdpn$;y O;?^φ OдD<ͱs]J@{iS`ֻx@kW f{==݁+ BRkΊlfѼ7G{07LWfR@ϻɋ9iq ;Ɖo|ގi<>'0oy3jgq8! %:'4"{!{K^uYIݷVSqOD`v|:ޞܼŮpIS3m5Av Zd#g}ṟ§&mLwe;{zַT(;ն[ǿhVj|v>#0eeDp6v~\-;<]X]8)b׾Y?nɆ֤Pӆn'4gw05iC@& "thz;К簊hmg<R1gf$/gxDV]/\[y=yx@oITAÖ1\IN^\aJE:w%=ZEFgqѵMŠsN m}{0!Gé 9W1*lW! ;X-x3Tofή=Iimy=D MO KE\{[] ֦ލ]e1>Xo*:V}I[zJ{W~K ށ'pB a,ʑ3KX] fdC&r<gVdoϳHvL>wάxݞ;7 z8R`d_j>F?Ox<>w[я?'2Y\gy>&ۍ)*E5~q-fkeSq3C.#Y-6+[ i7Jhiv, Ld%㪁~)\٬NZlpckFt1Iwz~oX@}ƮaЅi՛ '%%>-0Lxnmgv5Zw3Qݗ~ܽf&aWg:g'3m#S孁ޅi~{]tUesMwwYfP`c5dZ2;O 5  r ۼ49չ-8'fG)á] <_)-jytH/(b,;_._j5Böck:{8HIoVN=NPϟ~Aύ-eZS‚럶c;s" `3"-x"SǽˈR!~K?@{6;xR\O Uªjd+L^';ͫ/؋ {0ܝ]s}v>}=Ai|HccZeV}vIdmeUǺyl-̓f8+wLfއVi"KF1d>= FtJ?}#+۷yawzץ"kDO f5ܵ; WN֮!uʍsx"avDl3}FDX̼WSN;$ t?3H*o~.zvr+03/8:Xv:V%=mX+r(RPS}NΐoeѼd=8V`noew4!0/^{2,T*Hg? i;v;ix]16vx Gt`IлԊp"x:Οn*ǏW틖DfG L E <.^HމgWaN󩿦6 |\|ٜλ)$XJ:=ȪؓhC./x y6DǍw|fw~yÃ1jk+Dzwl}Uxr'p~6J DzqE]fLC%XcU דsiv" MTLl7vSj{9\J;Fgur|R=[vؓ]ϘzRԥQf>#0Ox/7܀ #[ߪǗBOйNTIDAT!o܂n)~ W\|zגqwV} Ufzv#~vv\G8~R{^6O0MiOA مAz#>/0=w}k[Tӧ8sڳ(|F`Eb%N>up+n!*8K̼,V{2t۵Ug1czlU?*Ɉ= :!5a}7r3WX5mGL91RZ+&<U Cʃt>'0OSDjv_YzAQ/ifŋ6FЛcO ̘@zhwؿvQDoiA"yX$z=}8}[2SsC lh7үl{I|)\4G:zlV|E\JPBZUQ5ɲ2䊽j"w<Wٷ„y/_)|DֵU>sA^?>2!P'=nÅ}]ҺLy6Dq'9C3#y6+ 4|^`nN gtZnqE$&̂Pϲυn8ZҫcUJL6L҄{;Cu׷j<={-|҃ IvTXs_/ȸ3#˜HTqtiҊ1s+CډjQ%mȑ\EWp"NxU匼v G 2Lz $O1._9hCX}yz/y&>_Asx3u쎯yo>hewj#AZVvlJs"}L{x 2R^c"F!24c[Me\9٭BWw1g:ѻYu6oSD!0.,5:}Kle]Z9]J\V>OZ vU|Z`"] |k`{~$VM뒟L:yǜ#| |Z`nC fdTZnOi+=ѸUfD:}ͼo^  01xR+*l?j{sv\ ̻n4W\*4 0=һbǖl?+gd2sZM>LZk&1S~#3^iE3b׵>DR^g'RתSHH/#Ȭ9:sz#>/iBf:]a"y~tRЭ Oq!ĥB>ډK͕XtAĸCOZMEH)fῪ>:ت~Dc?D+$c(Yh]a±{)WZ\n@`)*244% gZuL6x;BSw]V}FJ@{!ٵ ;` Mw2S;e6le 0AWt0W'Z;Z׊oR{eN`HswE~HމU'ua0cfU7?{RH[d H3kܟ~h fo 0ˋ %YU+hU]QTfodϛ2`\ȪgwXydgu2~fAǕ@]p.o 6ѳ&'BhDF&eH1S'[k]n 'y]L=>F8Pg&"}ig\UH&/y:Gq*_%ܻe"H=\h  Uz2"I5V@i;3|{F#7S! c\0tB 8WzldL”DR} EYٲv)H: =!e Ѿdۘ?˾nGp*ڐUy+[T/'\x[ Y;k+*;S'oջ4/Yg|GΆsMG$"3c틧*\PuH"LcІF 'eGBsQxUx"`h.LpEDqc3R7=mkγ\0?iaRs3 &Af@qi|\U*2JgِٟdeH,'K*9V(2w?1Z/w&z+O÷q7 Vvo[V#ܳz9ހ<$]sE3{m?CT@` j#W xޒ&Ξ}nu{+ y"^G힪òL)͝[e*;cVp\$iڳzjZOJj#ی'ҟYvv Pe pB;>5sVv]v8cmd:f.B L-C=iPW"bcf3ϻN s]Qdߕx;Ld@`0֊C,[TLH{^@`&м6*~]FF3.Y}nկlr3=y[F xow%1ĚR(9҆(]ḱ>Sύ^w%Rw2ZN ZHT{LR2uJuUf룋Zι]0NH)~Mw_eq{6e--=>4/ҢkI+tcPl}KLO"d6²U ;XiHڪܪ> yzg'shY"Rṁc~%#eUh;[Ǎ^Zr0,\[qovUU#O<il@\r@` ޅ%2Y1JpNGlnBi=Vm$-f&4y ta ұ]S 59**7 uc9N&Sh!6ˣgƐs4l# w_u{Jmk@$!̤86hlݖW' PxzVէ1K &"T,C[48Y&vW8Tvߎ_dL3Pys3u^P%6X~FDD[ehw)w-t*nΈ*i9L T q^Vf49,݋e"Ӽll3ԳH}EͼP fQ ->FŦXѺ+1Ya7+I8JeE;fn~{k*_R#*ڕ<&>m%MAZ(HHy10tSso^рY* )08Yfw,"pjƋEB{bQD{s HHsGrwhGm:Huqs!7׆UV]EK"sq2S5y=m'1qqzkizJk.Hb֮~<nZǏ>݉"pTVxh̬+ sdyuE^kGfM.WI$Oeա"kz/A b"[ T"yGYtu>S?F~'fXx{ z;+J;Ype-bޑ0)g]LT'w5ph^<]ۉ@`63D̛I'};Ed5oӮqe^{k .m;y%f1J !Y/T^bfכYkcl=`6c̉Pe ap,#oMhOQvU޽=]F&6'&3$f6T6{"=cON![ҙB/;.s̋༖uS8ɣLd2Kb3[e` s/rsE :֬@\ y!D˔ֺ̈́rFFNM@ܖh]}TLC̊gxEA\ $ޥ6"F&Zge5XƘ3B3! ]k}Ejee'#hܟۑ.]C hLLgx/}:hK."--M4#YH]WwmzC[} h[?xs2^OGqPpڱX@3/;HA]C۪4µa W`2ǤFAY!Z365@`D %EW3ҨhgDYuK," jC\">>@`3PSpTޢ¨FrBZe$-ГȭH7s8҄z>DȬ(eƒU"4K6}R`P)}@`>@Vd gX)xDfsԶg]$ȍm;AH]ޛ3?@ۯ'dR)) j aFIMW[kPN4]mn}zv|Ax0x |dcVwvx3e2wWr}Ó . 4ML"#/+. T嵌@\@{ hD4T{;1 0@$C2| nc]{h_*ϪK2ޕ{ 06̆n8YwQOe笲Z|pFu1HE3Ry*<L{ sF6vp; w q9 hFBhmxMvKVSbTYBpZR_T)i\q+ # pMs9^>suH  (Kh8c[*B8\+Fjrsn6 0*W˱B@ޓ֚V!f6sVbS (v5fy^ %Hyl? |3Tˢ)!6 AXv%p;9<ʙ1bUInφ,!ΗQȗd e$^AJzXF0[O^{{q"?|D8"[ku[,دH=!Jp>4ja bE#~p!"@`hbnms],0^avv@+Q*?wkL˳f^uսUMV*fj'#M+^ @`p&-@`@ -@`@ -@`@ -@`@ -@`@ -@`@ -@`@ -@`@ -@` IENDB`DarkRadiant-2.14.0/doc/img/PatchSubdivision.png000066400000000000000000004305331413722237400213040ustar00rootroot00000000000000PNG  IHDR.`bbKGD pHYs  tIME &7ZQO IDATxy|]u9sܛ=M$M-@P,:*8 t\(゠"?EPDP~Hm)tofm&&w=҅$Miǃ?jG~|>tg:   p\gAAAA~    'QAAA(    @AAA   pAAAA8    D@AAAN    'QAAA(    @AAA   pAAAA8    D@AAAN    'QAAA2 8TUE$LIJ¯A8q8BQ¯ Øh$ UU u}FIeA $F, q|h83}i e,dG$\.@@!Ii Ȳ,p$ ] {Y 3}Y'Q$IH͛d2̟?zQjkW+իWc۶ @QUb ^~zj^/i 0Eexdm[38Ym{ ´X.dYB="' Gv$$@l'-c968H-pӑmlGu[;3&4~;3@}+0-,G"eJVfF+p%%94m븸 i~$a%Qm\߼pK ŚAt= gd!ie_NM%TEAR(q}/B8~e Ce ܪAl =I7 <|~fe_J5wp}f57Vg֬jeAxӓ%UvKe@G-˫2xx 7.k;;#X{u \x]6_Z꺹|&յux"F3n|.(SB$N+v\e)Ϗ]Iь)y%ZfQKBDx#K7ŧ:>{  k n§:Y)%fe1(of7^>R%]זlX]>yǹm UmUMmt't'}KMJuri}7h79C,,ѹk!.PZ66Ex\bO'1 !vHbw[sza[QC㲐%6M 20mv4hb$F}?A޼e.ⶓ62/*ﯦH5d2MOx6o'L›Tlm5's,\nxȰs2m6M0q_C#`9Ciǧl`I( eRbW7 H[.&l!ΪHtHU4[ڛ#uys.,_5Mpͼ6z~:~.!(: HZ.e~N)#"*=BsގFLGFIdvNxD7taS$lm%c\ƭ7񿽳e] ?sq7 CԒ1v'}L*.[5_H7l3Tf{SW5o]O;Íۛ,*=iBHL O*O>UH/sg@\'@TPD( ܲMrR Y1m'mY|gBGfySXH(Ò 6EèrӖ)tvNqۮy\PqCEA8x\B;ٕC}ܴc&i:# b\vP0Zƃu|eA s)&`Z(è1v cCnM~5+cXX4I??J4T9$TiNZ7 '-xS\eϏEgz[WX]7cdQn~b9tC/FJ n (rw/,h#|eb92%$QX6+K bd? ˢ'=eE0 S_8_^Pn[f!IVێ";*0fhly+;'34'2(t$.Ǘd4O3Gm4yߏ桴k=fS|_Ew2 ,ۑ͸ k7.i%cvE9ߞR@O?,#|K@j)ڣ3T<"P0i*-,E{@5׬Yc͒|e!Q]CϺ,R^vMf.~>,ndk!]Pe/pdBխK  (q\@L-1 ,i ~ , P%v4Ps#KN}ǝkl5pi}7#z #1C%iqV{>~@dپ$lC]L[&eFt$+ wH{(:HDPӳG]3 vC&{TסmY4gh9Cn\XLA8lGB75˜"xBqH3yQsI.Fʰ%PL^X)%*2ai/GTcKyf"<&~OqSaeU4W\H>-"@ ۑpIxW0wc2_ڴ b!AYrH -m ӑ9/2(7m#c92ij,m1)Ef F-nfhv/_۶2~X| .c? " ʟ睱eMrɯW,m1E7zc9l3xb`DÄ8P6pxi"-LX5efN)yfW} K@˕M_쮥“9TobEΤ   2Ɨⶓ6RKMl:n>UvKvN6OxzTLZ&_-lD ,9n&M 90ZF7";fc92u$~QM'̓uld-weL*5$>Ť34nWlo) 8kG8aɒ,9L*+J#\R͝oyuc%:-sq\oCeÑ?̝ቁY`b a*v("M7T'pv/?>e[[;בrf{Ss!3T =Luh2aMe2Zsec;'3nZcDv$wPY9= |e+Η-Ӻ%pR8Jg_8x e,ha7ńXobR woeei[[PwHPH^2l2wNrsB'@>> #K S7_k{dC'_޼ޔj; o+K#$X7V2e b5k#@ K#ӑpFg.T x1^:jsi})^d9Uy IvNJś@&K+罳LS; S NbdbPi_ FJQ{+`1Cyml3gG7)ۑHZ i[szy5ۛqOnh0TN+ܪAߺ*Of.Il8@? RN-ݬ.K Y?VJP1q>P$1/=l("8E l+hÑ0 (+q3Ǘ;73/;9l/.h'̡“9oˢ?u"@G"ohFu7͡ l e _ݶ'*&Q`oo#mb8:?<'X݅"Pƃ% Fޔ&M1]uzZʽsyf\k~uI#4T>yd{qc[a&Id~EΟ5qGlSL[!ZvLg…t$bSW'Mg oj0mV:ƿwJ4/wJ,G&3/K?ZPgv$EOG[Pd $c":xI o#qn;y#׶-2f{SG|ʆ$IX$rеM@S[bџҒ+|tĘpKZ.d̊|=Im]XojJ_ID&!L\p 74VEx{(ڱ*oYAŤu2H$W E1p άfsɵ w, l(b0aAp: ,LLLL&=:Nv𶷽 χeYb1^/*۷oUU^I°lB~3~TF=6uYÚ\߼vroGe8\8 lc{g ;yvn]®x9d!X`\PMj͏NTz<=T -M;1kg(TFҖK2 m}\0,FI$AN=T:::E4,ˢχmg* ?cp$J4\0rw{#DÔ3Ե ,9$MጛUx&X][_sPt:ͼyhhh@Iaq***ضm^)ǍSfIIJ5e8 /FJnnY@OG 3OA3!z4t$.i%clxl`)˅KreyoI(ID"ଳbR\`ՄB!9`0ƍٽ{7gel&0AN~3 G}7EEE 8{4ȒCra27o#'"@8ɒHt%.Tz@$&a(RL\30[ǹ+7y㯽Gѿ~.0pN L#Гsn Eg'H L{=ٳioog˖-{=F3Ev;O{Ym*@q8Ʃ2|I} d|wvY2]Kg7eYHmۤi\pV0}8(\Ggg'oy=C?a}իW ՜u-El*kl 8H$x[¦ME]D4-[4mP(o~{9@ZSK$+r:~d",@v_0kߣ9D=@1ʅh^3oEe&޻o˗$I=\{@II ~:O<;G}?ωb,\[ow|ӟfժUS '9` 4_^/vm>YqP8tJ#\+ph" 3D"MGBΟ5?k2N<0t<~D"ٳҗaXz qO<6l.NZZZ~@mm-$F6T(8K?G[O5aP[[KMMMSO_b2 @pb%i[ާܝAb Ǧ|gTdRwol'kiGJ%9g$#wH1Ф\$g}6_|1X ˲7駟Ʋ,EՎErJ{xwpӎEDD@A{Krbבrƛj58`8Ї'ؼy3>~q/ϲvZlFe8>oy[HRNcc#555~ロ_~`VujdtYr 8xy2w Lp~{dpg+xrh匂m}`4 |h4atuuimxI$q\||C, YkX~=? [Ig:J.H溔,\x6[ٽ{w9'uigJ4|;;;;!0\RwIijcW<7w63Vxq3n%K0D"<# p7fy ?# Xna||r E']OO~wrrb/^L2MMMȲs=dž 0M%b n=\jjj .18JXlMMMnT*?A͟O&9IUŪrݟpPhimexx8pף6c7x!b*~m<}bЁHSN9_| _ TUGᥗ^" O{{{9Oi1\`EiKNv2/B"Wn3gQpZ܊Wz1< /L&y;ASS?k׮'_f``'|X,mQRR‹/Ȇ (*** 印 5rS.s; p4HMTv.Cu\M:0r4Ȳ\Ǎm0wEz1 0(..]z0G/j^ߣZ(ض͂ x'y'k׮g7_Oԝ*oΚ"@8*T&n*\P5vb{ISғF$0iN93hjj3<UU;ٶmpQ4JAujjjXn`0 ?4M~ao!2}}}tttB~ G7lJ>;ɔ.#MӐ$ UUy*+++8l>j-R Z&{n(sg0g*T&k g|+;x&2>LPu/LXjcܹz뭅|EQD"( mx+{+HP__O__LG,bҥlٲ0H,eGڰU+++WcƉ:::zn 0hmmeÆ ay /%+++ p )w% e|eB&@8~ :ьb g)!e&x8eeeȲG?[n-x<:;;[oeΜ9G$^.rVX?ip{* _XM?AnV۹;={v!pt:g>[Ilfpp L'|hv/T ҝ]PeYr}n6sBH&!p5z %%%륧ۿ+}i?1CP%g|aLLL8W\qB|Ν~a&a~qWJ }ݿGnXuOy72Ǜ 61ɥ^ʕ+I$?Fu׹ٱcG836zS!  S,2)Oy9rV0aܲ!>fi`:%hƍ7ܹsKK5kinWS|''t{/TjFexя~ڵk))))>ip;%fq03=)˅n+\U(R/q2CCC-B2,TTTՆ9d2$ȶm\.>G˝wމiq9VZU/̷r-n,n8PH&^rG92 L|ETxkw ] ?[b!× ҟ{mm|_O]]]!4MZ[[I$n2 wI$] *jړE]텺N A-h|>lG>.bN?t*B?өʓ nhMۛE&0ſ Cܝ'iMuB(v8RšM$|\uU$I#C~z[et0cso5s6즢/KxBPu>3w\&''F\}wuW 0/N w^<::_dS.?7azY"ibo-qm}p^:~֏>@,ɏb1}>֭g!NSWW'>gk֬!c㏣*mi}#]D  JgxP7,otlhi'TTTk[[$Ie˖qe`Cj?qN=T:Q]]}@rQp)XV4sO[omkCM"\ \@]]O<,nl& zk0 r6 ' "@R2o [#+#g/Hoߜ,ˤR)xma̙3B Hp%|rxawcxxۍ("o{o}o]X;ښMwp <[S|kp?pWrr~zzi/# t$L rwZ_muc%<^_UH3.8ǂ H$|ccŊlٲ?O|>yp\;Z.qF}#~&=)/mjcI(ʂdal!]zIbddt:BuwPSSC&!NsyH**;3>|>$k.x~ $W@m"w!F6Ae;~ bx Zc\2?BjX+'mV_ظq#B!IhƷm}cof?3 Eadd+MO~=e6/cn e~q׳n:~i<A9/2LaAeV^ͅ^gƍ{ Gyya_ nn>N3D4dQɥLll}9'tºmuO Zzl>臷iTVVxhii!fD>ŷM6ZqBxҦl&g.-u_,'xPg6oތ(B!rss1$q}ޣV\Iiii믿ȑ#1 @K@'c<v,$OBUg>697 qZ>|ƿ$I>|Lff&$ B}8NGtttyyyȔRaTPt6 Ԧ?ݠP(ҥK7ok֬aԨQӯ_g,Ņ5!BXo]? 0. Gh%^T IDAT=:UzdlǨP{ oaY97 QYYI>}8qb` 0$&&g’%KxgU~n¯c00Λ̫HT.MH0͔5u:`R~iy'ׯ#Fw ;@7Ɣ Bu h%iQZ?&D{E U~?z+٨T*jpw7 T$$$ekjL† صk]tis+3Oo? $ImUL[xTVV6H>N:5 L4.˅(ۍJ`0`OX,-2?8}r6 q:)U ~-XSAM~='+k[iWbfQq\<<}Kpۗ8V\NkZ_~|>v@P0:.z/O|f`([,6k` +++,:u*6#F0vX(aջpָu(..`֭,]4Uu+`0{Ȁ;B#Tv Y'j̜93vv8q"QQQვ?9'zV? L3讇Y9wSǔ&׶Yv-%%% s'#GN=ZT mTTT0vXF#_~eٱ/# VI)n]vw6wA111!CNC$bcc/Yt)ƍ#))aÆqM7χ B I',r@;PZEzԾ ^x =| 6 oP&33ȹܹsf h4\tE+~h+˥^ʳ><.W Sr\V&$jrg裏W5jl6\r : ЫW/[V\ɥ^9Ê+x饗駟(++h4l"BwLάCBjថ>W%ɼy(*4p5KRJB$n7L81VWW_oѽ{zSZn ΠqUmݛRf|ʼTRѽ{wvͷ~ѣywYz5K, {\d$N{yvoo*|f#+ʯeP|5"/dhUSɘob!b o#~ka3j(>v[KPIVDW[_qqqᄩ(,Z׋(~ FZZZxTV3sL 6mZ\@F<"4(8"|H ȷϥÇQZZ={1}.+# )))!%%9Vra2Z\.;<ܹsIOOo@Tq0<9=h/f9rt5(R~1k֬GM&~9C8q"ݻwgժU,[,ed4G%P'o*A|>f"@+P*fdAJ5AI#moģ<GE ĨT8Nz)^~eG~-EEu޽{tmrUP4N W 235(-!1J=99={+#;;Gll,$W_e .z-[Ν;!==Fnnp t஺$@ B}Tb#dJF'T3ZIW7E5 EĐ!CZ~ :1cƄ)Rh4x<rrrj_.jmM￶fDzQ}#33RGxwkP]}_%Kc6nHBBB1( |K<PG=@@&$(8;E.K<` Uox-K.eҤIB!geeu= ]b49|p%jșӇRX_͛7aDQt /oÓO>ɴi(..K.aH"<t>F8h e fR\m({+Y0xJd/'t6wNTTTN=z0rHƍbisa0$''b^PP 2=cu492nQaKAd2BǸ8)))aѢEر /7x{* !11}0 t'^y ~'''H$B* w%0yx<kh:ÙiFBBBXZT*%%%̛7YfQQQ*ƮWZZԩSزe .HgPyqU{qG5iHnV&LlҶR^^aݺuaLLL$pA&OLvv6'OfРA2|***Zf{<O%ފxDCEj7v eত SÛP(ᜳv%=z`4 hZn7'OS^jw/ZCH0i2YSEo0\^^δicT*F#%%%,^ŋ2l0Krrr "@& v~teu$xj8Ƹ]Gҿw1ĬY!//ш7‰ڋ'##X{Vk GD]r,7|iӦr/M7R 4h۶mtb6[ܕ$hڵk+)~լ-K$NJ(//Gѵkv.^x![l5n% `ѣAy6lEEE,\O@}djc 444"  !!ĸKb*W=rltsoxɱQ$YެmJEee%]w{a6EΨQ駟8|p3UF4j=#_˺2F xt:n]z%I"h_Z0f* ԩSZX+V; {; vҿ?W_C}z?W l:*0[A|Zfƌ9r$ju%BX eůR .@'JM5'Bl 2Z0##ロ̛7]v?ӎHB @zCOvN $%%h"~?Cl6ꫯb0t35 fi%©Sc ,bedt+GS"Iqz >YgEFF}QoNb6Y|9V{q5jm! ȑ#[{u?!Y1goi# @[o{ j;AmwӱlXd$ZDP2p,aqmM>ucpKV$Ac(z6l[lСCֽj***Kشiyyym(TTT0zh|>+VhʁRdPC=ŋj쫵(I D^ [jVVׯgʕ3VK~ۘ9s&TVV t'@M/G/(bd Op~-( G%^ϪU8x`tOehMh﯍@Qiw7.b/Ko|=ԭT|>=\p'Of1k֬/66݁G`u=9zã`[յ @`tw)f/س ZWxK\ #xoW@#JTDBDTTTUU1n86oX,/_Β%Kx뭷Xt)zj21O1[ -kSw(5kHI^_nTz?LFFFkOٓ.]vV)bbbp\~ ;cbblǿF7X:HXtrЫW/^u[}/h4lIjkQVː!CHMMe\y啼Kڵ~˅no -! 'c h!}}e<_|=iq  PPP7ވ,,ZV`TiR֭z\m= hk"R |f`qm6EUUU؍t̙$%%e2`2O?񐖖FFFƍrl2v6YQ*'3O J{WU'ƞw#E>$a6;CwdF>c̦:it* \.RRRZݻ={vY طoO<gu k֬aݺuܹhT*U-a=׍xH+iC=n9}glX (s=g}]*AүeJャ+OǪ8LL<8묳Xnt҅`0H||<^ qF:V+}jO'8mpk2R}eYh4b69p@b)`СC+z6 BL5"wۏ8ajVu5 SER5iHJJ"))M6[o|"$IbPQQu3f <=|l6[T`t>-MbYa*S `;a4Bcu];{%_Ʈd7ɖ$;店e~i&4MjA# 2SʸTӉjm+2zAؽ{73g$;;)SЯ_?ʚ`dzƀd\ Md8剒t,u-5Xh rܺW l^xz MRR7pZLINN&[֕|>qILD|MP(d";; 6ɈPAvOo`0bgϞlڴxV+yyy|nj=dNʐ!Cؿ?~?;xH{М41@gܯ;BSz8v6mh>r8sӧɭ~n7gy&iii|gX,vWv;}e̟? $\e5aHn6~gvѡf%ct:1*)111 vň#زe 3fࡇSV%ӇnQn:D;8EYre-J[t҅.^z&%H& k%uЄj#lpԑ!%ro+XQt3/Rq8/M7+^*W^ќ.jAҧ㪔b8922EE79GT*fhz-[̲e" aԝ<%t>j~pt,?t.eB]qTTTPqҊ΀n#`M6(R^^γ>رcY`}B3N(N]!} l>r5/rUeY& rWW_*ee]F^^kiR̻+8r{ATJ_3QMjr0L.lZ]ДPKpݼl޼o7xغ)M>Ű'HrS} P 2>;Gҩ P'|bbb?~rfڬm֢Q|乌4///[o%pBugϞlݺa Ep饗r!^y}Y=\NҨAբW5+~m'"tP2,($tD^l CcQr7Yf%55$jQT;̝;￟gy;F{7 ^:9uIWajSoHEش|9(NVZvZn&MBN/euS0:2Nnc4[z 1L0c .]ĉ>|8{, T7"@1[M_:b| 9#%I%<'QN|6Gy>9 @rr2yyygWKl|͸n-ZDZZZ@Dv;N8߱, *6 ms `ի )і륤PZZ* a4q8k̞=O>9s0i$ %%Ғbce1}G՝:$NWkA%쮩6CePRRBAAAJwͬY0 g͛#1#$ DBܛ}s{FZ+ f6/Pzݻw>Ҩ IDAT~dȱWTԄ[nʌ3իO?4c߾}!~rsw=9@S,`R9\nS:_t-G6;nӭ[7~WiBٵkWv;=w˗/gs=|> PխNT(zI'( QjFrr2,t:۬p\PNr{tZC@ dٹsgb f3UUU|G,\ &pR8|q_ O')Lt)\j:oh4㏳r͡t  bcc)//ouRǒ%KVpmף4׍&ֿxpG.STٳ6dYFp}1w\^oIh4RRRի['뮣ʪjB/=vrOHDA8aku,&t. ]، &pB^o V^P(w… q8'(8jfK^HIIaʕ2^>aرcy74"]Pt:A ..F?Ox FkF||<hK%"m6ސDlu#P A@:H 鋢7+Yf nCmEet:fJ֭[ꪫcΜ9?Gv[/٢V, SgOSwHŸt~E]ng۶mMk J׋;¤ҹlt:9ݻ7Z-,c0HII13fS]]}ј'ߑ-Cdnyq( (5y&36۷hvNYYvjU{ddd_)G0$:::59]>I$Ghl ".-[PVV\c8?ҭ[7}v B6"::A?>vbСL>._<:'@$ 5 W>+N!9_"q]6)3Fʕ+5%Ivc4Ox=Qqܙy/S(6u\dggӷo_VXz_AAyKZZKee%7|3 d=kFQQs={"OorJn3zh6mDEEE*&jVK.]Xp!~),_Cp:xVI:kYZ F<N3Eq %^=& 0; )ؐ!ClܸYK")z/',h (UWZ6j jTVX~HRR<NMxD:O~YZ3n2&V_^/ ם sSVV]Rn7s9|'Ĵ;p88s8묳I OHEV3PqZSj5\{ݻÇe_[ HԶ& rw 2/Æ amPNtVOH "Ng͂zK?p@*++)**jS ^Ҋ3i$֬YΝ;OЯ0|wTXvqqq #e8v2Fvӯ_?8rHe.//駟f^ҍ.V6i Q;#$D>Νˋ/?>d2jh@j;6G-T VRSuj'VJjj** C(bsulո˲Zd2QUUJ("))oG}P(C=Dfffb$ WEOiہ#(a hc|M PUUٳgם2tv[}h4t:d-2$ѻwoj5۶m;D }5lE߄P0$66JBP<6'z!>3jD \<$c2d>ҺuGtcw PbH @ދI`͂EoQ _]]ѣGÕ֠j 64[֭^E'"JI/G.]ۘ1cFJKң>;CIIIyۂ(|>N'&PFCnػw/wy'?#O<׎߃(/Q.rd-6vM%iL] Ub &MfտJNG IJJBR~zf͚Ŕ)S;2e III݁Cy|Xo:# pR kSSIjtڕvAOձhE&A~?|L>C< $&&2{ll6f+0,e$b~1:Dj*OQTiHM@drׯ A+,^{Vit:> ?|Ɋ~L68 =֪8L+--宻?]̼^/=z`ȑL>MS#I锗h,cS~ {fΝ̜9'|1` sX_{YL>3" &pd]\Tʫ vDQ#GRO4p0x`|>[nmnFn? v"-RyW;u 43G1cQ ZP(Dٸq#&ٿo4$ŋqFFrF<N1D=rY[AiI"#1@wyo;VCYQ$?Jcaa!z+-GᩧvSVV,'܇O5I,-HcJFd Qܐ+⫒dLtB0jr9w\Y': ZAu(Dll,gԨQtޝ7|AQVV>P@l@Ywf&xX>4.r̙"-2bժU.B!.R~ۜs8M!Y nyv(Q(8ڻN'* Ӊbm%ZȲ̎;3gcƌatOG~$1@$Bln?L-ZDJJJX.piӦH[zK.OEA ЋRm~ WPC+ HTT_}U2/dرx<}7[E Sg&#';P3&#.#[c43TE?*csA("jEӶ7:HNNf,XA;w.wn@ >^֔'OZOA$|,+L%Y{>%K۵j%.Jpg~\ґ{,ˈHtt4*_~j FMM >/yVG<N"ʯeXR)*A拒f׿ ^tvoiNEn7_=_}.ͦ7|3/D$YIR 7|o-TVV2zhJJJذaC`ܣVIHHСCx<^͊2oh} hPߕ']# ѷo_z=?C%Ih4vxk6mIIImjU/{̙3 G*++ӟĀ={ }ji乣t}P\\! xdeeqbQIrr2999Bٺu>}:2x3" e$:PsU"t>1MfEQߠ5(~vS((n_gHW(7ߖ%bmQi;2d;v젺Ã}y睇f׮]uh+欳#/r&(i||gl:`gbCqGDN#P 2e>קn"`0 7em:|>2d>f݆=mWɈr3ZɂtL@OJEee%7x#;wdfȲ_Mlll^^Y׷KnQPii)/f\FHOq'3: |p$fOUԢDu@G\GdG&;;h"fs%L `0`6),,^3~x̙$I\F.Ĩ M,{vHȲ, M+`qAZWZMUU7t6m]f*WHUk 霉=7e8u!)UA%8zh~Lltlȍy D|:#!Y@ qu">OoruWSVV?b9aJKw-f͚VrAK.P(Ě5k&A)>|> q} S2&.#m&F>x΂ js Rp\xlذv%^x!VO> %1q7ߞp2JjY`.=L9`Iԣܧ|>+N!iQ[e4h֭ks|0$--ݻzjt:]ݢ(Vlq0.Rk4q_406 Q;~il6Fv'DE$n7FCG^^K.!~ġH<{7%WNwB@:Gx~OLV@T!ZԂGPS2fx'xwصk0aN**D#7eqgD ܩWH=ryH~I1Cy6+n}6ˀ^R#(c}v; [޽{w>>c͛C=m+Wb\XƵ]R՟vΎbz9^?E,J `h(hgvN'm6-ImO=~ss]ʤD>SKhQ]"ζs7Du[ĨrF7Y媏Vѣ<|ȿAs@YYYxҥK;:ccc9x`c( 3228x`j^/x|mKlܛ IcR!GʓoHѧmpVqoXQS Nf̘nɀ$IT*233ٳg ,`ҤI|>}Xm W%X";BA%Z4Pvj{}?~<| H.!͚|> BugPk dzqF^xǸ`Ѕy&,.N(B*Zi{@9=ZOfq5`Xx8aMEl6=z  R\\ܪbw2k֬<A!==FC~~q2Qu#Q׸̹3G{GFF>vP(DLL 8p]~(J@׷lb6n&^4 Q;($B@@_VBpRӉ` vx<}Hll6SVV/LUUwuSLa۷P(Jל߳ΊNǀ#"NNGtttDBUTw꽰oTWWg;^A ::*^}U ynX*ٜ3R@݉?QqT `#J}3>P(jpx8|޽${%&&p8,=ѣ͛7cZ Qh8Ym9s4Gyy9wy'GeժU2x<ՋK.ٳgCQRQSSF`0}*۸8Mf9@'"Fm" :A5gnW\{aÆV((_믿.<ʣ=(cDznݺ]S9&)&i\.#))O>oe&-u{-_LϮ];Yl4W^{(q# e3,bw3j=q ¬ yq :_P `|ߵ{ V+s`.dqZd>x'EzFP}`v>u>([+YTE IlVێ?z?>cǎ%99%Krِ +}X5]RG$3Aī|r11 IDAT7{OIIaРA,ZrJ2kȐ!L&>SVk/`66l .lpf5Wm#ɇ7c 3Gsȗ-|>Ah,HgtK̄F3Be"+rԯ6>s H"fM1ߓVBV͐?`0駟t z^ve۷^S%H)'ꀦL2^(33LV^.7PډGܹsm&RQ N9| 2 yWUy&w$ًD\H]WbmnkZкkE_J) `F!{=++Py=nn=`֫?"{ DA*bcrrV\c$}",lK7޺ Yr!>zq:楗^bɒ%L6{QCҬn<44~V@c̹$efm?b?(C !99ŋw٬kG6&)ݤZ I4RSSIJJW_?sq}G w.Ƶ5hظ$*2:xIDnn.%%%,XvS 0_|<}EQz 6w5 HD8t5(2Q||Qx`js9zy%d2ǻ.FEMMMQ$`giU|xϩ+1:fPݡݻϒީ]__7̪U:'dY&??ZBVuO a#6⪈/ݯruCbGzn/&DQ$r2sLy0еF)))l۶-0KRk$MyGZ.a:@ E0xU9~' 11Ӥ &yaEv؁$IΨ9( RXXH}}=3gG᫯⮻4WՐ}f Awn.jl?(s塇";;1e9*8RǹK߾}ygi/(bAf͚?Ιk!-ۖes~KrhYh6ʰa{i?w<pлwo֬YsLQ6mӧOOx,(wG˱_̢Jj\D0{C5ǁG [,.zvn&f̘(]Ƅbtj87+5MbdsO,is*RC p76]Jy#6Yq\ :H$i')) ͆rwJE***8q"@sPghV\,mH#c,q1c }:7X CDۃix<~Ap3j(zrPUU%9I,7)/3GxpX!$-Zj2=#d݈"}~.ȬaF[ ¾z7̊+o;ezBUUV+YYYh"NԩS)؆!@y͓ƀ=}e#!.Ȭa"SPp8LNNN"+P5rC-<71UzO:ߝȕg`Tz=vR p fwrj#lM=_8r TTTtcɒ%kF޿ #شi{x-1.ƓbuX__ɓٱc}Y7x&NAۃ(\.ZZZ>PM:V+fF!ʔ{`YU|xC p?! O21.>!v4>{"+Bjjj.@ 'Hrr2yhC'x".wXh1""vckǩ4`0fKt2n8>s!aB!E9$ŊnHVf&_/'S^ʥwON}K'@~D@||\h I30mH$Il5M;W_}_LUUr gq&rJvfl[=ŠpAf W`8B/]8f>n0[? `,"B4:|)n~"3}G 8&.NmzX/M5I:>ܑUT ~?'Of޼yֽ+db„ q{7*VA}Fɐꫯf̙2XA0"q̈́ݤbOn(IR"R\?x>.ɫ أt`SO=Ɨ_~٩F>袋زe 7nb`X/h@嘮4DA#$UʈC4?={s„ ]aNrr2-tv}tN$33 vmۑ2qD|n 2f-Z(=O,'MĚ5kXre64M#`Z{ܲ,22.IxD)N 2:kQfB~BhףK.IOHKKF^^<˖-3Ï>bHa_o-` pJcNuUxIرc/F(@@22VUgҠ B ⋇x()--套^WSoZ͘2vTM :ĐVsSR:kw;\;pH8f̘1[NBRR> IIy$v&~>˻e~,#%%SN99s%M8cΜ9رKjxNl@ Oyy97on#f2DX|5nJ @]ʔ2|3vh4'̺u:D"wq~<# ȾSV+EAcyk;ٰ3òI"HKn Fq\s___e]?222عs~_O,T/q鳚 D5T 5h dXL(_cH]uKީkTgcظqA;4 Yl6o /ꫯMKϧє˴/m\ۧz<9t/;b|Jʢإb$eUb<|CEQHIIW^|wG`Wq<[lGyo/rˌ䢌 g0p!lM}+"p ܹy ׯ+W$T)SPQQ9sHOO?\oB}|'_~7lo/՘V>S8&;;tV^=` 55N UU9ٴiS#}҂f4AO%j՞Cp/2cҿh=1l$(li;oaÆj*E4Nwˣ[ܑHpyO`l;a;R4DC$Q}\iذa]IpoDQ Ν;ihh81 nBQ\.'O橧`B ;#3k|څܜj&z:Ed#01<;"iPQbAǕ(I999vVZEjjjiе999~Ν/UW_}NbonU1/T?13&8T0q30Q@\=2"Zf3;v{?OL6fcg HVQp8|Кq^^~=&g˶j[8IqR4`ٸ߸Kq?(,,tiӦ`֭[S'''DSSSYHss3YYYȲa&{FMF]m/,ˤ~KJJJa 7O?e>FIIIIDv$zyg`0OUU9Fon⩲!L(Ʃu/1F8xQdo'F#555L:ŋS^^):/~ٳDI ۍQ5YP4ma;ya JbYZ-ZĖ-[:(ɓ'߲vn( 0 ^dA$3#_~̨~G̖}UӃCVجjK'A3#$փIyz\Uxje#) r '0h ^uRRRtCeeeQSSå^ʗ_.ӆrO;Q~!ɍDu=P9б d6)9>*,#2=[JR FSi}6lDЙw>?dAf!VHƍxqf RЍ dblV5?4{ZYYY BP߳RQ^ͼypH;v`ժUNZfZfk :MimcF)..fԨQK]S~?w;wdݺu]'"LNw|>z*K.rMS1-d$ T< 1":ɀ"v?rW."g0: W;ֻBjjj+(++o޾*f .O?[&Ъbٸ+x7ڌZ5c&ZkR҆T=G8=?G#QU$Z $%%2@ #r0(Ecc#cǎEEfϞMjjj?iff#)"V(HXUTzWET.6 +²AAn뻉ODqr7,IPVW=u:F==h-dL&,]ɓ~ŗst~!iZdP Up@w0{'v\I9~?!B!ƎcxDs  ItM kcˈt=3qgfBICf``ر̛7x<4O>x>lbpk3MEPPQ{րn˜*'3п/LVV6aرyHKK# 9\:>}h"N(fȬX H\a\^%u6ųada%{""{P(0*TUEUna|>ƌÎ;XfMz ǻ18ŋC<85Q+mk OiY8&3bmʫm u GkTTTPYYINNN7?:>h#F0sLTUEbF~m^Ȩes {*byrSYsGLFܦ.FCP(G})))A֯_O޽콠CvG R-1IfR,b:(`no &0EP,KXs2IG%R4ƸIA:\]XàiuOoüL1ȓ6 !#[emsfW墩hGE!99ǧp;rk[;F7Oys?-u>r?˩(h̪̣Y:91 0`^:,;<|>f8N>S.]nbuV*oleg3m'YTM}OZ| ndC@qU/m-a ,Juu}HMHO~b ֿΞ͌3H/cp(hl۹Yl6 ĽKjj~]:8p |W 0C"BK.N8!V?55Ax;YUEbOƘZG7/#cuДè~k8-K2a71/0Th{<5RgK~>#***TH<ǃbҐBUUBPJ"P5I&jlYy#aS{c 'xZC777seayE(**bʼnH\P3d֯[H3&.d22YT0*yfV5ETl9pNMmF"5vǝTUU'm$%u+@?O>nC}Сl޼K"ۛHx @kncT$|XllW;B\SR1 w4D6J_G Ma#5AȰ(UQLAaVeONN.W]u~{d'J<'33h,ouQL&<3>R!k]> F@DQLuuu(?~ʥ^ʐ!C;(((@Q|>_~9_8V֮^U eA+z3ƒF(m6QEm_5qu6n뻉b0I?TJ ;رcMMMsCe(Qfy3,?{G39!ĈtJ6O']fL4o<ʟ+g2hfɓ's}2^UU;kKDHJJ=QXXf~ҠU镔jժ.1AH0;g5d̶kS?r[]Ktd#S{oCvk3\.Q|>G@ESog_64rIӺa ۹t٩EQЈ(Rq"_dem& ̭B6/#6kJ؝ųޭ ,">u: QFL:{RRR:4@Tv]ÏvyC*vn 3IAb` Ѐb 1*迁tK IeE|v0 Y=׍ zpM#s%[8)!4MjW*\5iT\h5nadj#/aV`goDQD$ ,cX뮻HNN&kՓp*=v=?v{<7y7D#U A.W:8Om7l-ob8,Z9g&+M6'1Z5FH2}o)SMz0uT>Cl)gaX1 mSaj渙s3jǵ(pڽuzu]ǤIiZbDD"#2pB>|8^L0֡.4x<ΨQOhii`0 U+WqV|}byp;,$.0 81?U nj ΥDL,Gi79D촧!X͉'ȸqdƌ'IJJp`2k\Gk@ ѣ)++˵QKK 'N$)){N}eYt2aNe,K%t،2]F QШYثץSk'"~vF."oΏ?Haaa79 IDAT!D0.9* ɱEvLA#u^%mO2ыQ%e~M&qXiݷHOv6 r'RTT?RRR{<餓ׯ?yyyZإs\lrnEcJ XM^8 v(IζQ` QUDV[3\SXAd2lga]:#l[Lk41h5ASE%Ƽ,%":2aFd}H$B4ŃE1n`Ϛx}c5A9UV Q]zl6cXp-$̼6nH0l6( 3f̠Ʉ& h>}p9oz1 DI*d /@p6ˬꑌ2:'`s#gv*0k*N?U_k\.DMC$h[f^ZQP1 N( pvH~n((x4ĺ&;Aav6I5VVD%֮`oYfQ]](FL&~QF1a HM6%횚[X`6 QTfeY+[oMڃyKmfj-# s&'Of&DSCVU"&+q3 Iq*oKqU@0{yb<bgマ b4xٰaCFq---\tETTT?RPPڨm B愚DD"NO8fȐ! 4wy砌슝 _4>m ?Jk&>ؑKcLzE˲ei͌?EQ5kV.p-HEZ-Wy?PDU,}v4UMiY^R[.,qvmkdy=Ļ"u^/+V*]5&i(B!L&SH lbF=\s7-1j= 8$e7k  QАT\[n"ղ",5@=>Tf76w;0D02 ׫81t}X@@@l51p}Y;,܊g=4M Or'J!v]E|>xEQΦo߾qBgy&_|1x;w[oaِe/" .n4MKHǾǾ$--EѨ[ZbN 2 I⭊L_G2 (YCr"VhG(Ԛ,7> ٝ%<5Addh}}=&MPHE]re,ObGit &PdgUCv(DPU3{l .O>UUYz5/2z-Z$I3c AUU%99K HɴFqc-HP#-ه<ţI!?w(h8 QvN߈*.s峘e2'sŅD"a~ߒlf,ZMcc#[nmmR ?upKK .[zᯛ*v $]i2qrss믿&''ڼ3pS+ ((6NT.j嶾Hf~M&:Ecڴinwp8!%%m۶ѧO (NKk`AJ>Xܹ mFF{:/ֲ!-Axi]L܆0^ް_y f}>V5xڝPUJqq16li=%%%477SWWԵI*hMJi`q"y0UrYbG\/niY(p8Buc ;vbLG}Jm4_d2p&&`34OK_E1AԨC9[bHZ'F6zLU]1NSw3~<a@A8q\[[(q>l | :?p8d…\ؾ}{"v){BQn7SLG`Mf{Ȋݠ0&!>|1j4IdZbd=L{XEj(ӧO''b:;֭[yWXp!W+,H&bRq.Ωb=L/F)̅gR[ÅjcH=̄mܳzhGqi4 w)rŞAU_aeVdK>}:$QVVŋq:4551w\Eb6),,bnݺ.B!ѣIMMWQ @yy9H^,DN% (di6 IN(h6{-@ 7zh֭[GMMM f8yyypƒ 5Z7+Q+s?߀ "T61+QN?~lT9NAbP|byc/+'s}IРݨ,x<;8.\l$Ix^~_3ydfsmF#555{ャYo{;!وM}nk~d#8#T/iۂI*dMor.A(h5;ۻM HĈbכ wr aoY/g27x-nP`wȪHL10hpUjO2%b;rk&SU5zM7v ä'bΝc={wO[G;%+}\VlgICi C]b!b̤0 S %RQQ(Νg}F8Wa!7Obk5+Ù'?F)Bss /,'ʺ+5ׁ@}H|WրX$HfɄfF|>DQ䦛ntҫW/0aaFޟ$ mFA,cժU{ƪ&%5^GX1glZ?c Z \;~Ȳ!U@2pOjc+w?;峚l|͍44Է̜[oE(⤓N=PY &h4%VtM<^(t)H0LKM46yͯ8f~)MdX=c„ 477֩ I;ybQ FL1p[M tXs0<_n0mH$ä!t 73&lu #}C `T22brQ9 XϣQ !!8q8?~|Sڃb1Vk";h<6"G"Zil&*bmEzD<j㏓L<G4*++ $''+v-55ul "M? 4v t}Ȅm̫ɤ1ffٶ4MvSW_MS4=\%=76bw `6[|%b6$I9y9@#GƬYIlpN !ʈ QEI'ɓ TTT IwI2qӯ_@CCW^y%+W Ͷ'AiӦ)ՋSE$U!YK&߮8 A!GmP[ UU1:;ܑK\13YQcl ~̃2^P" 54 <k֬=xtLB `ĉL4~~zF#hX,d.$_6k> xw|\]1"C\>,zsWn/LQRRRy'HIIi׳ erJj#{3gg6o?^M ImN)Ogi}u6|X 7{(N ;ZL!=hh:3 z/;"6r1B(p8ALKK#??ǵ^_"`XPs&_իWb0n@iiH1fUH1oa ^bS,o$e-(Js9TVDSܼA>2Lddd&֠WIΈd'%mUd$b6oL'$ %s[lArWoF߿?NoN|)l*?ф3`{[x?it;innj2sL&N '͛)..&֥gq}555dffvP,n&R-qQ-J%,~lcI"E.Pݱc> }{m/2jo`"g; Ǝ䩧^wlu&*k)D9O#QP?c c;bl‚ xǨ"PUUEJJJ"Y@P5\s=e4эZ;+NgԠPBAcV \'P/"۶m?|/MGiXc"'v!F!"-`c [~FmԊ_6a"C0Z)** &nbUB&M^4<^xUU9g5lJn콅g7!; >=;y|CUUömۺ/b1rssE.뗠ic v,=:nYTLa?&~^ ̢JSL@6raV5p)[ZZ?g~F 9B\]S ;"62Em=x|3gx|==5ORY0gzx<nJ>}pH17-}7Ŭ;ZbHۚzEY)..w믿fĉ 0˗l2VXAyy9ರ.uyʕ+YdIFzbIrr2@_4z'hZX|D" fܹvlA@e:,.] [GJ?Ɔ frmraBW >fA6Z… ;l(Nc=Lkt=OgŊ :KqwFn곙&T*))P(tH(1of455tv.:c_gʔ)F{= yvKo6 =ˢ(,lݺzP(go[  |GEHg#'GRR.G|wpc-<~Azv_8:ݺ`w|'& q8̙3~uGM8ӧS__Ojj qED Fd⪂m>fTX5I"(0ʻEu@cXկ~5\ӡ.OAʾ`s5ocǎDS>92&)ȍ$8\Xt@M_$I(b?֎awlDHEge@Mʤ2"ȢD>.) he#3O^N@2",\#FHږ?S@ gA޽իWbʩfZ|ݘm,"i0PV ͠Noקbˈ/sreJrr2$!^ϨTڦxAcU ,2qо`OvOغйuEK3׍%[XRe16Yԟ3N%DQo$##p8̤IZ(LGq8w7{ppd{)4Ja-xBן#JbK/+pBU0dСGf 4h3k1[L^Ns񷍽K"O~}6#X,(<Qh5{[ޑF"˩}*dXbl $>6\&OS&cǎODxb1e9r$Ǐge͚5$'''l6'_ivŰX,]!@J WELeQ~o鳙7cIЩyyy Xx17pi% !݄$);tg6A()x@-hI4=U,[Krw>-4 Bss3]0(<^ڏ늷2%<H1t1 4773uT.\Hii^ڤl/m(JvWA?Ҟ} 9[O5 [ɷE2aUMC5)Z8BȪmEAhRTZM)( D$ܧ߈[b|ӘJL15Ti@$aڤXnԃ!d"2?~]'ϝMyy& IQQ$vo̮qU$紴.%nfIC[,K'!Ei/r_wz0+Z$Aᕲ@gF@p QcZe_nH,Ovy|[bBFF?pL0sr饗&?˗/n܌((‰'wߍsEU CŸg<}հt@hLsyި~@ZgD0͌=[RTT4 [Iq1yXjwֲaW3s|v-lڱ4tLB0([ӥo㩧bϞ=)QU@U&:< H,"h]]߿Ӻ1౦ Vwqay3f]ZJOH za8{7J.I|ͬY]ppܜQ`*q_!B%vJKUIP%Ffe0fo)-vۉm *>Vڂf,~P(ѣ9s曱Zr|pln1^C(K#uo%NX6#B%'Iyyy}Nv@怰"2&M[&cd6qSl>䘊5# DSSS0eQE N}:vo0T }ΰoavrw]5- l5DQ?Kmذc9?xUV? MIII|1DA%ӡ)+Ä`O,8IM>_ߟf2 υ^Ȓ%KcZf/3vfY?p=/ΥEah5UPP@ff&;w\PcDTY~뀬Hꫯ殻9DLCF_nĬ~S[wORcj^_YYICCCRf?TU%t:ʢ{7b48q"˖-sϱc~mE!;;{1{Egg']t:G}a2qD^xdP׌2({;U ,13怅 Lm4(jeYfT1e摴lڴES|(còݕ۝%J^ v ̙3 ر# AeFf/uĩ8(ׇn' p ITUwǯ@Uo-g@dee4m(8dH:?qG2{l,X@vv QUd]Or^aNW.W/uxzfgXP}t\dƫ^T3Y=k$6LUU~?x<T C+lr.PD~3c~񄤋w:5ĩs]lF 6ocp坮,l& 1~Ep;lڱ4D.#"G~#8sw1Mvᴙv*j/ge[!ɝ;ђ0/MeVݞ*B__'t?ٵkW^y%vk׮'$+++e_ ^Da j,rl$ɦFמ5knL&SJu ̝;Z>' * }\7n'cl>$A 3JTi.EP<6RPP@~~>~R?Š(.&lcxPS>S2ST>Jo{K qcB\s5o 9BZ[[D"455nN8ɓ'~d`$MYl@\39W|>_R1K2'EJW8Qc8dŢ/dҽtӝrW,C$."/_>d@QDxTZ8uVwb+`d쒌>V$?>[la۶m@*wlK >Y;w.z7xK:A%!5ə%-.nN: ͺuZ)}@f&(:"}eʔ Eġrfq+o£?6:!E_/*d裘 1bh@C)>Sy*B<\{0Q x/E]Nx͜Qʣ1yyD?~@-p%ڽᑦ i^kTŅdݕ\?n'% !Ӡ IR,]:Ν?ٳ1CWe{4jQEdAn `/:6oޜGyPU?E$L̫hbu\U2KvWrՇ3zK;^)G0>8m^Ĭ~S6`"%pgk% <n^8Q&"*k -R0##^,ȲO~nv~qGr' #at:݈ؽq:A/粊&ΡkOY>F׉M噖JMnѢE< $!yL~[Jy4o#MZDe1N$z$iH71o*~?3fbz!9櫀M )"xGdQRn D"{D"6nxPݜ}لB!V\V?'P(4bc!jܔ)Ox42hIWjdY($AB4֛k:澇W7[ɦiebspK8xVI'o1͘*o R?'cDAz̺a 0C&V͎|#pPN{գ2{Yq;Zm62K n0L̟? 4AEVD1ϡylqȪ?r-$",#"$ҥKxw9SwJj̻ExW8J8 ü+8)l8ϓh6͊.l䍎|}8fs^N㣏>3e߁C{322w'^{?е"r k׮wHz*P` Z{O-/7[Q vd NCQ^^ζmx'c޽گgQ>tb/n7f9eEb: r7GdГr,IIp)B555aj2*zaWi0*GV# 17h&C9:{m⬒s4Uqȧ :b1FEnn.|AZ9!vF;|^1VMdojcB1]Jl M} 73ϰ{nF#X"Aࡇ⮻3`ҥ|64 a6Сن^6ɦ|X3f̠ƔF^Ͼ6~}/XXa-depln!vqk.F|ZY)**=@0F,deeqUW t{9wԠWK 8!3'f+OKfy~+^g0A(((੧w|;ߡ {?3,F>m47 a>Y6_{$%`"Zcpt::;;;Yj۶m4C'ȪN;Nbn9SN&6tSl a5HBL&N'.&H Q)Dφ_ [errr(--Mjh3XՑϾkB(6fSO;4à^ƍI(\|?7%^Gೱ|:^n+9`IZӦ5h&\1"rDVzAexzbs/gC'#T"S1i0ӧOiȝTlLʽutL}R,_Ջ.]9 *M~+?R$Fxz~Pތ]);Qb$@Ng?$ 7Q==ь %ш4J+ojDRBӸ\n7h46%%%x^&M… ٹs'/2.kDN_DAşk8, Ąݭ跲+wz93f W_}5eee)A&K@u L7>JAnxA3[?5(޽n^{55BYYn߿Q#%عj~SN}a0 p裴XƔ-8_KaYQ> /AxWf޽~%Kp'qFx lByyyf3#2aX-]__OG p1U *|t:Vm!vIrZ>j<,&W?!=4PjrGsB~N21%r<*Z O_[zX4Z|Mq[?pLv1ɞv:B&zXC ~YbBF% uqӊ*S,_od4u=Y\V$Aũ©zkc:qOS|Š!h2BsgNw7lǒ>QȲ4l*fyǘ2e .b$Nq]y#aӝn(ov ͠n(w~li g-evtg/ps4'n̙3l[Öjt}{55Vٷ;u@HwK.׏Xƌ*^>9'ECj#Ap8HD0kᮻbܸq\yqzzz>7hl6PDQl6::%6d=O_H)$@{{;z*:+W:Y;&mwXs9 ǐk`#\~,_XLI5<P^^ɓYbEJy.dE}WYD梫0{9vu( 5 555/]FbQ eUrB^'/%&ͯowvQE/'KȪQ9ݼtԻBݙ[&htvBGnhd|f$IJX=c pzq+a㰍Uxz[N{Gn'/@~(!1&╶B20 49W +"}rڱ,0r)5uN.M6u֔M(xeJZx;KI%t϶ZG>%ckqG ʴ\.ͣk&AӑMcc#g,]_@žY]lb%Uy3oFsaٲeX,~׻$S38-fm|LdQbbǿ x<f̘Aff&oYYYiYgڵkq\khHgz8(d=,<G} NmdP3s&\&PFwD~\=^.r^|E<˖-cѢEJ$ ;;38e˖;\.MYT@TB1׌eY(|4 6ӦMrQ__lN殶Lpa1x[W̵gc :ܞ>:(ik L&dfft2hF$b1222+rP2QZfn> .? ,9TKKD":^՚6W%Aq`zN)l#CݕTX#Nim!Qazf/Sn6s➺jUų-%ZYE+GT!ހNҝ\qT2Q[ʭ;31+NĠF%GX9?O98, &m:]ɃxpW&]66I,I.ӧGKK˰MG,4x,:4hk])v{ *q;E>)EŔ)S`"+`z3prp\_&1jkWs]U;2K`PIp,>~ЙXfd2U)EQpdff[xEͫ6[f̺ؠɮ.9z=?xJcA۬`)ϒxaox?݀+l$rPٌl9nܸqlذ{YywKII |>l6&L`Æ #:ӘȲ,S__?,Ti)(~VuRO^fΜɜ9s~@ey)H怕陽v1= KW nY"I_XZpSR__옥H.R󞨞SmM5]<萶ˉūɭp\Lua B*^`)ٹs'P(&aAB9 %hv:U甴0>xz~֠D&`A+ehOH(`  `CO{TK+wSe 甊^0> EUV?A73l6:ŤtWz3I ZPdsx0dر~['meCo&ts|QR$zl8X<r E{=h4JCC#gjT+\r%x㍬YkגO4=Y5#Pv:Xbe 8j/K~"ȧ;b7{mLv9"h]dcFrLH|TUUqYg1o޼aXi>ٵko]w>ml8|8N222طocƌIa hYlٲYeVshrOE˜9s3g-P*p89wl޼z^|E~s'zj~mzzzD"XV^-+ IDATfh1L×$jt}5+a/}6V)l!-s8̝;_}"r,hbՎwfyS.3'.\Ȗ-[RMG|BUt8Aݶ5N:~{HC XtQlN x{<1{ YxWAk0\}]ᾩ9"r'͞7M6r3ȱԷi`27UF~8F#nr!]BcP TUUQ\\믿>l'ԩS9s&K.%3+ %ébdn1lcg_L KIeOc233tx^nFnfM… )--v(ʈUUQUuD,Q8d1pzq+{QR Ybqq܉O"\3f'NDHyW50bQ_)].gqݬ^eӂ x|)QR4]7:yhw%Acy_B5,TU`0rKyc͕aV8y P~0h];gytP|&)m@g2?|DSryfo)iS OP"213:nS{(00 FQo!zW4ao&;24SN+Wt:ڽ[U{0;@_7é CvZrVI + SjkO*" `xd:.(˾v58QlQTЏ]}$X+])6S!TB þzKZߏ^ qLFFo8xp8ih~D]:iExxйSڜ}lݺMMȒ Yo 9}N-lcO¯M侺jra,bTUNis=7lApuQF|M?wsK4+{P?@ @ee%SNKK\*bUH6%c<:Aep\n]ac`lkj~Qh4.㩧bTUUŐeh4:9A3TUu+uLjC a#/ڇNPyzo)e)h}EA%tFvJ|yybZ_wUqێ|v2=` PSShd۶m|GEQL6> e ueSÑ̨L{|aY Yܱs 7nDidee5 ϗ6SH06TVrƴ+?=uXB3ǣxwl6U*\c\ckŖWȑ.\a#-A>)$#@{zzF*T"vWP(,n儼NƒgpG|hY4Ug }ٷ^Th Y2[iKh]1$DZ_y['mնB6㈩VAehɓ9cӟDNNΈǠ@<*lq;~R% Sٖf%卸U;ь/- wUU?gyK.N8F[[X, 1!ourO`ATFrQ=As ҃FM<}Zn[JX8jǢJb'K.% y*v|j:xYx<8ϝ֋`ML4s$ ^%i̛7{キY/*Xt1mϻ8>k~]tE^3( 7u֡( ?<? .rR8c/˰XKouRaQi 9+;k+lWeu@G9n^X߫2% :We$ZNgZ6$ɭ/;NPc%&}FGGo裏x̠;v(1fw^;N.h>wOH%`444eEwwwZ~k)!)iȪDAP/cPGYQP!6;,krV2QJmmճ/d`0Ȅ ŋ_Hv EpLǿ ޗ wovQdjt!EQ6."(7ĢaŒ_A 4i۶mrH3yٳgϰ}>sᨣbdee}("e*ga xFgxiEEE466pYx#n'7lG^l-3FZgQQvq. p8kײ|_իywNIIv;MMMyޒUc.FsB׾,1n0s/tD PS%qUtOY¥M'њH N6YftҴhHɄhLèG]=$4ȉ1 F/΄yc|vr󄏑iXTxAXp!~Ev(P$;˗mSNot:Sz5tYځˉ'k >1 ØOeujo r1?b=k]<0>R^H$,i3aﻄB!$IJ[6yчA N?fMdk2`Ah~7qfF'b *&& I:\\KE 2#ĿU,#_r,p8i0L4²=ܱs| *)sdlcMB,\5Y=xzUV"sK`}V'r]:A5hhj aAMU<}:3]q4~` ''+W`q|M׿bZ1iM*qia9I\ND/VHgrH@F`|wB(7BGmz{{9shhh`C| @WWwlݺum>yG1͟l u䁘IT]SZ}޼y i׼XbYI2>Y5,̒fSo&Ybn{D5d.B6oޜds |Az!,Y‹/ҥKyZiCB|k0NFJi {O@)D%Ğ2£[9+0{v֪.2z#<;3)4_)S`4ټy3F:`IYuѺg555dddaƎK8~c5Jh_ ìWDg]{q)hES8Ntb=~'BI4@T  qQ94,[~ ca(nNk l# "S jf{26~?Fb…DQCJ F8/<FE+Wc4tM<<⋼[۷NHFPLCFsdEz1  *q'AJ*"Sn$Ae+;)oTOX)6ݼZs-%LٙG96p( ?Y|9gD"o s~1Ir,Ӣ?VJa^m+$Jk@UUV+Vg}?x-ZK/l6a`_C%%lr;&qy]_߹KSbpHww7gϦZ*++&*,s1lٲf_WUc9|Mp0cIW?&%SO<[o58h o}[C Qă&tʇ٘c>=8ncD8cYf ---*-[Ɯ9s8Sl[.鹰D(..欳{^A'`Z&;uckPLG!+b'b6I%c2aԁ>TϤQy6SXIH0e<$Ib׮])ݚ>o-S)٘fq:i.,YB}}=*CW6k]\7k븻D@NoW_}[ݽ<SVV(`0F|M-w;C3p'mwW2#2!s]Lv9[i tdH~ھCŔ >mٙAUUdYN ??ЦrG0k,~cZilloĠ0۾K rCV>i@}}=`EQ(//gÆ k̛7z[n:JKK1L#N+l ||賑k u_tv<^`Ldourݖɔ%ƴ+b'KLwpN^v~i]a#=]>kIxg C8k&z}D&_$Eh1_G(EXՑvo,##wykr5װl2>}Yp:u(?;9T%t3#k?(Y tČ>+Æ,~T* Pj h4JYYPa5{{{7oPa3UU;veU@'{E@D"TWWL8q]s̘1ú X%,Ğ2exLNbD8i ~)v,z^`r-{r-lڴrDQL.- 騶8Li3T|}*'''a ttl[tJt"%a‘cFcx];[d z|M[6a.R S |Ĝl!̾#d\|iqZQc2$@ 0`Ld& ?֎ڱ,[˭;cp`^nl6p4t./^L8NF `ň$sSG\"&DKB)/ QGGyAUl:Do^MP(DAA]wǒٶl6b_ʯp8B:+NwvBR -hR{w- .~Og, ?6nٳgs'O@qq1PT.F9DvRlrEcEIu(}E:rMd j]c!’6"&],)vu1ǰuִCv+ MDQ P;]a+Mw *ϷPj y1;;h4?̏cΝʕ+y뭷(//O{kEKѡ)\c@L_V!@Y `XbAjvm%r<i^#lT~M,lݺsGEQ$BW_}5ӦMcѢEݻb>`ن( *F] , d1T|mFOV6weNO6Wױ7`A'zv{ ن\&6sexTVVBԞSx0q5u􄍼ӝCe?J `0rGc2xg=giF }˕yȵR3-%%?_EtHtPz) i}fa!@1$" L48Dz]eȑ7`OUWGR` &A Xqwg&(DQrk{IdpPPUAX,ɂJ=LKwOPX,j>,sUW1sL9,Y⮻J}l1fwU1xev' ABT@뱩pQQO45pYng&swڊnO{ %7#@H'GP9en`fVHS{(0I }/b2mbʔ),?Qh?|x`0ɓl{=:厘(d,o.gO1]Ehw'it4b|aF@1;h IDAT?n=-gx^L#,+yY"fRCWW]tcժUeMO{",<`m=xG<裴 }ÃpuQC nUzsx ("0V?茴p׳fR> Bdee1m4~_7;0zhJJJx7)**鿖HuWn:6owldz"Ltuuq9Dx饗 UU(B,q]f-M*O{21?ko6:C(|>v{{jkkYh3 <ٗ}߀@DT֥EK uVhU[jץuT" @=3sf909cXL %uA0gNfy={6O=W=IPŹQ;O_Ū$Aʬn~eƍVeƍv݄ovۍdJX+2UUUhZ6la+FrM~n4,cׅ 2Ae t:1LI (Vs.:2X\U((̲exZ-$I^A~5f+KaF d׮]477Ǽ.zާ^/?3gO37߰n:rss1â " []|aq~.n*}(J;:[H_ VDy4Ulh 2bQ_N'%%% oNyyAC2p|Ԟ:GެC$"4*w{tHgxvk}} gQZZΝ;Y~='ts_~%sŕzkp D$̃Vn4!_ME%Lvv6 x޸үT^ff&[l3ʮ7f^x!wyRôZ-?Jaa^((Z8a.c%/IF" sNJJJ1o<~?/"6mH#fY;GGQkRRdPFH=`4)))?3gr-PZZߎ;\!-Bk|n(!)PznZ+;Qԉjoo禛n˗"QYp!wuWH ( ]!]0AnWoÑ{P,JKK1PYA*{{-9qebH$%---H'̄ )NdEڕ!04͸~Ir x~[@4k 3D65d,B/-5vV=WQHOOGeyy馛>}:[TWWSXXDBVRt!0lGV~3RyyO:AYvRZ'k9cP!eDo p; eeeL&֯_?$o ΐ4}hHPz?chii9ᮬ5 >;yLǞ3ѿ:<1|7̞=y睬[W_}5>XD㿎٩v% F s`Bgohs((R__N[[~ޠNZ-Z4g&//=Wz8q"NƄk<N[ţ;;;)((@yR z=ɸ\B[[W_}5|CFi1[vBwi0L֮]ۯ$s_HRR,YK/ .+WlٲT 1u6qLF^@h1'5ܞBLI蓃hM-hlv`lʜ0-xdE>L=냽vթ9sW&`8#6msRa5m D4ܷu +기ڑI(󑑙F((%sKvQՒ(ѣGsmQRRfPWHǩ٭8zm#QzꔾqF֯_ߧnF7 \Tuƍ7xcHz=9ay7bZj@ڲ(! `(WѣGswPTT4 ;,K2}t~"2/"h4ϊ".(ŵ$(  Ӆ$F%+CX~?1V`&bCjpBVZE]]ݠ ASRQQeԵFtrGm۶({$LYќj`xYgzjn7xrb:j4mߌޭc# ;{i3ϐ;*/ 5k"#ơ أѱ쥹<7r2nӦ$PVPv]>3^&jɄ ?_4 EEEh"^}UYlG#IRl/H$Š@1[t1exN7=a툡k7 mZ '̸'J(FQI,TQPXHPW3S6{_w4_8Y\UUk dggk1|ASO1pt=l,j9gRLղBDQAn <>c3dڵtuu xhֳχ4xx<wqSOQXXN5?9M43f ^BG0aׄoq'RH2H|a1o14,FVW˅Vj&~sefn_D0#E$dY!dd8eY&==cDzaÆ=_I&r4 ]]]L<6:::O/]dJ6ܫ\}ظqp@ѐKSSS,_wPo[*˿\گ!ɒDڽ X,ĺvEFn`"X0GuR*I \߃"g!F4!`Z1 ޽Aׄa4 eee]{;EQx83(++cϞ=E D橺Վ]2p -#DU6pE8 E@QYveuF3'K{f$'=怑d @E⚶FݲK,^ZY\UM.D --ŋsQGl2hhh  h" l<؈6|mУG,$%%a0hhh7Nw׊Dϧp8<(l{ Tz(--eÆ  %9 oX# H RRROȰN=;Nz}B=xL8xX `ц)0ybGծdWUQZF4^'33!QT 7̶mb/'O#.J?puE~Us饗?$g̘1r)}%K˴Ԅj> crŠkHukXz5֭%^aY`>`¯3o?^Ƅ3~~CҘ1c/j iB AfFΠFEBo QPpaq"ڞ$|>&NI'}7$c">PHMMe˖-<\|L4kk\jkk 60Hl.リ_TP-bΝ|Gd vɵ^7|իmBDHJJիW!-#Pbd})@ 0g?' %fV=8ԥ}ZA! lg )vf+CgPt"wuP_ ;^6wg7:F@@ *:;O6A=jf8ܐo{?ycf)6;o4a'PBO@y)Zr8!˷aMP9%%NGmm-(../ 6ErtiaL+O"ԉOxfRefwP`0 XtrDφtQ1?яxXJH'o5acvcX35 Ȳd2a0[G^A♆bLcfn3 >24t: t455?383grWSkb#]#F G:[Iqog9.p饗3$D= utw~\/tH>,vs9@ GP.7ޠ=ay" Qn-'\~5f+%f j=3>K c]Z,o%9oDCelv/ŦFd2E;-9{S-s'3PQtrX`*,]_@x< {,c'KźfA:$CIp(B|ґ=O"e.*nـKP!$XaNj>=UTogrњ)#nk !"6N,XK/w}݇^' D 阕@_"B1ei3fox6m+WfVM(|q{%h5Myq ͛ /K <#2 o*P9./% Q8z}X~N7d H;ET<wy'gqfB$~ n;;t^S-DߏLd3 "Yc疖mUDbk֬IXSO=2.]`;5554EN***0 ?@8裏f֭j4(L$k6/1[)z7$ C$d +Inδ>5ȀAA'(4" 2eaM;P J6l>ߏ_3ΠV^E 'EwU}|;-#~X0ӎpBl >mgTϟ믿w} B.._Сñ˱˃>f԰7H_eAt|⪞Q|We˖q饗xhmmݯ8,E#`#}Re^<3יc#d?zaC:(5\ÓO>K6ZQƢ g&Qq\L6-[@FF]]]b\U0f֭[=maf,FMkG.bkfp8Sc}D4TX=[k9St'N3 D$I$''_K/ܹs;v,z+ ,;v&EHъ2Q5c2HVUTpNEAA>l z@hvU,YBgAiAu/..xT cH]!k4aPMCAoi}ff6<`y444b .b"vvc^q7-ckx`D[t:)))vn.B!DQ={ )F|N< -Q^^NGG$۹o>%#d۶m|1uAGr%UhVB.ğA#(b_y!*[[[Y`E0-Ÿ':ƍGgg^F&n*kϿ[SN;>`ȇ6u z}BPL8z뭸MDA  fmp?61y'l Zz*{a֭ k EQjr)|aA Ƒ e;Ћ2v s% ,GF߃@7+v]A)l&W^y%o&;-- F7a„ ̝;?7Y02zQޭcWZh=deWX˩٭4Mlq'aO^{-ns>WHǩ٭D7E YgΝ;ٴifyX^GmuY{uD3 [Iq|Jj 7Tqb 7aOw}P+{x#[q?+s &J:~_̺EQtr%'}b |>߀jqe3HiZ?;8+VɈVgW=P'Y=deeexj{14H˃( ?,m 0`nC{J?kygp8Cc=ݻwА0(z,XSZ _uYA3g&(AHMMEkn~uWa݅|ґmUEq?#^`0jd\cm1 (gQlϤڕL6|8AlJJ… ٴi~iBSu]3j.y:::xW9snxՈS2@DUm̼&̸(J:$ +ƙ'$pAM8WPl=t2sLRRRxꩧ())IsE+(؃zAD[?AtDHOOAVra~W]Ei9X&Y)((@cOpg|RbFP|pBv\X@gPϿZr1zA3fƳ>Kqqq\)UrW# eDϧO?tH -p8b^K#(t6_O[[sΥ7|3!(8عs'mmmt\vlfRȊ@هFś*Q椌mtipE ziڸY²,c٨{e͚5\zo{~;u-h E8*gHG:E֍=ۍԶs=ēO>IQQQLSfee%qK1?) ޠ( PQFsaJDqq1zI?F:;;5J|eOvdpo$iLgggœU Հp8LGGǰ$ $a6cÆ \ves]wqE1j(v0"(a\!v ΠFP)xqt.=Va&8<FT&j%;;;w&lɕyʲ̸qرcǀ'|AX0h"5KA5--;[(B#I+V /@ h Fp (T%q%G>ޛp8jeĉ:Sؕv|>ߠ'nkkc8N^yHU>3c?.l  ;!=Vv,zv{K̐^昜p4zwϕ.f̘Ayy9?0qٽ{7?8Zͥ2 K pH7Tz@d`,Ϯ]b ~0ҝs@ )š5kx  #xUW;cǎ^\WIG⒝xZB}oAi…\"@ ${h SwHh$I⫯ftzjzU$IL>; ~1{-94¯+ k P;:.:,Æ_}@ ʖE4E" u7ҏN8̻ロp@01"2/;  I>/xVHn]dUq.: 'Tp; | h$Idggs'K/aX>M, t$}A   3h_(DZ.o7㺯'rv^g5toEQthFpx 1FP ߏ L6UwyQ[[͛P]tk׮eǎC!јyyy+dff&ofĉA_z.+W$)))! W"XP"d񫯏䮚J.+tm4eItQhDmt3mD怑FoL0ib#̘1d5?! QZZJ~~>6DZvZ-z>kG]Q#T7p2i$;8~N7 q55dE Y"mtr GwsɩW)E~ptLJb#0HGo80rii=~3S^rrDBmTTT}v/^O?Mss3 ?Ot-R*K(Vqdj~* 6wÿEX0i"/u#A&ovRRR wt B'w9´j ck Pl"E4v8fpV^~A6$bwAyCAYĦrAqE:/\KnkkkpoSPPϫS^Ngg~TGͪUp8TpAA%%%|gjvt8Ү"2>,DjM$)a)uCv"vΝ`L*7qJ~^Z3:7ŚAb0z?0hdDQôb $}-@D%N[$d21qDvEcc#EEEq~z^ZZ ,w]!񢽽뮻/_N'ۻczVロ>/cHKKa;\_;wb 9/E/zT-7Wn?mY|H+>E$JJJ455%D#BQnt#z!5Ek| \bh )v3eO5\CzzzXM`HQQ_~%|̞=/lڴ?X/HH.D+jG1lVmKXIA=?+څARa͑ED69S)oIqGGG5J&NȠc% rl\h'RDKkuȲLUU7w !6S#ûp\c|]ѣG#I{7$I3fX=x8cK.ʕ+ٵkWl_YIJJ"55233ٺu+6mCxZu!$zʘ3g7xcXHNN;1cpד붴h"ZB@ @II $LQq1b]>3nQXhHՅz]~ fϞ 70JWP9yMd$n:a((XÄMH>lˢ>'2uT.b}oi333$)jW:1:2_#u5tp805vЂX0A ./UjymO/.E*qM7k7x(h""~3ۿ"Vm`l hD#(|na4:.3t(Ja’%Kxo~ñˬYΖ-[(((z@>H+Gsc&u`(ANȊ[27-A=׏}F>7pI`gg~S)˸q+cѻnՊdgٌ(sL C@1@ÇmY#nTP(4uJ kf,̱ZWA+~֡B$E_D3.@1rmNǞ={Xt)O?4cZtnDQ3gN`׮]uQ?sp c TUU&%%%hrĵX,|KL8Yf1{lZm>JtpeX՞oHшM׆jj|&)^Bχb`02 i >36[pL%`IV{?k|eDoߙ+c͎M]E U{cܹtuu%tr8HKK?%(x#mi >>UJlևj$!99YfK/ ka.Iz~PJytGOԗ`цyL(F}t:ݰdeg^i=7Cjw1+<4So_C/^U3,2W^y%&MbΜ9\{tuuq_mi (ߌ5cq s@!N>H;nNn6:Sb\`0xU>+'vc2v{TiÑHzѣG$I򗿌1f3K.eÆ $%%gp6zPf6f6]hD:E7*To"pŗ5H]_;Sf E ~.Vm4MpWm96mė_~Nۋx8 q:16餥sQGOYr%o&{~,X[o_|{>|>.BƏk I>}:gq0j(,Y똾3!8s3~5|_D h4 0՚a0V/''''\ɲWt!\a-i9-TT8Ы˲L(6!ネxFpC "S0h"|֑1 ,h4,X '̒%KJS$IL4 ^ի)// ::zܯG{{;\p]]]X"!F[7eiԩ<5N1ѡh hc8WU3'vp8p6щ2gn(A9>ߌGEeA+(_X/U]Y͡ Q)))_W|q⋬X7|I(MeBt}VX=ے:jƲo"]D/ =` Du* y11YmldD^@߫( EEE {OSNgy裏?Wd?V`j4:::(++fqL(bƌ\tE׿h4o|سnގFAՒ((@WH;,z"Μ9s$_}Xxe/+n5rVmu]6q3k"?|klwrV)M2`Z83ihh-X F[3!eXXjy,\իW Wk ޱYx1^Ex ^|~k@ q8q"7p=Q;wnlj8%wL:`(DCCC0MXVZ-/x' V'LVr8)--&###a,))ᡇpᓎ E-ܻu Iغk 7$Rd1*{5| /5qW7_S;dVj&x|'Y>#<N8[nZAM2pLceGFf_VΝ;)++VW~ۍ,ˤ`ۇu 5x9琝7Lvv~"`]u|bd+bw6 $ۢFdpB/Zx ӒVw,&c ԐnOGraZ/Xr%6&V~)Y‚6z()$QQQARRRrHȒ$Y$MdKA/vPlΑNd ]@N L~꽖B/G72u{{;n &PUUEGGs &Mf[oe/^sW}v;˲N?z~>7E_ncHNN&99_iiitrI'{ЀN&HVDt!'݁orwȂAyD"I[[+WDP^^βeE^O8'#"cǎeC_flBii鐤HJJb֭^3(d胬AQے4|i Ëihh[/"U& Q `j(D>Smvqґ4IV%Ktvv$BE\.Wlzބ6dY;&CNίBGChHD"OƍTJKKjpjrM27`xMw#q=(w_7eB(+56: 5' u3eV^F9$,ˤ#2 z*o67nWq1HŠ::yv `LC2fgμ`3HyP7(zXHNeYHWWWlSXXu]G8g`X]}GCC^g5RDNNNB\.Wxb5({Aݻw/( nYfpB<.&O&I∮[^P*fmAl1Q]]]53 IDAT kt` + 5dUpkU5lv6.nEA䪯&_G c݆(h">_TZ7of, #d\uUzu]$1yd>St:ݠL?g?Vue4`崴 Q֘((vs_ k}s7BQɤIdffESSf i0{FᨣbժU{AD"8U*k U홄eFot7(FW^y%/FA1frcHFChvq嗓u:}RSSb\.jHh42c ^y~@{+㤬6Šnr>O:$˹[9 Te޼ys=86MzB^/f9|veWO]r3af՞2u}G ڦB%o3>]Pm=Fk5z@? .,s2vX͛_N & ƴ=iOȺ4,֪j~_]qgRAPP!fz )P;" )\"H_̴izkўH$BJJ ˗/+KQ, z~g=:[C.)S`XX|y5өBؤd2;oDKynLB{dHt>SRRoAJJ~zM]2p꩜ĭck]Auw 8%43:u*srvINN_:\uUYd|>p@x<̟?ŋǢUsYgo&V]=_G9EYђ+"hZXhQzdΜ9\xlذ瓒hdҥlڴ 3G!.3U{r#IҐaeX0m4^y啄PMWAAƕY~y%;ul wVWh0 a"Ȑ`|eeՆcy@:::8Sپ};۶mۋv7|>LF>;` PD9s&^zi):*&§TvIIIÚn~Nd&MO?ͪUxHG:/4x|GskU57'E܇pJ=Q (2ÒEIv2:oT>`<O `0/WSh4믿; 䔔JJJ{v sGc2Xj^/l6cZi_x"F H{ш`G嫯")) FwqR̖۽ҫQbA+E jTԨMb1bCA .Rqpk{۔wA=_m)\.Al6cX|,ZR&zYTo㳒b Lt7`!;n+?"1{8233cذas1 //Gh4RUUw_~ɮ]Xk z /dC΢cRSS_|߂(heVԦxZMEQQwFFnW_}馛bpB\C;~:O# BMMMeL O?1EzK/a.)x{w2! FClg-Ib^vM h $0m|RvO("~E!77˅ሉr-='tCG(vqпRa F߂zH O>\z<1?kz!/_Β%K:q,<~ᇸ24t@HDO⏛̩5%?˛Ҩ[HOhp`@cĩ 5G&P`˛QT4JDcc#> }˖-Y$=z?j*;N=Tf͚oڵkYf $''h2mf~u[-ϲE"?G -sOt^ b?Nݼy3555?FFt#n_|> 'c=FAAA΀PM42Ԉ)#`y&"[ld2xk뮻xc6mڄnglڴdYf 8Nԥx! l鳕y9U1&oIP5_DR='(p0c~#M6a2HMMijƄ x'w ȲLJJ fΜ9455}Ϯ]$) 477ӯ_?4Mg]TO߂?+@O<૯C,ahllse֬YTTT[o!e˖ELPHJJBQ8",ˤR\\իINNV4tSYŀƃR:AC:HѿM cw" D @mm-7pYYY<ǴADCCq[t{wٳgSQQ ][Nh&n^5ݜO=CvE#5 TU%== ~?)))]Mhll$!!I᧐eNil[7I<1X9{˖$ډ\`IpDA# 3!)ͬwqXG "qo]DR0I4 8222ػw/.G TUoݺݻw3yd>lV^͗_~ɪU(..FŖeZy)We̩,]%QWu9;llt9gXY7?YT5? ȉ dC+B0$??ƸA3(c'Eu9fX~H/K$v3a„Hm۶@BBV?ODb' K@Ql6}eժU*$RE&4ֻ & h4LZ=G*tYak'߁P~ܡ( 'tRDỮI&QYY… 8Ķmx뭷ꫯظq#Q]c_B!z lذ!e/t/ YtV5i>pR!INNh4t:)**H***رcQUU̙3C$Ea\.v; ,`ڵo?O,X-[{:t(k֬ci2:?HF9=%x;=.?d2-tFԫjΰcc(hTzm-ThJ ҿ>䓟qF UUILL3䣏>[Iz HVdcLT;y9еJ`63c0rHϟ ѣkȵ'T4&ΰT߷ask$H46rVV>EbySZ~#AU$dt^5cq  l ht:93xBPL1{5%I .`…sĨCϲySrKǼx2vC8*̯Ep 1hX%9[Qm|={w̟?Gf>($%%qYg'=ǾqƱeVXa J9$wlb;=EE\ 3EQOVtȑ#Ot 2~ea4 FW2/nŤ>[6@P;<`f>4"UZ^ڮݑƠq%IbYcz)Oʈ#0|8!"\<'NwߥiӦq=.ø\nlFdc?mG1̝2[6Mf p hNd?{``0D iԨQ,X 3l؍aSHfB$a4ɓyaʕțok /@ff&͆frp\Ȳ^Ccq D|KI"<#kUu}&ΰdVy4HJڥz2TG.aÆѿ|NuzWO@?\21&"&64hA_ F#vTyp8(Ѩb5̦^ Hg ΰl谎_̢ȜZv9 3TZ*CRq6m&z aj/tsz̘yҤIL6P(Wڼ(466r1@EETM@Oko[[Q *++IHH8>]ԣGٴi}oOi.nw}Y&ؚ n鹃Ult%h5kc- 4Sģw(@VB^If"k]+\ƐcN!>k)UU#:I|l%t㨾}aVXw}yw9s&+Wys?跙zmliotW+1 _T*) Iif^uM!S4tvMbb b@,0'dN$OO-$ITUUsϡ*lذ`0`G +ڰaCćAws4i .G]Ul 2ro"&tPHev'o*-dXL&v#H0u=T +Io[pGLWK*V6g_ X 2gfх^a^xBEN'weeeTUUŬ53~xrrr={6{@#=wM#]"d2a6|x8}pW0m4jIIK/[z HAfNeY (D|v|.r,~7$վp(n0Lq=v'gdqғH3d-.N6<в?~$n O!Gb]_vYg駟F~zMlବ:4sͲ),h<999h4/X`&x޽{sysQYYnsiUxfjkkcfy744D $+ 0wdFy) HAfVE1mh[%HJKtT^5s1D阪 NgLA!{̘1ر#/~ȠAxpR^+]*Icc#W^y%|w]ǧ "VK ( Yx11dz-IFϧ5|Vˣ7bo91D/(& #-n2)-(# S$DAҎ$ yǫ-bGs& Br E|G9Pi H/lj۝Y}̯ɍYwG޽{ؾ};}Um41LV+~m&N<_e֭ :_̘1~fƏY~}\\ *)،aI0wzg`Ihdv5`= hx4Skszf=x뭷͍*^3 q 7;D,"9Ì3ѣ7oޏا?lEB׍*|;Cc%// i>`Zyp:TWW3gFM  vU3!Fc\WOaX|9UUU1kJpmaMoȱ)\W\Am ! k9XZ9TКjj%R(L&{fŔT뮻&Νƈt*YlYnVC{ociC;RIlca} X$Il6Ng~oy<;L:Mbt(( d'ZfMiFjmHI4SUԣm0^ـWH6"^E3yvkR7'p˗/V1[+J>}غu+yg%14&[VȩYM\vW IDATStSgNNLodӎ'ő hׇ;TUEEN8vIuuu<M ssi9ֻFS]}>QTΦW^|<<|L>͛7[o1ydIDQDL&SL{!Q }wZ$Ar %LL߯7NLo̕|P @ khͮ|lFޯ,gj QTTĺu1^zz:TVVƵ֗zꨴ7A6R%4Lm:DBc6#iP|ƍǟv~bE _~nS Ğ={:.M2AU籠&'m`|.M OO4wn&7лde`j3HGXb]>+ڵkir-]B~~>ׯ>`‰i }X]?nVIE";! %-]n<7655q5kq+ HT] EAedY& Dvv6\..\Ȓ%KXp!&L//dvmS^^ ]L/&Iṡ?pzf=!bGDA+0JW6#{_fʺ;~AAW&99[ݡ~ʔ)ڵS}n㩧y}w޸n\.~a-E^67>kg}eeehxӿ.b?7Bt,,YW_}+¤I袋ȍ7o~.,444GC (,,bu֟a Hv쐵Lc@5:-rPd j̪>hf+9Tz~v?>1-Hvv6_~%w,c;v,/RTmlFa#v}Y9994s7LQQ:&L-[D7(".;3?;vtE!Y V5qᷧ L鿉*Fepy$! d Mi?uYG,#P[F'76C 1qDfΜVj`t׿'2!: ]}<1se]Vh}|> Ce@}n•ХTf2e2,f/IíEl@nE*܄#(f7_2TZ6W~eAi hp8j=jׅ=o&ח26ō̕$hGF˻}EA%s* "A5kqJK6pMngRH_aƍʸq;w.$r=p8|?%dpJFTRH [#pP5CޞHg@cǎG7A1ci,Ihnn/6n>fXj~Y -{v&lhXIjEŸ$a4D R322okٳ'ꫯctzc2Yt8\|ݻ˗ǜ$t)ānf QHMh7e4DH[#o*>ʧ{At2tPN:$MFFFFLp\ƌԩS;=A&M;޽{;,/PW$|]>fsā rwot:2pU:Ag@R 0'~ LOz@#-kю`bNYuGX$@B!-`0x B?ٓ]v裏k3pl/ogǹW~lEkvHpQ-`Uj g+USH @4 7|Ws\]4cI7тݛիWc64i~G4 Uhઢ$2;%$Ckp7+[aZ9Xt)`AUU ÜtIݻw@o1իWM]_nw$bosJ;T4HY/TUjF$9?bXy4+4M#11f3gŊ<<@mm-.+Ep8 999C~nѣGs)PYYaP(Dnn.ܹ3C/bT#YxrSnll>"s{$J׎"ΰaFd4pw#(#  رckHKKir _5$uֵ7z*7oҡIBeb "^ـ G%7zOgݺu477wyڀnӿDQG}}=?8,ZNO/fΞn)bKxXCWK\GQTI?" dG'*H~S/>&%%Hw4CPڽu;y{35}3_j ~}(υ$겢beI8q"7pC\jDA6b;N/R?RPP3ejj*,3sL~2l0~_G?wJ $[:[H+le _q'C`+MiZm;IXzu$"#@8&==c=o&&~ۍl8{Z=n n3E*9OM<^=X|9`0nƂp,òe(**vb ƌÕW^UW]Emm-'|29_5mʂN'W^y%q r'2k֬0.j֘3;/c׿fŊ[g!I; D7 Pt:hDS2.C:p897|ӥQ|{BjWgWG> h<&RѺ1ݵ[ud4 u{oWBIYOCvOR)  YKAG=DQ$7'`3 xZF,)z'yImCF 0~yzj<O܊:rI1̲tlWA<̙3ٹs'w@KBPw4 E Yny -Z}g1tyuE늢(8N}}%333.iT`T_|_h @4`my{,YSf^zƕDL)))砏kFii)#0c ,Y3<ã>1\mjj}q+a~L o U EV_K_+u-(B=(//GQfŋ'???~9={;v,ɼdeeu(ϫ`$ÖPRo`TUz=ÇO'===f:DQ7Ӹ VTȅS7C Һ>>p[}@ɝd)"V@}.[B分pqO69 wi2ê4I*/ *@) ͓?tX=سgP(.&J+"&b7л]v=6Cp8(у2-[%\´iXp!+Woh4FbC1 `(k$*2] k&nbzQ{Ĉxzdffvx|i,L2oN)BZZ۷쵥iF\6mtN ~ vL}k )..S__$IPQQ߳SZZJEE6mbٲe 6̝;~o$RSS#у;w W\Wg\u<|w[\6U#(j 2Ճ6B樲Of3s=\klfx:t( V("//޽{lٲRRڂ{ m"I{ᣏ>kP__ϸqp\̝;.<򛐐ХY@޽{cXzu\M4@U˨UѪ! '|rTiKnT^їfUlW rkxnkvgYINN㎋FAUUCz^ KiEQHNNo*es3}Gv>c938#./[ٶm_~eܘ`X[xڕ gq饗b6[x衇:t(k֬O>wy<6&ÇlٲGM1;a^:}[QL/hntMWFaҥ1A.MXe 0zW+M@ӴNU4ƃb£i׮Or8> ===Y#`UPdTzd~@)|PY@j7w5ZUj( >wzQ᳨ {Rrq^5s* }~J4MH$HJϙnfvv[4 3f0~9Cuuu?mYTBV%QnCP5p^N-T`vP(DJJ FbƌQu%It2~x>s۩&wE*^7߿%ϧHXZTMz$$$US0V5:U_/FՊhl6;Ę1cxױ477(J̞!zW^ɬYbbW "pb=8R؃R "12{/6*:~vN3.QVGNNoqNJ,|>;>Q|N쵝/3mtCCǏg۶mqit@QRRRy饗@kE!))KRTMDH)I+g9$Ce;U$Kiؔf'P :=gڴiQ.UR8-ksYjjj=z4>(].qu^ޫC@#n3f,(NJJ O>$ ={6%%%466/(F`l@{@?_|o(R5MCUUF'MncΜ9dUB rkW`ٸk>}z\N?$fϞyN;+烬,2e 7ndر8:xby湠?Kv+مO@T . 77^xә{jͮLKKuݽ> ϸq:ujTkffB6 ޽q].#GwQh в&t  G7ϝ=4u֭[*ݻ۩eNݻP^^a0|p***hh0(6 6t?E(gϞ l7ֱn>e{=;-eVM(--ӧGi?;v,C t3MgmX,}RŖdN_)zty $a#*e)A  iYYY4667Φ A Q|,Nii)Vl6Y Tq:($2a KNeUZvQG"TM +iO.!IfҥX֣!U$'dus "/~Eb݉lt%#$;vsꩧҧOygǥ4) QкmXE#yt=aŊL0E1ydnV.r&:OvʑATE?4*ٕÇgݺu\@Xzu-tvٳ6l;wp0)L441ЎY, 6UVE~&IHHUJ劘~UU1͔psws饗QFc^oϖz^œL{/YՔFAdvu g7wDdddp '0gΜ6:/W_}5NﴼtFbȲQH=F7{;H͜{tfdgg3|p>ø&mAlG櫯 @={r+wC4a#zLvxI8 L豓* pF`ARa./RL,a̚5+ԣ:xa$xcW iQ43d[6oJ#"=J'>ʧ1d=z4VK؊af`0tRFMUU^x!cǎ6p(FU0*A3KYH̕LR;FZnVX֭[b8N>lTIňV?^UUƍc,_|fSn(-_(R@>ofϟOmmmY03wܨcۂ>?al6[ܼtOĈ[/W_My6l 9a.\S!ȯH ;9!KI9{AU$-(~կ~żybtdܸqZG/%\ŋ#B4QH@GHJn] dff7iz.b]Z?+]7ܲIiWKm X;hdsCZA6&))t! ur} l hۑtB!⋙>}zn6hp$p83f ׯK#i6)((7`ĉ駟2b4Mr\K"A}dv ںUW]Euu5~-Q/]YcX"b_ss3_|1PO>~/M rdb vn" ǵȸq(//gɒ%q/ꑂT ӧOgҥ5{4jkk Btbd( {@Hc'ڧC}ɓ'e5&'x"7onG,E!33*FcTUWȹ{=@ǐ!C83xh] t|>2224q`_S} $D>+w6کhg+o*ii5 >,X͛J*QtzAL_4W\[Cό]%qz.a6F({,mLoczBe233GQ.ole+]Sz.֯_7|Iݾ0 $%%{nRRRc q=w}|ᇑt_OδiӘ={6~;sTUU0]74-8$'5QPMذam{,n5CweeeĚfvϲe:X fAvQy@~~~  : 6ۑ{466FcW@7't '@yy9UUUf:dYf֬YĴG 䐚իIMMoaBEV~Ejaq]Qq:Csss܊Z,cۙ8q"_z#T=q+|*QXXHCCsa֬YqL8qx3$ S f8s{̬(FVŨLkĉY`1wF#~,[,jQGt:9SìXb! $8d^uhAt:)¼y'o3gt4 455qM7vZ# "xꫯYHWIZ̾vgä*9ele.PĞDMX"&bDƼFEcʛƖר1F`"v""ٙ^N1sF@qn^Wxygys-?9f+ŭX%WK) %-{hY{N?t֭[rA +29 ȌvU#j(H~ApQp?ॗ^;E攂N"G]yv4PP¼<AK.ŋӟn|>_I|܇=Rr}SOW^z)mmmA 3Ϥ͛77ҎC'AY7wۋhرiY€K.˗g݁V:;;9P?^}B3'U{{t6L->l^}!XD"ڄaL&SzHdP ބ+h[x?V% 0єXc$y?0oegGHϹKgg'Wa I]fREԸ|Ս9?zݻwi3nᔂN̢;xz0>\ae Sl| l6SVV[os=icis_Œ {DQ$LpY9C9VzG!f8C|(Yz̘1ZZZZkCVHj" O/"@W~P\\Or w}7&MMӲ~Vd2'C1c-<&BQn,X×0[h38.\8hk]F~`xYVNkʶ h!ut饗 nj'bT\sD}'r$w(agju]\~w}nvޝ55qqFQ; ;uaG`CjzYgyfT,~lݺիWvoO?~M>I uxD<$^p8̱yG*  feٔD"&M)?|P?0n_^ +{O? .<@C>&MSae?3zhOO?qF"dYD@dka䓬f}fϞ`:_jfvٲe K.;$77H$B2^zh47w?Dq￟B6PZZE]gm~o( &3flٲ>ӕ03 ',_ϺuX| NzP( '@0d۶m/ifٜ8 VS#Ip83 t'MUJ5Ɠ{rhis{܂URG9"3^~T>￿_fIG0uS q[OPuН4 wlj'ԩSyG(,,kؙ|Gaqe*Nnn.---u]<l۶{@ u%AǗ4qQ:Ѐ׉/:L7nn?1{l6nH04lX,MR9.Dz=|o-xF^'3gS__U(8BPV}6(G}4e@ll۶<|DQDd J4v7V,.*Qlfҧf*++Y~=#k7ԩS l۶- À(԰aÆ> T 1+G/c:ZSSC"cSɞ`A\.&i Ƃ r 'ps&;b;`0H[[[ֿO#*ԇ=2^/wqP{AQu MQ1UW/@^O'gv+"KH$馛xDziVx`P _ϓO>I8%=n4Em,mEN1?P?h4ʆ $ 2an7+VƁA1LDA9tvvr5װ}v{ャivsTξ ,jbEP!ڢ)j NOҥKGa"'g8!ۢuy`48xj=\AN ;yfwհni̙zi8Bu<6 ˃>H(bܹdڴiرןQ$E-Ş0k"au`H$„ ssᡇb=nʪU\>ZvrP01uKnn.]]]@ ibZg)^6~3gŋ),,RU9ó>;S_gM4wޡ`@ܨ/k,VË+a2^=(YKcwq͚5իWO+z73L&---x,[-[+&2+o/6b/X&R`=n81=؅aƌi<@yy9KQ#Κ5wygl]]]s1XVV^׵ Z'x"hk~.@5c:WUn篻G:V׋f˪ĕ$)eF~׿ښ5)\[[onpH$(++;5xgя~DAA?8hnn& w?dA?d쟬3opd1Ub+9%-ܷ}\1⪄˔䊪ܳmfDZbVZcVvL @WD5fgL~4n;v=ܿ%Apm~"o[hYi )&^M" נH#]o_f݃bx88(,,?+V~o9sk׮L}pEnۃpw A4rrr+{p:}eY[oE֯i&MĬY?ר fk $:ka.rAI@j+`ߞ,twwv1LD"6ъ)**;q(H$fـi>H`eqF,XԩS[?~C`=`HH9)KhoYHv̜9ƫ'`hv=7־L&z<(HT! hzDA'4q:VddxJ1"QUF$At(2{l^xᅬZ] X,g(hƑH6(ݾ\|8Q[[FJtU2óAe{ymoIMq'!]''@P9:''o :&Yw:UJIFtsM~?\pvbӦM)@XdXK?Q $M)Zϒ&F͛+®]())9I'O~== k"NY77`T&aB0JIi+IMO'vo-kOsw!i- `ԻU|c))?QF\߅^ƍٱcGs$̚5/f ؐ MDU\yE|鴳xE~wZD@6owU$L{qgYlY0 P駟;odlQ{.-Т/4du]1C?a(R=LݎB:C^oF6mf>c駟NII uJh9aW)>Ø\\(.Qdű? ›ҶQD % Q ?> G7j#E)ba|̪`0Rc}m^k3݃zj`Ш G0bhaՒn]?XZ ahp:::+پ};|~?cTReڢbs ~<~[FW%l/"XD_bQkGM.@u=1'CD33dYFUa躎 ''?qgsyak#xr#jsKZX\JsF5cuGGwqinnSg22{֭~dž_2{=Hp/ƈ@Z1| &Y$ȼ^XE̫&M%fO\G|i"JHcO MbaʕL0x<;Q'̣>UƱ$IA8 ֭[Ν;)//JOiSO=yeeQUŗ%^]0hbǎs=~h߹OT;4)Eh;EmBL83<oSN]v1z>_W6掸*! :*"M]$yf?U.E{qH*&QcK Yt9b7KևM4Fϖ(E3Rv܉jͤ & :~xȚ A=Ak hVd*Y%+f@uL&ӧOgtuu; prI'qWSVV֫xF.V4QjU%2iMz~uC;Ʋ)0 @~xB˼vjQNQmyfryyoQGUnf|A+">]p0HDww7 zܠɪ࣏>C7I=0z|M?Gд_E!'O+vjq8cߝLLyUbϷGVd]c+H"M]e8e%(r , gUUt;/4Vr].Wk1sC|\.yI&Gt"JLrwDv]XG=RdwMc5^l>2>KŪ ;Qu&3'zq 7~255]4w\s"'@bO:p:g("F*vݝΎB4$I`0ȵ!_q<^en]Єc< Ή[i"5EQwlڴ+WRVVDq\[LhY5@3čS%@)?TvxD}{75r9S`I O Cqro&o"{8L2k¬biƴiظq#h4 h4ʄ E͛7[q ߂O<͛7gxt rdMx)ue$uJZ( IDقlF1obŊ~!\MTWh4 ''%\BQQQV'.`5U? 7xK9"+0b<=uZ"3h  _|s+_n> WZ#Ox#@|~ :9$.|v'Tj"а9XTWt-SG0imvG L 0-%xLa] zC':xpiE$5Ӏ%=QWv=`#/~w䔕q}N.h&BKY8L"A>`ĵb27x==*[>Y!Ew71\ګơL&y>(ƍcر,^x`H G4MVbI9SI +2B h=۫g~QбtQ ÍSN62XF=Q%~}oU,j11ÕjN?F:w]~w}K.A$^{yoFW_}5?Y1P(nZuv;!)>8}g3F1~frDv>}_,|G̃=A)I=XeQ [Sқ sZwצ ZcVJ8帱"96IWk1/)q ,:̛y2>ް}u#,׿SO=E[[EEEEP(WU.]J}}= ) 8 )2NY+12&fӝ4aa@L?.Y!ל@M+mfN 3VI!`ygI*{w( e [S24cN`a*qTNR[S} ɴ_Y%ƻ;`oYv6')zX 9zHI3'X6<AiӦt:y?~|4XSYYɒ%K)3Xd"оο m[8"*2VQ5feUWZ 9yeoYFe9+]>?Ϳ϶-3{zMGSÚ'u=(Z ώ`0AX֌k~6o$e+*p +0TDC7lbD氃~ŸwWK+2---_fϞ=Y_SU2JyD6d,Ey]ȢF\H*W)+铼'N)rpBsGD4Ț{%|j&gN6%kc)+Lf~T˒j{ƐK{10c+5Pu6M}A5)+r`e{^ǐ% +&kMGSaxi8N{{;Od2Iii)sWF:2"cr\&IL150E 8dSz$hd>`_I6z9Yl>2+nw;&rLa6??iX(,#2r-XUVe5[ӴLRFGGG֣ K-}ǐL:xp8<@VY Tnʆn7&"a,X)S 2ׯb_7u}3i+Ώ)D̢)D lH i*@GZo J $ux<αO'u֬޼ #-2g?`c6Nu1jro>Վ0bz&۹뮻صk:F?h: Mؾ}CI&f͚Aq(6:#>r&̔Xc ewT䦠V%f3'J4r:CDT )kͥ\j:ts`Ϳ XD-m) CTlT IKѬ9q#+,[Y7'ˎh#וʴرaEƗ^Ѵ啍ߎ2[>D)Ǿ\歞I|H&u}M 5渁S7MR zY0#Zͥ(Elʜ-(BAAY&-[OaC褘M'beُ&pQGqyqe'b1FM[[+b+s|YaQ;xy,- +v0$D"L4 Gcc#c NvFEli惬}2~=T@tn]!'Gf;ؼy3| _i:LE9S@EUBK_ODggo{E fQ#ܴX%7r~;$@ u]s=Gkku 櫳NlymxNᎩ{+xxW ] 3Ij̜'=;;;7oH%KPUU5h'å^e# :䃦H$ '3K3aܫUJ0A`\_2?MӰl̞=%Kt*\pX*q͊nȃŭWLw҄Hʐوt u-Xw7q 3nՊ-nB́{sWYdIbzS?ɅyJ|s}{* ~Fq݃rl^WeZ[[Oʆ Xzu %#l6cXj\q܂!Ҿ;iV7R_׾58:%%%ejDu ǔDLvL#| IDATϏD9t\1lo#2JƐfg.%t]'cٲ~#ꫯFU/_15\q1_*V_?0gȥ6ۥ(H4h,!"HݎjdZ~3F"GcFtzZ̞HN*Fe"bOWKZ0E-DA%+ZG܌f?ǔ0g>o 0_W;Jmq^h/\^ӊ1rڈp,i&MvWohQNso7j$'zXH: TP9{;sMFsƦnwF-%)_$ۏ=w:԰8e(dAc/[fE'trm.6T MPAp:G ٢3'GcO+:\Jgσ8]]]$I,Y2(Ɖ6N {Ro2<$.J6mĚ5k$xLqwLC5Dxvѧ@vɷYfl& !'' S;v<ԏdlqw#1U*\_k?(2D/Yiyfn. ,]Fihh7 ''g@ rH$twwqi]A]Q<6m5o=Q.dN:矏᷿-EEEY\Q(} NcidCD w6S :kSɴf `Ҕzا~ca4] 4qVq+.S; x`8\$J:y~}c/nu޽{qtĢ'GSh[veGȉ7asLdqM&Ϝ`/$oŒ|/KF~&Wz@LglO39.l$Jӑ[Y%=|uak=!+= Q qg'[ҟmJjs)o)ڝ4CǾ\Z6C "n4m|N_n>*%A=ojǫ|o#Db?(DXcLD"TtbZt>te#L-bS XWg|{TDETUUS]]=H]AbƌL6n~_@hFnn.---X-ф۔ Ϭ\c%5IZ6viY N{z>qaٴicƌ"LRPPܹs*$)c&o۳CliӦn:; V1,E+C(@1ܦ$>K$(++ǔ?m'l)1ceTՖG5n@H3n{yyEK!y>,NM@II x8Ә2e ?(((@4Ӌ*G]y]5s[ݱkyGwՐcJR`TUQF!I͌3f|%%%x<6m[j_*SLaΝD"Aa9i"` sB&A^6bfhv09'@<;5Wp?wWOmJ"] 3ބ9#I j~aNv>,MMM䠤?d-JXՖZc:a+aU7[&=ɜCtx~gp[hY{}duHHQUbbN9e{IM|oF5T*ei4$MMM +W$gE;t.0',]+{~NY=V{VI(r$#Fq\nKcV:^t$I&g$c!tS~S<~.*$$4'uU%"uy +hZ2Nik㡤5kv8fcΝRZZ$ItttpwofP%Jag-7Vq۹n<adA?}L&)))4YeQ444dF ";wJmV!H( LrwsNq+p2A ICy>EF9yR ]ʓ<}3 @Sɳ$HI<*e(łjIѵ@D *9n7DbP "{,$bŊAϵ5'c&DUE{KS?ɟb^SN-' $I~?.k" r2n8~_S^^ `d~{㡇8fOö<̢FcǮ啽e9:Ҕ&"=Y." vI% xLI6NeJ4|DӃ|s3}ѐ<*.dƈ+WMnƈ?%J#z> ;b箣6DRBA]0sۆ8C\; Th6r(E~Ldݿ ufl/:'%Q;]ʭͬkU+n?_+i@ױ*.9]&w; qDcqjjj8:F|8fa8\~̙3>z7SYY9W\AAAAjYCnXZYcZ1+[sx\ShOuch)>P38>sRVV:`Keڝ\ȢErpiH1u7=TȽl/O5THg#K|Md*Smˣh`و$7"nO IM;i7ێFI?E Ϝ"^C4bH֎F2qD}Ql6`M2N3J?|?1蹶Db8 zꩃj錌`HQoUN.ld|6%:1n8O… 2H$,XA/A `Z!r-f=+O^*@LHliDH\=y]7}zodeW^fB~$Iq嗳a6n܈eʒSVwT眙3n_X+X+X>y ocXcGKG O HDv).,gg)HQ.8Ǐms  yGY్K*IM@=ɜYNGʉ6Jq^\NIW.œ]U5dQC#Jx^IJ[IqVAaQXВ{zvI;A &dFe$8- [cN^ӟ'Xg$T Eɺ@&fD'l ̩iON?uʙAIb4vK'!(<ɎV;[֙\J2m}ӢRȔwqnEOr<d=L&\|ż꫈C̰ /v>o<}WXۏswal9XWΣ4!IRuCI& Xʌ_ @ +o:h"rH)Z\1lelCRա!N(x\ IE*h4%m (_6a' fz=afD3꾢98NjkkjcaFc=ƈ# ba˖-466bZw;MӰx<}>(aPU UU$O>x`ato_o&aq *Lx1b(,,NIYÕ植lbcͼas8 f $k 2'B&!8"U,\Uc!ż[8חyԯS ׅבP.}(X,Z[[=z46lv)i]Жdi{ϛ Wi6hnŎ{W{Ij"}1.쵍G6 }HYT8d3`ASQBZ(seڑrNQ#4Б(,k|m?\_wi[0ӯەh벫VX,D"RaeuUQ5&LVrQڇ ;IMĖ5AH&_gǎ#Y⦁y?1bjVNHAMD%Eͅ9D  ABG Nqړ">ܚJ^ pBz)LOENw_?3(B0De}]|>|s\b?3+ٱcX,Cu]G$n&yxƀ-0b$Ib͚5t<9Ŧik26-qT5o)aE3l8;4McرX,k!2,gޛ袋E7xҚH-} 2 L(B^*'򻣪Kp U1 ) (R?&D-M Quv9 /z E}_b1_7w WT*jv$aь=[o|d2At$#p 5Mg0rŒӏ9\._T>_HGqTȃ݈,yl dI]du]뮻n >EQlktttpUWq饗Dv;Q9r$ƍclSOixܴ+lll$S =t7tӦM#|c﷡6Q1iW_M5M7'J{ҫaҤIr-C{Al6x[m AqQ__͛lٿ벩3}B4bU8Q NXמ;>;<@Vw( F|Љ, ~#cCMp7Hoq@mƧrIx?3Am,ʈk v9CKjy;u-ğNǍ?wz bQӬ/3KxeN-,~ecZ, bpcH$X,x^3y|K:dě- 6 %\߿GF`aK>nK=_߄$Ia4@ sb>E:1cK^/DX[3BK9nKś/xz%1o3»~ ͚57x〞D"^if*T{l=w݋b޼y̙3kn gYF~,] 4tt2ժ.N}7 >n*d֦cL&vu}iyfŴlc$$DyE3mqد拝1G<^vhʁc?W i|S v{Eq@ YxTb1;8.=JF>ӧx~GL87|jf&"N"TUk&tN[O Qt3 >!?Oo[R%K)2ip8|H>8$aٺU[A$B^z)Z*>HMzXܻ*bmt}wnƽދ(8v]JllA@4S`5M@E!JhQӧOgڵx<3̟y(Cvi?na?ĄzF$I? Ivy:p "( ?0(Yq6d`M(uW̅M5m/O***zbpG'nӋpD@ .}-Ž Q_g|pk)AMAD X G{i׿{D#GrFͼtMD(//od֭b1丶Tx<O&ۗ &0}ʢMRyh`"kƎyk~6EKM@Ne[1Ye.a~BEQ4ls 9K*IU?}i_bL5@$i3nlsogTUEe#~z͛G*"1zh|I0N*>CN'V:-Zd;N{22Æ ?Cܹm-g>XM{_s< ‹/hfۺ I6-)Q] IDATVm)[_5b{^t එ!YSbc(i|kaCeݺufmo(b[o< O糤:UVf^ǚFp0 ᠼ̜4$;w.^N>c7l).P挑Dި͗ys~V"'ⱦIE#(1WBt6K {Hx-AE@UTu/ؙRDQdk󁡙ڊ;r*p8/YͤB= 2ueE[ lLҷ3wJt=@k]3@0z4[i k6mZ*E!//<)2`STLMZS2n;>/ "SRpQqv}8`]oTVV{9s昊cƌaɄaV+tIXV3A믛sg(|8 rV_4]X :QU"OЏ TH ЦڰjV$I"//o7lp@׽;YB5\FacN͛7+|+7$I{EUUn7Æ c޼y|V)j#ΆN-y% 4`7 :ydZ]oገH!-ffŦ8RkEO]_W_%p 'puHR 6 AX,K 2>/"[ XR{N ˎX)3&bkIi7jժnYWg E!J(xꭈtZ:#}a*w|niigX,u])СC BwaժU8NTUc~EN8g7 %\ԅE~?gSղ"΃GёRֽmF2wz$I8N:;;~ϨX\(D Ip)~z<; M=rd>sgc+47",tttp}L&>FnFZZZO0`@փ+\Tt]w+F2%\q3[l-A܆guV+(̞'""׿.CF$Y/w)r-, mmm\uU|m\C(gRf;a Z{M]@2>RVuCŨu͖yG4DVL,="AvqSPP۹;$X,F9sFb1~wPTTj,WvzFO'Ɋ8?5.R .>ikCX ,ItM̛7n $h4 d`1G8wdz_r] ,^>hS"W^?%Ns<*⩧گvJ*7O~?vz$H`؅T^r%tttpI'sϑNٱcoY8|b(ojd{.'X\@E{Ϛ yY=7Ȃ| )x;GaL:n9v@9^ dbe˖h"30P(ѣ1c(իF D"LI5662yd:::x뭷U[Q 6rQY=$_<Ȗ.{0v#GdԩǸ F??xhmmJu1h V\UߧNT Zq%c4M$盛5k֘^A:u*th4{&L@*FB3gD4v:؍s4eC+i)Z?gI[U>(ЖZ/IHX,F0T*EII %%%,Y[z0Ӻ@-Ig%mA$iX,qjժ]we]imme̘1r-\M61sL4yyyf`0)M1aG1@.=bA2l,v;=O9C$/tRNF췯A[[]v{AL&׎bQ_on^p[^ڇ|[KzXBg}6P%Kd雈bvi1{7+jW% 3:K=# aJ$|v`„ L4;c9'/HUn$IMdҒ8)U$miӐδjy"[2cvF_$I0ydEA$LB>}H$p fΜ9|>@}/poW92GndrByl"m!lhM6hI5%Ms|#FqrךHSLsEq饗q³>2 X,F^p )T]Q  7RuS ^_4:;;q8YS70G5M˺𨪪HtU’J[|37&ݫwE.Y$,Xwy".R]vSLn3w\z-^/;v0pݎ@U3 KRX]?؅_} YӇT93蠢n A LJL˖_Hk" Uʝ8hI,P$ìYx78q"ps7r=J{{;˕#툳1%'˲z=~)_5ZӇuw`l: vIvQKdƸn7UUI$\p 4p8̨Q˱ZTVVO`ڶ( bZGHηxQɏ]snHND`5쒚 r7(xP(ĸq8ikkW^(#<–-[x<eeo;~sXz;$mܰ8.j2ՁkV%|;iU?x駳cfhMG8̘1d2… 9ꨣx衇Xr%gn_`ZF_ ȢF?WyMŜ;Tօ5[.Jka*" .O>!NӿL[[gEUU8=DijjB$|>6iAWqwUmvw+~n&ߗ Q? ;%xB 3>C  //j-[(l2'OIxYf x˗cXhnn3Π_~\~N\$A+ʒ4Cx{)UR2tҬ&DQ$sqؘ{AcorwdEWH 80. [i&t]gͼ۸\.NjWDQ֯_Ϝ9sp盥>x≌=n=6 .Tļ6Fuj42gncEÄB!dY&J1vXz:~^@F5ict^+)iT,zrEqgr5P^^㡐JGꫯ6'l0Vu? y p8;q:$IEᡇ"E1k:+U2x=ު/*1җ1'X,a`H$o~СCF(\.***x饗p\0_@^/(^-e[Ŵ|oK?9 J8>j,bi{gn( Rq;dn&:;; 7w}??χnߥ`_dbAAC /l(_ +/p/dYfƍ3<3,]h<`O',ͺl{U!'eO?M(bԨQwyq͆n N#IhIp8ꇮh:'qY<]%B a}*N;2T=n7p88%w0yY9jj;`qx VXa ' dY6XAgڡqƸj*}UCXAt?@GswЖ=@yN+G1DF5^}>=)ug2flBYY3gD$Z[[{Mp8lVvdYH> 6mh}^^\Ό-}2x=dzɯh0p-ɜ tGH+r|7|e477s뭷i$qE9íʆ xGH&$ ,>+t2ۢi~T57?D[$EaI4[[[ IR||1 CPʙM$5Ey!1@.pb,ֺGQQMMM<Ȳ̩餳K.1cư~zFaŊm T].j rGhG1 qy{"-}E<[rF&nAD"bwW Gal+Vzg}jaz,d4/t<~0Ca~7x= UVc[I=Uz]`H3;XUU% "$f-ZrىG57 ?<[nãEQ$CEMj"/㫶 4pMcXكJa)Mܫ]Z݉먪j{ Ì12|>3f`Μ9̛7QYr%5N048cDD&oƓn㷡R6ْزb1 (TUUeED\$ZZZ2e -bٲeNf, ?j d,^ܲe >( {!xb***裏edYC^kU>6EkG1Wo殣ױ%vScTs3|Gʕ+!hé&Lv[@*u-9oR.㾢3{lj&Mڵk`TUUGQ)M) 6=<ڂ|X^?0C9K@EQp88?6-ut:mF߾}4KqF~?̛7ÁjsDSS@Pt䳦GWkrbyM {? }A!躾K,444i&\.0a{/|8>]oMk"N( :E}.dEţr*|XĖ>!m%I2 ͳCPӧ_|Cڟd@r CP$A4VXW\iK.NfOSWWGAAn`lal&m'v{{wv36.d9zƸJ8o_9r$7x#Fe֭[?O04EzM԰)Қ$TK{1*NU+[ⷦC/pp 9z Ʀ_755?(ttt0qD=\b '? .?r]wW_QQQ*/HU[m(O'IOmMR9]79r44M3AV_^xRL$IڵkynS7ĈDI"nO?مl2kpQ)XDǿ $ R^7kƐlbX֬X<{R~ffrz}w}R)6mӦM#J!IdH$B*%`\, \s L(%sMZzD ł wZN,3O@Lrojr;C&Nŋimm~ѣG0E IDATFbD"E9qc5 qW'-p_!J5m1ltNr@A0ccne"~mzn^}U4Mɛoəg(XV".bu"О!a'1gG1>9mc5RHTn dTMCs6 Mc.DQLɓYx1---1c }YC"@UU@QEE!HY(tYh-l.Qt&; rq1h f͚E07Aj @,֣bMyH$;w._~% nnv&L@kk_WWn#SoKS-ImF]t$8G#3wn6 g,[l6[V! :QCPt9+1\PPڵk3g555466rYg1i$ y*:6I#ON5yMZ^GSN[J=%czRܡN[9!8>qd:vK^^---̝;߬YAx79s+شiX;v1OٓTuzy{/8@sF[ʖIA$J\w 7 " s@ee%seƍq/_ΕW^o[ a4;8ؒTm,fb=%Ӛ5HxL>lG{UU3E9jh"R=F(G RUIp|>A`׳|rlzaƍB!~.}UpH.†;q4'm,jG4vDIM缒7KM[BQ#ǜ\`Oj)nr0aa=<>3$$UPsb;N4s-nt:Mss3| 3f̠_~?r Xbn+@GʜŬsu͜; Ub;J+'ME8%!"E2W^y/~ N~~> , LHBf(PEe\PƈH+@@NsR#! #N0DE;;;FTWWkqg0vXFA߾}),,dB!Ngk*+V>k.d~KWO;;"PUUg}67n՚D8Sp8|ᇇDz; Qc1*rxłg\r%lذA1b/2ӧO' qd! <]U̚|NeRf:VҚHqEQ$serJq8Yu GC̚5ɓ'NI$\tE⋦1΍½>{<qlM$A76QN[.t!q:,cZ>`ĉ0j(^x~i BbLՐ v.B\x|@Z6~g+'hMU 0 9G ͆0}Q:ϟO `x㍄B!4X %iZ4&Qqt:#!X^z?&"v۷#2^whK*FR!ZH"֮8SX`Tꀫd2I',̟?uHD# tGGU9UU8lذ/Q:u*r 9E]Wt)ZV.)gMǚ^M7b\@8fҥ<Ӕ3*j"nVONa#ǡ ijjbʕ,]Y:u*'|26 UUYf .L- i6\,l*=I-T ~9}Tmaȑ@14|>t˗~z,YB""2k׮%JPU ʩ@K>v4t-]Qhɧ9i{CC&mXs@#]QUQz8N*++/oo߾XVZZZ݌ @<;u1;7$5–|:2A9f6ѿ/={6d%7n?6miz$5RG[m`ZrK*$t:;M61{l{=&L駟N>}8S?gnJ||Z6>j,6s|6Ex!S"`РA1 ҂,Yz$Q'_@sWmyx-v9rT_I(bӦM{̞=_tI5Tu}nlFGʦ׶ļ6~YV]XR]ڻ@PO!I^̛u}r@9~PnNH$B]]3g裏 /dСX, <MS-4$켶/y$RG-5aPMc8lj(!Xr ?H .]̙3 B\wuՋqQPPg}i%%:u0sk_x:w~9tM3ǑL/"Fg-//KZ>~oի0TӕӑpVq &RNRO__K.EUUz)*++ǥ^TF:~_X!שяFB9犢 /9YgwAMM k׮EUUL{8ߩc}}_)SIN s6:nb~ﵑJ9 vXm `ƍꫜ}ٜr)vmٳg$!EQp#=\Ŗ=ϩ!niGW-6pjVA-?fd/ !F?p~I&QSSCii)wu]oڃV Tzrm nz_y_7}=UnI2 555tI[G[DrY+0m+ gj4SM(7x4)..G!сm K]Sɫ.I65aJ8S_3Wn27x?ZW1A|pB!b?<| G?x^n7hq^Jb#xU*ᴋ] ?@V 9\P=UR+&9b4h崶b67x#_~9۷o'NFq\#ۈGY[%THX(FAQʪF$? ضm/2XŢEۨvc,ovАEe~ɛi0 G9E!HP]]+>Vy.*VOb 4 `0HCC{졮;{H_?kFy{GYLe9;QP|r(DQ͛Gee%o>o?ڄ3.U<+'%b, UU)))-[ʖ-[ x9s&\!X.61X?&*#ǂi+/m3:pkR$'%L&')TR9۝p -]@EQPUIII ,_ôiu .Qb9X@lɓ'3{lV\)S0 k#xu CQ8FǹB!vkFUUs9|[b֭eY t:?t̏(q,&יqzd- O6WO4:?n^/+V`޽x<."~Nʶmr$1&~Rni.* rj#aMU mi\\-%=ǟѵt/ٿ?Gٓϵ++,Na&q5믏тpiy/d oWXeٽ{7W_&:Q^;g%D3:K}M=^~nqRŃ9r%X5ЯcӦM=ÝwI  NE,# Ph&sZ ?˔)S7IYY.M6Jp* &js(+tЙv?P-SZsri%=.4 OGGmmmK{tMTVV7MvodRKg6Ȳq2ƪH9ۙ6=i7Ktp0ep@ʀ8 =C|>.x/⦯^Ű6-6ĠamofTO $ t]'UU0-Vx;sb1ܙA ij\QL[kXjAU(ƶm~sD(s SOxTM"sQy/g tk-^p UU47gٲeTWUM'9kO~r9}V-\5E>Lx^(*dI:/Q4 Mp:x<^}UCMM p;33< 6xH$d2Y\Nb7DY抪V>!)6C9jvX!WiUUYl===B!n̟ϖM4D] ,(5E\@}qaIה6qh2 =E!s׳e0㈯IS` Y)g@"#7^yH ;mrBYϩ_.Ⱥ}Ch&s/ׯmƲu{o9[™{MȶmJKKIӼ҂?W^y%dD"A[[a8)ZnӜmg0tt6z},XF1 ㈯EUFv~ެ@A@l4M\.XƦ}oXMo81ӹavC8r(26Z*S<)N/#4MEd޽_˗s7h"JJJbϞ=M0'hI;<©<<{/!g"#Gpn8iSʪncK/!>3ݻ ]]]߿+V0w\AyVoISA;f֛̙e‹ˁsaYi W/!hL0 ~?477_oyse/g줻]ʉFzczVZE0SnUUbr9VX={Xd 'x"_~ש5L$\]ݍ[X)ǡYh,u&qdr' ¼ Er4L&C]] W]uq_v {ؼ#sqynP:IDAT$O5rPPwD2NTGB;\/:ۍ(6[op-w^sonO~Zٽ{7>_CIvR}'h(,/am[y絗Fe=r-&7SumU-i+olV+|Ľ4}ضr ԅSX] syt:/ŋؾiMw_]=fQ-FehBXP?x}  10:n~݄ܳ};^}L;4_"4m"?`(gpEee,/wNƂ, @|!ٶr d'_v'5:4lO!:qGV UFDL@3۶Q ZZZx7ijjyq܌#z9#fqeߨm.ZLS܏Spm f9ጋ{(q^!&Ryy8lldwGh%h b#sV2œ-'PJcJc`!)EQ(++#?`_͉2nn賬j1iNlڑVNRyc2el*²m˲$YZ]5ũ9V=vѦe+8UDXB#EEE(BCCvbÆ }p TTT(*.R4&0mTD.s<=,%O4MTUNعc/2-ZoLm'?_7&9$PF3!h=ei3ɓbUfk!!đ1M] loq>~J0Wm$WxaݔqvIj?@K%ix>|=tŨYtW7/ ¥ۇز\Ţ0WH DPK>'vZ~_Q\\_ϴZr\J7Vx 'ӞuOj_B˅a JXf ]wIsŐ5m̳7xZք]E#saL)S0=)W%иn4UJFR{~ /{sX}}]V~=wX7iPm++5bB Gzo~,ҕW݋8z~v 814CϲTJ (0zihhcΜ9\.f:ou'wϞ}rT+N1FJ*ŸC9 "2K1ZlN|>3E}|OBEQ @Pڥ҅|r3[X$q*WzUT1!NiY;7f{oW9«U^ڳE8L-i+9NP)^n:x ,]z /\@^ Rg@SlOg9[²hIB?wvvĆ^dCDà^(tw?c5 4ܚ'Z QNo8t42V79Ϳ[Qy#@qi3,k|)ԏ҂]H &,4q{4hmfeŊC\tF7-M;P_0W9'mh/! hoMII l۶:R=x>ai^8ڹxJp=PmܚѬ&w0× z̮&֯[=Ek jVi͖ς_c|h':sC: <5B|l{]8D]Y^NbbxF+$3yeFWsm W974c 'rf vK &1E29؟}$8~_?Wurgn 8n^5C 50'K07 [0Ʃ) 3S(Ҕ]H ğ`Y$ikv r9!Q}I]圖"H-4j}"Hq<, EQ|۴ݻwӲ}=bҟR>,>q'S~h3<Qd]q?q"BeY,*fo>:mcƭX/dp&{hY#jRa4cGF`ǺKCv 4/5T$fs%1+#Rke…M !i9P ?o)e?$,Q+ql/X1E,8d^#wױş17Og?k~KI^b(iY$qTR;m*2o˼2b^ ?C*ӕ< Lq ej |ޢb,W.G oS ۋKQ@l@Uq߾}e_Hm( ~EQC=y ,>"9+c}BϐmۨǥCalếwSv~VB|!ـK3*w4Rj>C ` h¤b'yi4;W&_+T/A!B!J!B!b@!B!$B!B!& B!B @!B!b@!B!$B!B!& B!B @!B!b@!B!$B!B!& B!B @!B!b@!B!$B!B!& B!B @!B!b@!B!$B!B!& B!B @!B!b@!B!$B!B!& B!B @!B!b@!B!$B!B!& B!B @!B!b@!B!?JJ9IENDB`DarkRadiant-2.14.0/doc/img/PatchVertexEditing.png000066400000000000000000000236771413722237400215760ustar00rootroot00000000000000PNG  IHDR/- pHYs  tIME>8L IDATx[vƖ፳2NI]ңՓH"t%ʸ @(pdS(6 Q?S`@V`@V`@V`@V`@V`@V`@V`@V`@V`@V`@V`@V`@V`@V`@V`@V`@V_Be8'{@ V`@V iMZ+k>8οIqӯ Z->Y*Ԫ٩4+ARU͊@p+2^nV!XXjzpۏ8 V+dj+ < z|U[4+D0#_͊nڢY1||U[4+F@K#\ @¹Ī*c!XьjU֬d+gthVFhD[˰f =SUDjTM[.; I BGC~3yv,˲,D]lu̜$[˻ݬ_WZVuyX rxҝZHLsZV=: d{;\_}bi`y:5,݀!XCT/{ vo.LokfHnQlK)f֪\ލXTmǕSۓmz9+@v_@TVF vtTuHO:UF>Եٷ.)#uDm~TyzҧUWy_`m57Ut/[\, 'JTҬ)8I[[}iO궙G 5.:*ۥj"I}G @3}j5 Oyk*M-vl6޶Y+4k_b44(,N'w-<@jUTfPێCV)5yԨf)JU_6vyk=yD jZTǍQ+:G+tNtwwWXZx?NU5kcUͪMp8guVZ}{{|@]TZҪ/jYUr=QѬsıVTHLITǫa٪}`L#ܧjaY]auUYZjȚ$jVI%n5LX:J7KVN ZbyuHJǭ) Y˰ "r>NiSN`@V______կ8Z-Ӭ:ئIjU V@f-,w(RG@Ь!#XUiyieZ`U:Uj:YšY_YCF֮V]cN{82ݬIw 4kVqz @ѵZ Ij9FNPm YE$&g345L:iy}\{d@#;|^~0f3U6p;HlUnӝVj^j/{Ejmü:UyMYAboLqO:_ow/n\P5AǫmXN-d+C&y25j-4o_^Syow )(|eoTP2@,K$*<Ϸ*VאKTYՇͪ_ͪwe2˦~|Z(jRu٦;6h7ui[nbnV`L|>V|MHO|~e*nuB^Z/Hڼr!r?Y ˬ!Q@!Xg UI|q nכzcl]WL2]VGV|vUE砚LnT-Q'ıVVpe0qz}V_U3բ\ݎ._@W毫f;JK"X%YBؗʵjyZ/b!*""v\jVuNz+MqwԩAchV@1ːUDʵyˢjw*"6InVLE4TpQK2@9^U~* /ńsVZqT@Q!+VNժ2U+FT]@Z86!Rhֺau+ 4+VnNVVgG.cZIooڡYYFXf"ƫ͊ucYWժUNEjֺYBZphV+Uu V+ Ѹնpw66~f X2e}ƫSA[vl6?i#\U1CkLkXbh YR5 XXc5Yːϑe FCZ8hVAeʵZi񪶆Zu7n1@DYe+`M` 1ѬX6UUkPXZ'\eX YMO28Vp$?HfuV~Hx'ֱl?`;Z:5W1>Xe?}}sy-V|9j-7!Y$1eӣV1Ӹ Oy{¿n:Y.45+"X'FbZ4+ļV8ͼ ]Z-?xm [f7y1@$ٜͪߥYCkGbI,k?,k=oڍJՕV}=fulh6 X5ƫ}uUjxef@OY}oV9oG9y\D(obV dU!+ξj|ꪅAlV}+G6dfUF;~cu4Uf|U*? Z :^um*5UZ~$ ͊<ۗW]?^՗X9>J0_];>ېդY/| :ƫKꪪUeg:%V7hmU`oV/vبU!+\]5Z52@ V)_TdvuX<"XGƙR'H Xo(eZnVQͪe:ƫ)*cj|@e/(XZ j>V6 ͪ8}}f`YY9VV?{m `>^m{*?)H k?:eyKBZ_ UUnj|3X Ը}1Y~ (+ Y{6.JqUX}ckG\IS*fr7n1^bЬ^]}/]&s˵V/lz^-ȯb@PU, ͊ zo]s_VO_W_,ۗWr~WZ+>^5|*֑y@SۺYKEx Ɛ#SV_o }mik,4!kfe`ZѬZеwxU/:@'nUam1ۗWu0Q]>QX #P]USe KV.feeVߦ~Kz#&})0swԿ_>oex`fFQy~o_^>VvvgF(`ȊIZZe:[L>G\bU>~:LX=$dvfOxׂ%sYn_"zZwtfM0[5P`/QKVa۷`o XA˜*pKgh_.nOfa7AL?)x?K+ee6֪dNm%R*q֪tMZ2W־8`Z5&[*X՝ U>nwp.ˬ` $/ouϹKv4ʼ\lQe1qUD<w&<xѸ:xk;ԹęUd2;ƫfE]e/wa8|_ 9[qf@ZQ@͊nVW-ږGxǾ}>;O2+Z@vA/U_^LV@!dҬNLV`CVtྺjy|W׃X;< EjֺlulV: X[c Ѭpvrjk$K&N`_!f:_ЬmP .]P*{$I|MxV뚵bˬUPCMZ=U0*=U Y]?uBCV4j׃UQWGhf"`uxhfEjerT6[|Bo;| YZVYNUemWW+m2s `j݋䊫 uGy1@_Yf-#XQd|Ѭ0YVWxv^ZEm_RY_syZܬ+`T.#Usjx5fZ-_[{v[ X3U?PڮVoK`/u huDˬ B+SepƫC/.Yfmu6+ `$4+\~@չnfW){UC,Y ZWZ03k<n5ĐUBk5jCurKMZebU`4"YVW :/xQK7g]'o]Y Xv"*c_],8WjB u=S 1m.*01K⾺jתgcT:?lpU܎pLY VӣYI.kZ $y1O$RGc~uv+1򑪅Q+ekVƫ@ h(ZtXphU"5( Y>lUkE.Z-]WeǻGVjt˭tk5v+B~ʕ,NXU[V[%V2LVc>1=D9kXW` e `%j瘒*,j+] `0, 22e:٫cU,P0=juY kVjshO8DT. 8Xߢې|,X~k1s5+Ѭ3rҪ8/IUPI#r ʵWuꚵq1lͺ`e ϱr}φ;8}HEƮrnXmOZY Vj P7^UjGYU"RMk!kc,,+ ,{U/xTx4UG2zȺe+9YXV]jxNŠ\ƮqzlV'9/%X/.kN%R1&ص})7mR׬_f]ER1d eBh U1ʱ+Z[f]5kBX_l[D U&]m煛5J@7ULX,s/xUF@DQl·Q>.j\ (? VƫЬryU6"U1GXlmP*"Qb2f]rRK2].2?sVǝW5jM6\R몰:rJj]:.X{6~.xuVb@|ժ RKe,9k.cuxX6uL=ҪS!Ut*ŀ,.0XU9VYu:UHUIeYY&p+Geui;:úN,ꪽV.T)e2r)_2'VŀXxN_,.< h=l_f5aeZLX׌9@:/7IUBekFe) >X-VsLVuiM*rd7y]jp8~Oua?^J2]X+I'RIDAT*Њ$8mdsv_ 0^]9VbGݖkx< `֊ŀA#)-7 0aVp/}jT!U,4Iuv4uvwZœXQZ9^e CVu,fm+9&WW~ӿnqJP'x%Zh,tvPzT^(ߝUY~;y Kɬ\5n@Ouzka@DXTPԿ?Ojvf9ae Z5*8$IXwU笁\5`V`1E-X5]wa#UY0U!:U+T, (ҪY V2w[T5k`o RY5R/=m5zP`)X/.Z"{5j=WVfvu6PĀ2eZ`IԿdnVj@4Ij-zju`DZ$:`hւs~>j*lYl7Lq2 N ` `_x V5ITH2,sU=_tE/U Rz}v_Ja1VYɼK}C8}}S.Wxf;J-"\_@D+ipwXU+ZY2k2NUyxx Uhj=tzk d5 + `P6 @[11g5o,#YC 0VIUuXI7yWq. q%*:`%a1<^}/yA8 4MYE$A[ VfNjUரpA Vjܬ[Zec@7YUueְ>3XЇy%Ve$pMeiˬ2ZZ}GR@Wb۽qɬ5`VLhaZU\_$Mӓy~A_5D@bYU]^xZf "X iV߿)g :JUE/Z%U@ɫ ~7'*zȪjojԨUr=g8dNW*NyJzK_ۭȷ\|U&i>gs7鏵Z V:fHʣq;ꔧ`5vQӣgj@hX,!#=H^F :JTwݿNrV;jTǕ7R7@a@И h+F h+F h+F h+F h+F h+F h+F h+F h+F h+F h+F h+F h+F h+F h+F h+F h+T"IENDB`DarkRadiant-2.14.0/doc/img/Pointfile.png000066400000000000000000013311201413722237400177500ustar00rootroot00000000000000PNG  IHDR? bKGD pHYs  tIME { IDATx}IdQ'3ﭪjuԒ0=x{L`~%?-;0 L<ԢyNqrUY=TgUD{GA}&"$"3_!ְ &Fַu>@-@D>u'xSCfq_V!S5LJ*@oh mFsvmweJm֯2sYicX:ED܏L ^`/T{3&_'=JgbM=[isx5˜so& %f}1̌RVY3:!m]og>$3i{ynͼ 4o9t>vy΅0^Mnxq;?E=0mk& 㩝8ؼʦq ^6; >2e~P˄7c\} |[8׸{.w}'iO˿Çw?sܽ{4u}13rX,mG֫Ν;x!0tK,>(S#"?p{̌ R^GD >>\]]!tZQXVbǝ/4 {dj|B"Ai@OԾq`A/_ܹ ЦgfTĶ Bֶ~{ff$SVĶےY֠yASB¯,U\%&C"5zFy˞4caUl'$3F}Bbө;= L馮NԗT_;zО6v~ HPCK+qGjN+*9X4@F_ cj@m݆`6vAKt˃mS}\vMm0;IkՂXeD(1ՊZ8ӹĝ!NQ}~pѶ9+qy"dgWI4ֵWjk7]r3j'_MlB5L f ŤdPUjB*cX/wIU :csj*d]iFSƷ(YPI\&{}0W$Jxޏj_1ҿۿa\%>c%/g{le%,.1{ڈNF>ZAZFnr06ȝ'rR B67lz7f8p4&@ImG,sNM$ Ǭ绰lɮltS"30^auL](&Dp,$XF: P쇺!PWid:9AeHn[>? ЛMΪSԞ̟\ ^+rls/6DR; Ehheד&ӹÜ>QY.3x^`W}{19"'w7SYOHy(9(iFp"&1.m臋ǣ8̽ч>-CѱZ3#QL#|pFtJK)VW~3frO~3㭷[o.r.r.r.߼2Pn=h 97G/@t ؘ²w ^` 3-moK;LGA06g\J3۠nA_l/AjE_nrmKro[kZ1Çܽ_{")'y\K QL,a*(sˁUJ>ZT_-)lve@?F G31dlj279]<pD}HxogԀ`g4مqMfEbld2Ȅ=jA'SGp1߱w9lG6FG Uzk1kN< 6>N)!l,ʩ1󹗂&ɡ?Q^:ȳ&_]MlNnNW{%L-ӄʌ]=|xHyXk4ѕW0 ?c|Gx)_?bG| o~_>oq7n-S[ho^eד5S.wchMc^mWEmk:~c]eSNQ66q[zP{Ƕ5{w_G?~_?Ç:j g,Wkr3{D®0le3;i']VP{u=THZ1Mq{fw}v)Z%c;ucr<-VJdwL{bq_zNQh;^O1Ozy;1Q}Q'7S 8# w ;^ffk#lm-p5 :r.;$g:=-j־A$GORJ>NyZ&4mG:4\nޣ:ٔEli8}o4+Ĭk/yJ#mĻ&ˬMo-`<e;2&5Qawm,WFʪ_aQ/}pZX]G&aoCW̓7^{ /~ |+VGmvcZqqqO?{ rz}8 g C#"R(>3K}ScfigXxެǴwz##wssǏ`wzܿ~^ӞV{]Vxg!WG'RJ9U)fĩhONm׷Oc^Iy O*"<.1f*lcH 껶S&]*`ӞUp5u{UpKț tm0tXEtcpY@rV΀tC*ǽcFuڢXv#A \}X>*Gڛ Ǥ7>l 9isp@p;zVJy:\h`64"~D"ڱf1pg1w˼GH\jD‡wMc!0f7Q*s0:ur6,rJ9NܤsPRͻszdqEM, |ۜRg^_hTZ_ql(zO[OF[JQ]ʈE5 N۽ ׊Gbנҝ4x{X,x8q=(W }, \]]ǝ)^UJ3ݻx+R ꥔C<}$R^=y쎩7M|M\]]VT5[89iR.쏭7#^8}=eipqqcDP/˃zL= uw?~ʳSS)uqWWWx^xyɳg'G''nc D^O=O(-}+"_ݾS+/#iLHmdC2D`fx#Xt,\~ Hl[w5W44sSQIr286@?:Q3 Cwsh08 p6[ujkȌ2>tCv#XrϑzP.UEڱ%_>Q| !2eH"E۵1,N-bDJ FDkmzA0݃4Jt^M7ե^{}YıoM{gzH'NaבOǮOm51'?$"I U`H$!pAñ-}Sgf\r` Eu̲t{*Bհ@@吼l wBh-)X/4ӄx*5}򼟞f5+R9/Mllޫdˤ9c`"^_ZmkfՀ ;` ޶eD4l=y?EWQ7)=6`Ӹlos g`+[i=Rp4p^i &}LjaH\\\.C 9BSJ}B9}?Ck9vco/dũ~lBnk9x|tg=|G@?'"hsg,;["Age#u}L2!6Α@c@ Fzw5Y :I7iՒoQPHX N  XCL|y00B}QR]N (6 h7M1s5t܂ΧecLzl&2k6S}b*@͞n$cWuΗH9ęrPSQ#N9Q}NRaϭx@l^ð\#}{ pe! 29xgJ )9 Ƨ_"/y? ^ߠZ)( '! \\\\Ke5/}$[6셅] ^#P(5:gg`rׁ֡zbOhJ |q[:0rQ0 n;ZŸ]40T\w(B`##jbMl'u bm7Bs2 9Y_]቎6 xʘO er'djHC k"@LunL  2:B9u!lNpav=怈3 QguFch + }syiw(-Tps#G2uw}Mx&9-t|1)|6_m娍EJqW 4ߝq 2yoC0W-\ܻEsH2MNI&H'xA9a ֏>Ű01c\H 'qYˑ{.r.r.r.v;1!_;;;j+˶e\FdؒͅE$ECx?X2xz0]A@:l-IKzZV+b4D A=Uvgx7l0~߶S)>oGܷ5=aP\ǣmtW8*1Fe/LA-GPH- p&e&A)xO3k&oh.Eڠ"=q.˨m3)7f<E='Mm/t5e '΍ \&m4+FquɎ4dXS|Df(qm £}V)i bq&&:K j+ ZXɫ[BH?“/>A^O}ÀŮ H LX/,W@Pwd˹˹˹w d,WK B%&l4 }BEz 9g|m`h9w"h;)<`3sޢ\`7_~A^3{э笂0!w[XhX.Ȓc{^L_8PϾ~83$3quQ:7$=n$j\qZ!/Ȝf !T 1 D;M.Wغ]-9Z2s9R^_}We|2F;0 F|Us-;Ɵ5ڎZ$Eg;_DXD wS ^N`KJf Ӗ|Zqw6uNJj.'F@uAb8 l0:[& Z ֦ϰZpsF-Tr $K " j0ZfL6pOq՜1r,%^]/{˨w }ʩYm/yڮ;$wh iZfƾm{/övĩi;!>iS;P9W=<O^]OvjW-o]ޘ^ /^6@Wv^>+`ށ70lCx-7>Yyf/eύ|FHxƼt?,VY~UP<&G !4h=ՒuKzLsUí3;_5 7&8g"*>E4\XYrx;æ6F6,D[[1Br=^v \Zu阽&ױُ(ڝј/w9jκX"DPoƵp۽PfU--&\-VrlZ`K va^6OPΌ<ڬ*];|ƍ&Җ eư6wX}dCD g)Hv@ή̸{X^AFL ˫R$C?%ڗ{ *S縐羿n)L@ Jo2a@ =pRND4swXŪ ہ7ީ윴KJ=0Khbf6|R[Fq#RǏ]N5D@5p)Pmс9MeS1'bI#sԔ{iu 䓖XsA rGc jF1_YcT>v]0 ֢#iFr8 JhX,s,RM^szm_Bȫr^ Y]Pgj<,+2=ðSZP+c1,a)lXt:Wu3sLKK;a'ps#mϕˌqAD~'8{w.qqz0WkuryS3rR jcya&q^OqܻXMX.~d4MQ j˨g<^;y=CJ)rGn/)6zߦmuߦS{zľim[{ׯc>9Ʈ^k'7lJvdtX} r>'UѼb&_ E~f #5EDRfhhE؂>oc%r4ۂ=,R3ڝY#o6tﺾ10w=ͩ@ߕD ^sj`lkCt f ySrj탦4+:8!#VU_}O<C}#A,@ڈh)plT51ܩ{!@!af~}`HD!9ꩪ= 2ٮy{r>7|Uhci8z|ZS8zd$rw3cn f_ #GeP˻py>qo:M~7=.tdE) *|j-s2$P^86o(cȄL c)XOERw X.d]P"Vbq.E+b6Dqab`ǣfqόiݛWk=>zvzL{DZ+cF~ɶV*}L_Ѳ6"֮;^c{'nkyvڼ|*{=U=ySkcW96Àw# i6E֏G}=4aUgKꦠܩ%@ҷ a"2]{`xOe!)4h mHO- 5oMV2 F)c%[ФLYv;Mr]{:  DQnl,;ajs΁;#|#,Qk+Mm;Ctz] v<՟71!>y.j7my8C=]7cSw[Ec>.mE=MwǶw~mam(e.n;/5 Y @k#Sg&N\fY8Vf^*@LIfncb4.RYF{VhDCԍ>hs] 9ܝ Mjbn i+#ئ ,lqNHO-gh݀ c~<7p{K]n7\=%kjf̯eɓL) vތQ]&现 ?<;7z_d./z=oNjhzҦɕ? ,z1Slv؀%2\sJ y׊) Rpq@)7`s sj"27Tp@)G ЀZ $@? Ko#5%M̪CJ2LEn9`$fIؤ HIv뎂E)s$)$W͢\\\;Sµ-A mAa"ֵ=FVUovYl@ M%Vl}`[;ϻ>|}*ȦC__I @<@nxuvw _:ر@>6%4]'ult0ʶ cR6,;pYChdkwԵiuu<2XD٘,L192^su}/υqk7qVbUMxga1z QI_Og͗Ԣ&wQsN6GNc{alplԮs2ڢJ/֍p?>Qooҿh-v22cٔP"WܔyF u|:^ faPȈTc7yQ-ERk;:Yr+SRڜٰ4Ťl%5aj!M 7GJ&B:MC\{q\ߐstUΔW.3z="c,uXfJX.4* ,CD3SKQY _挬g;9cP'XPJŐLUrЎ,r|OeMPv.R^_}We|2FCf KAQ;F g־g}#[dgW!"}l{i s,o5YќQ {tlC뀀aEC95l w0}= !&dlx7 [ Zw7Nvl1jȮc,gzmv2>4w@46 ,Ӈv,&!n9h kN;@n8J5'!uD3W8;f 96mNVtJ Ȭ134N[Ⱦ}2nЎ+2ww1Mk.w~% kJ׏>ts9D۩y_L0pi Q@,57cMbZ;d=g}ځCHd #mmAEw:7l8=")| ?Z@ Ib^V`8Xi]s. )2ہG#mG.c.X"1ώF~+"lg;K#Y;D \k(PH8œD =}0pgdzQZ]!M}*IGҫ|F11aΟihS)D&j5^$'=Yx<*anRq1']Gi "*\jD 4; / 'g4[%,rM O>-tPQ)~=_"DsD@1WۑOxHy*0FN(H`,$H!r\\ }S)`[DZ1"rȢgw3P {~ldIK,K,Kpqqav.*wr8^hΡrzrDtZCn%y[.Gp> :4aZqyy wz),B;3'S+`X 6"^W2^WzǶwzDi:>d'bCvm:ZFj8^cCl0 '7ܿs/H,]tR{5s fۺ -sA:ڥ%):|zRsvo+DbqR{:뱺U'ktd>g7M^yy<^oخ>_|b?PKZ]K`-NOU0Imi# ߐå 50ٕ3w0Q)-ܞ?ڈg*0|9fj;$f` IDAT: 6'vG C7N[F*x[M t_EφZx4pS7@j3u4d#:Y6id3}.:/z]1E!^_c%i}ΈߴA˖2 zs74>{)c&'4٠96xh;%&OzFjyb3<"}+7TR\X] R NZQta*\Gv׏>O~kLӄŐ=Ga(!" uQy|-ZfBa\Ǖ0Rj.@CUM*dT܌JbL٢F䉳`)8^OX=ԩ $ isG$.LEyط@YRTo'|VwW{f1`lRӶ^֋V"mdbzw }4Yҡzf7vHޡ~NaQ׎Omdޱz^m^>dS'SګeW9m336$ΓL_f %S83wh<ƣ *X6(6`]@1yd]73ϋaA'ɦ8)ȦB {b]&bfirj-(SeɷPJS gUk RaӖ) 7dgH&~N CJQHJ( {ı>iZvUtXB̌`ݮmIFs1Օй ,C"'\,4p4NurϞwU/~w*zsޱIsfmwl?cdrjP{=32ok;sɶyEW[oM/)mX;um h)#'`=_̔RQƲ9a$0,H2%$SJDx3Nxz֫s.`7[6HuPO;t Jk  lѨ߶f4I=n&)C'~ﮈ]GJ&Ā;rRqQ΄w@-v VTmm>/FB_p5(+δ98ETZ9-Rzs9$eo-ր!sQŸ tTC¡Y3X pOO"4y"rmn4D*3^hGכS:ľ[0ەm,8%@-k0CBsFF<|}\ܻ/w_QOt V)"ZQ'?\b!g>>$Sn1v[A3)* x|ӗ o**1Z<^0Պ2?D_oies:^Y]}q2H"zGSЕ#2@I0a)ҹ!IB6c ?8s9s9s9V].ǵ.N9m*Te$ʲbwLK8fE"cX"_OՍ.^ I7@v (W(p=}F{Kt}X7zb>wmگ s||j]Pxٍ 1uWdjNCߖg]מt![qYY7 UoaY 2b@Bm$4s(V:[Ds5>cS>ΦT`oq HXx Nxޏqqj)í!Ӹr6 O|aXc|`$~ H:!% Da6, 8nΟcLVSR}΄[" u>%=&W$.r$@IrT4bHȉ(C A 7S'(\%28B9\M0䬶@jf9VjEeUp5[\\\\^2|aDI2a=! D,wRSDi]X*J-3 uD^Ȯ!7`q j=a]l@6@Zau{|ɧ fQBBm6Vm7>^o+P%l|IdO]xxM<.7cqLn0Ɵdg-9aHђYB  N0@Sg^=.ƛSdy|DM6XF:OA}n%gG.tmgDFkPyI^He 3VsΑڦS&Q~#FycnUݬ(Q˄a~Z RxJZ\e[Ώ|; %D 7>ŴSȼ#ʑeN(10Ő1$IGP ƬSj_%A:,D-4[fLE_!M.,_Gs%+, uq\.˅$r:>؏U3ICJ9aQι˹˹˹|0$ j*b5Kdړb9`ϊ PJX Ya 3@wC gCN \'d'aDP@Ⱦ $!w/ZWvj@ӛ5ݬ7=UNn`}֭fAOG0(`5$ i^:@I>(|c7c`;@kPу`|:6~jl֮"yhJ!<|E-sZbHO ӏG3m|*pC'¦SG<'īn `2@#vf:?2Q0o I\0' &cG0wI8@0x a%̇yX8'Z/?oLWO\FIXn\] z|edWsl6^m$i4J%-AɜcvKe WQJkBDx(ғf< @^>ěq:if“! vm>/BIdc!r"VCuI(ڏ+/y}WwE&(;VN)KϾ+Y>Ma1d]02)B"%Hd[XԲm3b1q*dmELH$g1] 8#! ye ~B, K$9}ftO f-0Ҍ@ְOz͘eF: sr E>omu'D kV>"0*>]PSgm:|~ձD@tz9eюnSaW)7ډg悉6273Uv .&9bzGԢAf?2`=֞ C'Q.HZ$țUHnI`D-R'>m֊Zd PKՅ^S{u p('xIM$?edr.)fjGVj=j_IXS"q*.O,rP!mlkA-J<4QSR+CZL[dwgYJ"D- Fӄid)5ӠmU-1!bF*9+vSaKm;˨gu_9w̸hcծwm;2h;^ZTcH{>S:ѩ5O|dw{=Vn/s>j+R1NUdfY\Xꊂm0Jlg)jѤFdJ ,9'Lez.ʦ`Z$n cT? r+;yb -asv>Z#Djp`#} \q9i 7J +{; ^o;n<Їu|Ӭ3XBJyj|v$o>|F^o}fdZqCflyHL!̸+[im0w9XL|p_S<Qa0ZOHrf9~6 DqSGC(~ ''T,/.j^{!@FLvm%~2^=d\ @bYf7֣k4+3r@ϼn?@(гD&5o85DZ((TgCm<*cQY%a˱͚^` "~%*`"REǖKy&09\ ," DX8DeVg"\^^b\b\"K=cQaujNVΡrzk/juPGD~or^vV1 : ÀZ݋wz)圱X,pqq>]Qds>(c;Vm]"4M}S1l>9cZ9oa] 0 h2*W{f?+rʞxuq3J$;SmCwgJePbpW5UFI t$ SbHY,$rѫ e=(ٝ&G地Zd EtB( ӫ5nJhSN+v65 X1 uxz ; mʤ}hF;);?лLh=[ՁU/Lxh֎;`m嗶&BNs9W"nK\,t@ɦd83i3ێl zH Wt(lxtX|"=Ost~T/,9N&ZX]`q4x[`f,W:Λbr!}L7ϐrF&<1bLkZq3,+e%Q,RwD+uB%o a,܎`:J}Wuhꜟ(9u)Q V ϩYKGVt7Ȏ:sP\1}Y{⨇:EX5TL\%Zm0z틃Z+/أ~XI)!*Dbq-ի:PqrxD)뙜O3cZ9/R3c&뽻ꗙ\.i94IR0c<흺1(I)Sכ8lX{=٫>{=oSz^qJzF͋'_cRJz^o.q”'_.*IjR1yrQ+c(8q; ěi~"@IY1F[] @2g3ޮ$9{"2ߵhg$F1lߝsi|a c |e0  id43U]U{͌EDdZkUת.f%t{z?7'"0ꀺuH0SU'5\ SJ->YteyV6KRN<U)L3=b!Olg #nѰ 9|m,w0e˾b#i7LzD?I̹ш#"8}x Q~}E;۾1 ȇqc1}c^@ṌCru`rgp_pFVJzcmcR}m0[ 4md5zjA E-kP(}uܾESG_[ߚf#.3.RPs<}'8]PTQKi@V.iOUp_=)GDܣ3桏> PԢAvb/uGAE*rNmo[e¹Ts*`{-'J(AirGs،A۵nЛ\N yu oFU @N0sh;~s&?oph᱉Qm~"ҌZbp˫ڋ8N*YZ]5n<8.k]7s^wCKc}9,/uƐ}wy]uu~}5u=޳nιc>KC'/jƳsЪݯ*(:XD!R-/RL s1JW1ea,д2[bq6%*'0Oܼ8Ufy$6xh([PM)nV@ Dy1@Q)^ L YJX;]! x*ta'gXkg0nwQ#a |b C' ~oF05 |6ǻ)Bg\cɘxBz]]B7;P=Wd՛Ŧ >6E/~u]VDmdN(dmΩwFg8Ea:(ugŴ0.;<Ÿ>h)pFW{`:9Ń_xR+uei+Gh#mk!a9{ V~.r)e*sJ(CV(<Ԣ1Q YgVN9مc3-++K[d ;H@jiP`Jm RKzENÉcG~Bâ":- Cd|>X%R+j##b/1P'G{)NsAD9wÇd4aG?n߾4TgggOqK -l<_D3|]ۧϡvm{}7I[W_vϫ>Ϙ9M{uk{^w>uߵ,}gվub.]vCeeg8M9AVyTP3w: 8e@P֪j+GDdKDvԬWRA %A`4ej`z{qpU(MZ&#̌#SNqW"* ̳DdB좞uQT3Nɮٍ:ęfct@BSm|o՝æz юvFgz 6EG`xD( R_= G2}n"@E0}iUZ"؉PkHr  IDAT޹7޹&gjKλuRԈjk݈;ļ8{i@ "(Lxk3[NEԲ[w݈DVEk{C,esӧ)&"n zbՁ |4NDiŠqUSWǯSLC\Ю3`zs?]%ٻlã7e~#1"oh)4쒿g]tJLO!pE b]РP zd 8ӟl#gV9qeR ݻǏ7~7X}k_??k^{ ggg8;؎؎؎nٌ7\čA93R`WQP5Q˵GryϗhD x f44!k ȍ33(&&bDب7HUSf*aNi9iF["BJ<'@dB\<Ó^ /6Q>qzk+%,5[o|uk|Ћ n#*߼zgNd! 500 Dȵlyw6.O3b=ȶl% :0rJt$.4[|y;?FkKy9P3a޽Ivh?v]d=F)G8=<}bRAPkTx99u?x1Y*Bab|:퉱E@*:HgH"DRFzd˹@Hf9&Qb~X)jּliu JO62r]|ԉ {Q{QSrXH1bC5RB9IQ#9cRmleK@ 3ӧ;7|8;;ooo&RJ;|Gxg۱۱۱3!絍݈R{e3ZfUPUKq< fXeSnY>\̀TC+ (WWE r/z)a^,uAhިUf36{%J@PHJ ¼Ufl2QD@ɪ^y5%9ʍ<@ KnoKW{ji @'7*8ˈ< Cpf+16O!?y 3ӸlURH[dR`\@8*2 0зܵajO#T\Uoo7۱۱۱?SbMCeRF]1PFH(sNH˽Y,PA+‘aWZL0kjWNd^RFkԜF.&)E3T8F -"N@82T 37o 0YrU@ :-Z,ar)%ɼ?kQUnc`jbv pxo4g`PG?o]rp|g$ t[_@м.bm:ʟ!p9@q{c/Y{W{iZv&4/X9><637~W1) p`] WrsjQkx ~#(g=y1}_6+ȫXM SlfG*-E/€ 8ٵO=\ DU9ѣGx!~{aT؎؎؎N6X9&f(Bj1v.ޚ U0ѻ)\4@)y;H6 `՚=2@TAT%Vqq)3RWٌ*[99` Pnvׅi.jVoDTVҌXCL̨Đ$XM|z p [c;6QoBW[Dq-7u>^]x}w@UxٷkC^<%]% !(5MHttohQ⌶"$nE'">vN#K0ֲ@\oƔn^ ,Fx}𧯽?7u7leƲbQcEWDu5JuEھ;t(+vٜmU/v~1Q^z]yjMey^`do\^z}~c}/\>X/ ,եyE\U[\CT21+=@@ȉNfd!T1=0%dr34R bz86Q/T3OA^p7ԗܔVSb3 =4$r޵f(n`P߆K6SJ(RX*%N xfxgq-8ޖKPlZEP|^CKGFl?]ѝmzt|1>aXt^28FHmQ ԏ%@ÿ?QFn&/%GƎ^J'V1ԋ߶{ٙч:Ek1 .6nz[&۔ƻhOKoӐv +a}z eqqr瞅Hp~rD[<%K$b ZBH>h&d~ 愔&hM %I+H*u"Jt맥vp:'rPTvnך@BziԪ-z ql6&JNhhvQ>+jGDXlf݋F<Ϟi` E0A@M:*{P@ Y*\j[?|RuMbHp+8==w ᣏ>7 |wOO.>|x&BJNWcTz~ p_u}{joq9k,D< .i0]X%"}65@l֭[XV8992`׵CSU 7CE}}W_}s'^~~~rz=y_z2* RLzް(?IhWSW]6e”e"y *:x "dE@$rOܰ-XJEXSUEyQD"z0 慡j杙2۵` fP`׌:5Q%Zk#5/T76sN-Pf:IS|{56>Aq2% ڎ-8)ujuU&;":"oK&,9> z_Ax/1@͈;0=#0k]e a0gtdM/_eN |:>n}K.n 7@P?^ otyP(0%V03_뵭RT!8gOo/3LIG*R <~ 7VkX{4;x%e毎kx𽻋4Rr|UHWs^ lvv_M>*wTQK6a>^8kgOH|-rNcU(/U,3d,+WU&>P !\+-w_cI!5UAfBGY 2[~m-v𸶱#1t8s=KP7_]?Sݾ~kFKU,r)y@>@{'9],bɅB=?tb"mGĮF}2,Gl)19av2dRk\z1x Zd2VU0ڈwM dFbERB=.Ҕ$ ::PB(R8#9?Op=|[kO_j3X{w"wyXV8;;Hܧ}0MӕF^ ُpm|}rWC޹s~፠O'ӧzݷ_\ݻwzvv'R z_ )NrnЅHvPdbH"n@2zpCPz^gxQU" "Y L0aB EQCNf-RHv DFf Z"TQ""9іLI; qJ&D8Y,K^H OMSBQsZص{PeSږ* 6-ĝLIU҈ub{5Xn,Hfie'1"†uTa;<<_PZz1CXUv4M[9V䜛0#$zRBJ yHkD}>Mӵ"uS;dx8^I4vkD_[Z=wP_̗;7`/u;tR3׸nzkuz^zzz=yg_7~2zwxuY}ȜWCwÛM~9ua"r1 ʜ9 T$rX 8V$2[514 a fōp dyWʬ3vi."S"lyYxӷӄ9{eӞ4ҀbJdj[[O= ]niS*UBsYWNi Љ ܓ9#3'WH[Z5Lf4 C8 Un9ȴRo.^:p N*EdCm̌Hd%=`{b<}F =E=M;RgaT=t@8FP4bHPKP(8PC"1T"D$cQڞR8bԎ_"Q.'`3%URQ=.aU]_!ЪHYD:y&XE"t3f)0Wi4Qޟ:!&j ^ \g* @ޝߍbZ *qvlvlvlr q7EFCR3Z+~T IDATo^P /O#JBkX{ z<;f%̻,8/F"L-Lr0#@RIg#jmlDznԄˆ6~qRu o-$7$fy{Tax=&ډ:׊b~ٍVSX 8Ң D)L`  U61 P7=wq11AG{ytqӳM{&F1kz@sNs<RXP4B돩|0/^;>x`sR06NGxկ7qOta?y?kX<Ʀ J) e?~3Ra-+6;DC=j ( FVxiN4 PhAFBC΀=)@{v|Ь({#"7G.4ja[=1< m`ȁ~N]2ڡ1EF"!%!qDԢL`t) ZIqo#^ RğbTKm䄪+0ejQbVf U_o/M؎؎؎_["̓h- oU QUNb鹎2k`ADKK pu ^y hF.ٔ\m$ }U#@v\Kr/ sBFp),SWuo/3"V֕&UXKW" -RVysW.jBQTфϋ4b_)1V0/I ybT Wk) 1"yي6Ak%QSkܚ3wEKIr,5"՝܈ʂ m(gU]p+{(<@KϠub @NK`aJJW%WJq 5[VKObfcnhyw?{Qǝ{ǧެY nL(xu'O & cx~8{0֘yD5+x13?09Y t'tf=Hn*4pxyx9ɈFX?c-1-zDGi: %)"&Ve\RTWQGqԇF[?lpG]i%Ƞ~aUEw{2 yZDI9A(b[$V490' "#gڳ$] Ώh5HN@=ǂH1,(ړi{ U':xp)rD54p2#gf105Pҁ4P#0Br݋UP}NGNϚ٭k+WBj5@hhrQ HP"Z:,2Ff$'6KbEjvJ8[ڔo[>Ko|U{BY}"`#qqȕ>s]wm,o}w~\|.[x/z]^nߛuzC'c};~EU(8y?˱w>O<1c ˜£J x'x9RSE I)5/y١U{"u0`>%]^A]4) RM<̨? f[\z(S'^˚R"Ցv?@-NɌ8Vruhx޼ K&%ϫtFL5kB܉Ex*-j` 3**s/R>#eZߥhija^v-l .ZJfNٞ34*F!Tc9"@V2R3"e$kg\@"XJ)ylNڹ> HKQ8蘓ewQU)|kA-8sg}[Yp4!+T+Xߺi׿j9f\(ffk?o_u|QNb?9N'e#nk@~|GR:"'`T7|NzOs) q1rB@v.iN~mbnW}icTȈVYjӟ)Q;^#e{U bsP"@XF&f#NyUK(ڵrjBEHdVXfF:FpۧH[7v#2*(PbP;! Mް mrXyV̏wUFT"kV{x^_[>)R!&=99xcy㍥}n2u^^z*J]umQ*l^Ux}ͻ8MsRJ899vn:ދXsO^z=d^_̌jվY22ˢO#Dߔ 4PFZ9,$ߌWEp]୐K 81A[%" a5Af0wx@Z2eu1&Eʩ.gYq9 %`S",JԊTv1o_DHb )ꑃ+hY~|]Լyj{d@<57S Si5`޹U0zkUh &szGF p KW5\Z2 `i*d%Dxuo 9dC-b|xD~L]"Bpڱ Ш%GdJ JU19 MȱyqMP@ PԱO@-= ȉ/̌Z+u>]F e O M7񓟾ROLU>Y д:1iO5%K5Ԉ)8eĈUwG@RLmAv /cr޵T>r>ϔL݈X X1R[M7| U+(+-5lO8cd'=ЎgYG%,QMW^Q. "FRyO{' KNҳFk-bb'Nz#F^ڡ{}aw~u꼇Yat\T/nMo7xǼ3n1v~P;TX7ˮyOG28L9u#s f,aZz;1C=ƞPfx(Um!Td4s3G5m&iᬌu6)g喦4 `y#?5aZvȡ W&XΡ`"Uq/&X0VA(& |K Zs Ƚ>/ A fŌP, !삊 hu >bߨ:'r(H !"3⹠.wC[$+`ۄSba;Y/ 8%l6K"o'h }0[j@tDerضu[zFO#Z#nfc"KǢ0`,"6nAK̋ jԼ) ƩbAERV?Oq0v B-*#%^[DSUZQFM69oJOR";#ٷ\#UM y},r"@U><-˲\ًD!cRJ,J)XZݳ:#ɳ,˕NJsZ1^w~qV,rjpcq~㽈sqכHs?/dr?Ye{}Yk)`IJ>yN8zKJv=bq$vjG@"Dy Y:c'"L-W3ت P]^yј31Ę^o您pSU>RjƟ] 6,F,NDn// jL>`BKVяIX%7)j[)v‰D{hܘ{acW4%˕ @]dsEE+0y$PL|<{r6*d, P6u AV (}`'x^ Wb^%D* ̞ڴ_@DBt֯*Xރ/x o^6e+e6"e ˂2.>)?=[W+Fk:w¨#@aF6kbNBO ^}'z04a }*A*ڜ$"살aVP%%? cERjxQQ,lQZR=AUYi"u˸XYږU*hD9)G=km^a~D˕*?M51c"^ftb- Ϸ*}6jߨӦm#m;:"j{ee{ۇ IbѽS|YCľ5DڣjA˪Y }/»}>? \,VR9`eOѭ'ash (1_FV5Z #s"XߓdGkThb~plmVhDo]UJF0d{{ၸ6{>حhiU"ڊi^%'d:!c(e6 6F&۶!G59,'9Qu=" zIUߏ{Oc;c;c;c9jy)I*=ԃ/k )b GaR)Vsyp J߄d$@7ÀfDHÜZGTyۍz@ r$j\K,d8(bfhMDo3iYbƴJHx"fLdP5rx prGC}5>+&PJu\y=<> [J},Qrx#j&P*w83U=~Z_TW_UUxBRkIZZI[r,s |kQ|· X}ANԈ kGU@ya5CALWTzUm$NNNm`aW3^Y 6# ʽ;!#@Lzt\N;W#ߪhzGO?Fc4(zz^u7b] e\S6H/ q|6MW}KzzAdJ/PzBp9[T'ը8B m:L=*@.cR#T<ȋx&!A=M. s_[#wPV|)#x-:nd#@@LUNNwΘܣ~lvlvlvl?-Vx2(9³ppi4)j Ԙsh`GYf`{uExi#o9 *vx&)x "VDHCCi}&GWqi'['ā@[&dj (u/Vկ)tq7"\=zt Bg֊#{2n9LM2~9'1}.(M`-H ,Z%$WZa~b|Tx|\qWRcKDۍRYN6'>)óXG] 8yQA&"`D hEL[[$Gp̠Z6#,}MP1*ۂ1.a|@;Ag= Ԣm IDATcc 9ak65De-ﯪ ؉(HI:_jG'Hy:_J{&9[ERe+8(Vd)kyG؎؎؎~>Z:vvVZ,Sa,1 0 y2a?#5F;|ȟC7j-jWbZ&7~ RM`5q+GU2O g}5#3zSe#!, tr^[y=f<)0BUԖj@ddLdsϏc8,tzH *i/ɔe-MD0=W:K2y]pC>PfNf0f\BOHٔkLNU[Q`k>[٬lbV/|n@0O: ;ꏫka CkU"$O8^kWh-2?䗱p68> 'Pa=MNLP'U-@ W?MlGOک/A%Bv0,ͽNu%'uosZgBg!(з(I]sFFGF5Mhi6Z慟bs SEz=cXP"3{TWL6D:u}hCߕ Tz *;\ L(TJ_R'"RX6_K3lRʖoi"锼_WS%75V8e`ӞΜ;c;c;c;9(gd:2A&ƀmY΢yk1yRfR y.D/Ryڪtg7oaZ=8 abq0| QHD -W='6RAObL*HNJ,bǮP rCTxcP@nF),`H>>'ǍgOp0Ʒ!ԊMs 6j^BY( 5. FQ-\ݽv_͓maEMRHϙԷ *j`&R.N("1cN (|e/uS"$Y #hQ%ax HmQ3 [1wH-wp'Pв"F^D|Cύ) g۝)v疟Os-t ^J}XٌE9MLAu_@qHbGtGqb|R}9t| {~X*dtZu"6C C}ς^.P[TF1KxME=m=]- ""lM/(3AbDT4^I=?{tF_`,jLY`sV<D|MޫՔG؎؎؎e)TDmz&7hC'a CH`"N7g)^I t6CH!JePfkxw0^oec&«ҽ3Mn׌6E|gF-g%q"qg6PuB{ϸTUN=ԈXsߵtf5aYw.'cT0D 4_K\öYY/c|ʄ}@T Ҟ| ch{?h ,)ƹQ2}\ S:xFFw DE?P0M@U=хAWj@눁]Olڄ+/-;iy1DLX+H䠆-% z8)0h\"lLЋ|RYL殃`Ím6/kd C5Uq`v)h}F-.mawCx*}D2pR4j5#<%C|97; 3!yğk rcDN?{ ԏ H)sSf8bxEac`g)9d10+a Zz v܀\=5O0O-`n'`Frn)wX}tңacnu}.P~3r"jA@m]+bs`ix1~̄[kwO=ɑx9&y{q~==EOY ! :(G(Wvg;W (6 j%CSv"ל!K`&"JN.T8urW^ʦ%:%36m׵Иss˾1vIdDEr_hEH@xO$$DGH4hIQ)受?^n^kҘc̵OSν7Jm]W9{1cFV PgUWvgu>`hl .!$7LEPw[וgG3FGFdnQykfU2BS W2&w}}{w=VA~;uŲ,wCک~ŏ܈Yr\5ְ,˝=vO㡽t߸=V;{kubN<>.OǶ__]|}Tu]׏Aií[w^2saD 8-KCzѷ d[fuG|TdKo,MY0 DF< eժة(#_ s=8z̕XЀAREx">BDvBޗe8r_Ih,EC+V+lx ȍD>5seTn҈ *oܓԌ?w [*R"bGj(wzQI> v`U ?c}X^4~Kqp @`3}?qV}%:x,͉y&ppGI0){xȀAP^ @$%f~Ss[82ʱsV,Yh Zy3J'# )5tǪTzteyI42E$Lq<l+5׷#"cnZ11~niI^9;SiN@)5"8-*E"`w/R,?j> *n/r,+s]auǺ8Vof8&?OF ୕փH$\Sy:*Mzvӿڃ<{N}?^v_;3>\c3b]u]YطWC臨_5vyqlzߜϏ__{}ؽHϒ7ݯb ʟg/Gyu8K A e*)Y>M@7_- >` jPQ KBI`Cbm=1w2'Ŝg&P!L<"j+MV'kyT?Y4X\ `VA)eũb`Wy;F'<\ 1H61A# 7"+ѩBfKDːfL=>@/sLhP[nfj3f' oÙc6a^a & 0yJ UAOa|7Ͻm*@E-q:һo? w;Og̽,5,ƪ#wխaX23*mBz|7oIDq/TK#h'H*E}B8Vq78zs$}dIpm8 zg8eOq {5uJ>l*l.$4>p4nPWSBKkȹVՄҁI2) KSF=u>;~YضNMm5"m/GNc/", }Gαasm~>Ƹs^;^:7ƨv/{_ÇlӻG_?x{vگC뛞/xqwOc;g{hүǜjbۇ>wx$c$뛴{vۿ\woÜYwl3h|n,%.AZk bՒ;CQRoc4bJdڠaY&* r YkF+ !%MOpe޵yg;5lgI&KЍ^ROE cD܁c^Q;*0G& c6ʬ4 :& /p |'`pʌ|lyZ?  Sw'3#7P@B5 B@xWH09*Uk-~iieB ܙK lJx`I|gCjDGow5X}X|7|PFǒrzg;zE57p1ɭ,m8QeŠ55U?Hp`=1h>k/hY:K E|GрqUC_PBo| hxFԢƁJ%IDP-dJcFwOV!"SgJ}`+mO-~YFml{>/?1 6'sXSc;4>xa.Ţ4V@~ͱ!5K$HnIj,$%ٷ}%ut R}1;`<vJVїI]ؘR'Edm3JEe}8F $c,w@}ѣ1sX\r]u\4ֱ ˲g jҸnCٴҰ2&v HCi蠼7Ks,3M㭹a$*Dc=qSdpddhqe@0Ҩo`pzQiT>JlHh8k CܧxN`Rw% FK0I%5 z6$yq4uT־t0kys.ȏ %Aِ]w8SnM`ٰ7fxHP1:*|{d?CaF%7V $= |4v*@TY2z{QfLD}Νk;nwJAdjL"÷}9aBwc9cyRD S]v:=sB$7"2JQV q=ӛZ㧮ns|(1.h%т GGs8 3qzYo"*uy,_oZu 7 ~h A-ދ܈IdԌvi|| ^4"Kȟ爪8G"$&&C)3pP;b皿_xց%yvYŹueV'8iL%:.$,4{ mYD9HqXXK1pZWD {`#)2&&0B'Sq;αgADN~ UƁ\r]u.ߞk a(-3r QD)h067kAs#uwddeňOiިs8KtJeH.s:e{zeܝ5Ӄ2"1Hcw^#PbWm8mRKP"z~p$CG د;Ҹ;{pQ{*Wҹq Y@H3ހ(f ^<@|42y'1biT$% &:,k*V{bTX<Ҹܖ1.R 4DqZ<{$$rS{bW{@Re>z50g- gR@HνRQIr-㺶^M 5-'W>u:Ccc|O.oNBGL֣.VmY.ԹDU8rh6džC?;H3i9>EP]iu{/pIeiVQ "TU{Ry{8&1A=;A,X,$oo/s X|)WppT>Dqy BNVkKkZ2WqmEə3ugs*TEً 4P\'\+&r]u.\EBaqQ޳ JɻP rAg>C#2,* ձ}ʇ~vޱ(00TQH/ 1FSʲc0U,]i%P`K^fqJ fp.Q)y됨AyTdEFQ4a0^f yHa[eedO+L v.j0wh  CBX@*wwp`i IDAT3ဈY|qI#ڦ?qyNZxr%^p,VQ'־u" w )7y0Ͱ4 g$4gܫڏX:S`ޑS,x_늶dəpaIB_Yzh*UsIxg ujܛ }~fǿZl0MN+Ɍ1gÎ p?f*/׻h1tSU-IXU=Su g@)ɘQ\Zkq7)zѸ+"#HiR>^oN=}6Q *`N2 h;W/-I󞂞$yݒ88DH03Ƕu#ES%&*<흂Ȍҹ.ҎqK4r]u.w-q= Shg4Fdn0k0& /eahX4w T# FѷmEH^?H=A.oVJOMcWfBe8ZMAaó$@79, tO e$/fP ̐ӳG4Y"품30{ /;]z 0қ3xY[ÎPqYRr|# ػ%GO:Ɣ8YPo. DPUHꇓ1bsmS 9Ղ/*Qn#)^H\gZȨj3/b\N!Z?Oa|TC;Ae6ُ DDmyFJw N0Ľa"D0s8ܙBO=ƨ!qKosfRT?c1# dE1KI._E>47\ A׸s3a"ΰLXac5"-S!2@g>:)^gu a>4tC[v@nw o "NE@" 4D%s.l Chz-z7Ͷc]Si ( p !u@6, ez0 2m@?m+ Kye:={bPx{MLA|>)@5K?fd>mz"ղ(?t̲a2F!OhTD q-Fy"`,Ǭ#XAvTSOl .(*Cx ,,N41ZЛ7}1PvzzvAT}7y_]uW4C^Oo/~ΓwUuɱCCMϓbyWzכ7i;eָ%$oL gU %nSx moCJ9YCYbdL@͈Jéʽ` OñxȅZ^d" Q,c @ W*}`%ڻ 2_8`hMA#WƸ;c7^,2KQD=fH7Z0F'ȢaKk0r[y-(omxdW0ӀΔs؜O=#(/b(6KGVTakjaA$+bX(JAsc~S@C^&àyoH`I@A^o4L@qh1Q|ԲrE1͖'B u>gO?{jJD",1A{Dfu0Qg[^\Ǫ֧h"$xgG \t'YE M/D:8gK2F}g=bd{%J1GsXyn"򀌈 Z#nԆqhEuHI$rJpT$!YhseS*!(GɵGBF2o1jֳt*H8U5>O%p =?[ 7z0Jxj'cޘ*Swa Ƞ`Dkpuu+ wUVyŕUccTuX"1;Nvikݺ>vn]Zkh-#ׇ=ep}}}g'_{{vZAck e&G_uΓٯ˲<~햭sI{Q-b,uf=ҍ@!s׶`ϷRA@Q"4hGdTN>XܠWzG41l{ l)vX 0*oS PV/ Phmg>is+܉4V8r YEG2L k&1zw+c0(8#'0g=mL?$ -ƒt#,ޣU +5G.|ه2^S\ݦ<0 is 0vv9{ho1g\j F vk'L3|=N,xHy#G΍ɒZ}0BQ n?7q ÷V_o\ sE& M=QYaIf(0W?PMYHL<#Kl y\cxN%Ӛt*4\E2S/ϡ9#,)RV~1|x@2q($dw u)ZX%ɖUnV7>Hqpb:Ӯzs2de$寧s'$~{DZ(cyT$>Ҹٗű.v;u|މgH#!j1{7vi܇xd<Ƽ>~!;z?{c>sxwca2[MωݯzCgɛ7iD Gp9sG{2VFGy!F`d } W>p<`H@l*,#ä2;s>zSj-sSPYA`V-#K-(@1<=opOMzk@*g,g@D``,ͫyںiiIQ$B`2D8@UFQPJXT} wꌠ>֦uk &xVAH'E(<]s?XēFw1> kPdjwww!Z _,q/\ g$JAg6=;+THo`NZ"]5 '!^꿀8D;/U#png"/O X~x1l(*HJK\/rJ3YIʛ #d gMO&50fȋ`EL^UC\ !W_t+#u[6 Kk2w܊l89G/7cX~gU$5sO+_jXQKV/OA?1>Ɇ `lLZIt*#,<$(@6Q{O٦Nͩ 8D׹#V>% kףZC#K~4+ՙz.  `D`6;Z|.IJ,Hq^F<:ˮ1)@˨la۾?lyEe5{1if6Ďmw<Ƹs^uua:Zk?۶}և.XuY{cW퍻 e[02`7w ȨJlʃbmcA"mօy1z#(`8,Y!62;97kS2U'8R3^y 2ai88Z O =F岦X0-j=8Sj{ dDn3!ǨOdlS s\V!Dw!m1F[ۍ, >w|>-/yn052UeI<7|@iÛZߊ\dԌm '3.{?٪|oa&q@:CyF)T?yk"3jU)1"}ڱ/Qk& ?۹PooxhG7}GGt )&=eAs$/Rb *'"cA$y2L38<+,XM$i_#{uu{B'ot:wmXO>ӧOɓ;UCݱo7y!{8>1ڽ!zhs^Ob>vOrI_~0{?֞ПwoÜYwlc  (QQz]2y΄ &=`1)wZFI\,n&wXfA$Fyiʫ>cxhIT<& ūcLcogY 05pW8,ÐTP $ЕSi~.a`'#1>҃e,<\Fba 6<9,# 9*mb|n8 u)kW%IB ںU†0MTXo8PG0+釅+Z¸>f!c@Uh> 4Ed> FγH3CW91Y@QI]0#jǼQُ: !(2hc !@1d~Z#0vͭ~%RREL2 $^vЯE~~hwo w8X/PFH S4E0gꑴKPwYØ>O#Ab֝}P5\&U`pmg9fLӺt*xz5N@"/i±zW=Ǩ1J{j7 =(=Ngc'Ɓ5P'Id*U^ kunh [kP#IES& Sd,5Z\虤.ң~ٵ05/qc46ˆ[;r]u.{-fi#}>R\±ts/-o]9߃ Zfp3}qOvj =] "O0zTz eb$E^Ţf^d!Jiҹ8 THýGL :Et{VC!93@y@<4!~6K٩GzD`ǹ';ޒPmޒ,-<'Z/ Ya+ O8nng{zn۬,$#RS;ElU9F!rZڭqC!ɲ2/FdnG+tpTZ2.A_:կhٳg_E|oo_2?S?oo_">?(r]u.\ܵvڻ CnbɢPfSHCn+BN3Q!yʫF #= gG*4v |fevp(b(/Wݘ-8NZ4q, (;M ^0xJSC•`4s܌=}n{y&eo{yF̀U(v̺ak}KBXx'7 1=G:v=[ )jE)Nsރ ogL]I^x(nMIdXp'`,0M8""p؃(o p=RM10E^r'q; y63l][}w?iS.gY==2߫qlc WVU"0`vP7V0c}O(THnV:f؃9j`"xEBZ+R!Fp"ulΪYV.Kv.5:FF^EBuV-n τ¬2zyEp\Z"WJϐ`\]-2R'0bʌ,7I/3X*Ѐ0iql֬KԐ㸰R CDóv9qo, y nΊ$z ק%K ZWU'OC?C򗿌wyquu5|sc]Wu.\rOG;%? j"4&(sKF*UKj]G"/csr3$1 v&:3=Yc~VQJ",+a6G +Unp }VB݁@g!#e`Ff$bޙIAaӛ$7r5cVjX'n?BbWGy /ox娮mG#>&\$ NaU7L*ϦAV&i8̈unR7::.M$Nޱ`웎Le U8;HR<EW^^ss)ro׿ug|too[~>AYLr]u.-Fq R=DQ/޻H 6$0JQ[q{JO8A͚n*{#\!%bg.a 2rT Tk2J-a#=vKkX@m r]u.-%ՂcL*1< 04 ^<}(@=Sh*`q3\40eW6ʥ^zA7ա6 K)j2^u#J)DÂuULxQ*-c{c[AG?FWhy2ih7wlGT.; 䮭죗Gi3(?=+#w WyM! 4ce uW ]h\Bk8ɪiw(hb3.8o{#"c $,¨52L:QΟɠW(t\?Yzr{y0%V kw^UP ;bF.fop8.ް<:$SR}~yFo ~f(T@;,:ң# ݱؾ7y⽬5ڽz}ٚ~oYlbYW]G_OSW~.M^,cshO<P90d&UP,gxkbdh,D5@f hXo= 7;Unt,Wb*w+\D JOf X)e&B 6p,aŅ "!CKUi!b̾5G$}! ͼzK$Đ9{""OqY0X}d{+᳣rwǮ= 兞9S"RD/*&4&HH R㡹Q_`4GL>A[&BT"LMn }:qHGP[`$$*J.O8JM)o Vۼi~tOo;.TlD"#na-&ag: ģeZSC\~7'mgs =%8m=A3΄>d;l?}Yi{8K` gy.Rt/`q˿r2<|q}.Ο'[eֆ"P_ 㯈DY;a[P21u2=EW$ewҁ͈OOU ȷLHh32~ _''?ʯ e)\__㭷޺o۩WWWU!e״)lBkěد|.zG~G?ܯib(InIo;&R102 rg7Y(@2s2 @ņ}Ȟ̰m0(d4gJR/Lt:%auϔdLFЦt]\g[Ci|R±Q>#uBV m @Pl0/O@~p@obmCя FNK 4K]9N pqo)ȧg 5ٺ;孂aבek@!$HjNLk'KRRr=Yd} fYr&,Y(Jq25 VcA 2&kzvϔRȃ fDVUT Vx ѡ.2>H]1#\ц~E}9gg| ݧMX8e^j[8 %sدyX_ZniB43jm86uN/;!K- 5^F ehp7Č̗#=[,=SX_AeAĬ',CǞ%+[Uls;TCYb;nIH|kSN+hp<*R}+W| hG <[>4Pv]Z~>jӡȜ r>C%z{aNʋo__ oHos[uJȖt>6r3:T|L f`n$@N/_𴴬:gRoDQ-z.>}Ox obQ {u]7n{/O췿O{ϟ?o6}GSWz|>>; χ!%cnˮmۊ8yռxi0W۶ O<)ow_N֞XCOkt:ݻ_Ү'Oy}suΏxHObN};޻s}>9}ٳ'{ ě7ilFW²P >Tw3d`nEh <{ֳnQN/ˏ]o3_z!Trz4^v?xvuc_" AewAn]fT !_|ZH^,EBcP ֒:[EnpBi)Jaxs4& 9oey%Qo˲i]i'UuTW~wU@?߻7}cw>^ou݇ݯ_ՇCωke'w{zl&M-UzZAz`Z;X𲶀}prPm*rwĘV13ԖQu i a7`@5!17u/8=4rKdiئ6 h}XJ+8+އ >V(?cWa@%sMW+* 04?册Xׅӓ}Sd<`YƠH$#uz$!R8B *DX-nΧ ``wI(6n@ysu#9}&)6f0΁B۫;)1uo[r`^cuv7! 0pցX iiY![࿓pH\߉0?P y@(cৼN2l]t3÷ge+h۬|uõ Hi||GW)J9bH&`'5#+s#q²r0}Gxzt~"V4W'7ܣH7TΥy>|Ȉ$"?Fy *xE13G3ۏXVjin8i12_ 7F$Ѡ^ֆT0%8Y{\r]u.kIezsv؅Mq2nUh% n-]^ߞM`/JW"h!Iؓadz!}*t }Frd%AN `-,M2ڲ;##}L#XBzzc 7w^ 5&?Fd50G$oQtқ MGY!6? Cu([y^o[8SJy t6{Pqzn Ý`_Ƭ0-.emFX*K h>X`R;|gB`[7AQhE~ XR@J)69sr>[+T9sz ;ɡ1db[{zAT F**@=5<2疤ʬ% &h#ÿ +yr?\d߱iC$%\6K8]KczS1$ޘ#||摔(79"4C@ŝ`,x噩3[uDxHg1* SXGs6ɉL'QPsWMԈ[!3A#K!dHZzpޫ"w]z"KvdH?E,yS(28}{F}Ydu>IRy) w"N+ I<3F. 1SVz4acṔqk>}@)fuHUɐ7PUN2$G;5Cge#=e 3r.Xn+_#=J3z1bXŀ: Y2)ZgzFB\Da$H҈Xa 5*ڇ6{0EQ>M/ J7gNrK^Ǵ`Ȅt2a٦cPOo|/| _>%?Unsk^z*Ipj0`i9(ʼn(`ܔx(!imUԌL *<Sf3W!E38HKC>,k ).Joؑ2K3@{ HE*d-JeҺ8LOBJy;fpzEM%Q3(|?M;|3m; IDAT%1, Ct+r]u.u-74RmdɍQxwlN9PDLPAQ Uj%t#bA9sѣ8f?}t$'}zP惏$Mԏ3Ui \,PS?;,YHף&66*Gjlz9wFkEI;ϯ@p(t}21b$4 YJu5euԍIY͋(ƌ9b#RDk}Y5sC%68j/ֳ,;31x$"6BY"d@O(< /H<y) ! $EJ'JۊȦg<=]u>Ux]Uwsַ<rn%0y:<{`[ޣz3 bc@}sJe8XBչړtz̏>&eezɿ?׵ynm^/~=9)NSwrqxim_D>Ӵ;u9dۮSھyᗱק=O^ޗ{wxc_sH zV zXG0 6֗TZ*06nSIŘްe=6CXAAU]ewu'p-˹y2DEȀL'@ܥpj S[E Q]2a<'y#.5Smt@ j0V Vf.2Y2zcte 4 8E"LC*JSt2B%XfutPp ؈5oF&6^Tޕo`rq 7 Gp@%5ݧd#}J9{r}fJq-P nf+09jtP` JB-5̥!քsx >ֳ,bcolc#@¼̰, eI%eYn,=%Ȳ,W/oJ,vO]R=;e(D}oRYڙͪ i}پme;_R{7گw\5?g_]~)v~4ϿԊ  X)t4 i`ZӠbQcaU"2N @;VFIt{ΞCj: ԏu22e eSeJa} 0A: 7$ Y0K`.`c>JT^q#tengeGFջbaa<>MsEc4wNBO nE+㩈_/`d3 g* $G he Xrf\&~*.%a/$s--7ZC3 Ƣ\.OP&*6zLbON~TJr !!T\Vvδ嚵=5v,[rDqoTK?z]u~+]k{QvkqW6L;)gѾ a50Qc g|1V03Aϗ#=Š. > <.r1J+'\nEL2}*Eis>_ݱ19%탘YJ|:uzRur@-Ƶ I}dxÃ_a r3`PsTJYSkYkN񘇨t13Vо J9Ӎ;Z^wr܆@4+ Wr~ǿ_wd8v7Otu]xv6ۯJrnwʾxr|o{]x:)}{ճoju>zO{N<~=owgٯr OrRO㌑WHq'},|hJbgq.02x!hЯ̇+_))S!;|G($` ,DU[ B'!A3RK[Q g]0sPLjCitFK:Q;wȊ?0+@= ^ |&qXw F wE>2dp u*&%#N I "Rƾdh~mFS>$gn$T ) @ tҨX)Xj#H BC$0ѫftFp^Anp?%5Vr82#,!qҼ:x>6ßs/]Xwcɾdwp P\ϻ~/&GU ѹ{'雊R}t}Fp[58Q_`]JT\71Asp(R*˸t-z/ȼE@5o&=+E&jt:Q) Ǎay!+RCr N'i羫Gi2,JA7ʣ1 &ƶKK!܏3- bQlm>F Ӓ2]:ݤd%|qy󗗗>v,O;tU;94vwuxk}ڙm gy׶swsm...nrnwJ=#lmuE)%E<Nsvz<tU3.Ήgݯ뺾Y뫯Zޯ]S?h;ܨ^Z°9\-9 d kYS\93Z'4N#!KF,ToxphX(@-{`lKRIS@Rgڧ8r``%[œ^|`݀QE'"A=ʼnY &Ę8wQza32"q͈&B'h27":JѺDE.nOYѩ< C [hn)Ւ)uEeѻivwN@/&z%n4cY9إ X+sRB pJ%&8,N`!)k,E$3{R^N>t >#å9DO=K͔j(/?sܰ@́}lw{$~KX }t:,4IH /qޫe}ݯ|R t$Iןr\ $dY:̐93gK2zΝZʎ5R2mzrJ<[ƈ35@#j4!C;{O@wNF mURp Hkdחw:3cPJuu6yaZ?tT,k!U5YN@ۤo9yvA}brZ??,vj=9vwiz"m'vO2n[/oϳ'nߓ}vyrƑ,vϻ__־6szm^fߞlLG׍(n1%@f!Aרm[槆QQ3QN҃8bt0ؚ\W,Bq"j m7Z quTTP F)*u(amtfRзUs]0 `Ft0StVJS~[ (I_טtFƝSD`/`wJPՌFB6KF># c_Kҙ!-((_1y(iPDT@Kmƾ%S: t:,kI. hu3Y~Nf(LY zp $4*i%ʴe_|@7fThFCUec qAI@`-o_"xV*!8e3;i9DoW3R;8<Ogi8qj1׀qg](c k)">cc XS'4,AS C<[)6RH]{srݸ%|Yx_it;kǧtmcˇ܅1_}xE55sRCze"H591JTo(ΪE:Kىe(~?ZY ^30K gzej0_j籪4W෬ -㪝bSv;?FWktd9Ci򸢕Y 4.|GӥmbUfFݗ" H[\)\wp"\hWۗC)t?&_i< L1:#)bCʱ_62p"\uYXv(YP%.GoLjB$g֌bkOEtsU2:5#TgU}Ǿ~3,4Ǥ8W[ 1aĐcwhD +:ٯgh .E4:p[y7ìPX)@"Vb88| ZMƝt"N͔~f}yzF>c4{`@kւ OJԟXvE ` T#RKDo7jklf&)vZB y24pGϼׄ:i>Ԗb%  t Vf}ԚeiQ`8.וFupXvNJTЦt͵"IM&!|Yܓ1>2R0AK +py7+#,N4tҴT#80p [(oVd D6=kgN?$|rN`ʡwE< {S aG8v`:ELHӡ)Arԗ0ZJ: Fg=An)tc8)[8":+0)ɰtHrlAeOx&E}_W  rhއxW6l>s>FJy͌kA-Wrp 7sg(3 EB@RjZ8W25HkX c3`tמ^S "!] BJZ\vX8<:bLuaR~w9{} ,T~:tZtvVȈFzN+k8,yYSDlЉqC\nQ"UUۘZ4MX:ksr۳p -Kxpָ9)!q_u_OՎ[ZEJ斀F@¨;x4S>tD$SFRI۶|gO'XWcDdd lEc`#?<-F%@OyQ: l[RΗ;O.3`[}7i,`ߍ>4& 9|tE:7͊ߧ PٜqP20݀TP+)M+taЎrM;<%R8XK Q 7:"&_xZ(;2)P:v]X5`;gMtyჩ>Im}#o$D3ԧo x>Xcju%$5ҝ![PuQ[5C8[j'<-')ƹr]-!.8{we'j-#e!pĽIo&#f ~,2`I;ʵꊯ}d)i5puF |/!%]>әQq U<縍ogUK^QA!#jŲ4fk𠁰4)hF/g:Y$S,hf)ēQ IDATyȹϰPl}Li5JdIu5AyckxWCy ]7lB&u#~ÑcjeHPV@ɞ*KVҁ*ݑl*c QÃGw6ipM9p (Jq54. wRa8nۮZk~Z[EOvji{uֳ].{}Vc)|ɶ]}g_)k*E}{2dfʏEax "E$~wdž)Hc3)ŻO!="K3.,_t\xs$W26:3%Br8vOj6 ڕl>HGH8 nAcdI nH Ji/`$mdkN:}ali8, ֱ/(}[VW־a)u4:`0BN-i܏w}TH7i&p$Hn'zR^5kҎQ %]1Ky-XJzhS53ܡ(%`0;AAb@@H뷠Ź1rg91snJ53~?(nK*-n-m3үCbn|ly$Jڸ{ޓ]Gkǿ^f>~wl%~!!ix%LO=Ƚr0R1u[.?L(2݌bN3zE (̔#;L;UgX>AqI ν]f9̹t͟6)#wa)њDMZ9?t`;F`{Uj.WsX|景 9)q:j+0`8,gah5N%u8F`)-ggElN o515[zN/ "e,hkIJ,9/J+/nsW33nSeֲm͠~LԇVJ׽ǩ{vf; QvM5Oߋܯ/<9u_k vyħ_)NΓrدۮ)b\,p{*5lc6tQBä(8Tќw@hj"Z6kB[hQH@Q(Q9CNt8:>p:;z\o:qU3,Ka-驘;Nl1;R%N%ٲւcH|YpZ&TR>FHq-9|#| YF}AS4\sIٷzcj b  ā,sAF8,(Vt `ycT0m=4R* =R{$y01ރ#` Ɵlh2kis~~)B wα8NSJ:B9 G=#չN?:R<<9#}?GzJlr1택GZرv8S-ֿ"Ʀ`~D3+m0fYj`y2,`V`d`Jp*Ԛ"s9gZ+ 3 gc /JAW 9(j _,#6B1~KF{:s53H 4 @tPqV6xa0‘gck"DgqC÷ZűtBKNiZyS]U'Ugiw~y}uw){{y}={}pe_ԷSzu]׻nh^~}vzOۿ_O)Uzo] pYi*K SO!hߩ: WeLଁ¨;X7q6*B [`6A)#5#靀H}yE0 cQd wx#BQS߶-N0 S'@Œj[N##{Ja&GGo8`o=!TYkN15JTQ43uV(p- py\21Qzkc:)#2 h|> 61Mf"a4xJk8K:D, 6 +YK52/@ #8#Ffʂ"zFF&_%W?QZOo_c@zE7>܃nM*P^8Σp `:\>w|sWc'**9 ϔ">:%H@9v|H,uq0KD%rMFjW%߮ӭd>܌r!ȵiη1˥v E€u VpKgΕMІIBgF] VRըH; 5*y[Y1M1eLk6hFdz;7c֘ ,yM]8uE33lۆ1u`.8;;^w/c6\\\;~w{FBo[wn6ꫨxj;}mfw_~Ǘ_]뺮/<,ijuD8=T,eè Zm"j3B0~2u?3%(Vʌ:Q{$~QҰ0T}L:hUZayzV%T:i(^~[ΫʁmP<.tj- \[G %1Ráw9,sΟWYVpܐ`|.3⪒xީF)Ԃ^ .=f^bޭ;DY6"iÝ"#`tH1 HHPR`)Ř6QY݃-xSر)UC~sL8vgQE`!/5$;0>*O('y1|T{*~xGKZn΀"J珘2icLT9șRNEhK)h[ R(O׮_Q4otȑ)>{GbYVt7BuF;940XdHŚ=t>`%H¢ J8ojL?sF§yiiFvi~!)@mtӹԢs},tu 3X1ZpaCO8FX؉qYt}P'%SgK''Kс}&h٩LۮjwJ<7{ڼrS"?ﶈݓ}}u'ϗٷ>o<9eWY~wyfF'i~?eSۼ̾=ٮފԀjVD59q 0Ze!nj@)TN0` `RfT "s24dU'7O̺*YS R #Ycr~(XIGp JK}!;@qtM̘ X}8kM\ݳr:p%H_emjFEARbE΃Qz 3`cHG,(kV][_)eܷM|G>8,+ e-sam*)g8!f}LkRzƋrϨTc!l3k+̬88< &ݽZ3ǣZ/V1Ղ|yqtHJ utMc|l ΢{&[xJ}E:lҲn}y ~~j <Ygl.3o=njC|?wG9''=JҙUJL'JdSiWP^0*%BuOHGsiFFGu=0J(|`finj) u1NMwXHnᄕP} sAa,GrH('jRY ;KIZ1 %Bm$)jA}9nLEzϫԍ13FL!0R *}HsUTD#UC_N@ 0ZL/ꈤQ1d 8CF6ȋ[m%"xyD2#q}J-`%0Pi2h̖N E`wHQ`ff=ʽϤ|!0!xpHBq~X 'x|kXkIM?[^Mg!&{!:ʜ)J$AWcQmyL'vD.O*AON20dݜ6tj/P%xo6Ѿ`ػqBXO`@LP Njp%]_9W,(һfe{hur⋔ygý\(>A06Yu0߹ZYQJ( Ntc*:ջX̪`LTUA~ϋlctuExM'p2=6AF<ȕqdi;6 (5hDu*s!*6EmTuwFoόzȻ^ Mpo9}.w˗bhFCRI5TW>U#)\iwk8.j 3ݣs)" [(  0) n_&Ej + > y0nB`vg<\b3[#%(4 S1O8eH7+QP@&AxGy>N;wud1}~8f07 bepgҠ:QTcKFMcAfth7x:oRXdY8_"9ڧr 'wP<.=5K$W=\op\a|PW_|O> k_}9<<Y*(ZY\D-yODZREU"^ >dI!sxUг=h@ ۖ%VRT Fc#36ReTގ2 C̅T߯b83FytȩmLc=9=.* :K)I=WIR}iN$3$4N ~*Y*u!(r )U4Wݻ d_J XN'G*04f3ӠyAAXN{=5lHMWZ0'"&(r80Jp4Q@0Db'|@!XC{mp6:!`pr\΄ wB{GmPRksHFn#y?2@J56@V2؁l25J䙅DDt>e\=1(<:5ٶ7'X`81<,8{|'K{`x{u-sO[~p: GbG:;'ԩѹη 9տw^;!u_OՔ>#1HrEど߇c+R>"{9 =lp^WTL:e%ҷZMϖ% U"Y L .FJPI  9\cG|rna4 p`)WN C0I{=ᙷ|PXF '.-JG8cSNe cjL!DQJi5-;#Qб^(*$kBt #  R)70 YR *^lW:oL?(Tۏ{%3l]`Lm=hę?&H7HnC]=Q5._IE_`V9Wljk JVS s@}4IXV]n1gOւPIGv/#3u/ܯL_vy MZӡs6=ZBT3CӫW;u\';8'>?0kWᬌo@I160K_# Z 68 -` ga@L9?jڣYxpnMYџ0`_{~G-q|w:7⋵N]OB#3=z̥' 07.yKm[o?̹x=>h|G+a;GfMk W')"[vtiJc"ŹlRk-íf;)ˁc&E bf\g>8xF0'PJjac4+6e?x|c{DB ]7OӅwIOfu58+N4Desn atrYe4Ή=8`?yOKj;ƀג80s_=PtyVN `U8 RgE%bOBt7e9\SCyc),:u#lYXo 2U Ǟ],tba@k4j"Zޟ'#J(tVJ]QyCOE.zp8`YL៯3*49Oe`;RỌڵg໯n>Wq>]^w//{Ցq[;w9om'<L<ܣNox<^ ܃-+pt3*ZkSOŶmOkxnr[보cG},YΓu]ݯ&~^{{ϊb|EEAZ6r!EN@1mk2¬ב 7Tߺ4mqg'٤7޻P}?OgQ܉ R&zZ+p=%Zq2ꜛE/ B _1xڜ]I41 ̂K:ajYvgd#PUCFO@::rq*TȏZ$a.MN`'㣘P+ۈWXEj^ GO~uU$B'xBc  6bM9"f2rpd<νژ4He="lՂқCc庒c/gx.:t`*y۳*9O@k%Qw JqLǢT.uu9V)f89׾;`!JBဗ_ *8D_U.UJ%QwtD6 GpZH-!FQ{Am<4r`UBm^uyu JKӆjJ6( JBR\:LQ7.qiOǏnwJcp_G,ȥ aAu7ה~Љ}ί3v<ǧS?o럮S]U'AO7:Fx_?|KxC?+?x =6v>MJGu? kmۮe'<ݾ7foNvc /2#~7u~}:vElw|]}׍"KNT]n}afFP+1i `J9Z-E|pD%M (DtF媕R}(HM(b0W~ȭkY`ŁRɆY:610c=A5 a)>5}NdSt't~J :sRK),4D0`j mm;'v,팔Ϩpն.26e:̧x.`'[.bf%Ùo `\[qV PϛTvxtџMoC{c t6R9ž.& C)#K6r!7CN5u7 tmo- ujkSɝkoWOAHE̵nJ)(cF5,3,JFgyt! ٍvC.UN03qnqt:VT1WFs@ Ax[y9>+[9rGr_QAǂjo!Dɴѝ8txM:v3t{gbO CpՃEȣ_ZCc'9ŏVڃEr,喉32?2@pq][~4} .CyiHv8pnt(t( @'sC{4d2\4e,8GnNc1yqqeY5*nDc;ߺFJ)8nWxvmW{x1~W;ק8>vAc%\_qqq7FN][?3?G?S=QJuem/|gggwsci~ ~~ {w~nbh|+__e;3úxw}(]Sۙw{wm ,+|Ox<>ϲ_mC5a=E'驥F$JV|ַ/L`["` I>2${ uF^pD:q#@gj`cu0 u^"hiDY#⽍J-JI$P5y7m E8Μ w*rR)ې -1{R͎(,ǟJGUzKV  r(dUN"U}nr|0["'[ޡ'HnX{GW#$\͹F34FP`?:6sDl >PrZ\0pGTR*Jձ[ {gQSڝjoۆ7xiw?Eo=zt؝X<N_o);w\4 nfٷۢ/m^umxIij_W^w:|?tjSawѷ'۵RAD ! ZH|VD ZBjŰ(6 aotR%'#2iIQR Җ4L' ZR~7L']΂0Qr:h( `P),FEk4|G(J Z>s/&EXsk.OGR+Heu7#UA: o/| %UhoFcm̕=Ý+޹5olKh2$H %{ePw\I9# !@8iy"k92tǎ:Xz8jr~9q>c~到 TO?`iT ~_1q9 ,5L9-}\ש6ntSqz=@Z(v*YAe* B#$tñ2Gbi-%Ł{1V 5fqυWV@(Xg8i.)~3,~~+/_:>Co6#x >K򋿈_ğVn_u_?W+䌬8na*rE3wY G/) 1&r-$t>L05KI*dz`fm%,">,X?e{NB:"02ی UP!f0'ƻLV:q Ak/QJѯPXl*NN{tUYE) ##6RtZ~%!`lQbnvQv3$NgL’ $JEZS_P 1ABg56 OXu"6L cH!3vDx *+%46ľԆiPꙆ13!\$5/|8n=ZXYQ1!s1Aa pG/q_Y_U>aWsZܪ{w,i{ Dό'XfɑI,NL 8& fE%F9Ʋr0M|dċX[qa?\M{s~̀E3VZ3rS# GU! D];V Q+}79wr\jX*L,eWWmu.V ͒iegNqY7mowSma6o _&>#rgۆOOݿ o/}k ~rYFeT1B#4~Q|` )tf ZUt "򕹙a#+JWϠ#?؁0K݁5 !ףY,ÕπX-dT M%ُC5RM @Z hJDU(tl2?HniH! 3{wƘ`!'{Ǒ`^;Ui}nc[`HP3 α5`\u4j;T W}vP043X& cB#>Fg~B6r]/0uo\GmZ_܋yLwn1߅Ot΀Jſ{npCs{|߭5:emW r֍oZoHms:ftƈ,3,I1ؐ>Zy^<qsiQΕb$3%O:]rEL1c:;|y+k-ΏɊظxkYE'(”xJPa'%3,8Hg0Z}^ $g kP*lRyHRܨ0WS/8.K*e젓Z86zǠ&Nw5.>|xtSgԟBw_u_-ha|BZNw8'';Ýe bEK1ZK| ͬ 5 yx_E͖ѯeY"O7Wj0h(FPy7meuv93=RC)d4 *"&A"BHG#1 A# (A;? P' %L!DX%(?1gw{739֭SN^,%+& )@i=P>a뿴<ҿ-7fS^qROt(? W-00`d~iD vacsb%X+a >Q0[R?,:!!qRPiaİ4 F_l0h4IЊRvF D@LЮ3W"9[8c-Q[7 qI],p"V;0m FyՆ;h|. q C}6:ƴ2.JLtDL FT%ɘk93B#V{F }e3_c=5vr袠àۉP >:]S+ 6'MO 7F {aq+dA3K I9kܜϒ\L_3)'yw7daR`!ab>Q{"|FǤOVjEЄyΝoհY[RB5 .xxGw>(~<>7o_:~>襩îr7[| 9>e^}]_u}}{\ӶжRèNj4"NwQ㐴7KhÂh {vs.:SFL~,(AKNaݓu*p ó> |ĕ}rUo?[PX4%L9𣕡AZ_ Q߰ᑤ˻tJuȱAz?F<}G2FDLYF-e<{x! L01 bi0b^sY6яbbgyʯ }Yܽ{-rnO=¿GÏ}x v掌!dRn ̰mX1Խ@J.J2Hf@"E*^*7iZs' 9j0Pj dTDz@X1@AWexED୵PowP8:0GލfN5T {u {˶*V}J]}" m`X~{x IDATy*]Ɲ4vhԶJa(4Z 2tIJ3Fcʸ!8T8B!4Y 44ߜ̭[J8Vj#:v*8<k_ig4M}6rwY0֦KsERRJHyԻk;$sۥrէzJ)vUn;YtZ+xvJx}/+j,u/^I}Zܲ,xG riy^xלV,S]ʵְnuզ<88o߾_|k}WUN,wK/s׺^w-w}|^vΛޅeB._+ڟἫ/y'꽩w& AyG$ÑOr:"Y͔p :ЊaArb>v@ x֔&o',*39Ҕ;p/uxJ90sa#~~ <ӟ4rQ<Ї>??urơ#猛7o^z8\k <'8 D›7oU:?ԧE=L'[??yYY|DAvcr49Z۷QJ/rj߲, EWY7ob&Kҡ]ױ1]ܼuGz@OizY]wK}WUN{ ݻW^w)놻w^Yތ<3unܸqnjT=>)+s8r;ƍ O>) wՖ H&c)Ҙ> q@͆iԠN)uOX9%<9qGК{s90'CyN'8D᡽o8HE=H <^{{T!sjtCxqw^߻{YϹ2vb`5 TíXww+<(-j1Y^|m̀!Xמ w$l ۇ:bkS%OSgnwD颔nN{ACm lW}68+:hhHRi""Vǿ+C#ХfFa],j5iI2 CY7N%҄1Mΐ }|#AZ߿hGL o}J6[ ܱY礱՘?;p.1OL-hlL3)G(5lZÝ;w?Ø7oċ/~i˸qF?>Sx'Z~3;Ѽ8zr4!Խ]:\v]U9s>l}z 4A^R¯}?ߍs3%@ar}oݺZ+nܸq^VUSJ)uֹcޗ b^egۥ>/k.47}# P܅#!~5]U9w#<׋*>蕵Z7o {*7TZsDcLb}F)mBC ߺFʔ3uZJzf!'4d< o^-$Q] n!Xƽ@)9 s%/3dإwK!?G, v`)hf{(( fd Vjm{U41-_k|s@m2c4dۛ-biSQk8ڶ:FSd,-X |y8v`iɌzR+Ґp iaz alN)]'>8K)򗿌yqpp>y_ki~b[k͛7Owљ߽tó>{AauzaߝWnI {i>GKwpsWqu])O?4s]IUSw7-O`oo__SUWy;|Iٟٹ 춮 y{RPF'fg׾C^zݵ< |׺O\z{????گΝ;;88/|+7YsmǗErSوˬ3R*&2:.R)ѫPq\jRm虌.Xg=@O| @4H$QM#IQޖRZ(~Sβ05j L)or(Uɻvdsc9ݻh(d1u Lԗhce AJi݈0yhSfR+,oZQ)Z2dkЅZ[2Jk@#FzuxU I) لW$s"S1,h@OA9|}ɀJ炙Ө"ṯbrX #d<mpq%2us>/MtfqoXVht Կ7F&ayϢ;w`ݮ/s;x/n߾{[PJ4 e}888ة}ovzյ[n۷-'f;gmNqQ]S߫-$930cb#эAR' Й8MI^M=[NQה OV 0NCw tPMfG꥔]ʳ'Um0j!K4zR\Ӭ>8* q@U\lƃ,86tA*u*XdoL}4b2`+,J 3DZl9pX`1-Z{fܫ 4%2d'ۨ:%i! 3{p{[[]e鳘ma=cEU!yku8(Z #Nnael ֞Irdesmj l ܵ Ǜ+uJ2.Yi* L>OSO {5Sˀ,ZSXZcUZjx7yjѲËfm*im3g[3<yK4e7aoNKd?pP0`L)7(A1Vt3;98A1. 9CN"b4BXg]`Fx u(2.@~ВlFA[ Ѣ8Ms-Vṙ BRÇF:=$Uo W} ]Mx:b(K7Hdur"^Zsz)QN 1 F2 rʓc80;23 2k ǽ :%,'>Y*@2XjE/~/#JxjEl:VadζE8%V ^ Sh)ǜfJ>aLH!MMNo<P- qwґ憃{()/<%kNf [/&ŵJ)`of^ךK<ӫxZ:J_@y!se,Q}~F2u0&zu8qM#^W, )[ 'ŨK[.vH :zuzAM3l KH} AF<3g &cxx^M=XJ% cH `s'_}%?G/'|(M}H0)=c:w; 9&X5C_k9zN[h "U ͔; 0bŘp\bݖ!;ƺR0BRWx5tV۵:Gۂm8^JߣKmؖuGJp>QʦHQo!7(օ}5+ IkCl5)%H C@2`o؛r0xhEs00 =Xi[[l!U)0̬.D*wŞA}xTb;b:qo*%8/|}Vp>]xK/?yMEF Z K?x%Vե#<SPu(t` )g(č朁䝦 ׆J h,CtќWޱxYuE6*ܗZ" wY/h(%ęEh)'):̴P= tbZZuH{aTO9axltX5 I!&0O6sasCDcFgAEN8=ŁZ63hp&G0>jU`t\ɨD8؛9L`  gFsfLFI9en0Z8ew:8ʳ@ 欒"pw{  rXi6 8F0w0|_9?KSXe}]&%>/|xi|}]m(*ռg4G2fL#H7QeLGRKRAw,5(T*g:ݶ xVKok#}-< ̨M ;VKTeZya N{|Ѻ.:KHpM@)lKuzCKA1޲x<.8.GccKiZNxK~6!hx?ڒ%RhคR}&ǔWmL9RZz A} W4W5FQ)U0H.`4 < @ N%.#l Hu\bx36LYdoJ6uDf r`[ }w d/=G|J8pkC IDATGgyM;1bèϼ3-ڷ:ȍq1Pq== åo}ֆ.yvUB8]J2`(#1}^!zDo )+V{KF\S+ k~)h48WvAu*QRt/fvF_Ȁ}ldZot?aǷYpSN= 9wlmђFJ2;M]E]{&cZHjF =ÜJ-=6oopc30)tӄ#/TO~8!eu}]_ֹ&yձEw`Q18f0wЁF``[RR\m8ȉ-<@AU!RՆ3ٯ0f@6w<+G<4B!D V @Łт{&:tUJqC{@R=+6̱ؖz2# :SJ+Ϟ(ehL`HL{*K*=@2Oh^)V(.ϰ`0Ww"FwȢ @.C4~+/|Cd)^ƘNXbʐ!}02Ub\4FXkM32}5S*ƠKa_&S&ߓ!%Y|" y]kd} ]wwEUSZ<23ܿgSW/}x~ !^w#Wn=F;۵ף\kL7mj{Utˮ]ʾs[k]ק۵kjxg(Cz_mW o^75 aTsA=f^pؖFp:Ta hT Ѹ) -9۷-<CKOr3_#H\W)r;%,SRO  j֬Yv'<Xl/Ult@9K== .*=da#%a)W4nT(ck F"}! Fp/Q`6z0Ȇ;g="CFRK`4^t-GhT3t id-I)%Ώ`)*aC摙a:أ7KznS_e\j K9@h~2]e@-B OqFǔPQӸwK)o2\R0Jgfl6=-QJ gꗋQHͻRUyq.]:w-]TN1/K+\XUW&l^~0u+YWUNl6ϫZz3\d(zUߝwfsy.7vYG\e].7IP ݋wZK6h^Trjׅ1:Kl&zi 5Z>r7̖!ecsޞ VܯnjRM)cY)@prlk wPQ1eucւ!Prv0mb_"KQaɐ=A ;7+됪ko}j~S00ݑ'F*5iA0 $O 8NYi0 (1eh6CCx_ wle5ŴCKc^he{țW[0{|AVsX 'wkceD)Y )*޺ٔF #AƮgWz =r+3hQK_I7G̶XE:ظu;9!BF@)֠F9ԸX7 l <&\b ]l gu@g0oxPwlWl ا:mr^1Fle`݀-tV ւ{F }e4hM r!7XEڧ܂0Y-uϣ=% 0qϤ=rRQ(يUZPz5-^h@2L7ӯWȋ -aJF%j4yMMmtf\qsƾ!?4,0DlY;Vkc}吵ˁ*8KTfʭvU]T&C ^|E|K_:@)Cf?ɟO q_uO$'pcYbgrzg>\y#۷nyew'oԺ^emDew'.+]^g'ڷ_^wy?]eҮMͣXU#"&Kݷ j9zxk9Rd/jmo$F>@j8$`2!w0㉬l S2x:(Mx6,^[ F2؇) ~౯@b4-DHB?$0OON(ZH]kU[Fc@\|wJj&%;w^p6Tz@Vj{5-@)?3(HDDȄ6lozðfneY TWVxiME[ǜY6B0lkؔD/:g 911ti<'t8أr(* I;#gp%Nj4zFueUۗR lX a2t#Wa({"VRGH[!!:HfpjٵhoɖLBa{и6\yM1clɓsFk zܽ{'=x\u9T{:J)aݞQ. D_^E}˲2=+R ݻ__g>Yǻn-x&~]O|S@kg>O<v}wmcoo/BAܺTG)ϻK}W]n;yFJҹ~J)( 猣szDvk{*U33R<>>~Uurmܾc.OOCʽP+ j D8tA_Xu( gPdc"@hdƕUdY ǟ&O@R%HFj/U%P%oNNޒrŠ !@lh`E05z{-AXդp[bÃ1 UTzDw̌fS2\A [dK0RlYwVNkO2޳< 9ۣ!]N%8:x!QbʩGL9F K)ѽOBDBksUÁR0vJ -MG^@$[]2'C>7&:0 ƈf-Ef/&R_B(uuH1:hRk`#;Whb;]-~F)o#3"~uc2,z/F8cG+ڷNcܧ7O (1%0zϦS}5=9 @? FSN ׍>B]V#pygٛ2%l3VoA {)X/8NEN&2CMa8^ZgU3lhlFh䓖ùG" gd4NDbbK )W$X7#\8]a'ot]};:ݻxDZMrΝO޿C=>O}S|>ᑣ^ymܺ=0;v˭ͻ7mfM\Vz_m7{?l}7r?9vy]˽u}z]}z\ߥk]brS6zkbq*<62jӠG<Xq`aސ`(W@:r))!RB4R&Z~0C5g`3Pk=+pEU+ hKC l M<6FUd&Ä0Y:VS%R'xZܫ8ȣ^#%Ͽ꿺{dC7zRdRKn:@mA;_-)ywFyzJRvXN7SZ͇q_p*ߓU_ǝ  -|d Hp):U\*"bUDM2Yˆ}y2LN7YN*$Rj~5~0jl)v`(.6%?1֧-(6!cx䜱 yqGedɘ#![Jd*̆8֦&y`di`)%׷ץSS¯ſo}S?u5yk00,5*BV@W"E) ǵ~0`bJE֘n*/v6dӫlQ33Ϙ#zHu`o4~4+%VH9N3oXŋn(]^x m{.:GdI UZcfaHH!H1 {x3;_ 0 #{!bfAgCtw[l oȔpZXUALkO됮dvaaqt? .}1@bvHAӍhfEFqp60pOP0c76ބY`Fg6BGz>>\=!V@<>&6v=_cNŽ iR w j>"dL1GV`8I7璫̏b4!&#s6;=u0҈gN|̴ /chbX[1Fi<` Á0-KH-m8^j}ZACQcy7pcA;Z);6SwXQ" # k_ԅ==* tJd[jrSW3`20"Qe>OеV,C˲`.qOҰn?A/ ~ꓟďx?GJz.:80u8SǦl<1uy( JQcPZs\tʑ&.>ڰ x-+ӽEp1Dl%{Z,}lR*SmkeD usVZ)H+f@;7bm=#H/v@i^)1O:kSg}Yy}5c`.zs46DRm11% IjL{LBa@)"/xRCPV8- :ǬIE+S]CXHdN 4kb~kcڅ&U)9@O5Ó;Gnㅜ0[xy6Ne  !15H L6@4o¸I,2~m=@ u;φ[OH`ʙzmvC e:;B1Cer|}I.xWEGkOgd(N))c7h``;,.{A OfƳCƕs =(DOٰ7=tV'N 6^_vWv^3?;?x}]_u}.9Sq0!:dԁ 0S`{36H> `cWIgR_e攱7c3waN~j2c{*Nsoo3a'Găa0$:6& lu0~piPc1bBL'{y0(i֔)xc捞IsHq:5?WX(gCqB>a+#Q&@bxF_ϔ)w @*2A Fa)Hvz {IYD}-cg)'{3x]:sG&9FSW@g&C<}L'WKZ!ovdPOÕ&(J{7o<%ņ' ?_/A𗴦y1S!j4 k׾ǎ^7Oxixgm `ijJy,R5 : CDо'lfLS@83pB2B~ nBSdA*|}\J3bn@*9;7iqPiH.hk#j+#21N:pAi>U`|I<}` p}6k 0;ߟa\RXA5/@Ŝk㹻wV^X=+={[tOKwnbU+u\oJh6vogg;`zPX'Am􍭬}p`1@|d;Ǫ)Cn5OBߢG |G n04\[%V.8jq@OBkC?!("vc}ꝣ:!0]Z6X7)R L IDAT)ef)`)E2ML( G{֨ ÐDF#[ Ex4w~Och]hR* Y#KY 1뿟'u7ܮ[.rzY}9~Y>-'a?y?/%7|E~|ޱݞi8ݾվʞrWUkmymx]z=ݶ׺O_îOvv)뾳<>[뵮=Y}-t=o^7P9Ńqk/w,K @jܬNyÔ3L?pyb+Z;06SfFZ?\ L/ÛR[\=Dyà5-u6b v ^0r C$o]=0, p4kœӨ à,r{%>q m_ )("a@33NR\я@^wv%٘ўzc,.dN;屯>s0ۃ={rD:z [:8q\ Qީo#2 `| CCPכ+/~Q4|`9c>sK{oWXBE#[ڛ,1T+Iҙ(_֬ ύj"1 ι! \ E8lR %AF[2Ps=׆YOGi|Ri(q2 kXjŜe^YJŔPAVN3C-l;C_+{Gl ǬWR3GKŶVLU{~9wx3(wWQnpiT.U[.Wg嵉K=;>243\kAbSށqTo?j|=b>m6q6DF/Ϥ)3ZK-9BO6"2"?I aJ7ǘ?؟q1%&D-^kB4Շ{z3˻'SguV 6` h\ k-FվZRLF|ʳ[j_ߡwaznA;q{F `>6> _ጫ5P}~eRz{e_ ζNĵnPÉEc_MgTjt*wj`qAygsD8 ]]exމdf2k`Z9%l)]9 A!'5LȺ6ԀFK}q~Oa3 n0bJfDq^agi`fl6;6͙߿ZkŠ^Ծr,^ WYEϘs<Ͻrr}׻?Gq_xWyp2@<󅆑]rXk5{Y}\'׫]yy*'R]O껬ߌlN;oWE (w`ƭW8'm.NCxhA  wG\;0Jkdȸ#q^7wd1qa2 Qz逻zCͱ40""^VAO,ԫ9euE[ Ɗ9wޥڎ=e)3o@wJ1ypCcާ,_((CRRį4C B3d>JSy4B>2H{Ei (`{hKh ձHeˉNHN ZSw \.l$ D9=wb1OZ1:;kk u9<w- |qttW`Y['{u<+~g؃ܻݱrRPJ,}޽~*_>9:::(v|||=\)7n@JҾۥ^5ZwƬ0RPF'fRJoхUSjWҾ^׻W8<<rGGGg{-7& :5=uOfgH+h[ׂuiH;/QƄHR# [mlFP?23r|t L[= h){Q$w,iެ341 # ^CuP7fNءwuYLD7јUM֨: )} Ƃ!g6ˆ4N{5 N]#" 8 V)G. C&0Hu41YK+&^;ӈ{a-b3ýEF6{kh %1Bt nb(5LS1jWcp?rG) #,L[b<C)`!uaVcF)!Պ4}AL][?CZkH9a3>{ֳ^͝4^ E-d4upFNxq;Ybqq[Jڊof[((3 3EgthF#>4}u=~̧g&8MlةU U"\B$ P%EB!(4TUR+jPR'BAN8d2̵s^ֳ>޹gf{~Yk=+2­Co<@9khm 2 tfsr kꂖV-E" Zjs1=ϱ鼮c);`3WW sf?7^RwOs{ϲ9 ,  9DnAKXl8 o 5lsk>A[8f>F qD;IۛS ӆIbOct36 볈ęfg8gCG SXeP=ޢLh^'5f꓄g3f?\ +=)}OF#m?~DaY /466W)CbMbrO+f_CSVT'0ŒK1/6 3s,\w,iu./b6'׳k8v"ã՞U@eubW6Lw}b`eZ!u~}sV޼-K_'y5%s,Q=vU/9^~:'.sN\%_n'.kk ̈́1ƻZu%{rA~߷<ӍQC.}%gl{GzRPKoa6~ޚ*̖^  5k$4#VE̲ إpO Tcs 9IX=.Wd)zSTṶ8&[Ĵ9fnbBhY/]cGcb@x@B,|pR6PP`(;5Z z"HR 4D:¬҇n-,o?^t2]\,]$ FV*\Uv[oo ֱ%Hl|C}./3@uxpl:bޑl 1܊uzS>,h*Єh;=/@b2B&Ϥ 8^A,K Ƙ;Aϊ@ 2 iX2!x&0'0]a Qfز4oLDXsF1LLy.D $-Nٜ6$l9pHC `>Iv" #4,jqR\^,=Cĝƹs}HLp`)'\-% >?2Kt]ǘڀܱ˩$XW -!3EW|fۣiXOk* 5+3)g` D;xLНAw;0<#v%9$bBN]$thk7r?5Z)X]Q_x1~7[sOHΫB%yΌisGl>:N4L? ̀Er$^Z= i@0:cҳA'Æ@g\x:k(%ǘY"!67'lbY;qҽE_|A7LpJI9#R$}vnP5݂y8Ϙyx@vPa~H\|{w`hHٯͲk_eGCliKFZe8!]!cɂM1BhF@R2 e?'Vػߍ ~94U*W\?jݺn9e VH FyQ3mK9uyig fq6ѸٵJ]2FM`yRHS[dG ӢJ$ObSwIq<ɡ=@o *tIp1MbjXҰX+ABü8/zXrLjBlm0wʾk)+Lxº$Yųcdɢ3M0Lp^}d5 HwF2mX\s̊`5+iM2Y{,FpETodK׀ 14jaI!]ؚ]XOgr{y"sbO`X< EǸ`SY1)R/AE*C`f%'zI+*'.Ȟ5B=1H /DnHgq3?]}cǼ"% \tg aИ9 ׏.baABPAF)H7Tb!?-Z:F;q(mt&fv4 "ljigV[-25)k_F Zoصb*WZÏm?_z^rUU*_ۥtUlkuø0ZHYfRJ8s 8# M##@&0]t"mA$kWuxjs'.Kq!F`v.)a@R];35EJ eU; /bч+69 >Hzŕ;,u5t$R *swwUd5:5qDXp O A$:i ֲ0F BaE9-7̪ ~a_L8vaU0Lj;a`ؼ0) l>wqA@xvW=$H(jY6o ]uM'@ZSqp'iqNQ'1R}M= Js!ALkpv ٺZ!>Y3y  ǽx5z1? u|`?ļ~ !cܨOb$ 77@p b;z^Ę`qm#><űQ#w b;^ IDATO<ȕ{o^}ǝ~3n nO<w?x_}븶ݞ:o<^ZyY^>^vV^v.Ϋ;ݾ{='v^4&w{N\}snz;)ϻ=ϙxygNw9YWJVȭ ݰfn,ɀ.E48p˺ fMЪF,XaBg<Ҟ# T}vi=X f64"ZntݕATV$8f. ) KI諆RеcH˷dd *Z[z.F`I"XJBn&~1!LS"e2OmK[&k.. 앴ohO,@}vQوpYF=rYd7 U#5XHDI$N=oX4/>NP`T&`qIWo˒ 6X=EwbJ胥TCd%H)`)0g/s $(:,@'6"~>S2hH<3P= X]`(p9 t;bՎfoC|XX7KmJ=:g{ 8]%$Wـ+ŀ+y&سǢ#TD |;@<~X#=8tTL vmOd k5;0=-%>3^6FlڑŽQk֟}" N[_H nCeeFQ'N|θ8 #B"o$A4A싸` fW~ r%猜s)ϺT+wV;=,%kٻ}|>\yE1;Zo~w;㓯}-nogS-ډSQHEm;]o]FҹcmXw1vw/ZG/<9cz.@M{Ej k`9AoVٺc뫓W@WsW'DGRZki4,_E!]Rt9WJ";B@>0 JavI[f9{p[ J36gV^s䌒3vN rfɶ.w2@kf)(9hFߑ#$xxJ^E6M54p_gLr|~6{uzZj]`͞ѵ;xO=CE8z[;?[tLvJK)?ffp͉xLs?]" LD@m#~b}޺SZڂk"@0Z]j=%-@+o|#y /}wf0q^Y×]R=ql~n}xk=qޯg_PJ4y_9O6͉zgǾ^z /6O@vƔco..d 薨~Mwޑ"NTt4(r2v5\=WJq%}tg][ A4.VdI5S6mmڻYsֆbXfB/F>B)R2£9jڱuo h7}'w-9x!BaLRЪf@5nKB}+RT\۵Ex`'SㆻrBx,'4v^ɜ.=֤qE5kbWsO N%eRzȃnЖ,|M<98b :Zq~7#UgC T $Z@}?c|({n!6Iu+.2y,Nv& ,3!p M4@5ci)W9ٷ!) ڸ(:)2ƊA.uPEkl0E|0yzzX':I9ɾJ)v}[k SI<'XM޷M1aW8؎RZ$;=A#gLcW(Ÿw7@J虥N~R`:bIXKaptrG#lӻE;CZCwFHKypk~5W 6L3"#77G,"{vUEGGGg^./j{cwSU\v WIc۝syNwgoO|˷C_O>vsw~zXy֊u]qtttxMC.li$Pn2ZqubORJ__n/x%A5v|||&=_*Yk]J.{_D\^R땵u\.j.H)]]79Ʈ[F/RnۈDHKqUyEX[AUEO9^Jw]Ib`l$OQNObiZ3ugN,(礛R>. ic&Ztq R$ I@;y?JXtBo#4udNYRNN|STS\hVEF5JA|5YlXoa:!%"&Xw=2zUg ú)a!S[Cm7%V8{ Ve$i>FCs1*H IFֶvlsSТK&O(0߾O}wW^}}g^>zD/~zW}/֮/"#"~mqKqiCkXZp<(֖fEqĬ "z,0lvm@Uq+A;`⃋l@j=,́@J f6uKk թ=dskǵ!C2_rrm=ν lb%)%#0,/ŭ,Rzsu!<8aq)Y~wM,bV%$Ţ+'4aC(h Y1 sIUkP7/ci#*[eg4Yn1rhm@ن-ڬɭ5tw9l/ՆtCg-g |44vQC6|<'Ĉcu\2,7AcݛC$sLo. eխ .6`?N|s_ҝزs?;H;"h/MX~׷:kRe19սKrZۉq0JOK3I*s>L=(H y95O&ztwew 23Tj2L+kh +C}r"G[_bI]ssr:'z@ RIcr?R rl=̧8);]IJYؠ "ޭ 2v*iڝ`ԯ.skR]hJ"H Sb ,bau k,%~ܝٽr4;:J2t>TUvA(^x׮]ò,bY5<W{7EuyK)wԜ]gke|O?~/N_(/0_.s^zuN\N眸*'J.e)ӧv)&\IkUɐUf舳N[=:/%EM\53=TYQ",Ms&,m]0 ]/k>+Fz ljh~O+)zqwzH#)9Uղb7.6+Ί:Nä`^%9`l/J`W-`70@P3#-_#W_e`?kP EBKyU[CNytWb7m+Nfcs?u#h ݠ%r\DXHEI7~P[#~ެ%ƃg?:,FPA²馞 y krGHa dnݴb2NC[of| P+WAZ;_4g)9a w&$nE9{Pya^rƲdAbf>%2鑒Ufp>}* q XW>Wo%MU#g\nY6mi%ˮmPxf{-,dSni*Ah25RujsdI(Ş]M <ϊK.$)EoE@Jdk@GjٜJq"yf/}K>/;GO?z )%ܸq"(n~7~Wя~{QsFrUU#QA~:YsD1ߵ6bW;֊cnkk8 WcZ=A"Z<⵺^,_ n6\#U.݀Y:OsNt$*Y]meK9J :,y Rv+I~| {Fdnqa(25M^# "_j Te_!ShSo5 :6o!$&]Pְ]l}$MHv>NazuWBHoRlR02csb|.&q/o $HQ$Q ߝmJ7rzF:8o~X1"vv([۬ai$UY-<(EZTgvt}`a&FNH 9|K-*;ށ|/U*W\,|&՚:ȵfv۵bZ7.w%H=~֛[L1im͈h*P ciW t/Ny2P|p8ڮخTëXƅ6^ jkagZ;{HM|1$v8]%N0潃CٚM>*nvq)?w4XA-C#"2 z_!Dz@{SdZ=;灗nI䁭is;Yg\ܭ]䀈8O`! Hgmʉ1d4 tE6L|L/V7UށW>Y 5@?CwaA3&e"b}ɓ,} pL %i3qN:<'Xcb3pv'iAPZn- k]m`BmmJēvkssY_Vlb}\26` ((<|}s@9b$F D-3s,Kf)&r =QVx~` {lJ4;69cSW kMcMdٚ1™j M3Aも:Z MO^9Ѭ]3Pպh֊]u/&NB~q */ |9ZW\rUvJZٯk D:2-"%14xts5e[U>ޭ}vE/rd ]\އ&@^\tYJ8iVuԘ 0м6wo-%@FXB̀Е*BKfj~ڥ`=Ssdnfp } 0 ppŷHUFD9'n[fͦՖ&`d[e:1KX-dr[p :FmBM@JuWdi72` ghS 6c<Rx30%"|Io)7~䑛x}WNa $O^\4MR8nqq}R_"E_z5$P2P* mZu@%hN>m&Jll<=CHbcx3?D CX@w׊ڰk ZlW2% r ώ=خCвe %gn Rv`M1b9aC/:Bd׀R6 ym0XЯPE$1.HmͲބ]m#E=^]Fߐc6 n޼ *?x}G^O>$}Y|?/}mo֊>wXNѼ*W\XWV9*u8,0Z.vjX{ Ko(y^R$#+n4%"OmE݊:, q['glH~bz{g(Tw #w ^@*Zsq H&xHub]]:.nqc龹\/1" C/iN\cbN.80z 0j։1)D8ڲ8@$>skȁ, IDATA X)X=k^Cี337\v=5{yJ>'sˬGqhz}ϱwzzy猽:W8]8&ea8XLxW;VdBrٱxp撐 >.KV)8%{JKLm nAPEI2:/2 PL9!BKT|)aсPG]>& m$u1C+tv1\2vu-S8iubtt2ANɁ)_bcӈMlhe;\Pe*HXRDH$Ւ}OcB@HXqNK@ˤz9v$jNe!N Х}w[ d@MbHI} Fij"2> !"@:)`BZ|!PMGZ{ez{9>nò,Zwxxxfٯ󞸗z/`PRn#^ZpP2 I@Z}2wh^5yRj <F0$ab2}p8@ uDG@݂m !n Jo ]9B8n-fQ_]Jaոb]ݖ!4%PT nh} w[E=%n!] olES`{)j52*[!Bdukg+;j: QrMx8CQbJ kǺ =A؈pQ_kCdS@tnp+#$#o 4Am4렋Tv{+MԦG?B?5|: ^O=$fuO<3Ca8*W8H >YKB?_StRrKww ry(Vn"!%>[@EXqI/[#Az_|[/ֺtק ;( I##f7]Ant%*< &0'& [mTrV4a;NݘU*1ݗ]F'S|1υ{&3 (𔩪"(=OtYOVHB:/ADlr,@,KRz< ~~ ׯ_{^s=[nx_{ K|wc%ڷۺl׼\s>rr+ࡇEW,˂?0^r} u?O-,`Z{wXS[C͛4"ۃJ61.=. "/ u%5!eEn)M).)XwKTkHZS $EknʶΙ9bhXs NF)^@v`iR'r y "NW@ϕ}qbwdՎ6#4w UU p1ζ ܲx'1_0"r"SCǕ3s$, ``_z̉W>Ez`e3L? H7B:%9L4w~!4jD4H0KyHb{/AĨzF̺a;]/nбrbfRKJX@0c; aCuy}xϰ/`e33km :cǮV thb)Ԏ1b3Mkƒ3Vq ,3UjǑMMRºxꩧB=y>cY|7}g? xv#|e&fػw*ƍxGSOr] /׮]ѹuD{{ӛބ;=k׮a۝y9_"}{G>ۗ+"߼?w= OԳx*CޱμZ7xεu^o|qmܺuLeYs$zV<8883ț` 4‰ A@Wck4|;(|`[ֆ:gA3&bdrxD|Ĉ-P/dxU2˙PI|>%_XI%3[7wN>FD8Az`(%'We7X=R!@BP:bƬ@BY4 T'CT6z|/#Q"N1]'"kŮ 9z45*x0=?W1*=*cH3o3#K2SWk[h/ƺИЉ:)_FxJoݳΐ$?3K@ӊZx\o}Omyw^'=)usby %@RچC<{āBt]T_OVruvI|xx$ސY,uVG@'yn7k+Z/a\[/U YctN,ŀNu$X{yP [{j7򘀱=}@WqƢ#.]#&;)= bH3?g S`x-as'Iqº>=?k/w| C7ƦX}G #|!Pia8]2so/f!&h ܻ y`<[AN |/+.ĺ'F#Fk2݁a6^({gƉ^)$jM)>+Utp wb›X{FH攰C _g~Hv)<&j56>Z9Az7C30-!ǩ7!.'C<|jq?#$;ꩫ@;msh6jϭƯY m2F1>K 9z)֊eqŊD2UΞ_i/HEϾ3qܷޝ>Oe;-wgLߝW}ymT5ꡣ#_o~3{E[?C??K ߱O/j>\VR6˨Z9y/~==91߷\vZWk)}p</⋇U*W| {wPȔC2ϴyqe?<_J8>,,لDgےy~ә%TsadfN@'DvcF:\ &BA~@Q{ R6ř_:dw`=9`[}nFg#2@m' RK]ȫxkrZ,rYy9n-w 9$OI'6N`3} QKx&(u.ٞiD0C5%by#zI+Wg>k;O8aA cmCLdq|A_9O=-@3XslV:9u0ʱn9 vƳ$A&FPF2ƺӢh}; Ka;TuX҅)HSG0Mϙ ZzM2Bv\,'#l \ʹ47t4k+焜2;-lEXF۰D޿V1~{myT[W$H'.UӁ.S'~n# \[n9'ee q!U^1];w]v+v%%%1zw"= Z1w @~ yn<tmLsD +pֈM"X[ܼ>K~~?ymrAH ԦX-uV9x)\gb$v|A:2 }4Q)"~!Јg@a}s_(\+p,bق? 0oI$ N:46gvÉ: 9C$,Ȭ=$UH#I$@g@p3ț #ydwILݽ.:@|sxqee`_gWyp S}mTx[,w&LYK,)/{_P1^<*rnJµMA|IZ(DK o^Ȑk}'n=$a^<:Ɨr'rU^bgԟ -? _G>OL\rU+Z SfZkvv10ZcW1P)?Kخ~1U:dBTQiFtRmX %c8@VXI&/$7""Am&$h Ůej7W^XQ_pjݕi1.fAGpf +c~Ln^w%Sauv}+cCj=l?w GU+.o{{S?<: HXUjG J/L I-;+7Uhny8K &56B:*"fy@;~.L77ֵ4i҉Vj*bVb0>;zU% &)sD,$JDL! &*-qILG:wMO]#& t%"K #n IDAT ׁ,t,mRfHnPFc$p= Z]Tm|Rlxuhx 8x5@)a/;؜gn׽"g(_rUUyeJqT"d]͞8"*#Q _BGN!J$ɼ0]4S iw@_~Ejc ŮYN g@,"͠+pw YȀ" n??Gkֆ]3,ͭ)DA H"3TдHKԀ@kFnnGzJ!/'nҝ+5"~V g*UӻyUKYPLZ 0ƙn[Y;| vbNMk G,A"(c>A )ƈ;'r|$ "4O;OJ \s;C8!iQ1bKm;4['58FndfDZxFNjqgg.hJ`b!k̴~f@ࢋDHd{PA@Ϫ'T(43ns 1 41 ~J5 {Ҡ|}M0n=HR? e^o6sxCzPWt&(<-'Ta OlI<""a˪w7;;ވg}]{OlUt}mzvUni?mUϞ~ZZ 1 D^^zOFwW{˭/5spγkiz.|>}[q[ގÏ;ob֭LLl;ACa$D^%TunK}Vf$R!C0s~ %ʹ#hpB" ZƎ 8 șT `!`ȖW1hT#GX7&j`P&I$n"drfl-pxm=9gy6#K@x1*-JI==h ^QzQOYgD'5F,\K2{%T)NEVQƢtJfrN~3:'M21g/wg+utsPy&OH36(pYokYׁFhy$B^S  M*שdco1r?ЉЉoFSc^A1g=J+/8HH>H&7KR,eF`!EI4 A#S@Y07,e0@Jv^H;YҞnɻ l%Q||ﶛbYƹ\evϮ!ݽeG{Dv13O;pǟ'f \vqbx^vJ-e;ffgv=15λ.~/_ٯ8v_RXLqs~@Im[:ybTگooκQEvREhcVF<3\dVo'4 YNEyR¨U 980*~8 vTDQNʵez|y,?E U(@&of<'jr.-"ѡ D\gV= Ȩ F'ӜV=<2ZĻh@ZwLLrsy@ xٴ=׭]̈[֙"0𢜠DF㬠)2/mC?] krd0"J'$ !vl#O~ Ruvh8/HRDg$$7y#,Q|y9$`(iwc;O@\3gIwN# J%9#pI;i[M4=_{V/"CTό7{; >"[¾}RGهJdy%ZmqH+F:B`*/D$e|Z:Jll4#MZDtJ#91<:>Df,ƻ]j7n]q8o1YukN[==ӌ.XB\;}/< >uA{O|mŹ̥h-ǹP]qg{b;;mcgk\_~{_]1}د=1;s8_K_]eBzc0iH 9{jU5A i4{(ҒƐ)'pg1ċ*^lSW\jF&1#sW$vϕ躪4 eO5𰇟>xۻ?W9رe VbPr҈6!l9uiulQ O-NNR0z~]!PO,)'Yh :$ 9 BX${eoDDՓwwъf0 Mf@QsC\tyw+}q/+IH/ vI"7Y# 8wbr<$`IYY!`Ϲ3ꅃ'a&rv>G 92D< |W@ B2v"@z"$*go|f aU.NwRj5r6ST  *P<]!]!\fzF19D=}_ .e612R "E AX4:eJj+shC̄Ce)lS5$Wڪ;۾!4;ϝɌ-+$p8,^333K.n`0p8Wh1=)%4M3m7sjGM''~x533*rB@۶(H)myB1?qJpΩ\v!LNN9ou y h49-U;" 9RŶО pV^`pvw~ݗvU6`;; c`@Ax?#enXUcPXoDK/ -jHmLHd)!hŌw)k# {g"bk6|KTovK70c:_E\HA ~ Fމq 7*+gWa:PZD Z Bޣ!}R0;Ĕ^-;vlǦ3x롏+__& ^b;`#0#Zs_|wW~}s1M|;q8D")Q'hl Vk.qHdܱ禈o s&XSRbF Vh-3{F<x(!PFXi@DWRc!cZ& ZD>94 "uƲcv,H}DΡլ"hNoqϱ3&|I{o&tFX$EZ '`&<' 7CH#4$ 3X#3 {0RI3-.ԢVO>_=Ęs^D >OQּK4g٧Mct]%>X}LҒD:[) 1l41X&&HY{)@$6)Q $ ƒxC$=gt2Y)Wc! ͊d!R"R 0LӦW׳`~ۍѮ۷q5s24s{]]:ag8bvtdpKn}g_wWKݯo1]{.~%w33k;!<9Kwo}=:몦6&ŠB=QJ0ROy{~VUch才&$,ob(s@ -Su6]B)S5dn9rw9bD[W.&1֎V'& Q+ƣ730 h"ޓC5,*f+Snc^Gj+ջۘk:!N:,2Xt&뤓s>ޅ5k`ffS1g?J X%EkmقSz.'ͯ]Zޏ}xŚkmЫ|bsVyHRH O"XU>lsbgT(GT5R)rV9)h싓A=AвTy*inB>8 ^F*QuNs+II!Ez'^nBi~[žo>j@#z!_ruI'a 7"̮YƿrvN眈`pny=pq_|.Ln6^6la!}^FUYBӵd6u 2OnH5c{̌)!(8M6h$i"m}6ЂS_`0sY>b;bhr+E[K JeMNM&$PQ@NǖZ&hr=ՃMy,L8*r=rF()cl[/1#zZD UbŊ? vu']ЩP+ 8N,61A`|ࠃ׀!}ؼiv؁kߊ/~8GWNc6·w+?g>شiس)#2l#(fFmĨL1(< F( 5D %"Ơw2(NF D*tn_d{$rL0bA^ސ{FQqAֳE_\A ׄQ0jV\!Lv@yJ(Ķ2*0-1{6(Q5@#K_ۤy1i TWER܌|Aʌ"=w^F}J8y_yE; I*I Q|yǘƔz){>U<.f#HcJ9ʹ)?턍T0RY>XD'mT y[/ Z QQs%r!) SMLh0PI .@"~̄"i@<۷m}rr o{)XpLMMaʕ;bEG }V_88%gO~:)\Ox6.pߏ;֭? )+g1xCH =*Wn$>P*8YxvbʔE˘GU)iBbU' *럿v:>ml&%36v+wsuUēq$} #B R0ы>-P.N\yO_~o5Ny#v؆?㑏}" 5? X14o2[(sjfpP g\:_NA8L4$&|Iv!['h) W"yW^>x47.+t U%>at!C,jgAHy^kl"ά@O<ǬhфvY͸v{\[zB6e/ݞ0_}ݯKn+p.m;㾈 ;6 i$_oX}=sBݗ?n5&֮2ČA]_Uhc @<4$5CD4\91(ދZvBa v ,y(&C^b2z*=_i41C 'az5*%l3ۼ$<f^1l4\[7HM/Ai)y V'[`a&־{gb_2_E $!ܯi%{(>(EԻ*/c!-Gy6Z{+Wu/y?#8o 8^8{c_C=tSS}S+q?| ff,!O|AN6mgudOx5|wb!|Bdyd+#JM)jg'R;%$=)!oYo@]WU""Lb0iP(-2RGy9v\ҡ/T ݗY%@E/h|Q:ky5e9E d}%^t!Ml 2^EI!\K.罟w皫3N;[sr?{=ę]UU{}l^aʕx|cl__= U2i99g:3|c@'vͷ~]vf׹J"dw`uظxO1| }0=}(}ٞXc:&K_9Ol\iٗ`VbNUG,# a()1j xՉ raU>=kR'/By1g1\2fHc!sE6#~gdUm&ň?bЯ*X^@+CNh|;+z;K;T$$nҔ̌Bh:!`4ϕL*i0ɽ紒h.G Xj]]02ė]zٽ]P,#:70]LDXŌ>.=p'.}|ڽB f)տ;33.g/.~du.`-u.91? m׮6+x&j;W"%^}_UU1ӿŝK_mOwtĺ" jjR׽&3dq4iUȢM$(3ĔCo1zӚ@UH1aƔ-ƀz1 ߨ; H\Dj_cԞ@79q?!NJ:B #h(ǘP91Ԛh\׳E>gfAǮ{/9X@.] &zBH30T#59_U^*> 1܍b*$sI0ydy FFC6<oF7+hp!)wwxeK3xB:"!ހ)(;9.\’IHk+u"F2ߝ\%sȶr*je"GP]ɡE3uU)"A@JPf|Eaeg9CF9Q*]bBEXIsBJp*(˺6 9{-2"T,m; &``B)c$`'9y_*ߡd|aJ)a8fxGp8XvQ\0 0ծ;vz?fgcp8~cf}ж-$} G_ukZ̼F;Vjv13꺆shg.e&''{bo?qۯhsd1[vD¬@QUPU/ Ci@ۿh4Gƿߝ_`8jl7دҮ2c<UV o6C{PKjNRX+8Pn0Ũ+G?[& ᨈH!D{81\A1iɿbH4"ۼXT{k ^@3R]J~94ay7||Gu/~k| Ƌwt*~}58cbhVڅ{oܾ>3V6o~O~cO< ;HѼZ)p 1GZ2@@knނ\L] %#Tֽ,e!:$z#Q zGkt'WjFH<|vK\6 s4udz\Եf @7goV.)'1WIAT&w)nذzHB쳺rZΔؚ2ҍ9WW|S#ωz&ٸKz)Ig+sD6M:E$"9j;@L΁U}}oQBz,a]C*r bB*$X%5meal%N\筫װoL#t R `pγD%I-ʤRlZRRR׉I_ցEd0(F Z s#z]]ϊ|^rq~?u6ν}\c.}Oi3'bt]xW^oO}*+Q@~}UvwWKݯo1]{v2;LNށw_Lvq]Mز\oO}9'\}{ wY*$^ d ƞkZ+h*R®Q]Qtbi%?QK-늃zRAjfB/=*%C9 zgxoۈ(`8j 0 !93^Sbz_Q;ݫ* &F2*FEEJ(*_& 120 iC(B^鵔U~vaa6X 2SUE!V@9_W㠃8nw߽b}f+^?OĐ0jĶE۶h ^y[WSS gtxao=_^5k"#!l)T$DF#%%xeMp^I^y!Q֭겖 *0gtOEH;BKnڞW+;вw/y DP2B<$PTБ`4skkF]0E#Ld*%||@((sk+apod}lgZp)oiL1ZϪD{; z5jeM"UD%/eRf0u&yhwl\G?%%)s"cz !m,MK=H R]ChڀQrDYH`YKOtH\}>ʣgj9{U-e*罤|D`;+2DGfj3 vBv>Gٺg'cu,~]VGM9mJ[Ok!޴]v-bwKf_SnOpʕLk)گkľGJ&'uם_c.N>3،]}άw,_᝗KMR,pD;8'1R6*CJR^ABTs86eq3"HK"9_m L@:%dEȒz`c8pZ9Ҽkn5L _b {ؕe]fl,j4Wnoy.J16PQ+A6E"[,V%fp41)rgDN3K~z/ªzK~/~q~}Vn~K 33Өfffpħ={>á &sP7ל JZDy"$lƇTPDw i9̌WJ gK *MN7rt+H儝[wKV ;TI j?#{OfkCπF,գ.@Rv+$L: r,[d!ۤiWg6B]2Sޗ$;w.W\6ܩWC( K:N;YJY{J 1jz@ b ,$uc@3-`JsTU߂LjeyJii)8I y0\JTOJD!|X-4zYQNE`!v,MAI O$+iD!>s@Po()JEԯU'E (Pa qb$LuMkk F>JΟ°mф#@_څ^뮃O pUXw!ib+C jZ~/[LNn5< )8⬳;#k+@J,pZ_l338xg2Ī9S2Y*Z 8H G-[<ozj|+c8Gi^ُ|׿x VZ'$yvݏ:M3RpI0(pNꕛ־SR)+{j< d%l}V0&%N`I͜+ڇU$lZB>X@"7O6{UTRYYt8+i}!` xNMBT;-gM9(xjP! (-+ =cszg+ #4Lȡ]gF.sX;J:Q;eSb kH ]V/9몇AȂ]D QY$!\΢1Q-"H\Z*؉~2`2vXnrltp!!l [$WPY[``Ğ`d+D"+I*b)QGCDdH)DӍ>$1huNG}LDHZiZkm#N?\z)Vo܈7}Sxޓ{1.|kLEj$unjj+6n7~=M!n;*0ː[y.'^Qbf`zJȩr!F`FB|K102^s~M+s6*'B3 3zaW!Q`Y{0^1P͓n rnR3#Iq(N٢$G_WcҎWޡ\M|ҫ,,VI4oԨ SG%0L$r>Gx94- QA2=?1];w5<O>/ތ~Kvcpmƍ7܈W7\-N{}</{3A13jvpI^(?wdA0Ⱥe訤G0NyJaK2&!WҐ0f ʀdĎyŤ`q}Ex8Ϯ=k[VBm2];ON"YgEt@UZƄuB2QP΂Ckc)0jusS5U0h7ZPR{IXA ;7(q-=2跳cCU.RwY.C9JV5*F fl E2ږ '=3QwЪ 1E1 mhb@r(c=lfVKæLb~7L9i) DƠ0ӟ*ZS${do h|G7ARژ0l I+,Y/_wj8U oƶ~_tb&Taժ[1~TSSc[[+oh?91ba׮C}e|- |MrSJҤ彊aV{7)a^/˿m ȚI9ΌrY y]q0K(W 'á4{[mG]*;oa;U6DU7 mzv% q1fl@r:8B# שџ@=VHjcp%J@ VShxq?>'a-a4}b\/}_ګ!֠jQ.)"<9}R\Z-/OıEbh8)zUkY@llyͤ!{F<}*4ZDZYtmh9w<&_&%"3bŅ", WػZiJ#@#%M5bH"24 B1!GI4mE^(td* !꾇+!`PA'ȢHڑD ߔ$CQFJ :ػJX"RM-`I;=J;e 8p)NpI7zFT`hDQ+v9eQwk1ӸtU)eƫh_[.O; WqV4F.k1鮹ں^wu~KPU#_ܹ D _cݺ>gLO\N\~9ؼy>>жSH04Ƽu_<1g鿗z;c?3+e0#Lps΃B]"bP4if(bWIr5A,wT[@ 3GQuZESpbZJYR_\3»bRPknJ8Xlb[mlB"èeżw/jQi.Ք)q%U0,h0 'ocToPCEP Rz#[4d=p ѕû.xƯ~ <b7`ۖXj5.{ޏ|k|xp8byfqgOz嵒kj@n Emc `Yߐ9ϙbVm Z;uDR–jQ6v.k 0zo/ ۝cG-md\~ޯpɪ FExy.i!dY߳i9ֱOLV~g$c9АiIg["2&uΏʉWJӛ(^/+3ȑYCJpG@I0LpG3ZgQ?D9д&)j K!2ʜz,"l%SH\6rOPjQ=Z}z2fJ #*@6 bFvHN*11Om֌iy>Y'm ݢ>,eǣeFZ,ʓJ#c"E^wA\&tcHHs#,!,|,Q\נGevW^HQxv\ǹ]O}7&6 ݸs~M-n[xx/ˎ=+6}ooڍ3v}[@;bbڏ7 U5DU5pWc7qķq{|?pmᓟ0N98_.L4M '|Gml۶MViOϽm{K|[l;kS+u%~:b!;v gUhTj z0MRcڡ֒p0o؜' O$B/Ұgy~H Ā;jT3Aw xxw\"{F1m`V(FF͟e&8'Qզ`q0/` ScYgPޟC|=̫I6@RP[ng>y&#k- l|Z\/x6;d|>Cض'~xҳ^%Ӈ>Ϭ6GXRc듐m +@r8͓Er8Cr7xi < %oJlԈ Zi!&cֆ7o,9 @וH;.b_1g@*WK{}nl-OtY{X [Wv(ELJ x^a.)D%"kH%$gaG[lMqǤvN4(L+iTVD?Pޱ KK -j fu+DNƣ0=}}qK_Μ^oڛ-u=ﺳ8k79_תlm<ƽ#W2Pj4&@\:Ei8xwɕ,VG:j!DSyCH3m3@ \yP^k^(ьBQ`uKyy1 0`h?cH%] jE/NKSPJmpy~wɏg{gC1##3y'SWqsl@͛'sށ#9óJəM.d#kA@$3U bAؾu+.x?WY|[׿r zJ5VNBƞ ʶ2k`PׄLh94͐V;Q#Pfp+ n?hE{R<ϷBq>n=zJ(T1ZygPR0"χ={ټXI(r1/ V<9,:_ʤgh"X284es/;2UHd\ъݙ\Jhdz#Pt>\քc`Ro\J9}@ƴ xqp,q4)Se$P*,̦ՠU_~;!E| 7(.bDk,d5ҁ^/H̷. #rȬc`UopH,2^QW>Q UH30mDC 9^}UdwdbM2#ou^GDFmнrtkUǗĐh04~FJ&녲u CXOpNÉ45:UkH)affu]>~  =ndMJKv`mcx1Rh4~.8os㽷~)%m;Bb*FƇ _۰WY.ƨm=̜h4K.IQݏ4͜z#bd\ztp)5h=υΉiܙXsbvW!vsvvn1ubbR'+R;*G0H\^:h ()r5:z^y)m;AI$NS.{gH~* J:g%Qq`:Y 1+XCU}KN^={ҒF@M[|1~_m<,t!?~fIGa5l.[$>\M?Zko"">cpAr$i9\?xI2U;kKN(%y`$B/'OuVr;AdHERZ]ـ^4W /' ):hk;Öb(s^O6 @D<\ {W(uI Nsg?y+-t9na[җͷx-_w=ں\w=qϧk܍95 ?oQw߷>owر'-ԺGV:2nqPqÝw^^+1MnSw3]w!;3w~wYgbvDKSSU@ZHM bmX^Ku Z`93XŐ'3Z5nriN5x2k7\2sK$Q4IZQ !PX{>X= l=CwKGJo H$yKa$HHg+yi%se,z67 4+ȸdF ) jbR)CJ̡dETc6[EހΈ!B,RNޕ=l#̄1 3ed-F;{Tb' zBuTD8@Go <zRmt=Y\}cgk <o_ M5A @.+hbgsg120Oz*Ip=X K b_.\+"<$XH{'"xkj!se%%L6;Z1d$S3D=Yh`,BW{> 3W褙 CxQaz0 )zĽ̴sy'XԊ}իpdw܁ ol5?nώ~j<ĉ/?q55|W]IVq?x&/~W^yx/4UxHav p+~#{mwZ?M< Fx 3LI07u(poŝb dp FH7$-Z78:T{S7jrN zcdr58G ޺FmjOfK0#uBw`2fJF $,Z-3@qyTLP51}4a݁?pAU%bCv&awB=&S>"@kYŲ׆Ik YfY) |hW@0zԌ* ,វWKN,[uIžKgMUQJ<[nV0~a|S«_j|_>1uíފkG?q8pG8k{BI|pWW>$;zzg{m}EiX}[ny-67/F ',1 wgo~8yRB$^co>o|/V#څB/`1SSdPuSm HuoKIL r*4l˘,^Ύ3U5\-yŞS)<'4QCIhU/ƩE iJsvRt{)EXuUN)8ȇ$L]c@M9Xא½Ss > /Z»^I{ TM͈_M敓^~0'S?Ԥ u8@ԽnSm,nG܌d(9I {Rǝjy6Ptbz`I f9+r|,c%Qy!NVUK7o*^K%})VG;9'ARBI$1|J#1XP {"Rmz9!H3&ޜ"c94.}'hֽH<<;<(-IHb$9HP$'LdvʰMMk'!ً+tX"%Sh$1\8M1CD8 P'zH T宲Rzp&; |mܳͣZRK3$ LxHV| ,9)c I$"sv%G4y՞@m|9> r?|ܚ6#|}.Xp+לtu~NsO؜,g9ĵ-"N/Wj OH;$EdmꄐXZ$qdz+XIp)JJc?{) ڤ$Yh/aV]'x,gs9%ѯUh4=V^?aksHVE1Ț.";v ?j8z(awމ|30 .2|K/Ç0k{4Ai _8zk_wzO?7dVKiBJO>y%.^9r/ϽUW}W_} ^ .xыMoz#>Gx]Eb`!KO|$.~~l_XSx4=eAetW0Xidpx,4%NP.%RF)I@x=<FPvϧ9$lN^l(z4?rfc 'Czf3fa PzG$o ĝ m=_T==s;NSqeې$1H"&\,r_p<0@L=5$]6KK%IX#&苿ZEJH= kj ZM_|!DHOk#J|-lnSJ=q$B ;3 i';f=;T5E^ |ӟƃ>EoopM7ꫯƻ.{クOKp+?N\u;ݵLqx~Gx+&w{zٮ;3ܳgjsO}n.iX7)җ!^?ć?8~p?}cફ?\u'0px~W]җ'Oҩ]91nStϓgjOoߞuy<2NU%yFσbKĠ^NIХf/%z)',ݛͨmj6ӳ"ѝ n$ CX˒ t{W2Nڽa4I>2rWi[8{ '@€1ɛŐ-B-ae.7/=H &ohca9TߋࣶNT6a=No5ST()eٍ=މekpq'F#޿'슃y5֬Su%d<Ιs=SdM0|,kl}>?x/M R@I R:` >CW_HI"վ&{za@OABvcAwCU$|aMvK|Q {7yf1i} |d}J/H^$ W +쬛 -Bbyc'x m_H^`Ȗxӄt`j':m}7/!7t 2`Xg"wBUCN9!X'5^qJ1fPqRW%lZsr(ZMrOIf#$dK{Ԧ\OZ#G zaa ~MkߥI\]N:|O?0M_ K)(^c\>9tMX.xǃa]d[ meX.xIӵ^go`)uĽv:zz/;aD)."qs߃㼓9;u| gyطAÀ?? =_!/x>\vAϽn^>3wSvy=z>9:`g6뙯˨u_*|Go_{Їs>%sϫ?. 2yi4&g;'xnkyr9q>};ۼ:wrv>\WE҆2^"{*kwVL΄Oa fT =Dc\ p-AU58JMW> ve6wrj{ܶKу8Qޯ| [$m[TϘ> 65M6n9(SOՉ[ '}y#^[)S%kTa3{M:1a6uPR_>غ"'')%-Tpm3kT65# JI zX,*x؜IU$YOzZKl}/ li4ePkkV҉X~vÀcǎطo;v Ǐ|#&=7MX'?o{W01 \G#cǎڍgu{v~&Ca\.&˯u˱ZX,NsǝmÈT{^g*_tnyp7݄\E8]w:tu< 5\sNP>u7{>zT%l/|gn;?o7x-~+:RX,qڻungbz8/5\K.cxNFa\Wz3^p2ֿb=60zme!iJOd5#onHz}UipГh"j f%V5 GÓU3JDEz!*%{|gC){ ,$k ՗Wdx͓V=:Q? Զ?$ GIK1 @, ,D;]P[jz[EqoҸcȅ^"V'Y%0MIcD:XVJSHmJ13i7MJߌ3}olb V)Sش ]6l$AU\Wc?ۼFǝ}M Yy.U@jpB_YIA,(jT%Z؅NH"d{ERSPQϧ{yDv%Bt'@(>@ϽW-Pz|) ֗Nf> U*%^g_T=1{RjꞱY$<~X=0 jugu4ѣX.a.~~ݷo.2s=y l_4ٍz8i9r ~@ŧ?=/x;ފލ!;v~alnnþ[|kC=so^;|+<8q? ]tYc]lקs]YՍLvٵ:sȒ,V{ !5(=ޖwzyᐡ{^gcOXZh3zR5fch `HI+FOTGpϼPE;/QAY{y$dteAxFa-k JLP0]b4U#vINamzB*4;N=F B5l^Z#܃{ 0bkL+"@+*H9#BbRz1b3E>'Ww+4'@W8,b2T NhD]zq@%G#⃪8Y ^ybo;7d \;5L.MCz4U=5 4UFBLbxq^JO&>`_q<9VATu'K}RײP:60Uy mRTˊ2lS&{^*i5ļ0,q0IXke烰zDk߫ck=!XZ+g멭,s׎j( 23*B?XA 2NVZ$'P`yYT;خs3gK"td1O;K,;) 6KTF="wlrjAF<$<oYԀڸOQØlЏ]Uq>M6D/pΝkr@$a@FZE)X %*kzP?sr8:"i0bkIbLyտjH2(灄 C6r%D- 6JrRh;XMk/dz6 "D{BA@?Hs۹ S[fkgn;ݺlëz+bJ 軿;r{>i^lPd%3B# }Ç?s8|w}=3ݺJ3vϕ9J6S ǵa=X S3 ߴY:XՁuxU 쳭U6*(D)= ArH7̠4qɒ9vy3k3Ha`,EȐR'9abhQ.G Xqr5bk=aX׊52Z\S8VuH}3'.M`;=&imS4dR.᠚} Ao`q {I0dB/!% ^[tB9LY[ #֕p0%= Oß6H%yb'S ܱ\ "8}]<aac990CޓA<|D(N}na㗜CsLHj/AȽJj{'$mKƢ? P}W(?@0ϐ}y!e|]t`F/QӱgO%XsF:<.$6[Q*U't)}Jv#Ҍ@!LWsyCOA%\ۿ6/qg^ T~ ITxrE%Q#jf炐9&i%,C?eXEEIZ97ԙ'a嚰l==?$T9JdF ﵽo`z/y GO~xa,JP~M7S=8~zz׾[{jy[<cߵN@kȩ`O<^pא 0^䄅HC_ &CX%7 Q2!?VW-Esu-^0gf7m߲dkP^![}\5ozc[iX'֞TQrXsxUq2PL Ezᩇ+.y IpKu64PAF͈ (NX.u>GY+5f&聕{ahG7]Kk'j%Oǩ|6!2c9~29GZv%~O/̮k=+G+d0gd"~J UֆJVw99ROfO=ܢuJ`1~D8]P`Wa ;ǻ{+XE\^>;֟C*~6fj$Ei1@Ȕ_>w<ӃcrIɽZgqc H>AfW<mZWJ % '~V[w>|Ra1cQr$#ɥpwO >7US bk=ɓ[8&OD6%5J?$>t 8?ߺ^i&"xꩧp oc=v7b[ob8pݥu8MՊ![Lr2POOQ 7b%XC~ IHr-oڬ60C5??s#R%eT3%rɐ̸ bYvi=M*)@X,9_fbu ;ոL㥸@v g 7ЁAj#YrFF>)=[ʼK8͙kAa#?ƨg:O~@1.0Ekf_('&p' YO$ "Uz;mnxms,9Y JJ挟ynX[_CbjAv ~%$ք#w6K(OQ䈧g9Sz<-ACcXg$z(8jO^q#ؒx$`F9 EzAzVHNnUpl$4s@H8vr`V1L{B>EE|I62@ l5xK^M>U:FM *޷V.&s^IEf@8BdH|Nn(fS5xxZDMN`úgȖgr%4 arU V41uÿ֓bk_m8cpǕW.+߿kf =.Ro7Ǐ4Mv&x[p] /0^k2',3s6=k(vH9'ǙWf=bE @JJ8ɐqdv,ԟHk%yɘ}^kj=U\ғO'ɋ׆zjXO/$aY R(&eu̼?̰^`1cFztC`=FSLvv_CɯX`U+?;2ٮl3!ǟ @ؼk z=aKs0C9_)b5N黤:bKY?{ ٽB`+pT'{Fwq$g,17VHBϭs+.8t"A2$ǔiF-q/zgP ݸ3# @)9͓9GWȬ^e*ět\|5 *!z"Tn+jk['ԉȗc Xl,a_si4Fh:lW9C9L-ԉ>l#cqNy8 cp!^")h癁,r*"`ru.~`2`_ZHWyr}KjCHeQ'\m 3t?uZG%Q,IJ++"0 pi{m=۔.=q+?7|SX؏ooob-o? {/~)J2~" ԯ=s{mzld1XLX!N:E<*7b(طXDJi Gϩ: ٰޔm)%cUQ.Nf7kyjP'k#5)Z5N͠ }k'XA>ݧB߹>ʓ[7-߹h?.'S[G j|ހcrٷLJUs_])PgXtol ;t]x: q㶩 *\mutvЊU#Լve OJy׹4kg 1!A'NQ'ZhL'̈'@`Lrgy zҿX@mb5:7FIS#Ez8 }Fsb9ZX}d/iN 4ǕwE|8yS9ES9ٙ "̱!ivVlnn'~'x;pm.ooAU7<3Fܛ׆q܇ıcw]/dcL~ăs@1i{#` e=hN V4-S>*̣_+eWPiqGCdzj`]sgD<׌5+iGEcHi2Y"5t$T  +Cg6CXj'w ,j3/DIJ@ Ϳ>IehI59Q#FnDr7P'qtOIS@Z$@ HI'f*|L%(2 bDXʋ g4sNN pU5#B**ѽ^x?>>^\d R6£5'(^' S.ø5TxKFI7@i1/5`2~37EP]#& OkIgLaN^3}Խ /h~p՟jR3FL HtU/%M[mjc('!M=;$

p^3wyvn ^PD++ַW\q:o>OOg~gw+Na'?wIۍ?_r9'OAۭuwustjSN煬 \;C10'roh,= 5ʀZkKS,֚kV\U˦m$,.Cm͌2e/ZvJVt%}`{ Bs ئT|⸩yV4C"]dLan3"ABS1hw\jC6s|"b tN@+ ݹj!{6 A5ʃ4M= `gyLM(5_Sb}[ o'nm3'@RaW DBBcymjƍu["x_^x%]5lgC!?%aa*7ި|b=Iϱ';#<@R|*`L%Tu`x>_q5 ){$5J E!^PبjAzZp~b(C4a@;qGZuՕ`5NP?+m/x|2uD 瞣}$X sjrs3rAm0ϸhbbHG\|jDS"͉}K"b~FɕL~F SI YL^ 3VéJmX/qC.HYޱMVCÿFv\b\bXĿT3;ѱ׵ְX,R:kt[EȚ~:K)aX^|^u;}N59gq{llluݥPT1-~p͓O%ߏԧ#qɓDg{.wv? 9n^W å2%J9x'{&0 SO=׼5|ooDUb'?Iy8x}5n_Wk x䑗"a߾ [|"aODv8ʾV677O{Pkjsuz]k ha3ދ8Yu~Z!O|g??Xk8MYjgnGLtjݭݼn&߿"M pVi7_.u|8tmo{.X'N4M_=m݆ƞs/m7n_7MZxKp;-_߀?yq|~=Xz|^s9}X,N{γ]w>u߾}9h8۾>u85-NQRNk֔gmYԡfܬFP.b ǁ8z"<>E%"VģVOV֪c"u Heƥ0 _v~^=݋rS3OJFUs應z62DݳqY260r8LSX\lU<e Tg6uV㏛ͻz7+ +3ܓ vo#6p7SEnڢvck1%1}gO|U:7U4`?;-6p;2YIq}hsvd%8OP  ҕs HٺcY?z.͛CEW&>)3  dzUVa SS.1ӑ=&K-kQ5D_ϳf%C[W4ij,is E)طw"ړtlgRI $/J`o@lt%Ϭq[, IDATLiS3<9mcVbہT-kU֖ӥ:͒f1Œ|xYhIfgRZ5ɽ RܾPsꤵWV9jsL`ْN-GPprMοל':m]$˧Y$! 9L红:6VKArK& -N8R{9edIq3s1bg}U [qҬ[c$Ey^90WQ)mbߗ> :1 6܁HoڰX O6דQu;dQr$6Wq|5Fm;o1TZK|{ X,鴯~=t~𖷼_qI/2nV%\ʷzZQLǎ\sGؿ8j=z]XFDy&'l թlwf5NEAMM½fǘ7)-yVr\FF؍ ,Yd2g,2ou*&Qjٜ4l96s !AGe">z4έ: 3̓Xwzak5==S 3^T5kć4#CfF`FzeLPI`?9{uf_+XMwzudvb+<(asdVݓ)9/h$b% Dm8w2}``zeX(9Ahwpq65%-VbrPn<}NNtsT@I7{=l"&/$(SsKH>$8|6Lq?$wҌRΗ)%z̝XX`"f|KJO_NYHi2][Tͪ lJ'R,KZ("v&XWɲ5V\Zbg<Sxţ+eVc8a5NX3 $~P[`Ő;1g㧪\O'lMՉ/! +Ȑ$bqƋ=89"pZ>,KbI,W;9p1M89 ׿ol{ߋ}kn+ȑ#Lӄ__[o{^=zs4Vq啷|eؿ8^;`dV ps8Y?lⱹIoY䳈Kg̓3UfbFF2l3A$ f, I,kC N@//ChFjt8Z¤V?D)sg^̀rba*e4@I(tTf眻bb5VMN=b5N_ڽ=_c9Gɽvz9NahЧi/Wr\?5Tw^P]e_[2z^0rK7=6L5Pkj!&U{g_ "!2%։U' :PvFz@b LgZ:lC#K|9٘MKmTo%#0VdAB `ʢZLUp>!_䂔$?T$m96*mQLf9b} Wu*< DN¾} {Y0 =TK9y[#|ﵽ.-W_Z%;%3kϽF{ȑ#xߎM~qe͈.85V*{Ɯ}k_|lc| ! ]ۄ\DFQ""%?Z_ȵZUM"iBqhbb>Z9F^׹^{|3x{+otk*nAjeiwx(TF +l{{ rkZu% ٽsQ 6T5Q(Exxv-[<Ww 3vPH)ࠐ˜6P%tI#oED|ܻ;e:uZܸvu롆o2=b!bU"5õ@4/DPDž} $!va OD pec&C:E8jAU'7>.kp^ \+ bl7.ra`^75W6uѯdaU҃i4DX8oE0`"(s mi8gdH"!DVUE(^WGPuQՁ"8rųoyk"YZ=d([.@lyp,b?{4b2I@ @YJqbS7 ljǢ.2b/()/àN1^ ;WPsI4[pRQeBCT!(N䮖 C$nPTz0(&{5ț 6*gJbUREaejB?0]!,/'T6Щ`8!t7+0x*D"BBqEԚA4'[ﮥbt@%3 `84V=)D<u]]_m౗^/|w۟z zy'>=;ށū#~p -o9U2vᡇ'?7SWWU!CZ0W/dY/:3a>›=J4Z0R k)kztAs࿆ӦuXTS/T EټO\ݸ'!Jwjo^ɵ^]WWUG݇G~P{w7ZC=7n\S.K/ O4>ƭ[Fw*Jl{kqTKf' "z^9(Jxy$ѾAT(FϧFX8>.)"^%, |gH0ȡ%xw#oo8-ݎiz!- H$=Z"?@*bE UD}x ys.T4Wғ oEQ= BSP̾ 'w=)B؏܎wkŵ jܟ{*YbJG5I,-Ȝ+g/_Vs5`^3^kp͕"&l&*=tOlf\^K zxrI`)H;6 # }h_ [2'=㝍`> 5Ck+Ћ5N2Zr$S.JT]1<I5\rOH+ ˏUOfDܱ"h^jO9Md 5=N%y˳4I H"xӜwA:#;zy?UVd#DF49UcV*5%,w &Fl}}U`ovb`'LOM}[paRq Q5Ca#/NҰ,c}}j;RΪպ":LuVU.<ǰ xe+^F٩0R ̕ޱ4sCU@;QPiO2A7j{ ASC(V',Jȑ7-2^A,(eU,jթBׯ`i%!jkg:=/8A{-EץFx9󑻯<ȥiힿNX)Hertb!k,!M}HDhb:$~[qULiFҐat0Q^m5?]#=Lc_k9ItI|H*<ՂWH|jT(vM F*= 3KF}R?Fb9$L-%$DJ'w^ȏ]QN4,2F$Z[rj<뺌v뾝yz>̻# }Wܻ9v{:~37w|>/~ӟϿX\$8ˋjw~ze'g2e#.[mh:_?AD5&Oi:FKywڞ8sκi7yeAK ^5 .HA롶^L4uG#%)RЭ$f 7X%zC cutx?yKPq(s(%kMG(5z #>XXp@%0{;{?bw"9F2I"T5ԵǸRڢo,'KCE`sJy3U.vwA(HaN`Ja+izQyyY^iy0 E zX=rIX6U9֡ R b^[0y 4 JC1o_>ʶ||0f{db Q.n|qmurǕAB e)`00!v%)6H1L{oKesh<5ExܙV:Ca|\x_\8ąsSG+t5C$#u!H 0GiLC LE`V"*DxoVA!\(fz߇ƛR`4૵@̅eϊNHK~VHIBMn FT$l5"xntRC_ Z1/+.$3Zl4C b#p^)((>=f`=@mN[Mb2ENO54x --6M$lnl6(ڿ;u]V;J)9yYl6Wnfs;wjvt/~&$O7 x>?gxm_UVXSߝ;iݽ{v4yYZn1Mӫk_y>s^s^v;F.V oa\`Yp+\d_ݺu8k^dRNݯw<9gye{i7Ѡtvn_(@uaMcc8[0WAI u*၊@{f4yw%('hL MUO,-_tܛo94̻Ȱ|7zP*ZXXk/YOQ=l`OYEޝyd rE|SE&0ivbPsknej(5OmCoG qJX^ a`WuxY%f$=>?_ GoKm aNu]x8Ubc|ԯ 'yڕ#q;bnB#]͒$-$bл\1L"!춡o⹞L]Q}c-ޡ.65x(Sx 6ֲ(UfѩF h{O2:88ѩFezt=Jnûnw=o;UT˲xeY_S{?9W -އ'۷[\Nퟙ%=:::]`۝خׯCDpxxy_.ӎ$?s:-/ r$B\o-T3 UW̧3N+*^B ~Y%xsg:WQ0`;SPzߥ&RwRHWcdUOcxuR * GK( j)Uip0hPKɪ~_,^ey&iuS Bs3Z$6H3Zڂ M{_kwo| 8gO-|]o~:'^U(~.>D) wu]z[[TE~00k݈ j7$DJzWFN B9l0Ɣ!4gyD=|~KQJA`|c\݉!WO@f?W_ےO#JcCR{'!a|?J#N^V 1F* Í :Q~2q/@#M5ΒPA\ y^ 96XT0UI"-XkA?Km01L/ceE(sS~P"J#uZ5 !܋@wOS+sb/1נfDźhSpS̉sOMq߁$>cx-4WWeVp_͛Os!=f٫[SZ OKQ .B6J!nC3gE]cDB[$#E tPxq%;^G9 clM\o^^ x̃7͋AKjsc:/FUW [{-bJ 9_F8i}5@1sbJ7$ᓕ byR2tǽgte!3o,Wo^V;%p'8ɣ#̽žC($Mg|Ӕ#1k'ȼyVȘhh-gO)~l1ub- gZOiT&1cE?Ԝf+Hj:">ķ~`{uyMunF}CEc>fص˒6g %T:ueTQZOfj2 >ֵs!0UlQN,"pf/DР&j`mKx‚fQLS`G(MRG!(%"\,F0mT-hfzdnK@7ktG{$HLU$s>W;h ?­M;1aۃBx2|SбD X63` ;L @fk@?Ѕ V ăz whQ?FO)bNz. /jF?橦!I,\yMvD)9ԝ")ėZ|U48T 2zzC"%caEty`XZIXkxՊxBŢ,_A]{!s/c" Hldl0ϮGPt@nZ@ߒcZGySqQH K6 y%hP(^6x+6¿}AQ#}h * {8jDG hӎH܃wZoj#wy9mw]]_?|Oo~=R vzuy]Xk9osOk=_M^1~-.~䲮01VĠ؅`&D :׼=0>A"t_'5an#6$I 0T#Gbw-C}AT$P'82ÉsaJta@T PFTŲٛkpPc"g1>Ykʋ ^*0fYφޢazz 2:a㞽MT,!Uf 'M"}+$^С[=g +Uvh>C v/$Gm9è-""_޻|5ͧ_>r{3\S3K@6ck>I yT nw_{Is4jGs_{rh|BtB™v<.?l{Fx;=IA%#,̜wzx/I9Y =w@=1$5%cc,-#Hn$}[cf$"֕ Hw3TCX"y7rp5Oģν+V3$n;mk ;zc pr̻s=;3ϯ߽6"k_>!l"^=Tyemwwؽοtwgnresi;9pCICnE.Xzz5ʽI4\(5 dM`;OXZpUT$]s# Raj^:8U Cd3\Rk"Ea]Ko=ruօX/^!R# ^g @gBTK2q\`OR`8ЙDBZ@n ummNA/hyzеHW:nn9]kݮ_IFeSUl6RNκ.߁};{~WJ<'ދ*`vufsZOWVLt; s)?W^?y~=(>5oԞ 4֊v Zyܯ\b5|]gs-":~g^Vuk]9qry߱Iv]sMTӃz,d ,HMgi%C;$0!5 袘{-<_ Zj(#7D< v^ Q“\Kq7U7= K͟@jŦZ]5ƒ[kx KSi3Wiy>E{{Xw`m7OUyXLNBJAk=Ks_PuS;'pMCI)Xp& 2<Š& %}g&XÈ^Hn@Gv @Ԅp,"a$JIm~ gQ ىykkQ@jDoSԣ+A j9t](h!d] )b vdK٥$+llOs}$y$/RxrADZQqLjZ>iS0|È$ VQs~?_$;FVQEjY|wt%qOU=FY)>K-{ptt{6|tttqvV|jzpp3eSK}˝W)PUv;uJ)8::BGGGwmw瞷&,ˉZw,r~~ک̰m ߌ=&U{'Mxnn7;Z;fѩv$Dv5a$k IDAT\~"Cwzvٯyyڽ2۵֠8<<<pd'쁣|Wzz *>4Ι %O8 IzR?÷v[nxT 5 zREfK#q@_MGʀĹ'Y_/Չ  '8^`=(YcM&XWya,fsz b!4GЃ,o'E=*EBVpi6A=1O.6i-$F F*G<,@z-0d3 eYcG>]"@Ӿs9I#ITg ̟_-ěafPIrYV 4]K:@-YbptAVN~\4 dNZ nR2/͵jTCPh6 V}[`pbuQ_*2΋Nz;8w:[kOyk}?}۽Nkn{I=wg;܋9:g=kv"x`ǯ~/o]?w=KO/4χKߝϺu˘sZ;yeڝ,93eE);^f\d]̹Hڰ4kAKr\QM[\i3"Һ{#~f}dMI/^={*4kc[Hk/_=#",s[k| !-{C"$Ëxg܋Kf 3z1|ܟ-NDgUJ \ #6DZA_4Q3]130$YqT~y⳴D}#)XD=t|e *<`;M\yhEYBuxKg?>'j#1 d- Mܥ੧ʽbfԧ>z_f<0w쫋C[1M 3X"bD 0*5Šc'ڍt s01k[CCo~`E*Jdx怄d`d#C\OldqRbJݝYh{+Ǡg7jug٧/KI2ɸ$ˆ.ApmengZ1;S`3Z]EN`R+Wu  K*,sdxdc`8)SA ueU:O1O{(79ӄf򨫈a_֡Jw,('9:d>A:dB-6Ojc{hi}%ǟ1 3A?;-8vh߰ߋe%;ĞY€ oggm3f'?Ivj.uu}\G|6?7nx4uu]]W5mjucx.לojhŗ(rP.7 *x:Js:TѺ #m&HO|39sEDjrO% qgjSq&MוoF4)z@% Z0Ak azFt"0iEoӜJv [}s6OD5NZj.qѥOLjJWG*2T `'3Q4 |w@( jANY^Y] n*\їE9/œ0KS`o7DzKh|/RE|xCͰPVlz"~ TU" 94ϧ$uJԧPĸs INDB@ sbC̢܈tR!6j{]u15FW~}gukN(9RJJU赎%5ȿin0'|syN(HIQbX膘x~>o%-Ǘ9#} J!#RxE* H-SmU`Bb uBIM=Dn=`yoV %XPT,{#! fh,ƒϩVl)j|K_SO=xM㽸{ ÷o㳏>O}7۟z o%ا?_o=tu]]WwzhR$ {ٵ(I.nT\~S+J}zHN2/uA ҳT0@Q{yIrq0ad1=y8 (g ZޡűtѾeD+xqKӌ4sYyƚ<'׈b4*|MShLa8 Pޛ&',83oÑ5H7(]ÏpcFŽn"1DtyBQ0HN[rN9 11).:` i ˂3zB~ W3G" j! 3 =]׌Zh⢆l3XDO!B튶^ Xs<̓ĀfJ S@#)#,ܛ"S<5~G6N3qcdj')xit5LCzLbŖ*%R|V9Ժ1|nh5?Gc2O#Q y\T@fF QEQϷg /ɵKv?|w7x8k^g@1_x ׹> !') SBP魟Mav n<M-Ízni8ZB4\3}KbBTI 5f48݀D+ilO4$QK\@]"\2tP0K,2Lkѻ+K7Sq:kZmiH𚻁3TDZBJu`i6|[[$C@s#rq"<kL[i!脋MݱDu qzƶQ y=gTz[DM? "w px@];}zY@F%k]r R!e$' ``{`Ю|?ƺ*$#,rf\ZwAV9\9>+]q/,K@"*cxe(| ?Z}K3 w\n@Tr@j8H 1~dw3Jk{>ܪEE)D*ѶC"wpw)P8 !ҬF6+ֳw(Р!6ձ`#GĘ3JsbxQ} n)U'As̵\ 74U\SBԤhлa*9kU0Sx$,>װ0{w^f??W^yk_|< }Y>KI""U׳ ]<2\k G >w~]o2گosZe,7Nשo x"  nIojF\.+ֺԢǩzE>IAd^u@4CAihSݝ@i-}S,7 W,`I+]^*KEE\K4 3l5e&wZ݃e+Ƨ')/urCVW7QBo lj!hBc?Sn fȫ;FYHØJA#47(W7D!1 H- 1U'z7Ck?+ڌ4E:J)?g^@d-kXcX@>w ޻6Gmw߱5tT^CN BUP,̹}5.톽so<RÁrp} 2'# + {kg8lgpy5{Q"Q@X-I5XW<HҸ -dⳌT6&L=Q(?*KS.Kh[Hb{~V]K íb9V,*]$ gXUa3Kkz5'h1U \{0шLzE< SP'a!Q*)6;Uj%Ei;+F{*N z$B,:!4o03{Jd],lPkŵk<>';v}^';~v=i=]9qdsy~=뙯y~ kH{X ȯ'1ދ>)d"\Aq Uk7Xp2Ǻ6=F/ TR7,iM1%rB?kkכ8 #แb]Q[h#Jmyb#$dotèy2PIqNE Y(gSѻ+PKBQ1ΟRx@5OGXECZ̯ї1}QV>NcCbDk3R_YH{a` uDlxgRox&$QZ~UR).v}Dα{f΃ H0${=B L+3?^|'뿯΋00$|H&3D 8eHt4%˵ȹ*>0ϱ\sE4>8\lY*S#-ǽ~lYZO 2Hc<BL1|A|͛7!"~g nxg] i㏟ bir]vvwrƣzxǰ, Zkwmw ~Zf7n8Ո=fR>/Op}l6~:|gyE//~<ZJF"u }{uEA)5 )a,|` ܋ |"[;1yOl bB+ؒ7X\$d5 C)kn11" `sJPn&Q$0,@{BgHLGEWo=ƁfvwPI=zD%*u-%ceyenSO=7 G>rnZJM#"u]/v\qc ,3+gJ)yE#)G=A{ޱ=7=}+`q{%8^|}\q/{_U_|gڅ׼c G,rWtU^ܼε ewUljHSk w*e?]zrq#.sܫ1_:R793j<=2o>8(b8]UG0`i `(b!Nͻx,`WKh/Q09 lBѻG)A PTJI->s}#@¨}OæRlhk>( ;VhvG29 읨𮝑O=wA2p9sܗuT*6R-9+p3+75FDa82z~#^.'md!_4=sȉ,M=E$ADĚ옸X ɱEDT(|Jt8S2l>0sŜ #.ʑHDAᤞk1!HevJ7SkXzf1 PV4k\}79[X <',HF:CCM{*î|Ģ\{jh'wÐT_ Q!D!pp-HB&߫ bث*XIoA~fhT`Ha*¢5+U  Й&т1_TD-3ɬҩlh ͆TU{fЎm>[|Tx`*F58)poW|N#|n7w |]q="wmU}P0Af92u._ǩ7޺w=> _eކ4h}̉˜Uy_бq/uR]u'z9tܣbaZ ˂RbW8d9FRbqL$7ю4\;9إԑK+Z\P4e>,u=dw@JgY+3FI8K\a̒~@xhM7n6cs,Kh/0#Dl"#"Zn8ӈ@ۉ% 5[=z|>|Clcu1hI,D =ky x ,:̲a-%6) ѱmu!YŜ@6"&afeLq"_[hZrHF0IF\"-S;S_P?$RحiQ{i[5pIuJLL5=,n,% Y WLfOɉ{lk~=;kOҏkx-\dzxk~pXO8-{ݿ@J%!IK6|\XjuevC:,J$~vE{+S8Erc^Rw'HTs}6_|7xsH4n]Ŧ9--XTCP)UFLXMbجJ,Wşը"AQ mj۔.m"ywQ8Dۆ"s09#K>&?~<Z\TA1 w@%*K%hr(1;U=[uHw } d1 W7b﹛[Lz1R[~Gt|vss\KE9=F4RVb+̓0*:ɆhJL8N`x죵O|a8ȓ7=~Z1<|/NM`„em]~ J~ɉWs >mfI"nAud^"aas }2|9Ϲ 5yj$QOm~!Q=%YH$}lp698wønyzle:?#%0+&h*'hu.D+H.+~v&k5AYSE|6,dQ&,SF!6kb`p%늯#;ux&ߧK`;1gn*Uݠ0ֻ9kYiIqun\{p_oM?~m,rݮunM!5M,MbdΣ%6_KȔ$ ;Lb$m9e Y7jAeo}S˨:< gkhm`m gkñuy" Mpc! "nN 0S p4yr`<Y0*~sUP}E4Rz="6єٔ'4G.jlD3jLX\"s\*~[#~c-A)A]й)!켿k8\ԔJ@i @<2p ""%9 eaؔstEāS18eKDh&q&yьRK/\/B6yy?h)̾(kgI`Z6 dmMP3A9.'EFmfZj$G=T$p\\qnIW|L3JEf$oDm*Oa$}EdY2M.r6H1PRQ)3a*,=,]wuP|y}2Z,Z g áu9:yHBy#/ g`A"RZŝrdžfAvG-#l:C94߳!9疤b!nKuR'~ILB]D/_EwGR|un}T{`o|ܱL"McM);T-̧!\aHo>d܌n.g ?r怠ٌIKxW)ANV9'{QV0FĮ5FNFlS|kĮyvKk@Ps!-f 胾MME9i"23J=TO2#0:$7XDƠcΐn(wzU 2c)xҀwo7='aXD:ǘ slKEÍt F=m> BϕC_Al@n3I"&(؟d|~ 'THEE@e -FFctiu2-5@Fke_E?3HҜk@ѨjAbr#%_799memTIVQq'!,|G$3&[q C~_Tl5,JKD7KpZK[ٓQiZ TN!`|ȷTq@"14K 2]}ϳQ%PWW(AR J Q RS`fX{Lh<]ꚉof|s۷{W+~-oܹsn^zN\M>L†&]ѣRe**"h7=j#6WX- cVp4ya/!he>=U &Qd& Nf-l;c1'z!Ι:HPR=|Nuv#7]ιP~0Cg3iNl|eS%G\BČG[bs*Q-(8)0*5@ޫ z~)M9y.\A&=AxvKs;nrA?Aп|A$4O47l|:^U EA&&&)Ƥϧn"DKa:ȷb*?cHQ[HBy1 Y񂊖}uTӷ&(&c qU1F9tI)d-ƓdIDZYNPye)D[ }3I\(c) *h |^Q Npzzʈ?U,5kIZo}vn+p۟_?.Nw=Eǽ28P4w|/~Mo*z/_.seӣ^a}auٱJ]|q_uϼu2\Կ].{>0U7`TDK xN5/'t]0M`G3jX`-M4Z1%~0W4 `L0:­<2R\N| ..ȵPN{HJtZk7#4$({E%._F#RR1pvmDTɛ縚G~  ԗ0ZPd@ S}n0 cup7t6XbZ[49u0OJg59s_kÀaTH뮔8l5f5]T9[{lqhcxHs kswqǍ1NOO{gzPʝn.s>Un~{SUq8 qrrrkgqTK=nÓ"Y|?q06<>Wu\˲֊SZx{9n{|s~ rv/U{?7WB*?t]'.;/p~^tRʥe׉ }\-( !68DZ)7BnDD1 jq=w \ w`WmPR !Yrȕ t`g20vuSxjRl*Zl 'yɥY?Gqmtc!^6MsPk6W]h)>4v4,`) %yxfe6 x*7^#Vˮ4O6"?FMt";ЇA# |F7EKu)kvtD x>#xx|-:Ůܷ5-PVZ= ̋8Ԛ:w%G9hhXY.J̲8ӶLy㈩3y6 ŀ:>mNe_-@jp^>ҡ̢AqC}L`2ug[61,HLIJO9Ҷa2f{܈pziSq4n\e0[KA~3O^yfFau>2G柫'IKfs~2+ċHp!r;(-fUթd*AQ "L!{*Mɋco葆QCUH:="`LZJ̅3MzMDjj54n8\ၓ o){5n&eppQJAJ0O;n.jWuvX5ܻ[)c eu/{aycAj5Zم˜*~owךy<;==cggjux5n޼$OǙe|3/s* `/q|3_͛z~^p8\j>qs'''8NpG d#<6Uy@rčyxU-$,zpvϓHalnfzb]DARjC%Y둫$Mܴxƈ=-(% IDAT uN(l ,kG:c @KX;P,ݫbC^ 5P=13WF"(7]4FM qܑ]D =B:M!7qml=sBݦl?#$9![<cH!NiUdʪٔT$(>Q /;O_p8^VnXii7Ƹe3+u=82g_i7']i+Y-O$d 3 sM'3>h4a[GD/(b2?W_-^fꖲ9oDփc^u5 J4Fl@MHl}hxmG.6WhAkd!3TU{bI?x C 5οKVi1nT`m׾ܫm~c|9c ܋E. sw5hX0c.{e U9k>~~u_c?n/~۷eƤ>\L2=^'|#Dj=o7Kϝ"B׼.3>+5'^g΃w9RUeF I ̨GVcq1( 7>ܥLGpeF7`@7} pI,/0@Hׁ*ţ4g[<AՂCת-j)Y^# Z3Twˌ鹰 -zF;W/2ͦߩW m7A%ۆP\،rMd4 TW7PKHGA َW1ϧa##ƇK #ޭY:s|$b(2z;}Hj sa=@ wୣ{>s;?=2f~%@<Ҭ2+5; w=HF3hzBNn(Lr 9)_}&$&8OaRgsƋUrgB *ڈ_ғNEy]1>rFa$i|R00DM[ģ~_{I^yQHg^< .wDuùN!=*6'|M WiH ry\gcq!%֜D +4T"ruBwҠ(yzE DQƻn-&CIb faXM"$9Pc-05="w#&#D JTg&km =fKF<>"6@İ6-zgY#p2F< nޭ@-"5g46VG f=cD=fIpG$J* /$4EDo|_&Z4RV)]$ 0[bV.T1#?6)b~2]Gp]11$ѧ[Ÿ➷c]$6Z6x RTO$WIB$L1ЇJi]E|}'BQho'jĺGsu7[wW Nw;ux>#ՋP4bX}s=s\q縆 AKQx~&^㭔#z?}mo8o@o~#j=unT{I!sqx{8OwKn aKUr&gD46#6,#t4wt|FXK)6pJd 8n]Ov;"3T#1S:tYILHp;q^eE=3#]Tph=r2GqQւ2 N`4:*:Ao ָNըϮ {@tE|cӾfK(3aE:wp.A8A5n($;@^'L@xD9>uzc{RXȜg4uDok͹(GI$Y&)/AU `L#J$BX\cVH4~[B<8cR[yg%)$ ǒ%2 :u7~trރD 3Ew_}X.3WND7]M":Je{=q^/(Azwb91f(~IPzñEL2+#xt jpB v32>|6y*Z4e]vDy /b|3;woz;nwxDJi NO? (O=x;~z"Ans1o_ A3pF/Xp˕{(u1p@mBwU3z4(@F݄RF /GY#„ j2TK~W_W6v@ `$o+<wU`#|YqzHdnd3*M pՉ>Mܑx'5VSA0n%U%aDhHO<~Z[_;GEPo5@{<CMS>=E$s-EgĆ3He_+Ke4175Ȃ :X$`,A1Z.A:MlL=lc<|?TlY"3'A`%h ׍}\tտP&bs8m*)@CD$X˕/(a3Nl;Ksu7o"&Hk-AM5>zx^#-I,GYZ$߈soޓD?A So49 49N:Tyw;ɱ5+m ~)ZqR+b,uDң 7Aϳ^1$|ǡuxpuǜU.vj  /7vݮõ]ԍ=~#XUq5ͬkz꿎} >3+x7CcY89}ў]?B (kStԴnê85LT і93])I-?{pHFN/J IQVZ!|CD|) ڽT͜{p@͜ ehʜlf5K!0tɘe \=_݀p$ =] |GqemU$|^*<RajAL7fFpǺiHB220H 32'IwzwEqlG0SZ}?uco;4x4Qj g&$f x4 T1@`x" hܩ+M@ (EhEd?'"D 0Tj!4zL+3̨ 6r~]j}rBd<`Q$I1l1*`wPLE %EQW {ƫ3M &0AdT䞓s2H!)_ -NIS4X rMD1S(co`ՁcHkswPBTR08Qecj(l&YkQ3`}a8Fj"e+j*ףTԠ+n`qO|w,NCE/ECLѿ`*[Np誎|mesϧf"xm;ށ߹sO~'~`j#Wk|cӓ?[0Ƃ0z/#vz nmuWWeQ썎u R\e \o(ﯥ0num9ɓ;1sOv%Hle>PÌ0#'&QVWjv,%=D#ybi ï!TU 0.u3tzi\mx }G ЧN6By949Q:zp03kX*@Rba7m(B)qH<bm$4S xdQ(oQTwws2G} a_qgş*OkCx=kH S:]dXH8&hX1ˤ;zz"*8z}q۬)dc$vvsO J!#"WQ# Ʋ}.1* N1M#@ap$gEE‘]$=;z,]8޻{3jP0R:"5cVBkP-gmSgP6$L,Kd(YB/yUQ0P"@1=vk|XJS8G$k_*v#!¯Ƙ6#ӷ@*{uMbͿ$ĕP!1'Kqրa5|D8Yh$U$a8 eie]Gt{k^չwe~0}g}U"xλߍ>QJ|';w;nyˎGν>7ú˿@{L}R׶( )^zR{{ع[{TT="d `5jf%Ŕp8V7,'A6,61q%6-7^6b#@sh07_ԪYGǵ4͈`lT[C@Ɍ32bi674 sleW]b;S DtbY*XY bj8Q"jbx.0zqXDJAS^thqInC_4@MѼJua s1oywe,Jl ]Bu͈0jnF3"- 7/]=OSE7fi7[@kt}p%*%5d`0kf*L@ ޿ظM ?̠c-єkG@XX%py|GIa`+,I 1ؓPXIteql_}sL&Q~!~5ҕ$F^o;o؀EXi1+~_ʹn$Md725ehC3|]dނĮ(ss1^9foijFό DAyQlC5pgmý5`z16- 59Hw<ǾS<r~ 䬪1RMo oc |mi}`9?&:oKrTV?+@Dprr~~R NNNߦ.+:n~CvUT'''^|1e^KUqrrrs*J)~u/{)ܕ:zZQJ,˞ǩ*j| [SXw;ncwM9eYPk)j<^pec`=p^:7`vϯy)z?Wz=Wνe։qW1tWN\zrrrZkw‹{ZJ|:qѼJܰHnt꒘`_&x)etȕ#$] HW,rW 9AplK Ac%$0!YD>Q/rm7E=p!fpco%Ry"Mi*gMHF2lE!L$*5Ìr![׎c~˓XwNLS. =/sH,K Йr55 㱼 *!yj98[_Lg"Atf kg?ǠT՜ںg*@{z0]fY\ͱ"8gqGs&" MsjqplkQ\k|mps].Ed4! bZ"g$ƊNhUkc/p,``QuV\]f}JORwcx^9-ƦV&J* S=~v w*D=em5iZ"PZ[̿cow0.< D Iѝ6h43pc$`WfbYn:8^쾛'L:{p{~>8W)I| IDATc  w^83n}Dk=׺^ ewȗ| ÿs?S?/'.xZ+T{q5ܸq3,r׫ZOJ)^xpy= '3z}`_|}x\O^ʾh=9Wݏyq;_K)<_帺AᄀZԣdWd˴|ybR*  y}e3ʊ]Apck9PkH3y\vOh +AUB3`樲Tۈs2DDU?w=Od ?sןr4%y,rJ j2Pf=-b) ?!+0ޙypX$ ) &T4Ԓ)7.hأd0 ba+ANsD{LsFFDp? 1?iٷ>x2zkĀ1A*bnNsx4`jz/A߁:Z(&~96CxV}w^)< Er|;a2f^џ Ek1vR/jt7TCB92 4cz_:p _̫JE쪯7H.<`* H:ht:$3.nGb--s1k-FwW8ne{Q.sw5^te{j}V۷ oy >sz'}ʏxJW彾*{ٹc{*eyU}ΉrWs]qxxMUˌdύvWlFY}̟'u=^b]6phqiQ=#7~وq86[ V6k. %Iqta"M4[,n$OjHR vn/8Ftl8b Ez2r GRvFxNbc..MU,n߷^CR~Fepcqm>.ؖn.ya|eA~f:4g>ٲDtG96to(,F 츏R RsNwWJÊgG:;x?c[qvtB/xl5BůȻ&i84@L.\_~~)[4<' <#Q-BAÒ2?e_=#"]`Yx]9繠b=VnL G$iMɵes۵>afᦄY:5Lb8aZHpL@,yl8|ͧQ:o)}/H\TS=ʓn,cZ".K5N|,5 gñ5wI*nr\mdJODHO-9>KL1WF$~5Zؽ~%(⸫]F{y ov- NW?.!vjW=o3@Zk/w?=~)w\^s?9^kh f}@Kb`F KhL96`ՀE#r5@8oSR NKMڜuut;0k)o1D*$:f.@0 ZF+HKw0,E#u j39P4#"`R]耒Q)>6I (>cn~F-MBbŠs2"B-Ƅl"|w/`c5z>FDio^;~u8{w_so{ <ZCfPrwLD#u'cKct7<1'ٕsQ،?y1FK7Tд&NiQ.1E %-bcC.r1rݩ(v 3?VQ ^s#dfekX!6v^hcCuE+\v ofW{gon/׳]ZjգS͓Kʣv j-u9?(pxp07/6v6ݩw؁1׶]"9Mӊ(V UCoݣ'`Dt DtsPk| CE󶽙 aMr\tc4S.00"=AUBذ2HC>,\׷@:άؕ 30,aaU[bx~YBq=?fa[ݐPKڻ$"C(zl g[u(1ҿ 7T]Sapݮukg|? ]v^V[H JcsYy$s6fꛠu*iGZj+E eBsw8kY 7f'z vK`kYFL[Ihr "m0ҷ$Ʈ]) %ܐ 9p'Y=BȻGf4,f^q@KAibDT%6Z3w"0,y=M_T98r\ה2 0eEd/!"%P`*,d^ga{y4zAs-Hf>HySOBU}x:[=ٷ>3 jˀHD?vnKЙMe|jJgiGD~=Y@!xR9ÉlF 2J pC8Ym^ ۪1ْY6e$2J-+J8R hHwTX cz5%B TlCʩcG%+Ss}azU|`pjc8_dV&1x B+HV:J ޓ\ 1+x- f(Sp!-|=ӷoc\]Hwߙ7v-$ڔʔzC'(V3\#Y`i;2Z @DW<FY$6J"H2y@B"W j#@^z:m*3JE6:ݝ V7C50Z>F"%,4]옦[mx^0eb7{IzhUnLeqg@$yh*{.x1!q=o"L߀+ ';aYs,"ϐ@u т[ ~]o~=^pv6''x1# C6H`s<&?h6l-PHQ=Uȼ,/3d鱯Qm@gT5d*=]cgHBl#$<q$ &Q4L<ǽm6tfA%7Y\@Ἱ[qŽ!G Az\2yz3k1)ZVlJA $! 30%y’ĵDkj)ҧ oɩsO5ٳ,c . Q9 DrvӺ;. pV~ϵ_]7hd otV p1UMc 1aT1ۻܬCQ';s_=z-MsW}'B{r|<#뀃tzL;9旺ꮑ %2$ț x (Dz`OrybTL@3~IU1/:Leg^ܛ L0@,4Z 'Zބc-W,hsOi"+7Tx1C)KIⴑ "DDϪ}{HIڵf塇bK'q9՜17i H=""899vvE'''==E{*-RJu֥c[*U5)QK)a\XJ)a6Y/|i[ura9_~.47J jX9g@"ß=Żw a;}8w?}ém6a8 Z*rNN )0)aɂ#ƻbFl6,=BԱ|G\đ|{B>`\+\3I2rR$Ѯse}޲Qma4GVex7!K5x樔h34(5tI6rBbns1`ubZ ƚZπ$#yCIf~R+ʲxҾ.WkO<NOO,Ca~.p̾VԺسvyNkxڪaI]toBpɭ0\紸ib=`v?uU)nVAc PmnIxVwcف6kc`AZ%0 ]+g9㨇5E 1 NtC6 II~J={OGh:˷ &>߭LYg;R[`5sJ2* f=SZZ_[y{34]afXHz : e=Tc >^*4- 9%ҌDTSŒsţngDwE$AZ=c `#l5V"+R [nIRd мW֭k#㝐MƦafanFgEsöTig ߙrw}v/+Q*}jߏ_̳ޱ*]ҿgOvK/OēW?Oc}Gǹ_/{= gA''mqݞ>3!zE۷FqC½na1HH+}߁{af]!GAƈ1y}$./^]2>7_x_B}7-2b_|n1v<>: }'aЛ}"..)Ȇũ?-@̷ }3\a= 4m8]r7N΅kEH 6D 5 WYl㧈~.,~ e`-_Þ 'oI5B JR' %+7𳶵z.ZSbN:d7@B5g?3<-lӞ ?i_r’ohyRS$)ؔ!n7jkHg2wo\Ýu0%{C}wA]ktjjf$jk),wXD|ķmww~Oε~>jUGLƖXysawUu߯Gm؋n a RPJ Pm }ťF`aYRon7ۅZSkuA$^Ư0?34wd@r|.bq$=&:0r~"/XZJN]"bɃ5ts+Ԓ]$*ye̜0Ԉqj+WW8xiܖ b'k69㤤5!'w1ARF !z]q /la kU[~߽5x/'WM / 붠 'K wiKVtfL*5:1Ɠ>X szM3H{w^ط !cwo5Xƾ0ƘmQn2>^i?S|Dgr7.͇ c>yEq#˄F*NwP|hf}<:3<ɨ$AYbwsE=Yo{z>DS88Ok-D5ϧ> :Y">"qu 6y6'`ݛiߴƵ,>.\)v.]II~mM N,Yp.ЮU5e=U&pwo wL*{}vo6K4ͱd֭[K}RsOmfTAjS׊P*Li3s`3fFcks.9,AR=KBA(LԵį͕yw7Ӱ~9s3`KX%_<;ݻ\b`(0aa%!H'.j蠯v@@@V NyG6-lV=,u x2%7E< ["wUn{NV9\@"#ScA9v@-?bW7_x~߉? *dX+NLAQ L  k, #9z怜F{7mpJ{֕?h߳$\8px06S Nr$f(bnYr_HʀCc@BIކ:?mcǞ~,ɳ` =] cĬN5vi"x|wٗE7KvOC$ 5AUo)lKlq[y{\"&~-1VTg̟)TSNVi AQ1 icѸ~C]B2ctEKÒI<W@|_ nԱ }S½{g>/~8==KoM)k;t \`>)7ܔ_ ]Fm%[<継c6P'G;esUž5'lJOzNiD|zx]rP!$ư0 <>\`1'-8ʡ8]޵>'U{EBAwꉙj(~' fmK6-J$LsXsJttw@sul!"df)X׆:M`L=dӀY΍"xBWMIBC#]y;CO(rN'r]!Hҏ<V0?Ӏs90Đldw!bXĺPhJʑ9h/% %Ɯz.M{)x'SjAX?˳Pa_2 5A )u@,A.4XkEmϛК‰e'[RRvqxw*r)M)7oğ@QϽ*} zc}ܔǰ/$u 0➁\f1.Ni  iXSX;\\eIh~[E\h{ tɒ{ PoXrM*HŦD=COUl4qM8[Nϰ,"rX4M{*D^d{쇧.vkE?`. 8SyΩ/*%A05|Q-;ƁVJJX#:1΅"@KDׂ 07{ܾ_l,PSO^usiODذO!㟆iCdA`U;Ͼr_~m<;nYy*7 NxL `_Z} -ӰuuxX dx-ħ g HP#' k( Ep;)aRcť[a1:'a(Y Dx%W:@{d4= tyq2E)?2L+Gw+OXS6DGz N9$A))脫%"L)5}+2P%K?d)A,*= jsXLQ4)ue|zu t5jh۰ZCX-k_k]$Ad o$HԚ4HfHF n8SS>=I=jsmp-X[ַ^yWv)7W f;4~W?_>. S a6*(H=pyT\ܔJ)~SJfJTJHqlY-\[RrdR:C39Hq" U۰zL Tu~mr aS"ƥ8,9G,0\ơoa-񧭅e;,~яq)kzB#$<JBWfOTmK`W ijc!=/9'mFfBm qkԈ&M2bӬȚǀ)`wQJ- :z Bz! p?~Kí[K9ۇ0{ %_/64/|ŧ%9mvК?x"1mO;o{ٵ<L/V@ -bL%]\b?3 ?7gqoY|D6?l1vO=S< ɭ[8=[l==X|dJiNՉy0U\IBmSvc7 ܻg/Z<$,{A 5S4m#.,bXVc$Ԫ%Gf00S_Jd3P^Vqz)sHegԨhppR^SަU B038ll?q63$s,LA&aiVvPCt$$YsW\b -v4uQ4Q4K}Bk<an k$pLO z b"ufAT> 5=O'y>Pmq"3m6yxXxNMa~pv/&^a-26j`Tׅg@wNY(K1J&9df*\ĒĤSAT@3źwkHYl6?O~ַn[.xХyĂO~Z,zaz'좋]J prr_~z< nݺW^yVl6~U M/O>$n߾}UO<;w\ؿ=RԟŸ+{ ֗_FcnY>O=}X g_ͦߝ/z? n.>x[Ok?[oD.韙aW^ysq33ݿc}z~]"E@Wلq6U[44Rm@Fu+t~A UpY v)hv(VCZ>0*"D{_F)n7E*{Z ` `w[Nqv% ``KpˌZC6|d$YLldwڦC8ǝK)ZՔ@/\bLkh 맆v^hC~3o%_ऄ`>FZ6kLg Jj8g󤳽w>[ÎΊ}~sMC I_|;wSj/rX ^Piu+~'T̸Fs``39wωFO N wD#w5=-b+shu`5gkGCx ųFaycxWJq,=f{r 5^k^B?fAE '<{5IX-o<(vDA&,'i [ }IN^iˈp9?;ck%r2BU>sBa`(p79GLo(\xn=rD?#?|;/Js9?!vx |ɅNOO~ڹ}\oz^f^V v~\z*jzӗ^R;==s7_mJ?~]kxwǾ=l6x/qL{k>sx.ܯǶ_ǻ /|Ͼ>Y ?]U?0WWNNNpzzzmxoÿ?G^Wo>$X ~o{]rz}wı o{=?k۷o_Zﭷ޺ޱgyHQ"Μp̀]3+qiji̋er w3ZĨ[)(Joܸ)Yf#&0Լ`(".N)3\9ȡ׷hgHw?G>Ќsnb CqN$Գ $#&ƙ@# W)-jԜmԶ8:$ΏN̬aޕP'-"'pKlHDz@4%T_M=3ʙ:pg6O!II %LZ}=k f6\M3KԍIu@|p Ctҫ,Y-RBPU:0F.%c[*unú~I`h!bASnI=}=T.J=Gy.:YZQX67A_Tm.s/*Ƕwz|GퟙER&L8=}].{c^X:ڋsn6Ԋvs)<)$9 _NpM*8][, 0,NPS}` +=?38}j6G}U6G_~;=̳?:ֻWu73{>]6?hM?(Ya[s io^&iлuELK8gݳ"Lkz 0.?mj7_] ^P<zof %II^6+o}ԱU٭v?k&z' "" 5 ߔD5[m3ld9yp,UEAzd"SI`f1eNxC$X'$3@J~wO,/dxkO{89fzdq/Kkmiڴ ,A‰MIc4zؖidUmx![ESgqFeG}I_f)8Zo2p*Z@g.V@T XuO뺨kCY)7ܔ%f?/~Ż >vDM)q \,&7=&焓`kuǽJ q.|BO˪)'[|zNų6Ŕxd,B$tPȋ[ 8$! \+Yu ~W+g[ rNȈ V*TȞaOQO 1$z2ָ)rawx 1p}$ȃR wrmbXd2B)4,b9{X{s FT-Ԩ0w|6LM^_M_z|ƒL#pPy2z>ϡ RXZmp;C~zaO }SF{Xe]x8Hle'h8(4QES$Mc»V[ ۨ{֗C"ҽRcD n5O2I4XrlՐ)։%q̐:CA"bC4Ȇ"ijRG鴰>Hİw/Ia'yI1 W37-ȴU[ p,'g{Ɇ <%V9t=W͂XJ})5RͰS'69Gh`9O׊z_rtϮc~gc Bbv7ܔrS9w~׿o> NKrsޔ}p~hP!)) o_O4..vS I8ErJK w̰xԉzeA| #05v_0 u(gj7'Vx L]r=\,aﺵNj;] nmKH)GJBהzO"Xrƒ5j#O)Iۯ5uٖDpk)`m^M:R¶ԭم\.tsp\M)7ܔ(Ooc)Oo{ݹ/|)M¿~)r>n-N׸_i@*rCS{`򾯊V} {^ nYJ"LE%Oq7#:])R&% ] l A8DHAEIQ$`\`\T=? Fc) Jp { ]H7L&z|_9kZǂxpŁH`d\3u#  Lb2}lcIL8ȂTL3%_6cjwg_ol ^R>LGѥEXms;1pe1M`}tɢ.g+$0b$S # "97Q S?Mk@dIAJ6x0FaǴwybri Ժ INq|7 87]ETG*yaN ;Z#1^ @%Wl@B~Z e}zkY W da w Ht%D2K]%qa<9*ḚoneO*J ,| x$BRbkk~V7rtlh3d͆nD2‹><ÏVZ4g1qW{y)W}ccvt96>ra+7!.=L[T k7w?O?&^}9ܟ}w\a %m*5)0.T?~XA%eDYxnw kLx|˩[hi[ns+kUD (+x "[-4R*IY[9ЭM9s BS q=H8pNG{HѾ9)po%9 m/wv(9#4Ax_Nz"Z;c$`o7ZI>Y:A /AZ_*T-6;x ]|;ƒl axLeL"#c 2އOxu1;sGj''hgzH >-u4bP~(9< 0c滁g&s;M= 16s .bWUs .O<-"uuw>'6O}#y6> wM+A* AXk|.(^h_ |\,4i?) xxgIblH<{"Hhvgɤ<38p=wdI A? bZnU!;$<&~pkd%qefe A`F/p?.qohf{8]gyM;Xg FD tW6#+MS $t|{E_!?D`@[!Hp`#ܿLr{]o㬨,ku<=08Es{zBs IDATl{۫lRRBd(=DI,{g)eXJ[a߬<ΰbSanx ro.{"34dYĐP-rEdjI"L$)./9"j@P75),at/ |Q_Cazr1LUg:y:RJ^716 H7"aiXϡ{xGXە!e!2 '6Mg+ Q"ś!һ3IHDdw+{OC|%ᅦhq07צgzoɈ8mgfqQJ1aW0?g? 2{рSfw7ݹu<ǂ[a {k&8ni^\9@2 mz=LK2)%n_ZL+A 0࢏"ũYZ2-<^9_;RU%R 6^" rn# Hf @XxoLB~ j\`C6fqπG?xV)P>YF&MI0}]^ݔNj'Ms)-emNn{8}g 4Q9u}g|99wl~:S{8?]}ǃy탪ww뚋m-cӷ+ ]ԇ3wxWj]e3ngk>=yr~qUW֦BVZ[KBIB2_6+'IP4ɓi =S$z?]sJLK' <[-1niSX\ R)4ٸ *%OcДf ;$ėw<1 Dfrq_r9Oߘ?^u L@ӻ1ת hmFAa pH*n]&3LXAsL3xKAH[3HfV /k|;o'7/t_,xkpA`<79i Ц4L=^tX8s%p8\ }t뱏a̽b|,ж (=޵i FlvS d~fhuRG!Rjc0𵲯 HN|Tjij{/!' #[iBa] AX8pjZ[G(6h ϞRix7ioM)7ܔ1K5#0 bMaj){JP"EP!.%gwaHedDv˜埀 p"q"MH5ר˜`P npi9/)%]z ։ po?$rOAAIaOLDhnvƵܭ;̭8<[;cJ)nd޻Zzaϻ9g\4$gxHѢX$!-rmE%PihѠ(EE1Z [p4u"4Ȓ,ŷ#JRRźr8 9sZַ\ Pt19gu7m̚YP_v[6nɌ ^sпoK6H"+ndK i} lL8:CW nCCG40If|e왓qT Ī@iy{0H&M%A4 JkDwb3-%f|/H@Gr)6YҦ%%;@֏|VhXKmT J^ PГ7mɺ>% U$C=0ĨgLH{ңT$aލm=g8ܟ5s9+(tA#f"j[C $oT,=cHBH?`BhË F @ld +ES ԙD:SB<[y(i m8`WE5AHH*" ;yj,kĠd(\:ES0EOXa}HX%0EvRb!>BuQ9*GSy)o@˼dFMW!J8gjY,?\ Qd> h 31Z6B T_E/;%[ HM7p6$noO@L*DZP4_U4 9vH 3u6Sx \Uar.G@{ͯT2<衔6`~W<@4XA@δ=i{рum}i5-BJI ,ۘ5=Mآx7 :mg#.7t bԊ豈=_,1.\G5&m/ͽv&}#2e}mմSւ6}T'V(m|"AY?)XP6d^T]R9Z:oo [Rݱx !V1U`83#h U3JB@0%t3A"KyjbFBD@gnڭO3UJ\0UMs6DFnESf'Ьj/dmԬPq)4bfUA9i͵@@Zkdb_]%1 1`20!(R+c>V(%cd ,K,):(J0WM2*1.Y eJq^4 )g DV( b1d/wTQ9*G̬Y˩zɏP ~)J! Ii-Y r! `.A7S 4h CKzzK [z+"4H2; ji1@A.By0sU.E>[;,iJ A.2Zb=8U7~]T{UPBN=pwnK;@:ll&@-ճvc |x7-q+D$re\3'|AXOr\;e0<Ja Pyv@#x0f#H0̌3'W.㤓'Y=Nj"w4ق$b:?,znfFT+eL,4DB\}ץ7RH£i%8퀙YP%= DA dY!kY_%[}FPղOEt ֛y) )կ@r !X?3Y9aZrY9[ $b > \etB,&n ={lyd5%Dб$ #cb%Q8 H4eYdG5?m3E1-vD1CՃA=[}|2+@Ӄ6F{{e `t`=[t@gn}7l:kԻMв 1dٚh:uE@Ә[6>v< ںe+;)+oTeșxz:ؼud(: ^b74}iAs qi}i۠T2Y6N/=R#jʵYxe\ N`H(Y1C rh%KҁJB2kVu_,04NBΡJT/81( df\@HF!*1S )~AT o7,}7(1,UensYX44lepgjA V#e"ZܝٙEVV,P*a Y 0,DPRҌd*;a,k?De\~|V<-wzKEL;`6}4q-|]Mמ]ONJFB}l :߿cȁ҆gXdwuhw' qcgN\gNOg wTF5 B,@vA-p?+wr燠j6r@UwjV́3b5:TfJv"mFL A݀] ZYMό>sbu祧>ۈdoI#6(3w+v[⑌0sd..O(E|CyIwW:1\;SdU4%^`)F/Sϥ"f%‘2` (ln_ppnF>k@#| 1na2U`fY{ se_Lb0J]# @ܻfCtbm@DXΝ2d2,Ď_-ċjVOxqlqr{[_ ާooǪsد7ӞdnR&{E_DZ9O,zz+>{rXn䜳:'nޛw+I`}eI DH)!6I6r9$> IW%,F=V0"eM?[䂦Uu>H]Y5ׅFt3#'\P4-E2`D.Pa ڿoQ^c tZJk@/wVTR$ߨ's79~ɥ^e6:7ShUNl}Cmއ)(oV/HZfj .<ɉMт144ֆ!8!\^mɸoZC۰> h5$0">z W;Ow3M-ɡZźUF;*FatkE@Ev|AnDutP]b}۬6TqoBC^:ᎎQbՄ?},9@܀+n5ՠbP@=[~%3;x8ЂZ> ԢFm߉vȱتh//^抑Ѯg-4b-tsشNa`[FMN"gR_dK;A,rk f;%=' Vm /`Qe+ŀ]CW[d%,!9kZ hj<2 2悡u`l6l6C1bBƾu^uYUyXH&^lcX__z뻶ir=ުϽz=g8p^jF_0=p1aַ?81ɓi QB@!!0c=gR kaqԿ^&_,"J;KCԡ}u9DS(ntoia$D@T{C,^֞$n> Al I +;/UqP-zYn7k)+X"`.:v.H&0w+QP7+iubZN֏{Bh&$YcbJbP @I% r0^jE"r V-mnG &`г^"g!h@DJ(xmʟ -&@Ҷd X%+||sj(U+@pŀVJoN 3cG2~O`pR}ZWl6;]{fJ)Z*VC8zٍ1NYݛ}LLk@.Vg7a׳<1FX,vհ;t>ΝC`߼>|+W5S89~*Uq1ҍ0]o;#wصmoK9'"_sWw_W'pΓL8dXL5AV_aכI IDAT_XMYB3DFKyW昹)'Z`b3ݖ/͔;P]+cEk&E.0;sYp l,:0V+/_5||*8KyfL#d7eXjK=sm"i/EȌF<,P j/ާNfF%9@kDLn}o}mCTk_' 1xP[} hcsbB"@m޺ qsxm`5# |ʙI 3't8ˌbd"͗ c4-4@ٿ{ۓdU6հNx)2Kp7o}k[@o %(nnR\$ Z*HZיc˘hxfͶ1=B-i!$&붚@0Iʊ'rns%DG*Y:Z, mӆu&P2B"jX4-qGX Q?W!k |,9Q(n}EUD+VB\|#8%ŢdpB,!`Yf"o,l1SJxF# xb9gzBܖ6뼙z]:m`(:]YvAݫMviM䄥a?J={=sKq?=qqwNܭ ;;|^^}?||gç?G ໧Okދ8c)F^?#U+!x ӗ/|Qo~zI|^|{qbk 1Hߋ+GndZߟ{'{btč{9;_>Kf%3M4s\Ű:ӜBW!z'qMS"$W.~y%x@E^ tPSs۔W|g݄( 3O^[ccS \o`MO:(pQTʥ[W&o"#$̠v"~EJf.`0`l jT\ٺf(j?@S ȃw/Km-TΜTjEj-R; ?Ck!spăc/j LƁ5af)@΍l'wt2K? ]'b<5MF֤}8ye4{O}d桺tњFQ| h ϱR/p ikd$Vkbq'(HeJ! ɺnr'uaW,s 휑sZl*.O)F ,$HYR@b.g,vQ%V ҕI!(k>P,OX];k+~ets^m>$]- VavY}uWK;V!$Oٛ!uƘXp;ĶňAZS_MCL)D(Qsb H99yOi 1V[YF[͵w~ce14UV[Aد߹N#zSW◞zj/ϗ66wx;vWpr>?}11~p -z3:wϭw#uۭOo*]Uv73oXo^ ز| ~"!@ D vG-ic( oeh 1ݚ/$'7T9Aݿ&cn%ӠuҖ|NdXi{YvXzqW!ўxKym^D`V)m">b5ˆ7k-XSivΙ_x~`&z_C`nDIXQi)L&OqȂ]^4m}] MNxl_=R2#AtsHFPFMaIѰjāJ. A"up'$@TP팫r ibhq +D'@bQkE!B]\r$`>* Tf) H[vعaOIY(mCف5Ce УrT-*LYθUAN cD\,{E%յ5 9!0`1/:1^Y$ [|iQ,,F,5gi1%qS2QS3B}s 1 }ٻY޳Kxֆ$-1c53"#f!z\]*&8*G娼ŅPB@V _^7Μ=.x\q˸5i9oS_:~@`78ܙ3x 8Xbw BSؙQQ9*וcH,3+F-MAL9kCCHz+U Dh NeV*K%jR?O*Rͩ^a%Lah6Or4Sd~ξ #XǵfNhi{HLflvXhz:A40N 7sI5-J#8؀W?#`7LDѓf-]-Q $˳І^Mxj3?1@+m f1h,,E":m]]+mEA'7糙gI,~q+'q[e}SnIsX((0n.(F0ֻ;O⺷8 ćZuG>$m 2{J^#i@Zp<p#sFꘟ7zhc0fu#P`j:pIuE8-Q,(cƢTw qE8BX+F#,*,)b@b )&ThصޥX=$X3Qk@XƮRr3zh KVإ{!V *PIkR֞Y D,f)%MuHc`$tr3R Ybgu2#"xHX/ 1?9H)a'@S^~oxW/N3kGϝã93gm[[w8>Xc;Q9*G凯$:Vն`TAA.i]#%(!" "gtH/x3Sm~fCC ަk H1 C/b¾dd(p.*懪G1Mg} 2h6e5۲ Pe3x jq2ȺA 6ZMS}ok( ^Y@OrlyCN0@XSdbe"$Ă7Ab0aQbs@F~1udX+\1PdRRϵBz> NVsŢ0)MA".rQY2湀B%KU-YI#c4쟬8C֒D#c.`2UNAJrN(H!(Pk4@+ RwG^_uohۘ©S?X0!"|y|u]f<|pWO=T+NwcJr#†d::;Q^) Y ~1rԪ~j:Y!;F_YH)#,3>8+ TKw|ڬc]Y. oIm\ֵ>]δ1qW?{>@n#8ڀkm-엡=냫508h0BdfAmX-`E0ds7SD^&jP,@Є+b^#l#ףI𵕝` )%K|EmBgO WpO7 gN!`f&1oFP<8 & l ؾ}.WdKv`y#O,6^iZF8ӭ#0KiP,lq  $#G)u &IDl4<4v>-( A\ |%d݉3fwD\1Ĉ@ZTP)q!,V\3OBp$B *2 j| Pk=;32(a 1Jn`ڂ Vf,YY,:$I !D;vź8SE!>9g]iXc)0eQa2n+.=z?eVdY%Տrv a8 ܟ9l?={裸}{ԓO 0 /xx|9c~;^D`ƉkT+j,nМww0ٵҷCP΍ުK2R=|b@A`"tDe`174$@k{fC2xB@# zal3Z~yY`R$Ѥ-r4?h}dBc]p%׿mgd @P/3fQ> BFQM;W`2 a#| ໵DͳK=C'DdPmZ`fOLiu:Q߇Ng[H=pm<&#CT/-fvv'StJl 0K[[N]cqs@Pu piZ03`8sJcחʐ̈́&ɭ.4FH `ְ?FMS-X1Վ웒%ܭ%G/b9`8 hgao$`[ꏹ(I|#Ʉ 0Ja5ݾf6Ѝ[zb\17ș=V)FȕVD*"$uM}Gs!CjBϨ '/:=11Rtك PYIqn ̵A[%W֣:e\N~- Th!R1RQ""Rb-$)Vx]]t]Nur}~+ҿîgul{8e6UwҖ[Gֺgi͎aVamz@Gz׶1#r?c;)O?KǏ}˗-bbd$҃[w݅3Wxy'Npr>GR>ޭ8OsT=.2^êw#ʹwhf>.L6_33S %Gi -(UIIꖡ.wT :| /hu۾SY^}Ue^5D6ngdT*Â8k7QߓibGtU!j~Npo=2]^ʹL c҄PKZm/A'z,)Zǎ0xm%;j-Nbt$>5+g`rXZ'Hʬr0f|Q\\ Ftk]; [ dF6+Y.Ed@1k BDp̘ER uXz[6.f2Dȥ V~Ihfq<#wdX: Hh_EQru 8Ad1I66600BjܭAgîWk/Tņ9BX[[s1F#l]ی1bcczsgJc8tO)Y'猔jwݭލ !ؿ#aw_ p܊z k!*2#nox_z׻0ƈGΟǣ/1\_I<+>#=<C.sXc~CwΜb1q`f >u~]e0X_z({DH[_G aB^h{Y«ܯֳ5sf;}5}ٯ)%{[y$rEok1ru(Snp;b<>{ i&Lvv ڤ~nzFsj_ddj뵕!.Ry xw?P%7tsҸ5=~VbȘ(3}7bڍff:`mJ\TE MA*'p8 F4~Qɉ#=d.t6+ DITxP?L6>{3%eGlu.-/N9{FR+tJdk߸Wc+D5}}seAƞ:>lV8XO@H VҰ7#bxsc\@CAA!f=FiNO/46ڹd:'+?=Sl͡I:@caXP˖"R ȹ?(hg\l%,:,UbPi7(]@  T+ ZB4mg˺1"[Hw5Qg4n-ƨ@Y(yFsaf99 YYz@Na> IDn#W"BfUV=@ +#FlՂ !|c03qT"i 4ꗼWzbV{ 9g\j.3qj<3c6Iz5Ƿ9޳akkx桇cķNm;;v׾?,f!-o_?_K\][m|__,RpAǏa9c]q1AĂY&#~fJ){߾پwͶw+*bk>Vw?a=!VB TtEΌ!IlZl %R:Y$ @)9QUmh,U9g%Od,JXx=ûuF-(b Aj0?uK_ 039+CF"4(2y1Q$w#a\8%d7uobb`'F Vh7[1I=nFzErիJ悴Y筪Ƕ.WhdAR?f5YԿ|ҷJ;z6ϴDt3 T*~e"u/88 ~?+kkO|%z{@Љ-Pߛ<>\^>771 Ooo#h#_Bдm_]ꭲ_]JRx/Fω*l 8߻[圸z=ۺ;sFk?޽a%'[:FopOWG\V]@Qw!gH.d=H2 g&rC xcGX-:q;H^lz,h@(F4@̓x=`6yـT&i&{{WB0+cvf yʼ&TVwmI;l#R V\:yٚ{Bupn2nhқwXZ]*G@ԏXxfbm 񠀟"&dI1$A~& {_<׮]åKp#apE;v kkk.# L;h:}grU{k݈|AϼNbުzc8h!*ݷ="rFd _O~O?x2{+_ɓ~6!uÀ}ٵ]ww^0`vέ:ηb_֧7}d\ K}y8:`hu&M`Fh˭%߰w^0ę^콯2pRhĀ`K K-]M&F#$؀4: k%KF^nzj;m>6r[-Y"=niC ਦ1ڰ))5E"g{B%(C M'Ȩs AWJe,/VhjՔxJvr #B33H6ab=iEI7"gP!p6K(H)t RoG*H$q J·BB"Z1(4 jڐj"!gj1 ^~e{rTQ\6's33wOӳgm\1r57vEVi0YBr )78/8 łBStSi%}FXP&5-$C@\ r (P?+։^ԾviW ,, mο#׮"cߏ\Q=(eF tS{SZ:\k5KǗɶg%_:\.2䶹S؂  zig_/^oo&4QO]# jk`N4߀T(///2[!?>6}cݯ6/{QV2f%`Tj ݬ ZvObNgr6Y0n2lhlj fachygQS9oV75l:b [[ Eo\~B$T."+I&[;3H% #؂z/g@)53񵃤#4bj?Kϰ!5%h(f)3} ڠa6),=dc 0[*" ~YTC+"s6 Q nncP%X iPWDt$(ϝ;^z wq|Sp#b{TQ* Xg_B&yq,?ǯ<4}ul֤-{Z_G~_0M"wGhQYQEE7p:M ЦWX+" pn2I1E1~1>oH~ˬ] 1uck&dn4p1p胧qXv./|[ԂQ5H@iSWYUh3dkà P&7:70E{)kN5p#П q-Q5pɴ}$]ɀ_"'$ <}{RFfJ&\w$CXˉZ1w???:6=:֓rSq9YtDט( T/Zb UKpm}f"$W۫N4pQ;_l-m'!vQ%&_t]:MP+LWRY5=" 1Lv֋6{-$#h{0ن8%1\0E.2Ǥ u!dToFuV_1RE0͜R +rII[kQJnE@)BX@?$"Ad( ̆@Ř^bJuHPWs $H2"e_zsg+a=@giX,"ƈ~;;;8{,.|ą PJ?}{F0>*GhZ׮+Wهf<},R3 ]:> g~%*)h\2!:*G,VvGh` WRz_F,vfב4a`y~oȅCi7o4sV@£,[/S „g$M]߭gP7oVzPۃ?hcl.vV*R-=44.RX_ω EB #yB ?v니Dvww} ^|E|ɓ'GGx"z)={UV xJ~Pè[ 7܃dҬFkz#RJG=E>hճ:ǃY?۪f`E{ڲ:=A;~=szDJ 0 x[)NcoxUG;q,\rƯ~ˈ ~¤SS/ mk{OCGsg{ )!p?v=#9+ aUY5fwA{m)(RvzطD;VK 3WhujZ6n Cs,7ͱ!J@m ˯Z{lwdմn_Z6Xli}v4-  |MiMI] RsN;jW1r6-!`.Z_-y^t&jG&Kts?%bDfwkʤY%/J w:n] L'mߞyնzEbK5]ӏѴ.$# S)Z: Vt%^t[\T'*gN೯\c{s1[oT_ ރ~s1Mu^5pmb՜ÓRlPh+3'?EH_ AsʗB-Kfw}!9h B[H׷ `W1W3IrR<_wY hF*ŀ/I$%T}mĨ@XPBTOU>w=& 1٧ fGb-"R5c >$RKAD`d"VQT8$i =]ʅ KJK"Z&5^ )އMP ,2S!Œru#I?سiĉӧqq|_ /_~??̌'xy{pq^tP~UR0{ X;)I·g8r9މX,p1\r666cĥK0#._/b}}zv___׻UYZ9s8vvvvp}A*Y=f圱=,9CYkŋVnfً[^ǎ!)u/fHvAD?S?Wc's}/]g;Dk+g" .^@DX__΁daԳsԩStv؇_o^o{pҥ=a7rlnnb{{{^|>ǵkkNyW^,ֳs1㞄V]*ͽ !۞!7ZaX N͊{-pnk۾e6hfd-o~ 5耿O/)N$ƍ&j)?s{6vSdIO6hq A;@RlM^iJA&a~-׹),S987CKA[W nk~5>dAid6@HGӀk4n& !R#íUt`!~yٶfL fetmc@? 8H`]_m}نx5jmRӡ#b>1wL  >׶tG5+v'fkV)Nd= _¬#v:1F'"ytf $ @~T?HI Ҵ2a{1JR# CH߳ ٻCH)diA3f<+I7)M?(k>IH>|M%~/x܀A` ml_mn"^گa6!ƈ5\r>,^wu>knWg@J oK`"X> /9u |6^˻_~OuZeA=>==Ӟ3[`A#! v0$ [ 9B2A!(cAlX H #K!̸g骮[{cgޮ{ϩSn٭u9wL( IDAT~dznoC|`kz'''l6;Pľ=Oqħ?i<~nݺPysƃ >Gq}.[,_/طRo Wyq%$xY4B hBҬs][[,v$0l@=wwn 8]z hmj|\$5dOl3:uWhoJ.eP-%Lҹ DC`|~cǟ ̓3`~q$E`W؃=3䠹='dT!ɬ`9'̜y6s]_@2Z pږsqoiڂ&O֚2.;ydmv5 Rʠ$)"n/zڌ> ?}OL5<žY`Di1?J@>(zJ bn\"Edc4B0gPYd 0r ESXxp X.XVx饗p}|G)9gv7\^OJ)>wyR9,w8yr} /~pڵ9Ç ٷ}7\.{>O@5m.k(//xЂڀc(? pIkksJUrfTs[]ֺ]Y%P1}ٕ 0ۊ9$#kW}5/T$ȹR,mS2Po04 C{wNt^cm^ Zm{vqh$YSְ%$l{WĿ1C@دSǴވ1ɔD@T̉;,4ݭL+b\*VPl>z?}|fq1WWx};7ADI^(v@\spc֏ޣ#d5LsOR}-9+'I~ڨZq~@Sa|_K{A)nݺ'O\ ^ľvkz⭷i>9qΝ;g?7|K/=^׮]Ǘ*1ٯ)h/<һe^zCPޞ$ @SXahGyPo [E-.ȢF_Z{?vm @;5 Zy}&X$;?:_<+筫A:@F@KgSud^A^ـ9;!p/Z#NMԕ:[cH6=@ ]HHH0b3L%fqs%!yUzD?cLdj9_[M' >gE<O{8yƏ\_%+\$RE;?@^1܋6KLasv\)Bm=n^1I P5PA"|%u%ҍNTݣ(jY ,W=RHd}J6OAzJv:!ԊTWL}a0J">& I VլdbSL3NJrB):R@9eوp_  99tW?j5ρ͈!' F2䄓8OTaSyxAtZ,="gk%GLI = 䄜gn֞!"G$*BwY UY.wѥEՋik\n^Rz~ON O^ ;t=OUqʕ =x%뇬G@\.qʕKnW{=}袶GjRHse^_z.d]VK0 ^ a{_S}ﵽ_\_wƟ.6x;y=cv)>z)~gF}w-Ds;Ml󮗺vؕYrMt"YFV =ûuAx,wg_2eTr[AE\~%f!5!͵灈5]g O@J>3⭹WF(*zo[|b^&sC l-Zq|~Q+?nN49Xn![A ީ\hA[B6;\2SnԞyCgk7o=wn&WwA5Wx}*HJF.}[ j /0`l])GZex~R> ^HO*hm'א5J6Oj iC!>]zIKHRA~n-r9ٗRVwmp9<},c)؏}LsQ`ӗs$v2Z|RJXdU&_mM0BME`nËzd8Q)Gjj%%,tUwqk{-RIq TlsY_6`BR&䔐]` wc9c9U`7?c-0=`]M;Օ΂Mw[HULwntYSB`ރܮ{AC)^B45u=VqfY3;_k6 yMݯS7F 7 =>ĕ- N27Uthyi9#78/\J:yfGMʶĕ! z!3(@VL!nƞ E:"%3r ,1e"+?g]cTp隦M4ewtnE=_s;{\ŏ_[㥠@$mWz^n݌ DawW>?YnP V,ZI.! ;Tx_S69C|Z$NjuR:pj$'uxR0M< @%ezMD0Sd~VjXp!˱˱˱|VV^UxK#j:N=kqvk6{&$B''k$iޏ՚ծ3u&D`9#|^1siyu KX|mȈ xn)1d "-Dk{G׸^ZZ-E нސ?ޞ!$;xb!m &GoE$m>r=[@)*Bܠ.ZrD7 te=p'*zGI;TWxr G?y16ISWIQr(:S B"94Ƕ D'+HJJ r1%xXl-Bؽ9Ω >WG+yW"yHEߴr n7%z~%s޹^19d*J(`a$zdhK7dKWa<7Sܭ"\-`[Ͳ6%ON`HL-L"~nݺѲq&t -K"*Liր`A0(ހ*#ߵLsmG!5SI  #~,x'B\Q;YD^W SZ#Sw+[\_kD1TQJDou]Aζ\xn40\!!K2GyhPk̳bdG èSrMpgd6e`qeV[C]:bhM"-~qyˠ$'+T8UE1!5dd~"V,!d[$Q.w WrcX c XXXXJ@R&A8JX äYvL;#Snș%540cA-?s]fj8Fע[b$U1`: l ;U:*YF\ xHUJޚ獂S(rdWKgF<Ƃ?r$(^f*3;X$_y/3/Z80-<4Cʴiq_|V$ UJi]x}ֆYQA!ZMb @ʊ$ psZ <DZNWhStg=@ y:<{\ <\R/T'೚Kzn)<<T%QMFݵ5>Y,d$VQ 1K,&^$·!t| is T8y0dQCVrW߷q ! n!)J5&Ljmy|"EGog)[(sbCij0+%ϚK|^])fΒK[SQ ӃÐ,CT+"$3Ɇg$"Y0{pqk>Ϛbga)g")2S\.$9db،` FdHR/ /sT ZlHR0HVZq6$D\PPmG(ΗICaP Kx0` C\u]﫵b=g$% .kozc^ƨ_˓+9bAo]کa>Й-[fqo *f)׆5[;٠Lڍd\ճo'c?:o7nu Hj(28nn`XbjcZdq #'/4$ \@z?؊'Tnc>n\n]l-%{넢g)|sLE YNdk>Z:HwڐN,l#OS%⤪ *jM{@ѲPCKt\<6Gj|Z ORuv>K5Ga@J-i;7D`^>YJ%5٦ҎʹI[jUL0Z3FwOH"i*nuw ]CzP1 g # ,P؎AƩbXkd Za3(ƩlkF`5P5|F-+mΜSz/}!=kv=Ecm8y\r>ݻw/efڮ]lի8;;ý{~Kvo49gV+ܽ{ӊ\.ɓkWZ+6 ee C=/ƍw=~ /y^ _wxɓ'W}6RJXV(]fyZo`j)tJ1,~&i ąJhyA 0c_OWVћi`g]|q"r+Z+ Ru}2#';b+f|B>v$5B#eEZj4U<[3vǂ-zM~1U7ZQEO(KT wmqyDOM)3Պq&ks=웒|#4``, u7=zf_oNNN\.ZRɥ1*./^2](D]L>/ɮz"7o~C?C;/R[VBZjX{};t}AjДΔr}Nwz=pg ,wYyz'''l6{YqN<o&~WG.T=]һRX,0 C|>O{@]i%jp&2E%/$c <~%0 tc DM4@*ٲ"X.^n ƣ!Yn,iN8sy*xy0% 0%\cv7ws IDAT32~  n(\{%A.VBh<$5vܝԍ$0z&;rNn}V~zBI])(3)@1x1XZ83 4йN|]^ n%wz|XcwSŏ]_*2$,|ʹq\w RqfDgq6&6:ƂXCuR׶Ϲp&[Ȍ5Y ƭ"bh.c""VH{~ pS.p/kPxn7}My8](վX9C\d 9 ȱU@=, jcOyÀ}7U"gSH5f}A<طP#e\)3Vؗb f*XkZ ** upeȨr2/sX,CI2є)YL<Ҵ"gD~SBbSK"X.8)ŀb݂.2-b^Uy\.1{5K1R|ǭ[v^Ɵba iiꫯbޡMӄ^{ j&ߥ8dR n޼b۷o_=~Nا^ /2~7u%Un/|`(zK>^):ݻfsbPY~, ֭[xw=w\ZxJ)]*4Zk|^y 3l5 Bf̈́[8$ V깑Mx{/aA`7*b&M`]Hْ:ѹvj_ ^HW' QUyea?fmvnaB,ɐY0&gNf;)w?ǁ=#bRJw4 _ʕ зPk)`>{*A|f+K([z`)-1eSҥC 6=)uyi)}V RJ.rt_ G ށoHk!?$,Y'BH|!|@a-](U*W^y o楀b\BDjr ^}U|K_sfl6;'O;VB Q o߾tZr?w֭ C}NOϔ>ݼ4Q5B9@вHySxDT4"ۃTK|=!^f,y'2B]O.](ܵMqr4f':`8 N!N=O]b74L4.Iy\FH>sMYGE{Hǎom~odm$Xh)o6:u@@~_̪"!۵C \ٖ)=J8)`!@d[ PGG \N'X`p} d~9[ S)D[H4V~+Tj-ȾZjNB6Ę A`p㽠B|ȍ 9'(SUl0v\pH{LC@ͦREx>Y6g+IB4Z ;~/O]d9d}UP}^s^ >nvZVipvVz>r _I t6 0JS7.X*'hvBEܞ6: qSEխM0)^:o.&>$槒rSbϟF L`. !R,*F'UM0`0z©K)NK=xD d{֨^cmc9c9c9cj)C5.ti`. X@๿Mtwp5f)EfC9CX7ƃ< jo#&%.ܼ>әWh='#w'N78QIOz8=bwQn\[Qֵ)? ǡheP&57$)_?*"pm."045 K-{P38l{H&$)BRC{LsP 7##H^3ΰ_O` KCwm (_^dWUU5ӫk(P,dֵG# ܑ̧ѩv uņD}{- <sI i^B+|]Xb5xMNXdzK7խ էy Q,nnpqo@څb xY3(4f@qYed60#]g?CaB9ƩТ ]f?y6K9۶H?K<Sŏn,'\w^e Y"doN7E##h F`<3RJ0FvdwS $U*wUQzw_*/y?XVgcQt/H-jJ)f883ڼVvK}6M5!7M$0J"Ph߅P( LaGR]XpQy4 >Az# E~ө [r=˜{0ݥTsO"X~SAʓP圱~ ?s|Kk z˕HR֯HAs䚐Ee=tX:#k8.#z镵َ8Z+X C`˱˱˱o24Wd78ȠT}dXv.zق˾,g7!Z*p%Pfb'bbp!Z.: Ƨ66AI __*^)aݹ23Sŏ7IN9nU⩱_/'8^EUZE/Q "1 ݒS8EES|)(zyg|}y `ra4wdϽ Y2V$mF^̽欹5精p;g߶G?į$\ ᗮI^-5 A>5:6;ksk.HHf0TX?> 2f 0lDjcuuCғ.LYlW_*U^Tj 1Dn^ xFg:%hJ,r>w<ɟGECrr xU(&`#yʅ xq@1b6UQy1~gTJp .O4A=rLR4eT۩T`!\ (Z1?gB1 CtdFK\|ʋG_ދuYy㿻҅?벾YY}zz]-Ai{⽶uy,<_myϓ_g^FPx羗w>O!XtTV'-w'Xna᳎h^ HGcYު_<8b@vM~wisSAH׬H$WS/X*SrSGᵱPak޼[w,hx6O.K9HefqDc'l Eɗb}ݧ#k 4͸yꠉڕ5>HD̒ݣ8rǁRI14pPmxZI𽏷-G3~ ?~ms֊;w^O)>{(އ @) fN4ҠjuTx1ιࠔdXy[{~T=k@Yb@C)BB +9U0Ͽs81PDwɳ!~̹׀29[`Qh>qnvmr~MT*"}J@Wf8PW0٘|<cUwgwrL@0J" d2X+&8O HKAQ˷lRH "$ѧ# A| eYU[ā6ekAL'Ȧ@9)T\9dq"r1 4%SZU O} W^C _PJ]i9תpY9TbrYTugRoW~>O{liz}.?Kvy%w2=:v^<幇گ?w>OAr rCH7̕ .U*o$.-) H.:&)Y|ټ;8!Y|XQiYlj| U^\( coß~X9X $6UlFZ1)͋C*f)yMF豋}6w`.{+(JD>j`i>7P:< 5S 3hXzwHs3p(=l6/= {?_MlOϞ/7_8Y?z:NR*F\o!c 䲹tWWGX•OiSq-GxQk!=K(+8RxQjσb42;[E?Kk.Jy0@Rf⣋$6G`@}g?ڥK,sñaYwNUR1 )hPp(%kĂyMLZIXlUH@EE2\TR䄋=A/!K)`2&W#)_NEOm-+OR3ڔ{?a\vb+%K8`]-t3"!xrjl?M<qU 97S4A{]w^z=mio;亾ٷٷ?O{}|y~}O)=<|qN7_wvߥSuWbÚT˰_ nYt`fCkl.8(֪vS{KS Ex{ؿէYX"=zSgU#(<|_~>9vrE!sH8Hz*u >Qm wN"-|Efl&9%KC%3] =!M )&L,SAsN^14dm?L?y j'%~Q)Gb$͕,<߰=*HR!$!CjE6TgQ^e0 j*X=v-]{Zž"HyzpE攎CAvnv 瘫\U&wOX 3Ϧ!% %IX g'9#s!/:U˟B! C1 2VhEܰ}˕B (usyjIXRBA b< { '0$ ˱˱˱W_yh~9͉Wf+N\ddMD/D`|MQ)/ۡT0ޚ[ݼ>8BiO&;U"Zvr/ܦ ~BϜ=A0lZ=+Dɕ,mݽet3S$19Y.o"׋Z3ǧf}^c|pkdWi,NQږ֬++CPOnJx* G5>|jSpj떜 zK s8} Em BES9j _?O^J"/""-WO2+ymP*$|tS)N^wKpYW@2[#9<=pŬW%sn; 2)zX8!&%s$M5V{5 T3~22gLS U)Yѩԣ jȑ.4`6~orFZip8ƪ+R<+$ 1ǔrھư)SjV\a_q^ٮGI9l9ƻch*MPK 8f:'9ZJAwFXtj] {C*B28nx ĵq\@FNgO.s?uu?}Z̈́'b3`>Cc[7s8lHGG~*R:a3&KKG'\+mW-1ܲO{tbZQjpiz#9Nzy8.;0hJ twL$4VKS.ds/ SY'CqCY'8_t0v)KSbٚ45B&8H֡湐IJ4/Uq5g `'<<rlb$="QSޒJJ}<\A*D+UU}@zeB`%U l @$L#("NlƙXXXX:ʐS텕Tfo-%Jr=+RG$5KLEK)1R1*7AA 9d6&~l)') Q/|JJYoxBjIXX`T*+"xm_AS 9aYXu_EŖ2^yqz*t0q XAqwV YUq &&%ٳc;Zr\Y⿹~T7b Ct?V{ݔ\rCߍ\є6&e A]7d(R΅L5HT,ةS0XT)7;%`=9kJP1 WPw)Uwp7“q+T:uln@w5҉ġ t@3{WQ)iYwjρ:ЂG^xsyA27;tzUc8YȚMk(0 F+_C^YSvuD7wZ,s`l. Tιn@3j#$x4NV&" 8ݺJ5cAA^=/DhSqʈ6n8A(SAgm驗:,WnnN3HqC j-r*K`))/R9!c˱˱˱{)Th`8Kf'h k>|J\a#`3iRa٢EqKe.bwئ?{%Hk_S?qcl'|vk 0{Q #v>_g̔|;3LܒhfTLDB7b\a_á)fr q+fl?-x6$-[AU#ģbGH_8N1! -ܹ [@lﻁ"84d͈xdL,2WwKxgۇ QpG瀶߲:/-+Qكx:xjx)6o𾕊FFfBRc^XJTz%~#W)Cg(t6?Md%D;Cڀ3郟D)ا$B1OeW-Cd{,{p !6ގXx:y_dIy+9&8 W?%MpobnL) NF /sFN R> T-|;(E1E_-2SX=m #"`t^4baT{ftyJ)XX@R$X$U \v6N`;UWhd,3Si}}9_"ywս)Y!{.7,Ve}ZǾ޾9?=mO^~Γuwӽyٯw}ɋد3/KQx羗w>OA]`ŭfl_le3F f"TzyGY[bHDw܌'Yoy'c(MA!1~<[ é6+g`!G?Bނ);W8  7²T s[ ։Ya/̬2jPնXJp ԙPV0D) X R{td1kUXy M{-~֤)6RsM*a oo_\dI?ō.,'K+k^ NJ6R-vì’P+azU8y2٣sf&!myWb.9cR(x ecL~ 8*bL-(8 %R/ǾǓDdR;f+\!U=AP`3@࠳#0U4Pƒ ^:./5E D jh , p >^9 OS bpߘ;|J zus&gcgUSP˅^V0$E@.>) ɡK)5 b8US8PqEyŤ4aEq+Xn T$EDZZ"WjBOz]&Y[@1h{o/ba.}1by)>sU[q圑s0 >|p/횷CcrX;s_ދد}?Or\oYR{mد~_b hy)u-60  (o@mO/;q= 7d`.j Du$nifmwxte̱~-[2V>bR`^Wa.F[_`)?{kir}>"rx,Z(T"D.QJ F AN0d;/؁_G@C<ȠDIƹ9gUt{zwϐEp_]߷V xl=g*;?56ig P @9Rv2  A10\鲏$c::ux|{ )csmasŀXE߾p?;࿻w_8f]bM?^-~VEWw-;RKOc-b|CHR"[8<(# 3$l$, {RP0GĂl' [q!/ y> Ú f!\8pg5{C+ FEÃkhɂz1͑º)6g;L|UÊV?VU F;=vh5uRzxlwqaԂFw Z\8R]pt'f(7|~ &EPȮ{RsE'gбt﫠w$!vq`Z=tA]߅u!{eծcN"=ӺzPM&ϣ{Zƿ[l $"ﰊx./ܷ.ԫrzMoǬ7as{h{ۼVo1;<99<~=}yzۜkZo>OѿGׇ'|:'ޫn5A]+ein>:=$3dXS,渌/|Lmu@ֵ)sBמcʤI,7@.Zw 'fcle(߃c2{&a8迂[1@ڹp֫o'?|D iʅ9QȚ g۪k͕GLx̾[H\JUnӼ'a?'i[G+ u5"ؐ|]8 0*A٭o\O]Y?;k3K^Ԏ&etAgx^'׼+d*1|c'P6\H<{ w/I)\DԎ-w `Awf^ba NEV]dUc rx2+AI1?ݭִ)#*^SS="UM2i%,"w} ot['1y>C/FvuAt{"3FÃCڜ֏ka=5STwPyihs1EjEw8 0D&ie׫ x5tu"Ch .v+5I ⌭ o]|ԂM*6& I6aADZaY^oZD1eeYn`V7֊eY'Up 5$Zo'"Xu],ˍڻ^KmzYwv[b(j?Uzzc]ioއkzzyrcȎypٯyģ'm!z~}zm8bLkC^R16.Fn 2b[gX0vΠamQݽ%VV"2wh p;^ \|Νwug dZ6T8?)"@3?ojOrSv"T|ƒ~X?~gJ2Z̅5h3 %9|wo˜!'bؙ˵'/{o_?}}g ~eSQU|5v90Z }6A À-!Ii "A:ݹC=7w%NwsF<ͳnhO-e4V"'yU@j]"/,]Du$`\BI0I1,)\f2 P@u(D-eNƒ `p,AwMG IDAT뿃krrI !-t"ڤ$D>Xj0c>Y$VJtFU_7ɣZ#'@K-8=wG] k{2}*!OO`R /sW+~Mg||O6D iX#;LdZlkZⵌL`A 5>{Sds1~Sw'2\g0Oe\?Vy޴MW=,Q-1B"'Y+^:c~6EKCEj7zx!5Pz,"| KU'C6AEjsB3+'lgi>Y/b}HbgzH? >\;݄)Mpqa:=fg@q0f||kp.sPin' 9 D Pbmشp;f}"Nz'*\sV \i#F7D__N:d785b1lb^J)&޽w5|Dkx饗p}nIʩʩʩ4^,$-C؉ Т&5> 0baq\Z.\UEܙ+/!1H訄*-COO =*^?`" ~.]o J _ݵx;^w9rٿ[e_Ҳ>׀, 5j6s&uR4Ȟ=Id|{R-u9| ۜ죏c8ZB7]_~ <;PRk\y!_ K?gAL2rkܴMcjTa;hInSAU2!ssę :Xf/ɕu=v Km+%E).gLw8{89q:h.q{Ϧu4s|SϦXXSK*N҇$<5=/J#0ŝė DgȇPMX#_ T;WÔc9'I!*sH\tVŪ.0m$ B8NVD(T'6c|xhJf4F @xz H]huPACq(hY""X_[[#`]W/ݻ+|K/{ݻwO$ʩʩK?r *q"0׬YZyQÅnE; \^&/3dZ_މ=Eƅ>`$z|GְɢްB :R=܁gxP?E 6png*A;r??a@D ēǑ_M\7 z<|'ZAKOpX|ZC'z(SA. Jxtf9Ǯbm|iuO I&l:ϋkM(6O!љwg?GK0׀-حVOgdhg(("t! _Oi.fW㻥4fS>7] FX`[&! ~.^}0:~yE$Y$k"V:Ƌ =RWAX srUdKԎɸB 1b9`xxL1L˲b5ŶU' XkvZEKdhQcHx#z)1oknIcמhҺx_{5|_J)xWlw<߿}k|3E+xNʩʩ4G /$\/MM p tr@ 2YA#VutLwN ֛]lL25*K (F(P3U}(Wgp@;]? x|(~`!?͒.1t$܏&h>\l).C/|=D ׳%5Z{ay@.y\P&4Zw [(&_O_ u׋25 ) 뜺2})|B __<3G@诓Z`.#=OdE94Nr 5B#8~8dD .yseJBe>\/cDqeΙ8tH 3޳E9ƍ$׆ V,{z7hqƚB6X]Oo֪EgC+mu2/.vkxDܼ*Vo<߬|{lJ .MESN,!j"~6ΣН;^|E|//b]W/duE4ɛ> ֮FґKS9 #~nN6kݩXd0sFyõ pYof_ysolч/3jUq71I>zpUi-N hB_OcIw%36g`{{XޙA8^/M1p֝CCZD$(У@ LF$LJo`dH5$K CNcp<t dKaK1 l6~z yVgt++=sJOGNγ Xk1nE c l׃C+"+|K_GG}w=\\\qyy&>׾5?|8S9S9SyF+ąRCL)AL2)ڰ3]]/I 2ew7\xywleᝀ;n@`loL瀋h̛bpF#onv"8iM}s{^ce"p*-oA_tQp60{h\rDk`(B&rhDԃbfIpǹ?fhZF-^_Ϯ+o}m|pR=s8^5Hh`F~)5Z-кsqKs2!0$׾kpOUܠ|R/cϬᆽi/ZXu3Гta$<uj5@X-ɜu)*<հ-#)L;H6hwsqUqI`od1bT_aZ/p2A"Է"~NZSsWAª ^)c$(1_XfjtK-.wJ')ZzDzvO!X]EUl[Cgoޱs8$*޳ܴ$yH075Cb#5Vӑavl@3$s_R[o__?i|͘_~??OٟY^xLcw^uC޳Rwz'±f}I:ޜVl]v=sAT54lVm?incֻVa~nc?8l=N{Ǯw= `nģ''8'_b>Nf3xjk(C~^>A Ѕ /x{`?S lXx~ Gퟕad 3r`j2p/,E`I[řJ1%-^ ¸1QI (:m(|F8?̴ܲ- \ R2s)`GԪX &LF߸X4|;866X`264"#rDI1Mε,+φJVXk([x RMY5zϝ\y@; \qfGP̲$kJ)hC"AC$ 0^-Ur>=-Y:R#48hbV3Eo?\㠪PUT)XeJǗNXz$ /fj?_kzw5}XxOLL)! ~ քg­(! )kd9ϑ8 $jaXԭU3ZP]W,CH<U\}kh-bJɱT&B+,I Z`}NKO}SsZk8;;Co ԧ/} _Wpvv~{./_*~W_WquuƋ/n恾yh=7c;l[|?J{ Ǹ ZOUqvv!f ޽{8??9okTwvŝ;w y6Ǭ8??=|{_\m>O_?4:'<9???y$+ϓc?دS&~ c @-kgܴ׼#FS@;/;57{. \R?ƀ0pT0,Ӹ (-|}/їp t֗Ⴜ0QB7|sˆ-ż0m{6]a3=IL462ЪLA6&UxU'"9+vty{M0s 7e'O~?^_~u'><^'b$= SMl^<^H7?$k}so!f<{dJqYsȥZwTiI7 ɗ8U !Z%'5`ǿHFz{wͰn!NH%F@Rs[~CWW؉KS·PVv=cU9RmwkGVA2yPbEy@*,*Z,O;ޙcfaݢ~~WWW>zggg>9NF W+ O-Tt#d~Im-A)(?M`}.w~ʃhDjxW|s?6p1𫖃noI4/1I8(cXO4~|1 ȣ 0'HZ@v'R8[ X9=Rp UT  ?I᲍V+)޵_׾y?l3]3tA g}"Bo)`<@D!p@~>"$T9bH0cm% ރ@{7h&(S"v{?s)6VDh`8@ g I߽8\]9s |ᚋq'G u'HgUuB8pApΡ>7k³5x$]@uӻs ALW^vݻwqvv^z Ї+`{{sJ)xװ+//w^>m&0n. /r^ʮ9.//'UgūzP{Ν;v8uų>_क़{: y=t=fu]qܿ/$J)ǬK'njO>ޱ+ϓ<֊fsc'_='(}=sxs.m{_/..+uN<~V ̫MK|3$?/|(c'}v1܀bhn7neB w1Nhl^s38FĀ1>z{8P(iv. h@9JrHvAs1EHX%BD$@d*. !\BFo ^vUZg7/~g'z fh' -1 ,,ѽ+p1CO8gT6itօ7=< 5T?7u`8t?%в3+#aI_ jXyy.8$ԉMswH@6 H^L~.|oĜ> =qFFgII{; ݰ ]n^'DyC7 mjEh2eEI#=kkCeh /Y 2EĿS><Ʀў8Yae rvzJF @k;BN̰V+D 7KKs3!QnZw jYqXC653Zs]!kGhFtԺaVZK+,K^ya5a`Y,7۾:q[=b7 w[9f=C{@Z:>{`8<Z{zy{Rr^ok&yX[|۞yzۼ'nk6+ޯ~.hsQc!ezNs_<9x(RQ\z`Z`j\A_0԰(_mD ZaDbxbTXj /@cd+I`6<`a n69NS(ڷwTK|)`= ђ  ׀i%a1'åJa69Om">j&@oE w9ǟ]|+> VPZ|&l&equ "z-Q9V&`:7ĸ9toBḊ$u`XQSkh=Zϐ [p^3MaID59Tu );\׮I 06annfݪ[8=>}Z{I~Hk R=GD*s&<Kx-EpsKŁ+׮{,|^[%><Z-HWz 7~ RB"$%;``uK8U+GH<I4sA =/77 npiq,}x6T3Nx'{ IDAT"Z.Hj B:#U\GqeQ˱;S9S9S9'S[N"YlaA$֠b%Ăq΀ YsAk3SŕiyѼn۳vgT2{i뼮$\,er~pA9Ӝ'P FUD3  C萵; dEM3& jo/+߼z g wRlWT3t)PȇwWZ,[Sc3 )iuO~ևG"P$k"aO-icI6)|czA<#<-Ԡ֠Պ; Z)Z,SWA5{qh8w(.W]=}T=G-)*r*r*r*9h5װx`#-y 2i%5O6~9Ҹd߁}l6~fXm+͗KkK*zX.`/n*]1<&LN2py;{ }D^I qkXoӚZ1Mp_pK2A E5c5=Q5l?ÕݺLٴĀY}3)t+V誨->Nfh(/%}Źk; Ȁ}'+V0 jO+e"pO"dYpP~wåJXYaA!\c1>y fr w#Qs$X$tzhUDrU]eq]X.]˂Z l6{ȿ@cUi ]W=K w/Et; 5;lmWW~; TNTNTNT-dtnW0 iM/iCia5osfB S썮Fr%[huK2e6_ $&R&W::**h^|,HD,׃.+l@u Rd|;*5o #\͠Ƥ(uf߻%|=t$B༅o,KO4 PZF$DʩʩʩwVi?]i% ?qޔ0]nGC Nuk41~u*">hͱf0͜N02-t)4%>A c1 n昀Orv=F0Uw^|ʃ­JEtU >K0VMxZOD2*{?sԃ*H=Z A*]S(Eى$ƽʎgTCbb^TUkqs[n).zvQIo=GƭnkZl7|iӕ%ݲFṇ1?]uĜ;Ɔ }m5Ct B24H,Wtq686tK@y Ņg=x"  Mj2ԡ1jfū_'WRBp4f o<~?|. ܢ~AY-qnY_? A䚊q\K@dT@ rՒh;8bB}Or5j}ٺdKЍ03ˊ~5!aVwgҺb 򫖂mk)/YWlUifڇ]%aqvRliNTNTNTNTJK/A/-B*Gy \F\sϞn2Г` OH\ǥ-2Vy *y9t9]!<6pGZ0".9NQ^&$Vb F8BQ*omf;o<Z: A1Um<[@,J5]I =|]&Ur*ET7 jNx;7.KlW?p ʀ6kD AAEÛXO -ISJ%x-F!<gQj$lWq=sZrBzkKgI[8D & X7I(!WBg{b*UetL;~vY5΄i+@*՚xGʻr\a*P˴mA,/Wϼ^?vɏ=߫1CQtM ,?SYm_N C>/.-1Hϙ5HRJ|rl4jjAXA=-[) ԆI;%4ck41I@<݋W]}5dFqf|THzϺ!v{Y;, y4©V)7BxNdUXi$ϸ{X$q `MKOX*AZ݋P+Pɀq}2ӄ}e!vkGqvCWd1Y"6`hbTBo&K gB3 /2@q7\-j84)8kٮunƝ“*M{~6?;;fA)ggg7C/ǮٿǶn+Ǫge9z{֋!jz)~n6l6sgnC;vC^ǬZfA7;cW(Ǯun_UWxly( _m63t%T@9Wur,tH6P\IV`\2k ý/YA#]w ЖQq3%.yJpB0nv(\o0kIPs7nsles >\WqN|!ΔaX e`Wz޾>y)3C( *#c[=#{#)hg;C0ӜsoAn@#1$ g&2*Ks1b9J$EnٖŦ#j?zC/L "EV܃i]ЍIjUr9>Rbgcc (1~8[XY/\78x~jXP~PB *٭05khI-x}ޕHiMr~+ŝDOj ccp&%:aKaOzmsOT= dLg,zWQ!>WT+Z8k!Kp) qF촻0i-{ WˊMKCdNrxveX[ۺmw},{[kmiYw]8Ǜyzݶ$ܷuN/~9NƉdǐz$e$0"h ep̗>t@wpvx*^joc(c`wAFq &(C@~,.T]xqbap1 %^U %ΔZv2Pczfam<@c;ғG{gA"Ղihp+)쉼).`$aV{ eq6֐eYntrrz8V,=zhZú^o'"Xտ5I?gUq^F=q{z|{2~z& p!zzyrsxʽqSy{_yhzޯF+!z~}~ƻZX[PK A?!XZǟ Ѯ*4KZX(6E3VUYF?-ftWtg嘄1IpU$-2Tܿqk#53Oe`1.(i+'wb A3.6ſUiC>`5Bf/u.mW} ! esf[$,2@:2]0\U# _t"=V=9U m?r\n uvbXmfV~qgg)4\cJ! '+mPi UA!RdXznU<=&vKd2D "ғ6=gU>]]*#%IT{y @"=ꮃVڟ\14V,\C—⢌)Lm>'IRx,N0P֗"1y%[`{5.,;<%zWs_HBGYQP4o"p kx-9kd)&SD[.84XV_fhյ?t_ ޗl7rc2[nޡ;Oܷc>6oq;cc]{H[{p̱;t_ZQvz~}zv>=v'Mjq꽛3iusF&_NxqBX\g7 t4Bp>,H F.<->IRD¼p # H\nw)[ 504lS!g?۾]sASY Eb ~0 Z3`?,-,\ R cT._6ϮC5{,5֗xPc4na/4_cZ%2M5osãǽ(bI6F:3`:ೇ8 v8Ywu0i9<gA]-kXr{^@p\`Uu̫j] gW|L q7X| 5X]-$ daqzJglDHI~8}ìEãa_ VS,1l!}ա}xHW(@ck,==ldUK/eEDZЗ<>O+Ub<"dE dW.܃x[RAS;7.}Y|U~{x "sB [I c #H Rl`Wu-N9BatPŭɖ-|Aw5ܿZâWPzqOjX sݹ]`BOX >"O JPꑥT2Db}~Fmk?X&ĦT'b߬oQVI~OBg\jZv`jurcj !pj:V-EnUW-߽r*r*r*W;0ל|Xƥ4dţukYKX9,n~n2u%m!jlnr@6bq=Y{M|] nfYo6Vn+RLԝ3ze7F _W3 a J`p,:x:p!j%7"`b ͭWpm~5՗.?m貂f 4NEPP}y{"=>Z,<+DW zJb\D]O ^2 :ȁn=, zhVzT<;!cV"N! a T84Ùb~Vj!1KqVq<,01=bZn|檮dL&JaB&jsy WQ vd{n qXu`[ San{'&eEMk(6 HS sHD2{h[P㡣eASnMCf;Ad(!#r߇sI$E>u]=<{`YW\Wv9S9S9S9f>`XzyQ`V 6Hshe 1wHb< gvBSlrT LisLWxXNf88 1@+竼ApWFp_ PX .47b5,aP 牌K:l: %vb%WP\ /߼?R\WVr=dPAaGw1e-L{G[u3<D(Z U5!*3vrBzV̞.4?bmQ;=,7U @D0,{"G{ Y: ءM܋y6.d6LX\%DY9r8uTx-]Ir/Ԯрי[m혲nZ0'mfXU/v+3gϜ+UQbMA31BGdҭf"Ƙ@ !hN^5ȵ8Y.>? KUs!,sJ=Ƿfna2&H' p` qx]B%gP%]}FZʻ\O{jLvށ5ؑsYj *P裀^e)%4.],@]Ӣ9\+jC |Mwn,2ӈU=/ 39)Ra|zHƿ#RSâx."Fbͪj=H>BOFA2X?89< ne Pj {ISN4s=`GO  QV X_I嚐`X P38qFH"|.v.y~KHDp~~vvR R[AEb?α*6Mcmjv{+8o6/|~Z֊Z]qvvP(8G7ka٠֚{q;~ϓϓbv}jQeߓگ橞'ZkGۯ^C\h-7 10.qC ct4b6 YP..KpH EK\E`'F //S;q4[6ĭ̐|_Z2N|0 ߊ Z; L@T}UG'ζ $@K Wx[ x߸tܝ΢sow6Z7\dL;UkւRFv8b_`}u,p+.E<E}>W)??H03.$,.f;+MFm$EE9@Q8k_삉D.UZd(3td)tlT'(*yu~>Fr!Vl"0S1"|KKϰnq+w2"`"(Z|CaSE~e Nah aLAm [~I(I3%ڦ 4SҒĠF 9E0sWZ3_fQ3:|, cfh5)H @{Kwts}ՉF't<||rgbmͲ1}νU]*wU+n rId $ H A,x)< HH'Qd?8&mwIW{֚9\뜾}V۽W=gws1/ [vTҸ=JDUI~}Vk=(w~foیrRJ]~ףcfwW^!y;s@qn9;5_}^c;_'g=O{}jr=uy{ϵi[f1`#/D%9nn`nU!Ia#6ӿq XHkQ.v?;8Q4sBRgM+~fi77l%1JDMa9X$ӥq&!@F$QyP[L`Ps3gf _@qhAm"NbXH)ܝ1́'CbM WEBK%`c`1o' 'alѧd.$4 >wx Uf6a&iri"؂(!i|OsWkr}|:;֒rcc's${z;};5_؋={^2_yC!ީexǐx,!<uڽP1yAB g\2Ȑ¦ySHYo9nmN><m"msE$(q{IlkWl 0FQɒJ0îT##Khۥ7.=cK8__:G 0kTlc%xx r p$AE e='b<:0q<8&͕O}q[QVIq%pI< = *{B},UWO/qܝ?F؂УBѵPU]`$A(ʱGoW/4H R*Fa)}!KPp Vwi52LTh]y$z jsy;7_1{1ovq^zCuhq|v|=xީt>{9v5'=ڎNyus7QFLCؐ8AR82",rn X e'(ɸDF2_ҁ:+(#F0Dt]# LrCr+} hZ]Ht087EA=*|1: ˂?Ko\\ Ի?[݂7#je|DDy#"Cr ȔGHiP jIZn (i\KMJ!ȽYsw݊d3Hp߫{ZZJ&"Sky]J񲏜c쑲`S5-H)FN::Zz c4@N%T@M Z.- Lpa=L aj"4gKu' iX!OV؜q8T\wu"Y%Y%@ V7c\C_r(A Njr],Y "?cۜDҢCe g)@Q1H TO[!TPWJ9a9Nt"Xk7BרHs#%INY!އLTۖNNNN;-@gȉFN1ɍRN34W" ΍o Lrc0D$ȑ}nׄ bSyOB(#Cseu@b)vj2ZF٥HF %TpmJ*Aƙ.Kg׊bK ^wjwM>-vyqp8^{#ѱ}^[HM=D& )&ؒ8șnҜn40ƉE4PDIa/@o`PȔe Jjrn[CAo"Q Q \񨯐l0GP P{vNl<+鶬 FnBC R K@V0Tkt`AvTTUGRnaz(`%5HٙYWKD{` tVss SJq& 741dzq}}WhSxڅVytsp]yE^٘d^HQ)Ah42zDRQu(Aix!@1ۚYj)oj },*A RFOککwd[`6Kl߀퉗I&%H0Gɫ#CCw@b\F_"g +"0(Jz &zHB̀oW^2õ)ڔ3dl}?}\x֭ X*O.n_|uo?9^i74F#D~b,A QBECD\_%K˶j07$ XᚃdGrA1õQ=~ė;*ꟛK%Fzj 4*b6;(e]\xvv'ag!a(20h6l,}%˹x6".7#wA(I;JhbWk N8YVvUOH{p"\ekNT:6 ԐӴ΂UP`P3 M#5C2%GMRq-7 ZB  % U}`A*4.f}E5It~}\j(#<% }Fo=Ui>Ǧ.)1u~VQXC@uG( $0{,R" >0\n)7Vb^0"J"hUlm>5) vjvjvjFd @Gu콦H8.~47Œ &'7Y#20 Ή4!34#ΗDEy&"2FExG6n`G,?`|Ǘ2]C'/~F^S5$23?Bmϒ %(I<\ߤ!g6/+/_z>+:G PMU.XT%{ $ <*lhM0=6۞sH\-"2@!r#*LR'jLq ӑJEE#oЛ~%ʼFz6ӈ; WlܸB8zpF㚹8`F(𹔐WɔtTXt*й@DF-R@fb`@sE֣cY~aB*#۵Cpi|u9_Upf~0jRrsaqYY" Q`)(1zS̕海 \8HPPʚ}5Wv813^ :0}ike9}j-Xհk‰ `ԟs_ŧ`))3uEHPeHovOKککک߶o@~#`R;2ke D\"٧ C4M} G(]K-e`z\rn!Z(՗{kҥ"R:j>ygb8}xoof[ϗ{!+m7ExH9(1o"Z3(] M>~$_/߅ޭيo>7>I[kFrm7/tpQ_10@e:""]g=cḲP]q)W-heDU>3x1ii|roAR vK sf!Ty@E"l8aIŃ 3̥'t7d㌄J5A3_<}3cZP9vi rv|\=/!9[J)}Wno Z(_'UKH9@E J2):tK1՜I>ԸgxS+)"n$`I IDATE)=M}, AAT"\ˋ-Kq\Ko#% ZB}_*]5wj(sD $J+3C:J-PlgGXSd7'˵?/t}֎ݏ}x~q۱o>cc>k{!|k{wC>I];w]1֓g9]{sY|& t_:>ǿso^#NчZ3*6a`̇DnztF6"]f4$hWl}b#j@Aw6Ίs|\DuApp+dYCok% 4&߫GG܇,!DY*?]9^_^/>[>ox8M )%0佌jӭ7O}$Y IbiJ8ȦYĀC:&[ O9M4AZ1'2H) ,VS\.[-U=yE= Rd{`z;P\(,s:( ďk*)>ֶlU?i(%'{'x.>"H."q\㺍w^ˉZ${O g([L;YC=uEo=#^<ei uŜnE-ATk40. N)za._UV RH-SzXk^ /սT|)XN?k>+J/ 0, Y>+`"sV*hj8Ve5 @ck=u],Ku7Q{]+k˳Dzbw]z=xYwt?/ uuS|~mbkwqWH=nwf^*쐱~~~%ʜ>ީz/^O|=F?Ήǹ]'zr?ߡu4#h" }#[>,?6JcKyM80) ue.o}SO,#V7nFQ[~h;/{?@&p{ Sxxwhk@Wh!rx.aHߩ?)<ğzpy|`Wy5-HF]IqFrKoXHDI9',N1PGM0k$\0Tg#Njz =;@ L,sn#7ߌ;XqATBIwԘlSse Cbڸ~џG zʘc⳾^[3ԃ+J19u%O}, cR1"sKq B9Kkӌ8}>LwTM-n2xϑ?'\P]0M46/jYmS ,n槽Ǘ 8fH&e$I4Cz% jj( &zwjҹ_jb5/F#C nm::oBRe)Xb|:i sU'!R4چUW5א8/77u>G6ϲm{:߼9=yg7`ݵqp:=ޱr}ן]>?t^Տp{k;yt^?|}~]fOaeyYV,_0ATD0VI< '*dj}Rhs%M%6iGOؓ%(? I [*- #ڟ] |[x3[T( hX3[I&+7wJ9++}>}# fC:{x|u"4-$J*nCshS-"LuqjXPF:#܉\g2BE O=̍sIsWqLQYBUReJ8^S֏=Ȕݙ;A*T-S| ,K s-Fn x._Kq94ŗ0këjL @TCe˭^wӻ$Ta BMU`Tk &t] 39,KM0i<I8P 4jxT<|+,%5{ǽ,0e* hiP"+i $BP.Z,񝂫?N9S‰',Wf3奓QFv.//ot Uu}ymXHx=H''"hAUm.//oxRmA罭,{ӱx...nrc;,#wcka6RrN<(;k9|=fy15@ïm۞z8^@[|snq_Q79H }q<Ͽ%XGyôLo|! Y2fnY7l#LѵEN&n^G><Ͱ*H$#$VP T'o?+L-g^} wwK qPkD&cJ?I@+`Q&̼D\;}Qw#8?qfhϟw\{O2L1ySuHyY:B CYC\ADcnMj r5I.0jk-};FQ H)@燃```y"Ibs@غ=^udtla*0ulj>%̀m[R~%vPO{wG]F,e{p>@ZJj%xU6Fz:c14' } ǝ aX.&z^H-ŝw[7UD=%9{ 4q> !Hfyb,wžs~:H ПWG׈ǘ H\dR,*F DO)얊{o]07LYacoժ]?M~Վ;y{[];$yW|7<]W5>=ɜx׏5x1]}zykcu>󞋇yv0uD+HM.W"@ق9#oJl}MdD'aytdpXۜttôI*ZX nEn%`;{k%ɡ7W÷ i "ߛUo?`o  g"xŀs=c#{ܥ>z̿.(A)o.8c92@!&xo+04S~"@M 6?EYމTk 'cDg}q~1$I:1̐i$"Aج`k=rsCݕk-KɱTĽ%Y8XL3cHk&5)z @}ƗLz*/!Qݠ(hݲl :)#D2GƇ-e'fk+y$;!ADBkT/}* $!⪐zūҐ$IRR29G3 ʕ)-+|;.5I}kZCluSɇM& ~9^~en׿uS;S;S;@Ȉhȕ +$"0 s.ADc%#t8_Zz%ɂ$7A-luiX ߆{CMcgk"pSj D -ҾڍXR$uidX#Mz*"%},F|DHurbuYRE^P`c-Pp RP iw7657khDʹ07U"YA&bu!8$j@cMỉǦO+/XE¥,Yjk$"I#"WO|ZKKhÇ?}C_5|Sn'?I|cککک}[A٠R2JΜ9-ʐ Ԅ"6!tsQDzp_Q*;GkEt7%ҟ\ >LK\Ч p+/}=]f`g4rB0ܣ5 AT,@$pvB9ǿ5V눜i.9] B@ &yt=k]R~eӓDX+%٭1XFtENNDy95 X5ezE\O񷈄)XbS.ɓ ڇjwp*#HaUEkQa.@pvhǵL0J,K14~kKSB>s"ֵnNT3ޱ)]'Fƒ^<|9fSOnsQHhɔ>#9<'pˤg_g%|<ݟzZlZ䭋D; CSR{` eO-P+*reCihV'8PI~;(pW,Ia"5IU7AR )v:a^KJ K~]l-$B4F8e>9*=u[oGG/} 7xԧo?x뭷я~Dککک}d0>krtR O[1v Fc*F+V+7̋*Y0qK5Cl\E3;6~jK >3n/}?pTXo&p`] oa+HrcI|E. gVQ/" lIVx)S4Ƨ=b>d3i2Wb\Pn&Q|(O麨@L ܼ|U2@ ʦ@AAŘspk80kP&uZ;1J^ij6R6QC\^ D{ijAқq-*JZSsZYA$ ;;|WN #jyKu.{ߕ祻 >|\ZDsV#憇[b.G)=S}ŹVWT֚{fl-4/Jdʭ#KcU k>*0U/5XD.l)]p*jHZv2@$< PꟋCkbm0S/i\ s֎fc2>eyJT0fKAk1N!laV0ckP#b-5l=0)hP֕QP%TԲY,%e(t1=>C?CbD;|M|s`]Wְ, ^u|S¯^~lۆS;S;S;Sk #\?6 rǜH'tF$,#ANDc \*YE5iFth.%ˌRG.L#Jvc?+#I /??_}_/?9D<tgP -r}@S̕Fk;|r55|H #uf.vN)^te8HQ\Mcʞ\v8‚쨲8 r{90|so&6/T8LF)5cTϾ%IavDvG,&2f#$T%kT\L1\̟`}3 ߑq/ En@Qrk[sRAq*l[WK%mrS[RJp~>uÀZ+M~D"MJ*fNœ[h^+^:X$wIr_|˲׽m۰kJ[kx+~7~?x+X|-~zĊ7}oj=txGU9ox I3I=i^-(G9|eIuMƐ<x<nci9qz|=wk߳zruq+n{\',x|=t8t^b`@a! zFp=w6Y8341gODD8 FL!P]dF`ިe4!\j-@FQ%a)%#||a"L /?>8Sy_o* #dw@HT ?ϿNdU7uWE=E`|1|L^Qb) a٢T-<'a Kbލiԗ|~dQKuxk1@c 8 IDATJ$Dِ,30nX cTZMJD`F>*L Q*D? &E GY+G$-s%SU%Ar㪩P%hл흭#oc]5nD,3j[Gjl*pCq"CQRp]?f h 3RJ,U *2}ߠ*%!.q_6]֐+ZZKRty+tF[3O87:ݻnW^yo6~wߏ_=77ݿɡ̼ ẮxWd[5v~"iO{<] ~n_~g|rLp9{8??Dz,y=N?8x}~Z'g=9;;K֓C!|=t-&ZRL% M-ŀVb^#pɛ@pe*qٌJ%ӐԖei^'7ʽT뒸(P~n\[}Kpp~,߃{85P1[OM7#ېق»α{sԥpeU|Ew9fsqnE5sc;t&ѽ9-m2l"b \^\f\+ ׈ԝ虢2׼j>1̏VCk]{@|41=u,X#Λ*i|,|0r'jj =+;?kh? mJ<\:7F9oD#/J]\&ʤT%RPƸ4 H0BaVPu"VJ+HF$"HcQ%wkg-U$l iLY" "F=-ºH}8R,%i-NG*N5"Cw~$ɖe8n?~E֜OsǙc!qsz9m!zr̞zN' hܜjDEݍz8{?6J@%ҼIFZ,%e3w#`GHP2uaɧazNdx%Q="43Ab*!N%y2'$ r wzPౚe_kp}gA.hzĹLE\.o|rZwO-7HP'SG{n=IFf9$*-u( =]X#@y7G U,:3QKJ/qΖvP\KmkԑW1o2_jJg䄔E٤TwGP¤{ÀNF"do>w6)88<%Ԣ*."7H!̀!@({PaoUqYJܻ_hrA$,KMi ĊgT++9u[)%\RHm08˴6zu)9.m8/KٺF*1ţ[X0Hp5DoFV^ҏZW[sw6(`"!˅ h [^t" D} a*:|%\IsU ^PY*S"$ F|3[oa7>9^uE_}˲3:qW;^xŧ?<9...n$g?{9޽{Nү<|֨28??4mX۶7/^=ޱmۆx/=frΨꫯ #rwjaKD|([#\'zruqד8_}ǝO=_ Jh˛#R~\+7@F 2ːJU!e~DB`3˴gpQSǼ/_7]ſ/+]6\ƁӨOHez$iz|fSb;u I|tgZH 65-h 3/9]8xL_ 5Rj%Ɯ+s?Q_ e5{;ȯj#2, 6CR-:Rʐtw,Fuo{.x}G1Qۻy~sN<|ez7_uqyz[I։CmxC֓cǜ>;1_20R$+K+K~@'P?@eиnn,BTF \ːy# H *eDFylgd5ipsmMDC&|Lx{#E0܅SO•? >GgTv ?Շxu/w//|o{x(9Bi$"`IJ}LI*Q ʻ0xy16@ɜ}FsbD y2 kG> = u/[炗Wr K9ȃyʗ/C3OGwUπ[(xSS(vKٲԻkc甓`SA9LHFǦj:R;[~',o$uUJO"zFlحLpR@cZsӈo]! H,&ERṯ&|tmPߦ!(AR ~sǢ:y|n$Hx߇>~شxvQ‘ʝ޷HŨՂP =/qT/e9%)Tp"K$HT~3E"E4Kh?vjF&NNN~MoCAɻ7>AQpSAV!f@D$'JdnWfIɥ% 3AG[]>dftCG>-b9PRz9"VN*{(>W' #{<[_xyow߰,}rӪ7/('GǢC@K`"B棠A֜Z5$y\K ]e<cv hպXi^f FkE,+.x$~Arz r:{;)HxֱoNhA /ᤢf}^HD b="*M L߃Ce=x5t_dd%|Jd w`k>nW@eM[i$Ka)pi>k} 0,èQKwU( Cž5^7M;`]視\QJzʱo K]2;ʃXo#SI f") ]$%vjvjvj3*OD,2È2 `e{6T tleӖ d#c\k^-0{vLRVhp N!wh&N|(+>7ȓ02낗Oy&.\xx);\\8TE ~|şwB[,M -H;#Ⰸ@zNtI; qi${=ш.d@ɰ/#J^#F^,Ocs*$dH'[Hb 10H 5݁00=kڅ𽬘D%KZApLgY uo쪌PyyN(r ~ -sٛJ,,!'aVh˱SHME5Owj_jH’WN* 67zP\e83G0URz[ cŨT'?; v?KRLD58T,r L1쮀ăG9ǶM:I8 =+糇~6L@EDZ8uIZfR]g9y*BmD }S,R߯$Cqs%ӓjDfx RqlHM-#5>z ⤮LP\6uXS 2\[ Z[H /9#4Ie)nA.AL{>'7',j[Z@EwWiX']P)4Nz(oV*'J>kf]H#?S;S;Slo ;StOB<h 2F̦|EaI8pVcT2YOh&π܌ȼnT$zRa-)&="•_HX|x9Ѝo]})%Nto<ᒒ8.YFuhFp=@J$o-d :`z?<dztH,jrF<Sκ<!9)јN#zE|7,6~gf gK kxxQ {hXn2'?JI;$>T`]웏 5H#dbz#"ݾERA>JK<".+ n>An)2ݻ/߻R?QQ)l=I1@ `aǵA1\N@2sa[ 'ٺ[HkRq$D'iTq3¦ ֺ]rxāb*&DԀVb﷞U :|Pu`^۾u hh >LoB }CԒq$-<5_XvDon`.xn./A{&YE>&aJ٣R,}eQnQ! Z dXککک϶r)RbӂD( ۘ ?Q!g#@'qHo4v.5aTD?>GMA9MG$lD"$ <ψ=Oj9+{,nӼgU3ox7~ '!?j5e8WzՔ:X`V2* h\A,uH)c&$ y /J#y֑k]BR"n9 (?8SqyW ר -0"0W+9FZ⣠=9pqgwVϫ !erkbI vKZI5?OQa֊e';fN@4RI\XPTQы8n`~ (v`]|Yϭr#%5<>T s $PgXD\n$c uF !ڴ]ܮ=~7]ccߧ=or-6APٺ`WtZݺK Cڕ IDATz",߉qR>|}~`7I jY Qw4֌Y2*;~y`MM۫ Ņ3_!n4Cj-"O:?SJ;WjI56$>h>5]{igI̍n?7 |ؚUSz^N2j'?,Lg|xmɂRɎ+^Ad?U+^ (QeCZ˲UޯɄ"bh1#>4J>#՞'s=縂 ^IEӮ=s`{I. 0ZqKQ2 >Ζ9I}ܧ+00Jk؅9(W3zLP2Dg1[o!\C@%C~ ᄅw4X hjHjHwA$]Rb@9C{%md=~=: ^$ ЮYns UGḴLgb]#j ` "6 iG(ۯKj[bQS$ X"9U䁛^n[/$.WeqI[Ð5[=Hvۃ _ه [k>_QUH¯CD1XF>fOgH?㦉kmȒϳx,{_<X<7mu6^Mvm7.g16C !<,Ao h |~RVm5+nj [ 3YU0̍|o{5cvl"[Am+}O8O̎s2kygMS[3,wJG03eWlewyx,5Vlɨ䇪 tqO(kgЁNYk$04"I\ȏ×(ؐcQrXpK4$E>x@Y:R cU>#CIs/1<"-Sҙ>iiuefyw$99bj U%}F`>;P #Ѧuf"D$LxpmV{0p ,hTNОZiי?TEJN%qjcE$%b`)ȚeQ&JşdC{$`k5l[њT)lM /;k(xqJ +$TsI "|_\wֆ+ғt|ڨc?'dXK(&!!"pq\^9F.kOy;\F_uz˧߾LyM߽:3CھrTύW+{raW<1{wQ7;jsM>z um"sxuju;u^>z}~>׵ (ޒ"Ms@ a m+yH)5d{5U絇\Aؒ4# ǒ|,t3*N ,Y~*Jiy?_}pC+_7Ȳ1?TN2'7,V.7KԃH3 sӛ"IǢ*_P/|-i@UDU[aFxXx@fjnY@HfO9$${ԼCb@F^bA+vU ~dAUks@f |>>`wAd6AaAT 3/5 .X#^;P !S.[+mI#$Xp 3֥jTA#͛!t]ԋU0_V0~NyxUib]cpnHYʎj5J )7K9GA)߾ $`HrM9Lf9F{U *L|3`6SZȃcƌI$)YG`+NϽwwNmd$'@}j @wL2j pǩ5)H':H;BrOGDP1Hym7'rqq9q>uǟ.=uorstq}^'}uDZ|l?^ƾi~~w{5|wS'ĿڏzXDO^k|w{+L3(V PY"8Rx:< Ks4;|H(uIZ "˜-X(KZNr1^̨ݱ|z@į,S,th{PTvV.f}m ki,(#YՂfνo0w0?pZh!mWA֜=bjN%cF3RJ VOM:%ITHFf6HA^z1&oIZcjr3lL2d{H .wu4U׽>aw,N7$%8!SS7H]D>c3$Md[FS V^ 2pbd*1r3 ,X~#2sG% K$;%V͹ux# ]= t䯩:[-SE0+ҔR5JO<&I&"`bH?é²XbFK |&hOrY9WtWt(ڌ< Q`}] ~̨r@VPy6#Č*U#(\2\dtWBdS4Y1̟)H.d?0&+?i/44Ys2هdrdV=x'Po.@`{_QꌺRkp]bv|)`y[$Re4T) BJ}D,sC#$Zp[uħ1>_RHV^|羐I|X>0ڷHPDO?TRp9B#S(" iih p wy2#c<|kl D/j@$^SYQqWV$bݒDO}tsNla?c>LdZ-fr%M"{4y(F 0`+&R.X%"3W?"|22]CЊW~bRU>Hῧ1;랧^-> ;ꡏ"Y* P]HGv^(\׭ lFb$ߍGLor/=lc? 𶹮T a*DikS&zE"9{+/72謞ʌ">yV5\^#3{!?,Hs;>Ŧ` Łn$W% 4U*W }n`jIy<%#q* ڷUyr@KUtjUM"9(Ws)0gHc,R#6IcdɽC P>C%҈1>z6s $/",MUVV)\IZQԞv4yz8ܹFXfbWI@~$Jʿ '+hez$ڭڭڭxiQj%`ކ lE?gbHr2.62*E75:]ܕ[E`:pp(p@頔 |tǡ\q;\d! V>p0|3C=!BG{Eq箑$pAu (+kQ876S3o<dL%~hkjExCFBߩ(pWJɬNgT}P]xc"e2h2D/C)ۂ9_b(8mTˆ]Հ/z4DV*d潕JHc/S~r j0ݧB5z[t&1a1yVIwH5CmmP$&'@ ˄4Kt}T>il;2eժ%C>NJŝ>C>Pfڋ 䦹<~"]*)}kvkvkvk|Z*$el~"pE$ȼ,`H32Wspt~J)W0PN%(GFŲwF&*t}ɕʄy"ĸ4{a;?;W{OT ZAye`ɲWC`({Lc,6Ԕs$a)O1:"jŐZ#DTSNcDEnpF3NITenE_R2Zε4KܿQHОQkMA/=%0,pĮt1^z.]&GY},S:ȮjHPƱHClaD3pϲ65nnnnU[%iOH79C>[Z׍!s\{k 'ʷu}N S<# &UAFX0J,yEP"[?;{iBGi(27D3;rA"ւæ9R,&k 2׈ (͝o0:.WW.rQٹ}ϰ>K$|;`,f3*)ʟ'j>S *,LjF[1 3"FHµ)ٟꚺMm18y@FY>{QMR9f@U@6{@.0R1%yAbT$.OU=e{LVQ iXC S7HN $t޿ϡyZ{ԵwV#KRD0}}Ta"}Z)sc a; LZ/Ek-q@̨"H7 ӆ>({ǩh/a(bR.Ji) B [{ѹi0f;DZG$y8k @*-c FJrjE3R"յk{|S_׾^O}-?HϷ]}벴OۻwߧZOܗ}S{̵{?y~w?kו(|=vn3]t@@5{ c.0HNò4  |)MnHgԗYBn3er슬h&S?bʔ04"йg_8?in=Qc~pHPAӎTOD Q7Iv*tHx8{yOG|T/tT$ОCN IgDXj ˉSpյ420$^}l1K0qL*t{Vs eϊ 2<&;j-SXA"GlES] p4+Sa2ji4w[uP{TeD+.B'S>G_tgC{x'd:pGDACZTm@/7}p-RT`|g5yFXL=(r7fJ]Yro0m*έڧK?ZwiNy;,1Xj^%0æW`1wO4*Ec,e`ZL8*R~)a۪W dO* fmZCE:N_q3{gxS{3fu`[gJ1Byc,4x'8%˔ X 1kO!2@gWnL# Fvw:"WwDieV*bly4B..M0k$DSR,L tU>#]TNa_2P,J ,BnR[w2me8A@ukK@B{2$ SnHbpGwz6b(5TO~ @g&zZ`CZaňV+}w"8X Uù0Gu Χл>A&UQ_c*m_`UcՊ~||$ =򌵔Y*20Oi<XC*(%17IVq К6I,`l:`Є4֜SݑhTh D,2MD=D&h {0-^rQ׽M1;3~yz IDAT>flmS^uیc{Xi>|uZ}{1?Tq=^O4ߑ,cjMZB熣S3/|qgyK2;q|1AOYL9X~ 4j9WE@w%9\g->&h]DQ<3 fTZ'+fL?{'_,1onq?m#>c>b'(8ԽB+@MAV͕28woh" Bnç?E5VSwf C˼."40愋 (!7H*K(]e4brbcAȨ}xEiٷˌ.#ǧlBt)Nbџ6Z`E^0c<1ԡrl2U揚7ڃ|Neإj 8i08Gb@8ڇOqUrx(Tg3Z5\wVߥJ> 8g:ɔJӽ ~ r_lՀDbD|pxv_jb *{z!sMq^I2KEGi %~8EA`$ F쫶5I;.}*ܿmBt)[5jc_Z'ڨ2mÃrkIZpZ)US4C51b1} T<;5"Ѐ$T ^RXi\.ʃS_"Y.4}VJzʟ}r<ݣ;7]g}q\^+}F|yg>~O}c/"fMs)뽣Z+_U~>z umڧ^z?yTz}u?}@Fޅ_TBQyE3LS )N@LDI?t a龮W Txc3vgmÁDg)"$kСCUrCƁAZ7[şE  ={?ƿMD~x6Sy?@}ij@ԑ\\ e w/hc FXp'\R%wݧUF\iEɜLXYzb3ޤ^p36 .}ON m^\iD2IR23* qx~"bk0"pwD2%}o`){ɛڇ=s' UNv{3F=u~w{5|wS';S]cS<{->n/_" wMpkac41!"E#lzօO#-At:|˒QP`3{`F2UR~=frFqȆ\b" s8p<4_;G[_fް, ma69$XLQuov>|Xc3'H 1Elf ݲ>]čNC wL#1|>Q]Ls/ezR (u9ga3cYzԘ̇HJudf{X_\IA_9ڈTHEo*G_=_ *WuTaкaswQ 8o(jN-:ӂw[' L(]%U.Η>EԌxP/όY1 Z.yUSY>PBU q;]T5Bųрpt]s'QJ~c X }+}+pXv;I#;%DӿuKAτ, i׃443:OkCCC3E U ;U_ihn՗l"\UrR 7awm* Ypnnnn_k ^x-|Ґ|`)ȢfA#EQD:^d"sQ繧!)ҮI揬@1ax^@ٛ=d鳖2if*}}sz_{^v>;,pF@r`'!V!.~ȝÀf4f2EQw'FSC$K;J)˭gQHP~\$:F# J!(D9_5мm`*U Jổj3g2ٌDkKM@G`adüL@pexj 耠z3z [-<>+Puѝ jڳsl -WHyMPpF}pIEn%Tv\Gdž:zQݩIY1rŦ2}5apFk 'E:Bbe~^~'\@}LS(uqjFeõw85EbFR4JMaedI(G$b3u&t΁`\,?ʂp59#}چ1pWnH ґ?DDٟҶ^dfT?~wJHkH4wDր.gYp[[[n+Q2yj2z9,`ɑ)5+ ,(Bcn3yEP1F̛^fnRyV:E0L|@ZWDzC-fz)E( Xi)x32$UHӴ~Ugg[ Yj_UR(q&bȡb4tEHQA1Wz.X,uG:WKcz,:=!F8BUŊJVlF@QKFtҔz#dR0IU8I@Xr\[֓QH$Mt q$EZ-2:%nu\[1$~C_TIURi͵ؒ;J @kt1*1pZg/Ag* i'S^}so18Yy) $6I'RU+NjEOvw?ok23( PZ4SSRF tL",ET`PR)тfwzg 9䆪DdpnpޔN~ J1RsIt]Yn6Sg)If%iė}g }:IMѝD pmq/BLknЪ5"CQn]ߍqk^0jZH}}Ԭ:qvVJs[[[?K藢aPn>[F'Ҽ)d$U |6XXI!Oq3z?|e"ç7eyIb}uh@_+rJ~}+=ݰG_w_\v[ρ$섯׿gtkEBpLhV'!5# ; >|I_>Ơ|aܔ[r`ԌTg .' 7g+q*䀮'⭺Ō4I^ӄ}γ#cL/Z+ 4onD$QWDyʜMy@,cm{wb JX3}J9%#uJOU߻_TC?\"of#WQ4DZ%Liz/|N`8 [kSwNjJ3kqYϘu}=5XiZ6E>Piu0vj$&@a[a9Kpԕ*9Ux/>?P1*U`ߜ1ǓM@~Rxd M8/X` 8?ZuWZ Ghkbت8"$(=iS$: r*j$T6WWDκvuNbk ]y fJi@RayLO0Ѓi i~f)e.~=IZ }(DPDi"]JhNn#231SpNg~)"}{O#,<.wW 3_Rj+ O5"h~s5?c rLuŽL"HU\GBSI,B'˵+U~|vC%\O U%V=PnY:{Njˣ—Kq4ɝ_={}nnn~[`Hj)=ْb*[Y0l)}co3]錰P:I4 اz R;m({ҁ|H4eh6f4`-s~ L?7_}F4'Aւ'>x/XM,##Nʐi>OIy1ZN}wFK1cf Hu]3*Qp^F,3| `Qhe6%r_l-I2)l߁T 㩵(etĠ)Yo{[ wq݇LK=4ƘkYP%ET o D;.cՖoG|_>uz}]{˟{]/w]}벴OۻwߧZOܗ}S{̵{?y~w?kו(|=VˌQI<KXJ><̩x`iY9M1˃gF{F<)ZI(7ft0lKNT9[y@bMUy9;spm Ukjӳ3*RއbC]{Wˀ484|W٪Jx*? ħ0ɡ~dhJ+:}q>P%9qt:i،bК\G$@2W>}VyH/B51"pH9)`k TTOQˎs#J'}_P4W=HbF+}lQX]aDLwi Aw Ven2"н_Pup|FmT!Hqw30X.*<4dB~z-eNmCk4u95xrFcS'o^m{#h}u݆R^wZlZ5x{S'Y^ \jqE! 0dࡣGH^ wuX#I%gC9 3\{d)/d8QyK`hLf=P).]`V;Gr O3\mVe<&1}k[ ?Yqzᙞ_~s|kwgcF1T+e3]$Bn6]*íA@,Kf+DuFbK{@AYn̟ .080dCos>f5K$CyJJ?ߧ2ŏ~C ~1CE$:h%#U} " NF\su'8}Ls4KY4"2 ЁߣW?c+ 2mȟI>׽ҡn1ɖF@Ls;S; A}~*S]RHPjՂ7D*N .JP`]) MĐg@xq9 sSB!@ oK1Ei4}`k{)dIsTOF*!oZg};C_0[Ewۦ2/w V*HDeBx5BEݩƾ<pxZ]%}u[`dnM)}6{fŀw"_^c\6<=uǟ?枏m?oΕz믻9~cP}?>u/~('yao^ly%f 5˩~7#@F~ͨ(bJMf,WxK\[&1Kl3]3pBܔ*Ey{:'@VcsxY|?77#׾/}qo6?|v,rdh3&F8 g%&&ХD6\Fm3'~hMcjǒd\w15s|Dذ|1a{w),k~cV.lE7f09`1D>QܜҒ+FҠ(ǻ0w XM"//} T pj",:{$16UO \K8w}-[i 交s 0#ꉦh I5yv9ٻtkzA[Ev1!B`>M3uS[p{G4;$9搵|v>1E$E΍МNSR#6SOdg IDAT}Ub;;fIէ 5X1}gUL>2#6}[-0}c2p>1Ub!7g:M&8xQ@R.M-f]Ixulk_}t\OTX^.)戴4 q\fw~s\^y@yu}:ѱRp^g⺈PT<}m1יq_wwZYS=7"p>s_uG{~.q?uwQk+ʏ߇XYEzr>sǭk╵}S^w|!֫?~rww'CSRU2b˛d]u2(i?u(e@SVUZ9̕U+N!%@5 E(wȉ3sk3v(O4yiXfR3_8WRΛ<4OquL_xܝ?}f~6_2XfU ?]u<.CkIϨ{STMh5C/[o."2:)Z!S6~8*jnSQ$U<_Y&P2+U$&XUR`{Jŀ(I:I$Ҥt@FEE L-\j,=T"_\].R}ےtZy1D`_KO `1dJ >vJ3Zw1O&%>TsL|Fcexq)GreAEaZk|ΒΛMꝆ>;aS=f8|Vt׶YGB*`Ri`Y #`p\;Ne/k-.őӾn},ȴ$ $ r9$Jh;:e~V̱ٶm D;" _Z?1>g\=U1&Y=szՁ}^u{3c~g}.kM{zWͻ^9`woc'^?ֺ~y=szkk^ǟ?ջu<鼾P?g'nrS_H9A?`i5)/K%O k!`+#IfwVYs> $"hF *r7Qp~r!}V@7فjS/mW%w ,e y/ G@TYwaFB -PQ`  2=tp9'M%a0fFk&s\ J=OԊ1binQ3Ⱦ4)I jF%B|`*).&r| 9N I5DFnKE9xjɛRdHW0GyζR! M-eF5@_μ2c_}P"p8~&GV; (J_8TF;&brEZZRi71:/3jZXd8z~9vm}X:'IIoޡnEkMDd h}4q>aFn#hOV#pSvnAXƌEQ=|{N#~R^$!qjSm|¥wSi]ES_1N<"eZOCYc'J"9ɵWcc٩U>p*j҇"`>R=L.akMsӁ(*cN3fR!O 72>ۿ w׿u|ůگŋ(/_?яx9o$nnnn,cwF;&>P$+ʭd[&{I38vӿ :7I=aVkF T ( ,Ճ38oUf@{|p. o<(z^.׳~nßy~yRk ~` <ϋ[^Q Y@FC<}%!t*A4[X 3w {'wg$]Rh+};jVaF14s.Ę0&eJLcCkdLK)JO*JCz_y"RuƋ^$\DXLO EYet74}R **.Sբu"q00s5El\F '"0$]Ri+3ee올a>̩'C1P_3 #=e/3wdE_ȕ=m$;M&},EMB%*ƴL9RοSk,cx!TF6& U)K T0c﮵5mF-})=Z"=N[iۨpD(5 ^* 504 op-*7B)E GT I`_*C,)p/V NTT,X"J3 Wɴ初 `.۔'D7 fd(YHʺqNR"B*J͠Cx%@曋T rm{ F=}8lDUĔ5E#[0Ϋ1;f285KY2rC\CZ+!Ik3v#Avռd)-2s#9z`N*v؇ܦrdV *3-JkqU5@|2eG:4Mp%lg*Khk&#V!͐@ ={xh}s= FshTɮ>:^ ˜1JUUXYb~ 4ُZݳ3{ 9>$ _L!KR [V[hTAkا'>8wNQqc۬HFiq.2fB2 u K)wRutkJT[g?whFỻ;D_`6</^~~ϟ?=o_?4ovkvkvkXMֶ@o( 1#Rlp):qHUr-aqT0FfD{:% hE@lk "Ͼ.y+׽Kl%]ӗOZ Eɡ-g2“$HGw9$H~go>ga9E+ ->=D0YS5V-qK KQ>yt2+F9wtJS3ŕm$aP>IlbxkaD]$QYY ndrw(p1:=i k?@ R 4Ƨ!(L`<#i"VDEQűȳPr >̔Is=RVUbAþx'@RpjtUO.B{ǩ2%Xyj/hu/{gy HŌjYn`4H0@^s^;LY%K"Z½ZAT?탑4"/V3^:΋r +myk1z.NOߏLR_s;!L0RɢҶLXKЪ+BȦL4Kmô0&1ߴ7=K+̰;~~ |{w.8_EDow~w+ŋ//?[nnn>fk =% Ky9_F (]Fdm辀C(1eZ1a5b0/ɽ6 acՙ> 3E3#kaay[+`fC#g5@?W_?87klg%U!rrj=2~I'1hv1g)a?f?:Rf:2mb1͂Tl9!2wU뭖%/t jtۇB)5s4̊Xcɚ'`C9WzE׫ ϘJJQ|w3OMGF S}@$Ty~iٝw+JGV*"R،øL>bIIܼ+}IOG}ZXs+;|vH 9(G02K…FX"} GlVNI#^2@@\)7;Sݒ}+41{Lo 4NT8d5)B4~LX^ e4k0\ek^?xqIӛCiU^\;. pת.i ,Jf߇J#g2_T'p} \v(3(gU3i$[+p,2\;2Kp0Ib7kybMæY>?_|;z_۶6;x9J) /?__}|;Պ~usךwojOu]OqM}Yo75zcmLU_O^'szS]L5T{|Z X>{΁bx̺~u9y'e?yg}z}yMo߻^'L5=̲d4eJKyd&foƞaS<˗X>dW~yO`VB1pyD3, srRF餔GЫ)UGD@eHMUT~_yA@7W|n7o>߭/@N a!bWKt>1$wstH?MUI`lvDjTfS1s筢M31|FP]fKӌ,+9%瓭q:pMdIv%vY,BM!f6ZgqhJkiHZ[pq8y&3#<*(tFuf[{fv=JFbz*bSdD'ʷ%>ZGҡx2 Jb+`)HAoq̊T^A!U>Y)D1"!ɣENpM)MSeBp_˄l- Xs v\jET~.p#9`*xTp=jcm8:Th)X^;9lnEjA`L+? >9ژ ԙKa+D'ย zo =>̉o/~ |g_O_W\.k~_'? ~_//ض wMVM6)%Rl7|F_}մԱ]jׯ4߽{sESxoXs8Ok^םnc l䆽}W_ͱ]NgvL|]c6|O=w%v?|}vfK)a秎ל/i7@yjmc`ɽ>5wmW 6k 1B{!c}f"N^k;VΠ۴ӗ;`Aọ̑6&B( p#,Vn ` nD$3ͧڌTf#`RqHPMeЩM}wέW#ިx=(wr>_7@* _;/*7 #y $XܺLMA26f!hN)2eCL?V alo0@m,%&Y5wMcoS?GWL׭&c-., V\yH L_L^/ xN;8(7r?Ϧ#~~w??r89[.Ϳ7oo_#.}@Lk?/Թ^n6o]}\ѽ{vc N'lۆE}[~/ku~v:|?|}im7<;_kx1/_x|H;^d/" L |Rʟp_ح2 j'~ X!an1cSq HQ;"eEVof?9#d?Ǣ*mz)3}pw*N~lݎRxPPfa;xZ@}vKH{1!hs^[Zthj s=׸ )c*;iC6a\q. `lE0B:kS`U}6I_I:M 0[Kcާ&1H>X/mKϾc '}ƾ}c"lR +˽!<37vrPSa RZ,$62MtQ .L9Ul0'Dc@5{IQ,9ZGA֐R(21h98@>-zG1wu } 9'%PI}6l8+{]U1/Af-[%i!:?'k!1(+p7 )cr<\lw!@CʙnB"%\2 IDATLI@{ F\kSaM=E˼p x, pV@`7z/D%('ZǶQG8(n G܀κq>?xW(9//''/~_W8NsSq\sr?s#Zþ8`9mp\vgTf}RJ_?E?8㳁Kڵտҍf |nsZroo̊s뽣_ 5_]k ?q:WW(|ݽK)ag=x~w~ :y_<__ݏ5__!ϟONd=/ǻ֓m ;zO*+A?7Qy̠Fq~6#^ F_MI\I=s! `!>VF}uZ|۬*;6K$IfoS)eKk#CZ&np͸p DIΝ$ L7{jM_{r:K :L 6DJ ֍}0Hx]  0/URRQ3X -L2|uQ87.A iLɢZl5Oh+7lyG} ֝e`Km\;8"mܤ_W4B%I4k@lJ)h}O)e?u. q<{xva{{Żx.+zO#z*TJ%x]Xv{ٳ{ݎ/gю S}b |Sk}+1|1?z;=9_]fxVdfzlfb#)ᾕZ|꘽7%3@{ #jg#x^YX[ݝ]F*j;=3u٥̯_>pe9+ iY?Q1[(yl8 x)q[by5Vcḧ́SH?,"؊f8Ku+S3ZFJ3[ c%X4A%_; x` /sKA->BT8Lx9i Fn-]f #f࿗Gm<;3˜Ͻ -ΔZwf0 sJQ ,}E/%mW@K bfD : ̮/+`*$L6Fg';V(<떃*t1l [a_"l)csDԉ0B,IY2di\ Bfsy`e6[[B[I8e־]>65dY.c9/vN!QGkf)(Pb:%a2JA5<6`.]ށҍvx0.W MV0 vb1ANۆ pFd|.,pr ȖSq>娲4sQVw{Pn?;^.>f{ϵ/iw>k>w_/mw;=|*]wϝ%%csk{;_hs{}ɻx.yTۗ}g% Mj2fS2aA[k;2dvvd@>[qsEBqE:LVVii\o9ɚƙA%"N? y8F\#9`C֛Q>{e 0X[#̺]q2'\*5=0B !Ij#e\RT>'5w _wq>P<#dž;M-%f5#Vlv A Kl`EVh㐎y/x7p4OR%} \DA )V:[C)(x;ގx;ގ7(7a:jF?p1<2>k26)ܬ{" 2ƶ˙M6!f@Nf:1(nh3l'dDlh#ͧlvP jr/0Hi uENǃ9P6uѰM wѲ_|G`)ge~@ (p0 PhAp6)GځGㆀ0PZ%aMf 8e=?0qM aJ~iDϬ`=|)H#nc&[*s,L)aH4JV'Ȓ5QW5~NR_g B@(\u6h8iQT~=a+KdcO L O,gHcPsL |201>[8^lT&1çI2nֿ Gt6.~ [끒57| D N6rI}ĹҒS 6 %qLx;ގx;ގ߀0xYd a󙱍 3AW=L#7 FuP]5=2`}ae?sɳ>Ut>0tob50M37̲nƜYxfLKYRVDCֆzLw2@;u6Ko M=~A@(8I %A\KJb߲,|i'\^S5l+:@A3X6\+"^t!9P0_{ !<@j}yߑsƒun-9rΧ5}=8J&5ᜋ'Nl]k2 o.,"k h\glS-iN Jr%6qmM44DXX~dsqiksgɃ6A{&`bi]Z8q^;uPd]F1?EP:Yk]T $V-/VԙY̊ U&AD{igvJdbro@kF,1lý#Ara~M*؄{$&3)[h@!c\݂Hr\l x-Ny=r whGRL!! -Cr 6Mޔ 0P̵h;oE5|k8*CT}0bn|I65S@b0ٚk}N9BL(JQ;?نhȧz2c_[QڲvLPGy/(p1ĔANc5䜰$0$}uǷ\?0F'w\}: s ,s]:zI Y+d$渴s.شnc,$F@m1R(4;LW% HUS!u >$4YX;Jr<=_j_iI+L!Ϸx;ގx;~"ָl 2j ~f<sJ?gr),l5ki䠞G =F[hRi瘵fptTss!@ WF?r &8fCK}FBƝYϔ dvkb Væ}xu9˟.aeO J ZC)s&dO^+}2\TFrRllhl|wТS?Iu톰dZp= ś9g %QAWZUU@V2D5>enn)#gQPf c>Ks+|`D=,i.4ƀ"ju-C%6If}0Hff7Ӊ tP/"eۆ"i6#Qs- =|Osd D[zG}Ze96տ;mt]¨@=w7k#DU ŜG~pC6k/G`PHE7V{Y71ɇAQSR}1gZҔ_y;\]N^栙,^[CIT?%;~رQxr41X>N>aNF 0|mcZչ`hN `Im` 9/y:5i]׹b^/kωO8=jCۧ /f5Wdƺ{@tbqkmI5,&@Hpp\Jk#De65nѦ]S_@_7"%,-8: 0#GYRԷssc4vn5)lQI&S&3gѼ}.|(KNymm-OQ1$ꖒ-=w0q {nJ 3aRO0=czN>v>8E`DZiiw4;ۂJQ )3Ӝ/w#X7bY| ETfo}`z<"h[Uv$ÌuwfKx}Dp~swp.x|'ۼSޞvXf{}g纷O:W컧yT\'n>u=@k{uskd|޻N~ɜx~+7 -lEI/;:^'h&etH mcѿtXM%K3~7]Ƣӻ@&J x~s٘d6>Clsᪿ031pt> 6hccB]1c`Ցw[a6}Y3?A+_T=̨wfQwEYHBs`y()DFZOToWDL-4nJQ)AWCJ^k@`l@ Ofw$gP}52 xEb w,?j 0 ͂X0Hі|u4DJr pcإ@kRcaMb\1׽6 'wl[ӎU4Mf< þZYco\=8TLf jSQ)CZȨa h/9̱ <43< Zz^2ޝJ xKG ߷>Ns83N;קQqCm)Y[Xe6SGǖ*xwqKm8oe•qSb@# dS[:!!k{ڷS.KSlG؆ɪq=iF/-q^Zq(9i ;z ޝ>; m%?v S>mw3|Om_.9_^ހqw^m0E}ߟktu_c <_5^ ?z}jAl)g5։{Xɏ9__ڮohse905))!~l90겊&0aI7UE,h#,8 27zlfԇόitFV?)8UOܰC9j06A0B){BPXf%j|X͂l빜ЉK洶v`u>8[RjY%3,h!7)ۍxͪ__f*`| Z c'. IDAT3&q>_ p!r|m}8cZ_~vf&=8p\>=_}vĒZ? 5Pkg7%3z_\. (}jkf޽{Ҝ||1ez>!דz^_:z//]'^|}n=gǘ_Үs2 (9*8_-~#h&{NUa#6J`&kV @GǴKaU{gf[U=Mjflf|=615e`?N:q1պ(9&H@f0aҪ1垪RSǼ%|ep+/+a8kRyɰڹ{yRA+24H 'E%2DeQ(ky&Xz^ Np1Ƞƌq4 * *f@뀘*m \^8FEs6 I6* ZS q4G\eB0K? j_4eP;ט:|p9*p [f߹ǣu᪶.O*wXf̒K[02.SLhX d t+.a6Υ\ N%Z;VA]m9e"&ml(),@=A$(*ڥ_"Z;: `NQrBkdQSyo'`5||SҶ7j=qc׷uu߄.1XHٗ]b)h5UhjeLk(UYBɪe6K9`(.@EզRwo2z6@'Pu0H`O [}Q,Vl8\~ap5|FZJXZQ΍&2Ao$8)+1f>h [rƀoй}=@c j/sGd[a`kfZ#1grfseQg;̐s\Z*;-RDRiÖc"@&le7Apd?;N[Kт6 wn̔ec7H@]:Shn4:QÀA[?=89j1:$'ghh!%G.!%1(x;+hScU>ix2mr ϵaCZ(L ,C Pt}5x[(#PGmX,a A1{(y}tZq`+ ?y8{<jkxx;ގx;~ecfs&}32!bsKhکlJq 91[eViulBɝy~g6زt axPׇsq8 mԙa=``E`!'9]ofX]S :kme 1J'MfKu=OѸa~2^unc|u#1<ӄ nt|@Yb թf>MLW٦,6{В; SS"FdEV x23$ 2!e^ 8NvX̘5F`n CM7L p `v:dK@JH>} l}GdRTd3^8-Qy~\`o2 ;A:loNpzx1}H%gsY:`dl, O$K8*xT֘ᴧ0D PMtg1G$ ?^8mEY8GezW_{ޙ dEKPIFm Tr x P 8E:S+ojS ps?^ i^ .򯯭 %L&WĚGE5 :pdijKf[Acd/]n l3 & )iØ>M3[|aD@ƞ 9) ƍ1TAr+ XԠg>Dq=֢n;)+ݒ,AlQBm"d4Yf֥P(`@`h8Jط%tדc10F^ztFk)3}`#Mk]TlaCF0m2Pb B{5[` X;QQ4 Bޝ)%xN#( @>̈lp'313ao.k-'\[Gn#* ̣ImIc$@T}t <^;+: @}ΩZ,@bPPC wsB:<MVnS?9,aؐBQEG)d"b߸'8,c49lczTԯC5}zCo׃*}C6Lrpq ?^Q{CN 6!+J1dmL˔ ֗qm(G+Z< {fǻ}ǵ5CٍN =[pz 4zIZ ȧ n%g> $k%'rdG8Ĥ)ن(RW i_ovovf%2!4PMe䘁cS:=mRXiC>En@j~# z00MgV@DzVe.l& ,qXޣ@>:,P$>F7{%=Ye|itCN T8:?@>\ts6\&y,켨AAklIMȺdhZ2$A+#C^ ljPB"g3x/y톳;C[m),_P/^^%%x./:t]*|9#ƢPT<@p g3V)!QQ`u cf?cd)*??u $9 $aMZ.Lm7X̷ǻrxTf`E/I|7`2D;Upg4KmtIc:$XÙNDˢe|H\+XL)jc 69LvҜ,)LY9Zǵ9\˵kC(ʘg1^b ~T],3'po>9akM#q fYnmþ#w2b J Ʉ06& n-rIpjs92a$LהqJAI`y$f[IY&6qv}W23ӆzwBx;ގx;ގߜcz|Phʔk#=XujYK2%O@0Ŭ#kbןfNP- h)̷ͭYa碸)s2$fw$1M}e47=(S"ςK =8F7li B((/9O-:,.>OC#ff>ٗbѻe&9}><3pR,!?hoAEѬ+"EZ[J{G*u5}1#9u:_2rw-!φz'>@ʆ=%^-U"c9MJB;>L#֑ pm, ڷ>YDX\_  kmX%7:"6kpx@p"D袒B  ^lPD a 1!̖٘u6 {:䶢A9r8(e@c)݇X rrF>T5q7,@aZ` CNvఴÒ}57e#sgpT hαx~!pv9iCkdtc%X4|J!U8 dDTk+/@Ѳ23lۤ 3Ӱs" @f1oa."%1O#r1;\3-z֚h7 +}@vf+Tϗ^P nl ?Ǹ?R|b7+%\8K"\ɘʞlcd\K7AgwWrLpib3pm @bkm>97YJI\d Hmnj_ W 1(4:ǜ YQYJнR'|det딗UƳ匇SA] Bw}T:t=9c/іjЩ`Xsm bh,eߝwJ=3۵1}i?1p\otRyI02 1d`3Ȇӆ1Y¾ѭ.΋ ;Z3% {ayGL=%u\ky/8݁6T-[NiXv](u%p@ Q9Nq1a'qǃ99N,g Z6}RO?D;e3ݳ>+}vqo\s9?vgyS^.s~ MOs{|ݎGzs׼KvN|~ p⹞Nܶw=9=5YO^kN\@#hmPH@AN~uxBUv*G;(ߘbzEt6i$/mw37SzwJN,Mn)G'Vzgߙ{ #ǐ ƌnp#31t_c|WE 'ft}MC ݠoO AYQv#@4DA@K}[gP2 LF3e(ȭdt_ceYqqaٷRknMz*C ,ʸJw h vM>4ڋ)@ ]CIDAT|1X @'K P┲5to)~g%WBDfY?>i UQ3nɐAWKV&ve OIlfLl_\6T˜SR)@,I}r b6d 1>PEiD-p&7-^2`u`Mg? #ƸҕMsB1|!2p$ |+/;e7D$@K3ֽ 90(Hκ,ysY샠i<`(k;;y߰̄~lRf< >kkH :kYQ ;(x(6%3Cmt5"Cc4`WV~BPWƺ;"{IskM_A6dQIwGe C䋕,!`,C^0%!:_+7:jk8Zb`f1FƠY"h60fɵR!uLKaO[(%u6GdV:=h. K(($pk`x@ o%);/6Y Bzmr ;oWb>-y~?>>Β1. J)̌tv`e=wp>q\>|!ݎsl2rrF\wi6ӉK=Wk 5ZM{v5Qkrd@ض )%\'Zkx@͉zc z^d{jw;_ZOz//]'|}|>s~nKڼhOWCOA^)S/cnY;7nUcy&}֏m H k&2t@0#rs%%7e}^OI&8uLTqnPn Aah:`Pu92Hp;oiRO#k 2r2{;z&{Biv5(` x@ѿ6!1G`q4B0P @]Wu3+wf}H1\kgPn&EpD!d Ņ6&-C?p\ ` @ -pJ@ D hj>zdCAvk 1`G]s004WZn(9F`ϙL!mtEtSh]Gp!KdB ?\:xcϔk QEƠ3͚%-eM̵uNZ'F\l^C,w{M+ aL23`ȃ4n,F&QDMХp'Y ڞiSwhc1պcOTil.wAw9c]-gv\Pr Bg1|.cQ.Vz!,+jל RPRUfpI!Uifwu\jE?"H64kZOǷ5_o5qzO>nWܕS{wfnT#kM"iݵYMT6-Ep+#DL 8xU@U\d{l%sr<zlNκCKh;^)-%LKR!~=ѾO1(=Rt(6:20 |aFmMlgE{ŀPD7G6rѹ(Cq;%M:V1 <,A*y[;, ʸπþ3 bXD (fP(n3+b6ôOe_f!DÕ &1]]CAWl6)n@cf:%Yg&u|iJd6BF.m J},$Ul9ɪ}2\}ο.'<<F++,*< `c d8Nֽo; y3}-!JfqkYrFYȖG5b(2 M9ֻ" g8F|4ҳr(pAv2@5qk1=10}\L-c[R"֔ԡێt Vu?[yo(fCX'&ωo|ωs0M) .> b |k a8'.`)+G=4 brͫJ1jb~kxUq.>n U2EC ;}Q+47[L[&?ziQϏ9_g'_oY-T ˗ zd3vOj+`N@Q]S9R\j$jE@ݙ̞xP%Esϱ-Q6bb2!33JW|bVg!رr@l<4cL^,Az^,IÁ+1"PqyQn┹[t9_/Eѐ4RTaR̰6DvqYJ=VkQ$Q^:dP`r0VcnePg%S XK~duLfwy| Aj$[ 5z>L7gNJ#Iקָa)Űc/)TαX!KuȔ$@V eEkɴOC CW9~qmkVs2OnG"dooO (/Fteˆ̍C0$1lcd7 S h+c5 |.v(dA6tǽR |Usb<;ZqGoh#BP+Z02"6sN|?0(}gć/{{{{$e7, .tMI]]8sFt<R6{[Egj\ݽW'fLWv,)ܥC])B\Mm4vbl\:UcQ|v\'a#ظAmk,<+ ٞ Ivnl=0BbfuA O^Q3ZTS h XAgňeTI"e% X%3 H`xeޡn& yH:;u3#}F EKO'VHl;`!Cbtt-4/c.bN9Xԋ\ sINGk8#8_ص!6DdJȊ1c .H`~KAjXR׍n}rcq{EСb+[}phjmC3\sk^@[0&Ts:<@a| l O 9PNsV ǁ> .3BrLj~cNK.dad*\y/ *+pTQCJZ82qϳcֆ~;8 G9НV};n/}^uy$TB FG}񈽦/F񮡏9W9{{{{4?+xpJIENDB`DarkRadiant-2.14.0/doc/img/PrefabChooser.png000066400000000000000000003636131413722237400205540ustar00rootroot00000000000000PNG  IHDRXWIbKGD pHYs  tIME 4(RD IDATxwxTUCH* ""M)`X˪]ֆJG֎ " BIO&u2#iI&@(h{3ss5"""nӦl//XDDDDDDDꨬ/rqe)(--M(4v""""""raP)""0;YDD@DD.B)7<Ęn09s4vD8O,PcϩED,S)""gf=8)I1cf} 2!/wb͝6?}#qK 9mᳯ!55yŽasdNcֺ""r>Q)"".NK'Ѝ s70M;%"E+>ovY;H à4k? L<Èlޑ~-:ҽ{Zzv#(g1}evͳ"""H [`&Lʯb[8R\n4iՖt6v.TeKk11;M*^Xڰ BB|0R\3{lv/Laa!~~~L4$ZP)"".CǁWa-,uuGc5PzW. ^@Yj' m0|etLӖWlw|v~-1zT:6 ū|;o6n$b>tƭ;~K~K]MJҾ-א|1X6fspٚ-z,L ^b Ϸӟc0=Q!Kʷ'&FF?B8BJh1kKXf+""Ȕ)S6m?0qqq>|ة2tYqfkeꭿ%4w=w#0o?WbdكI5@{cYS)w,(޿Q烛tG'{wsAyNFp8L0|hrƯ,}iTRbcfal+ {YLƾ2 nޝLOI4m#;C4IN])""1c0e&OL\\̘1é24)"".cxg#Ù`fՋd>F@&.'s|#/%­'w=-0⊯ٺ,%ƩlFA߿ K7rX3o|z,/kɖ 7Т\ÑîGpw|=/,8NԛSWyḷF0=y;&ҩ~W#3` ;g|N ũZv+""S@NNӦM#;;۩24)""ck/_ْZ0",amh写/eag n4mӆ3rĭ nR vDw ,cx ̚ N7Vc6^ B*Hu ÂIwc+;;rO"[IL9nf;iSDD\,'",,汝m90 @-` |7 ywN$7]q7ּ_Yܓ<)0;~W3"Fyi!هլۑC9PA ngoơia&G8XMǀ\])""@PP'OiӦǮbL6ZP)""S=6zu!gBI] 0 (t@DPA8XG kFMt3 v,y]dęz=N%vin^=vQk#4 ,:q\,xceM~LBTT<_j-CKdEDu6\OB襷rǐ6zVׁͧѧON)*Wʕpp+lTpxvrM⁧;(ϟtX?{';qD7nd?3s0[EJ}΂Ocǘ>8$*HۺL9*..cL64*C3""R%[LOkJ((, <ց rԇ۞(kJt'YXUze2va<`7li-5kEANZ|x'vC)?<9k%g*_oŁ}ٻТM<ە|;>ѕ ɌpL|VQ1Z ~DD=2??ߩ*J0EDĵ"}o?.JۄH=(/%uN6oͩQyȡ!![׮b٢Vhi; 4Ijюxw,\rL~/ϗs퐞$'4YhEy{w:ߴΪj8||}UZw%́J<\r4Rҷf4 Y0[_Xӗ""Zƀ""""""" k0EDDDDD%`K(P)"""""".SDDDDDD\]dEDDDDD4)"""""".SDDDDDD\B Lq %""""""J0EDDDDD%`K(P)"""""".SDDDDDD\B Lq @DDJJJ駟p4v8Rg֭[u98 )//oP<<sU~~>6M_ƝgK~ A@@aԫ^nn.ݻw'""CsapȑEQv;ϘԬj%**%4|;KDD.:YѠ%c""烆$ǗQR""""""J0EDDDDD%`o*lW4vr+YYVyF?Ml""x)3~JFFvLÃ@"## 8!*v陛Iy菌i\ jp\ ,`K6|>Q+طb:}Fna vӂo -ik {7<:;奔giQPP@BBǞ/TVVFff&{%((Z/6K|a l$5``@0XgȨ88w!娳vWwm\;n|e.Y\@ ӧO0 ۛxCyy9iiifRu,[4}o[o݈䋷ſL5Dą8nw}qǥ^n5ffi~<\Б#DPQ#?,`Ǫ/n{6 -gN..u>:rG.jg,jG>}ps~;;wfժUԾ\ֳ){&*!}׳,X]iz9|z]qFJJ }!!!.27ݯ%4\ⷃZ."r1r}gDvF Zh{efYoϥ|*=Ms|\,x7}UK N'o5!5ٝ("=- <y[2wѭ=a;O[q\qNk{9G9,~/3(*7 uA +QmYm!3YѲ+Cƌgo>ʳU'~ca 28].M6>Wպ gωG8s>Ԑi9I0 h׮ݱKߞˏ\>'ݻk/شSVRL[q.~%+l-?l1&eDo^\Ia\OL3o+~(ݝD '6Jɾ zqM Vfޟm}$r$ÛO-3UZcظh컿K^b:ir2v q_~0Zt 19sZ ^vހ3m)o?BKo,l^5t~}[[5sq;Kw,_Օ'("4@sSmpj%99ٳgO4iMR|z3^@)*y:O-}z>+uH^MNssjv=ެI 6H;{՗syF'K OזcpErk|Vmg>;TiwЃI5ؚ;Qr2Nk"H mdէ}V}QGk>a$t@?ɪOW/<5.OB˹< 뾵|q^" -ɫ@'Lb!$$ |}}p<\x(g=u|q['x)r3`@5nvͱ5ex^][q!o&ӷe:oԇ_?db_Z&m#wgHl"0(c m8ٹ$b-`fVIclqo|GVy`-<Y;'׆$z B{b;k]y5nN]n u߬Ha5}\Pc3wڷXQKGN]kd5ŘgVr8?SCwpu N*//?vcgz\xb]c}u!߾7,iI~ԯM:<}LO8XѱK|Y}WPiM+VYw‹ֳwd"IF5m1O%LjOzmOEabݳ#F<>VEC{H[W/}qI\&f}Ӭj^${[rd8͛VwW>>] >'l4!~\ãAII %wuq|DTcL9e|q:oUK9׭ZUO>Ng&?4ki ߎ\TN'qۨ>Ŧ7ٖfҴ[O O1۷0. }. MpB]`f`gI+g6Ȗx +w'8ԙ)//KVM1r8P]=ckbPK] &4 k^>:,#)]v δ>r.XDwEӜ'4 rqaПI<AϨ|6.__9ݶStb\C?Ïf,JӪ۞nmg*lٹ3:ͪ4t|qFd*b& qSLqqRkpBxxwCsb!00RLӤ]^gg >'۠ 'ηR.ngdݝR||| Kd~W75Dl$nי~,*4 8s $J ܍05e[Y֋۷qinɯneGe$4D.O x?Z'f #$]THrK؄ 'OO]7剗mSld2hѴ>riHV M?mu#O>.jqHB!$tЭ yyg|~jyRҙ0͚\3et 0DqҮG{|^,a/vٮ-kb=q" N>8 -]Ͷ[qfr$w(yyyQPP6x^™/>{QSLխqN[a[Nx)瘓g&k!HHff&x<T (gzjJAȆ?~5ߊq]"?BӎhbȥlKmG41Vylّ㗽X'ؕ^=\}gZϛI/+'t7u=SgoCN?8G5|i/"vFFFFgϞc!^^LDkoLq޽{GM w"U{,I58a-lU5ߴ-%>$M86Xb;YUXۏv1yC+;[V/dvĮ8uħi'8ݓ$61:B Z8_hYζr; }ˎ.8]uji$" Gn1MX<`mp6KEE߁Vodڱ\Yj7/< 'fT~Uر;)~>f~.yx"5S][N7<++Y'r:9 :zѲUn@š|.KiCbDڴjC&eiȵվ\lժgպgjhhV3ԥrq;#3i&:w|q%'lڴ`nm;̖Wg1sx1{ t 8z!),Mlx{3^"u3W[FsMna[צ|t`Ѯsm^o.Y7oBܝ߲܋1a.֝5,dڴtz4#ۤ4/{u m ˚_ՖH ΖZhGν6ٝu<8= 7;9ck{fg.hE ï$ɫmp $%%WTTO?z\w-/!C"4Kرڻ^Q{ Û_Ye3FoU>?-1~żtoj!$_7V$vNj2yrIDa!+h;|ʠUiVL/ <?׋ 9Y&JbbpJe߹E=Oxv>nsjw핗f[oVrB9x`דc.ZՎ/W:G.R7gQ񤦦j*ZhADDı;˖={ 9z竷wӏX΀_ |2`>Z|OOoa^'B%=i".p߯C7zofW^t:>[)9Vzu.%nƑ{*,DкSKBk7Hɢn&MoB[jWXh޼9'YYYݻ`bcck.,-:d E`d]F\>ˉAcsh!?|3Ke֧돼Ê5yIhBOL9 ^WTwڟon```ٶ:=Y{T/ ;ލ(?xi$\7GO^6ϊy(o$ߨz-p_"-eeeQtܾgj:~|q•4^9V+XVl6aA`` uLV+ǎ """t\|3㤞5<\V/>ʛa:i(KW=W5v.Kfҳ9i9_K(bp4vr3M=^D.ladkHJ0ED޽{dJLjء4*j*.0pwƀVkĆg1%"""gZII ?#J ֭[uV99V+vC:pww' ˔}v ]WCK%""""""Z"+"""""".SDDDDDD\B Lq %""""""J0EDDDDD%`K(P)"""""".SDDDDDD\B Lq r&i4cǜ7Oʕ+b4"""~i:'"""#G6v"""g… 뼏ȊK(9K)7v"""J0EDDk ~8^#ao,ODD %"""1"aPRTBy]v3 y 1o#%(ODDő`[P3ϸY_w֭p8 s-ODDU̜Wq[P3↛+vuy""r1% bرL8PWzG}P+-ϣYo?Ë+~e_z&%v܃Iro0ͼs;̜lOrWkP_){?X[ѽE9elg7>{wfCh"{u'RYw6۞AG0ѭ q_s6Nj>뭇) !ӍBJ/a=bEDNM61bwqn'7FDD\"_-y<ی$)66~Ï][󲑹y{&{8/Lqn >kYܵצ@sU g+1R3~J~֝|tIqEt];k*y웛c)ɺ+zP6%t6%PƮU}F cﺙkIqyB6RXɦy|+ |[rxm4;,=y, ހ@PkPÑwcvw#I!ҳo ]֭[Yt)Æ kDhL~~9;PDlW,r"""u(w1o 6#x|hwnq1vTAO~/Ւ—{s^z>qn|U^j?S&*v_toN&C#ظjG//&=F^ 5~7#/"3gpbմBĕCgq8-f̜ 4ll6l:tnqd;;L,qV3vw\fAˁCXMrY^>Ӷvկ߀S^XB d_c7,# 9tG@rWt?>#))UU=y~%ީ5}Y ADD.d1&'{S>S^fA. !a!'R <)d NK9؍;pZc=Fxn NԚCvN.X|LFzz:YYY\xMa*Z/ӳDugλ[^#,e0ǎeD$kп*#2 ! 7;ߒ%{y|*AX$p#qxbHĉɘKTL%Cxh &]xQ!lHq\ŞG.`1iBuַ~+&0E~{ekӱ_ʵث]]!""R/lݻ~^zxb}ѳ\:\;&dP^u)9+W%yͥ,;›OQOs_h]=`KioMZΚ"h{3 rc'`։ nہ׾%',߼/|?}K*u"%dg\d8$Oȇ]ZW 0#+>oU]Ø_dw{>ޟQJ.EDA3۷o~YxYJǤ?E'ś/nxDDBE.#xpHe+2iwF3%Sf\?5X7;??U7e瑉z q~vrF۹b݃Y0i.K4;Li3ĴoḞ-0f,|8ˆ!)'3ՠ7tUbۛS0gG+)jy; lL.-02zxkt4d/N e^Dą`vܙ3g6I*nc{Y('ǨNJ0EDL2wmSyfZļ)#eؓDDDDDDΆ ID[fj91\\.SDDD-rWDb""""""J0EDDDDD%`K(P)"""""".SDDDDDD\B Lq %""""""J0EDDDDD%`AYq)9N f\q|lHgCx[R*"""""1%5rPVZJue ʊK()*,3Ǽ:3YHgl\v| aaaagܬ/7,#cqDKuglW 7ƍiݺ)߾};]t*7;FV%ǏXVl6۱V0~xWY3sU} .Ę=GjcЭ|yo.y:]Ч7}_ø[َEݓ>pOWVW+˧ozZZ7pEnt֍KF`Αկm׻7sד}9l^^',zl μK=7DDDDDDjVL6lׯYf~ʰaW@4WĐ@M,|GV})fL%QĹm=Kf\7",,lJ[0mpwa Nxܓۺ  $L]DI1xK?-࿳̾9n8ϩeZ{>=.;0aK,!22OOOl6b„ iɣ\P.Neլ/+kDdQW%kT~q>o`+I=}ٖ~:q\~#;g?_Ok5=h OWP ^澼yut^JPh,i,)Ge;>p"KDDDDDbѠȆqגf#==k4q8 "[%B!yyW-c5) ڴK't> 4.)Сss#ّg/r&.g4xnjߟFk`%u2 ^5Gf^y !ur˝,ȣQwItOjb0zEx]Q̪Yc6G<,v%cҟz"ԓMv׼ \Lԝ>`1YVHFؿĐ2|@^mTS6xE; .%"""""dU3{ {,cTtLGX|j-aHI026(# K@+2Hy[D<Ք%Xdsaݦ1KDDDDD.}KXXkk/ݚr><чF}זkb̤Y<&qC:SNfA{oO=1ԥƜ<B^c݃Y0i.K4;LS]7m`>Y?fϠy|':UqգDDDDD&%%:DxᕏѮ-k5$skKY2+QIiU$Xh9)s>DvV+bδ^~} fAHl,rkmTW3nL)oX͗&qt<5>gp".999uZSrbicǜ7Oʕ+9r IDD-\~iEDDDDDD\B Lq %""""""J0EDDDDD%`K(P)"""""".SDDDDDD\B Lq %gR*; @ SO {hXDDDDDD<堬"" 6v"""缳`fgg3xZO ; Ԭ_~y'aaap lܸ֭[۷ӥK%""""""FY";~x,YBtt4^^^~_VVƁsV)Z;_΃9i <-m+s#0~$Ͻ=r6Nj>뭇) !ӍzzpnQ$aaa 6ӬYcOMMeذag}+ +obHL F&żyޣ]>u3&֒(M6%t6%['v w'o }Z00)X/NcZgM17}ss,_#3Y?w%\R}VHDDDDDVv &d"##fq!&LpcqO䪟rw*gf{iX[#'Ǎ"*yt}_L˶։*1+;^y WV)"""""F{LIXX^{-l6ӹkK U!R`fAˁCXMry #60I/21s6~Ұaٰй9Ƒ3uCX_|׿I5-qF}LI,?YYY2{ 2׾KXye(612rsX ŨCm>>S^fA ̽sO=~|sxy-Tފ1wfäI/&3(0{c}wӾ62~\Ȇ2:noDDDDDD &@RRRme+3)6= %]'Zה{9x鵥,Vӏ*r3 &W<Ŝi 2^A݃6oY %޺K3(՚wWO3ɩm!!!g*F?fرw9fɏ\zP)"""""".SDDDDDD\B Lq %""""""J0EDDDDD%`K(P)"""""".SDDDDDD\B (%==[cr^0)/-QVW:'"""""%Ga-ak(CE_a WLz5ՅڧfF\ɥ={r٠yiSs}"""""rpoaV4M.tJ;S9_c.+ޱ]G_4lÚiOsGk/^;G?wxtʋm6O w{C|]|mg;Y_E˕d]Ì?O[YDDDDDΆ:<%$"S7bו<7)0=M8:XL W?ϭ}\֥\UBX`6TDDDD\ fe'̢3y~8n"'8eƗca5;P!B!}m2`6.iA ;gș3/؛wx8wA{N~$x3xo>'I'λ)r}q=q7q ћŲ_úL::\ޗ'Lbh,|%Opk(;ʸO*ׁT^b;IS:ó% ~̾cj8ԣ[tn/fruG2q4yO3='osԋ?LQXnx>=boW=Dh=J~.WNHk|Cc4Wʦv3Ni/)}&'5~2#{_W=}Ƒ|cߝ1TiO$hxi)ZɷD3OmӘq}1goH~st|}*Q!CxMB!h%muA12e6ܦ=y^{Q>l=ߣQiGaDZ_xݫCFqH4ٟx0G7Y֛|Ƈ8GqTW },z1Tea9q?;j|Qז+٫"j5٦]hWW@mU5vd%e`4Ǽ>j;wj;5]FpߎbB!`n({׏#s6~z> .\E}A#cl.{%e2~QҮdRʊ!UWT OYw񏨬xWstO֓\l&}H|(۞"R%&R8Magj,8)6OwXE4L:J%#c SB!MLɄo-V>ɯ~~ JR۾qQWSOoL(!m}z70E#tu|ecdv~ b J"tsGv8o_McPOj-ʢ%XtF_. t{0zSKķj"B!D+isG_}R2qDX}4ccZs￟cޙwdUiq^䓉6-S󼝉1`>*>㏈sKqoaMAŃ VS<|G%5نKp{7kc }8 rףri2nq<LNq 6UK?ᮜ|I⑭Z8]0L5iz6?{̣W܇h޴jc2xDu+7LlD7^{GWvbܕѡӄWa\áM~~yuu@óO"l:eǡٚ!B毹ܘ]5 OMEۗ`pYS8q-;?}%wԙygz^ tiw<Ӟǎu_G#qOfTS?0(Jn>;_$(7̳٭;]5.B鞑&y?JW};aFn˟>=}`/<`31mIc$hOV֍x`22f)S/~b5B!bjkki镒]՗oeA[Jùv2;iۏ!v7 Fu7ޟ4iҷ!bq5mrF"bo $Z!SXB!hem2`u~ \1근mmP0 1nmiB!B6 mJ 悩1qKzZ)ߓoF57jB!Bf'1Blv/miB!B2YvD!B!N!S!B!N!S!B!N!S!B!N!S!B!N!S!B!N!S!B!N!s uXQNf>նjڲ!B;D)Rjԯˎgu/S+ f^3'?ZS?gӯܓ0x ?v}P߲!B0ZL;m;oOwL55}A4X"p/8Mf?|.dm>Dއp䋙xPKM~ŴI;G`' I!BVf:- wngZ zK/-lQ#z:ϵ7>Fs;Ļ$.#(N—Ѧݺ kDp5ya[1ΧxkA Vr 쬃hע$Tŭ/g4|B{sn P\ag%ZRϧ۞zKVS_It9=יv|rf{6/uzj aMeQ{co0'y 5*fhy$-[`qshy "ھO4N8%nyD!Bo_ ͆uZ2r&#L?`tyFu}2M㼋IU|:Z=(O{]8 &z:]䞩=`ߠ>?f)/[ω? |o.{\q{EOMw\sBwfon?fůģ7_I\}h ,|fiN2uUWNdҔhkcp4{>o6X,N*:t%Nnb-xӽxT{e mX,;qOΤ[ĥә̸*~I-L=n|G.qyGRZ9avD!BbOYMl)d}NaJuFqph)cKg|[ƌ[cqӹoS̸m::]]au㯻_? |!5g0m>zrhbiVtS/b 0j0EcgٿG^U `:+{\9y Zaq\M*ac8/]L3^?jN1{u<7,H{%FHLyIt=oy9k@Q1S4f#z_Y>_ߦJTrȐ!;^!B!ZI;n]Piٟ ifx^%|=f9ll.=fcq^FQM1wg8*MV&_yi!NQUï}9 =y =eYXNZ9_o絥JHZMi*ڕP[U5:Ec17ڦwS좓Qtئ".pH8wo D!Bf07=Ǒ9?_yTsS|wK16IZ=F?YG(iWF)eŐÆ'p,GTV˫9hi'Iz.~6G}F>$S>mϼWpHֺTpH4mIbJN\<)c<24>_+$Ox׿_/ Gr?َ"H7lvLj&B!B60&s`׶[$,ss(=JMkorĕG]M>2UZj!VRt%G`M1E>}8gh74%+Fo܎abӎgIs Q\0V]7%|^Y.4^%tԴo93Gw;!BJ|Wya?) l\lq:V_)M؀֮/w%4YUڟ{idM T;_$(7̳٭;]5.B鞑&y?JW};aFn˟>=}`/`~[.і*B!Dk`.z4R=fX[v/B!n{#61}Pykі*B!D+eGB!B0B!B|cB!ZM]YkwA!^)B!Bl"+B!b)B!b)B!bRP;F) !B!s$`6)~9x$BI\; mW!Hdt}Saa q_ pу$~5z^!Bm^E`zǧ!B}vy+(z<\c K56 B{̴puGcB!>m$ouڍN݅p&ԭsZ/B!B|?-uZ88A(By)>e >t2!Y2]/n[CM贑zVӀ7ir7>6|aDn:"Uo=c{!BNFƩN%QR8ả;85&w^PGl|k[0Щ0L?mT-I4azC>ZvԶ5yc.*]>!>hK4v+;:(MG?O$N=w*ux)0 ۱Km/BVwч%x4δxx˰G.~VMm:`<8M&4xFmQ?o~}9ַˤ}**v; 60n]7RcU㛹Lc;ؖiN[h;]HlÂ;F-%hqSI B!wG B7 t} <|BSav!E>f} M^)m>`νЃǚt }5>̆pW*A^9ugg>CSn cZ9xz`4޺UџywshN[j3ܕ>frxq;fK(p>]L!6GG;b8F(/c{!BƝhJCu|NaN );sT/zyԾ0NeV!n"qf¶ i\F)㺸:Y r0:zM.d.TWb=4!vk075X/r-!4h?>,T=p[;}2_IhPqP*5܈rmm}fr'x$FoѫQ>a]߯6jǛy#lB%P%n] .-Ӗݛ~1C0O; ^llީ(K IDATJ;7=_Wt0{ܹ}`z n1b~:b/S2<%8olaU!Ǎ$Mk\486W_zX<"5jض+P[Sˑg$fvX+nGn%eڹvU_5oUB-[E{N4COo[Dx%[.ż~E n?"-u7^4Oca 0J)|\Xz(@V)U(<74 Uq\\"ISgѕ{2i)R(͠B`X4 Y_K6"Xt֙>L0ƊPFaQ\ZA0qq_dl.ntBf0@]m o&w6t,,%֮ ،a'"Mk:x>8>P(dI\]9Q[(%WA)4@i2<Jau\g刄(M'جZ/.%/ hFDIX4au;+6=_y{WC!h5 Fv:z4x=`;.J)< <<|| ,ɺF( MCC0K;(*&\l6&l`8F]ed8|'Yhz|+S~ 8z(c[+Zhzt*]qrB,;"+B!vǏ 5zW:c[2)4L߳HHs\,M:G7|*J,G}}4 YWEmu >d= б^$J;R_U_z V@0!K6eC.%QԎB\l@tõmmama[9@N}ZB0B!DyIQ4Bih:J)XVu'b*@sXE6'Y@Mu Э[M!&n,\#\˚e&)=ťV/]Jۡy%_|̪+ƋQR\D(dMXb|.E>Fti)hO(s mad 6wL!m^Ϯ\WW׊=yIA\u-i<}k|z.c:6ld\:KSv5kIP(H]V>:Bl; B![7dı!Z:|teZ9L(B @:S X6P屬<|t&G] hɥ3XLҙ,~Nؑ:jY0DcEA =|:ٙ=.gf0X4(.p,aƊXt!˾Db :tBX0r"' ,5y-&sQZzkwEl3PǪj=K17|z(xjB: S^q=4) u=rP8BLT:ypm|.plB Aı XT\|zб\:DwLiY{֬TC5V;c()h؎Q*A6F$PWۀQz9uU+WazX/I6$AP"d++'26Z , Mj\V @\5kW#NˮH _#nϜwLRReu38j;r< ͸?OVg[=},Z6wE! 3 RF]PJL DZД4p[6\qj866l|>G!ojHFlP0.Gj$jCiD1F D0ljWRTRJIY9 mQxM*KXB à7cu :M}\ E( ư}@0DDq1(x5, ѳ(F$B Z` 0i {!ӣ6\ LOьb0.ߟ.m{.7hg}L.k2YԆBw4d294M0LP=߇L*M\)|P8tB@:%!bc9>~rrBQۦjJV.[B4^d3TYNmM D9Z g{9RhJ}T!ڬ]5VҮ=E(iWO$f Ȇ"iCa9M}4삇A M04tl:J#  M' 5o3#@.2[ 607 Lﵛ]Lw©0w<]ޓ}[y̢L~2׽BCGG4QX(Eyc.p K"I5oɃgahtjjY[E&]P"McY>P4ָ lK!!E0VKH6S_`8aW9tGK'ɧ} :/YB$GJbU (²mRz@`$ b[b(D\68lK,lL& (*!<EbĊJb9ˑCaKhr62u;Ţ&*Be?4`(B`xhPJu]|S(2i<'O0kD# y|_TPSd}h]x8 N!҉JSQS=T0HL&M6%ZkK0L|l:+fij2o_A 4PE{4M'˒j-+bx繘hCQJ#QTBX,)4Mabbb"BLagS tՓOITr'ZY [ 0df޹Kn|+k)Et;s.zϧ۞zKVS_It9=x)M;࿟&oйxLi:*ҧԇX/֙~#~~:nvi[k#x=Λ%(c/?h8+Ґ ͑'r&_x7@q%WٗjqV=|> W`)+9hDPeu'8eƗca5U3g >l _4erQBoW~ ZYWl;Rrƻ( S)rhCk.g>Bʰmc "\Tm\ b6mc!4>79.T_}A6bb`h,G6!9r@7(xn@!#QӮE.j Xf-[}Ew {êKXr9\EC IK$q]$+"^\ p\h494'BZh,A]JX6Mf:-xG 9{&P0a<| ,|fiN2uyo]O e)גLAY@/fSfPɋ_q֞/Gmlsל՟"]7_˝OO, l\]?ٿI+]ݏeO'̰?ج,VoO?qeO;s˸4\&ɐM5J4:mP@Mc0PztB@<ÌDh|.i,F dג%(%K`"1tČbp%7'􋡼eL w1x,I:|x_۟fE="ST=|OO|>_ p)|R=:drhOo9?FsٲZ1S1f#z_Y>G\C `>V=Ws !3`Q(Xlʡ|Ϸ 7.r865UkYj%5UVH/.4CT^ƪ ]Iiu, k(@7D ۶$DI)A3>N.Xgp\7w]B8ƙvT^-`٢ر=Dta+nQAM40 P 2O+Xd2y\O(nR. *>-ZL0b=:0,]>}q+)v6wܺӲ?n̞Ec$jLyQb_5X{l"0aZ(Cٟy{Μ^{swZDb %=JAug5%PA!v V eҘhv rK,A Ŧwr㍷ifvnm[n9(G}"4$M#ϧh)r KK% c4r%wl"t0Ǘ8.: {mzsYK $qĒUG#iٴf()U\}iRӜ%#*ywU΃6 *r֩c~p9[˞}2=(iN&mr_iZGՉSxv%|]8uo;=ԣ L@$Cvֳ8 Fn_HC&'''''w}.V, 7B~BD>$)Q,4il2?צPgqGH{~?et[&^ կUdfyH4;P_A4L *c/T!''''aAs~AGV\RVaH;c( kuD ~TS605 /PS[t: ,<:ITGR(m!&1ڐ&)qq"Jt:=sM00Y@TX,3ua*U4p2Zzc+ǡTEmxE0JLݲ_JzZubR$i`A çB )0אѤqHc)3sPrU<!ݲ:gMIY߈$YNAܷАsAr־<>hs2DL1c[-<܃֥d3KNiRr]bMXῧ}>ӽ̝AtV> k9W0bͭlC?5B] 0I7 !Wr{cpU?~|QSv\qW*IG_BgQd+v4BJ2i~ضW!m(DaAX>b uAHDQ8Ulazr8[,mK4%Z2ӛA,q$i$Hitx ^A&#( "R"$I(&S,cIZEJ1&kY5p > 9B I1J\/xLMNru7M8n%+V\K 4 JaHi bڤ@1i& ZW2uA* kywރx.9ѧ>҉XVTěܛwUIwX^&8q9D qy*'<(V%o grQGWķ?V IDAT9/=c5[76Xu׹_Ƌ_'MqxC^(灑 ̻˻#߯6}P;ݗ|Ok. >K~J?,V4<(wɡ/ޱ|{q#ᘎD.:,|ws}]ڃH>_>_G,:cGy Zu | sOvb3H~h="y/feNM#8۞UG /^ʼn|Ͻb~=KKT4 hsqio⢷cbaOq;o>'!gpP-9G8FX(%C(X (VjXǬa)Zvsi&wњP*[,˨,iEk6LMn97M{nPD*$ :!MYrV6Aa@ NBiHC@8y]I/(E)maB꣋(j\&8(~fI)Wj_5?5pWR8w!_wi?s .p&99*&@9b0`cST."5\vo݀YX$;[x)+ubRcXn"ISf'w1{+#tBtImTeC(xߢntMbi"t$`)I5tX4N} ߵ8v]jG0%C)*C8rmr7t32R\.#@I֚T' FkL"Ơ!ct`)-6 Y榧vTFFYsQ-VW@JÐ/}K#^0^O|oŪIylOٞJ&~|3!.5~.Rb٢E9`rwgsCia됓(}AH!ʥ*^.XNy ETFF9xQt P,13٩Il)榶&voTi0XL٤`w[h#& Ej@=$Œa tMbQ!C(5?:M)JkCsqelW" BRVVG %fկql%T*UA' F2Ec1)AXhD"k(!,5,\*3St]*# Nzu\"΅rCj`됓HuJ:Jsv'Z$I1)Z]Dy(քaD`kX~ AD6Ƥ-VRH%#StК971FkXFZZ/%tsڳ6oFZ۲)TFf „XJN+ƎSbkS*(2~B133MK4(ܲv-W]yS4FG[D\€m4:MZ, 56T#$ QJ~ gs(Tk5Nss/s!xinq {9Yh̯CNNC@"а5ڲ~g%h#ٵZs3T1*zj} x̷{#رe3Q}G,=\\l%+5Pm,fhNߞiQ,_JȒ})Cդ7NnM%矏cgEA<(;O~rrrrrr1LEml v&JZ_17=N)įԉS^(J+lA Ų+0fMP*x^BfQgnjNG&S/adt)vm%b.Sw_JXE&HrzHaT*exmXW,a{>sMig>͠Mٰe*ZxPZ!ma&I"1vFHi iwu[a<۶U+4n2iuzܱm@GΣ\`,_LH>q0lDQD M<fNNNNNNNNCζpc aFqm[< 2s;ItJn䮝*Ul.~2eM0hi!U?>ʒӕZZ&b\eutsxJG{&3h5TFFE! slϣ\R$(ǧB 6p5װallRB/c ) -k~$K ҔTk A(E4qlB Aj ^EQc=H /R(x4'Iӄ b~v!B)ڹyfNNNNNNNNCm5iP4e9Zk~y()"~+x *W`fj0J-CHhvt1BSxSȤ`fh[ }BDR?0Z/2ƒe N$~q hAHI'q(bu\s4Ke B@XPcbvZ%%q)Zkքa Y!"0^MOy 6nMs~ Z$Aj} 5|N΂fNNNNNNNNC f:FN5pd2+ƀBn66ŒhO"jb{%IXnC9GDacOW,^<̌j)MRR3Ro0f8 ٽ]۶G-ZW( 2Q |P68V(c#(0ߚ__m֡d|| bKYh eB %h Pr.&$qeIlGaIQ#-$IH>'< JEFFFmŠߧLN$=} M#QJ.0srrrrrrrrܲ۶ImR4 Tw$I3 A'߼^~>q&oWt3CM}mbrLu 38y376{i;$''''wX&("" L0$IROXIJmRcw! CDIL\˹~&tPnq".AIIi#AXLͮif[&'gE9 ڤAX~ĉt1Yd9˖-a:-eA_=11W0h1ZNO~S~,[B}tvirhllAYv1a`eöI8n 0ڊc2t u;m~vfhw4Q0`K,+ksb[ e|3;?Ofv)v`4iYؒrL2q7W9{v фA@~&ы~0%%a!UTLkMX@0 i57F!g p(!)WG(U Qأ`)쀢oӨ)؞O#z$tvQUl-x^j}RL\R`YfzNrCG%S8B Ce6HeabۊB4iE!,K ZHFNMkn VTZTFLImycm$-,*K cafv)R/ӄӞ`M9Do~̜Gf.*;7wO'?cl> 9~yذeӭؖMm:u\CqeBj6q$I0d_% HLjkYBDq&Є?19llfҥt}:A/Fdmh AH8m ~aٴB[(!CCFIavn۶JHRBdM` H+ʲ<҄tjIJCX%I4p=e[4RH A( 1R-QqnCs~<)Zlc W`%؎x ~[U" i3l= R$5)ϐJrꩧh3y#.̜Cl1%>'8N>Ja9/ )R Bcp&aU[!$:%B((*1Bc~hysbzzAC p=8<($ Am)Ā! 5X=BhRHjn7klK5JJAQyH%Y\K(6J!Ib[0L@J:.aЧ,R,ɉf&'iN Hí6:aQr=~׷(W*8~zu:Chm:+R&0l;1W_kN:b]9 ^(2{W_[?=6#TU?L9< o# :A3TTV>y?O}mao?r-O]-tiǝZMgq{4$dWϿ^~+w옦 ij^^ ل_>-~qq wDr!'ٟ}OYOq.`Oq9qULލsuXao )#;M4~>vP+/3_ Xş?_7ER^g]_,_ϝ;i c we1[? -|ͮ/7,?z!o9a4Oy,pYXmB]PX$I5)$:͒ #0TJ.ʒضцBr8I0jutDYaR,i~EJEh "a"-˖ zzn[!ccYPl,h4dZ{=BY$Pu &EhCD$Q Mkb[ؖ*W|Ecc[=A\\ J##Hǧ\.1N.(ilrLyAY0?TJHPbN%RjCekB)'|3-IOqLx9g/ fnw)xW_}3!~yWMK|+:qVX L ^xKmvuP뽸qY/慣[x\Wz֘ۮ7K^rSfn1}=9>{џp`h_Obg>7 zﲿȧ?u}/}94?x?o|=?};w/'ǹ{V#΋fsw?1ٶH.::%?sx[/yijy雏0u5m>{K9t ?'_ 7bz.V2sxʨk\3w2usmKݯ][7uϽ59DNNNNΣͷߊm[2/q!-R{ehcðX! RfE}x3 jMdaU,c;(%AFGj(`iJj ccY A8==HէH@.:]iڵ$\{Zf(4ƩTÜE%ml e[JR e5 R!%Qe2iIc풦)`cF¤ a0F)al贚DMdLOM}"v߹8M= IDAT*Nq+}9cӔtIUJ"2M@(%,d9$ R l?)幙9w1'0V}:Du x{^I6^_s7raOE/{+G/׸sK?\v:eq{?8OE/lx 糿xxZmv8\qsO:">pKkav<|/O.!6募x;x?2Yo~aH>;:tz6t\tyUќv/}l_r._8{938{z=~LD9=,k= }V|rO>߹&Ww`yK5j{ytqdž[Ez8"IR,&#RfB2CJI$pLSR>Sz5(IRXʊ( =ZjY_M|KE{jy8r\4BhI>FI"N4nc6~G'jض{ !agEq,ud}0@ ڀ$&IBLat&H`0` mG Q QcI0E8E7VH[fJ"Z0KfάdŘD*9 M8š(FI9̇!Nb.c.vmP]߻ZhХݹy=Wz<^ y Ds';{77b/Ʌ6]0s7p&AO}:xYCyϹ}f[>µ4l.d=~Up0~.8 ߻GZDZ-F (j Ugñ{KJ8';\wպ{*juob][?#>'lNNNΣ@$iFmA' BeaAFeY)AaeD<̬lgRJmxyۆRʽ΃=jI۱ٴe;]cuʕ~|KXJ` (c ΀^0?;$au(+=I"T"pT'h1q0@͵B=6ԐFa@g!9ဣZ_q0Y<34 (!H3qm{Gؽc+4X~ 6QJ*Ʃ0{j(T’F0Y!rB =J)aZK)i93s̻??_Ok6JJ)q_4hjh}:^ &{4BBݤS8u4펁Qu ݞ\,hӦc$Zy my]t _|y|v8}ycikHclAgI[]],l?xa+Uc v'o(Ek,4E1~c fƠ"cFQCq)irX_&z DZPJ$1ض7"0Fg9OEhٰe7Ǭ^xA8ڀ`ۊ(Zʲ t{SqƗ$)=Ar)̊I21&%Rd-H!կӳ'hÞtߞﱇd&FjEsaAzVhTj^DNNNcބRL|dȘZm[Y8M$hM$:B,$3:kH &qLŤFJK!@kleeW{,jmTQt6P)XVZ!e!5鰒jz4!zj vM a@-gqYbʲ1AڤʫN,%~ Vsvʼn'=rɧV-봉V AK{~Ҕ@ UjP*q(l۲RNyA=K2(Q"iϢ, )|4MᮿM#<^K!RZՔbKl-7^5OxIh3y=-=W${qO6\%C䷾y|_ol'<o<-{S>tz;a-}>0Wq=)if. y_ڧșG[6Id)Cl i u۞$aȨ"ISCYH:$,z$aX̼k2{Yq$qBYR $pn4B PRR)0 jQyn) (8VoPt,-114ig-;zZ:TJh @Vڕ&WXXP)*H'QB!DLɜ9mUy $z89^Z>pd<& 7V8Sغm;y- рkٻan~h&&הeɸ,qA27}h n;λ\}ť6ؽ ζzN}-*bmH?R2v;q5:!Q0ķC1-<<y?[ot.o2et/x}aC^_u,7~AGqM(0;}3+e۹?=w]o[)GxՇs\LKKK YQ u&0FH %!`ź2kD4'6Ndֱ";$ e3T1q&6؊Mj""M!1C >B<71қ߂`BplV #fiy<}NS(Bno%a5KlݾLCgQN*\CUO=KK WY_x8fۧ n"񌫊n4" B2+پ}8seN\va򌪪fٗާVcB|I@;MӰeyDIIHnSg(-eU!'O{-mqDnq?BhsLs]!2z 7n꼻r\zɅ8f=6)idt$-GLꊪc+i3.!ReRN,/{BX>dڀpH!u;}63hi1LwUUݗIIoa+2OS7= ^d0e+~n107x1lɺs-ٶm Y6VWX_[cm+iꆠ 5rMSfcc^Qt:=Ɠ s}k/mGRZ<&>gX}@)s ^?VHyV4Os*Z[lHy['K|d/?uM7w7"G凹K !32&UfyQPԾKg~hRU3F(("wxg:wqGkC.Pg7,C+d<耪GTŌBB4"Qu]SU~K5]cc/,{Wjᵖ+I[0XvM]S7ؾLgNpR]KY[0Xc(43F4 L eIwX_GEYCjCZO5bU>Q?G9 )H*4GH#X|/. .8t}n7j˭V`ygg^W%O.scU17~y߬K0cng!$FF1F+4u}?g.Q{  !9Ls5( $΅TL2BGJZ=c\IeEl4r@Iw %nvv;hO6B>`1UYS9,bVL6ph"g᨝8 C^,.P7`-hTu֭;mEߊa<%S.g; co栩MI5r/T\(;m!UCdx2ayii6_e|o}y~-qӶҫ9RϻdWPNJII>T|@*I׋-beTzuX7Mtw5&:FdZ h`;3B D(ZCHB*Lfh*( Ÿ́RY[;;h4{>y(%1_Z{F,-(Dz2Prs)mQ1ŶE. 8s}u~~5k&d뫘&UE8p1 e L5+TNK(Ew8R Ll/{Yy >&ˢBtU*ƝfmsuatR !$64MtU Hqֻ*jH>dqPghcux4b0cgRVEr:,BlV\y'?nǤ?d2UruaK/eqi,v@'K]L4 MUEErs&ˣkRtz,5};]iJ!v!0&1}q)Y߳-ZCZD5=G*r,AHcbeH"-VU+.i'9#4@YCY71f:JI6B46{R1SZK]7lnix2!K:Z'2C@kŇ$Ӟ6ʒmǰ%X_;7RjADg&HU/uE1-Җ#V`\߃֚{d2!zLʸ,'3q6.h[WUJ?4Q*)1Ja[iMt68PR*ƣ nbsH2V<@89h4b24G+MӍ)"Kg-bz(!QR nyτ:9NQ(ñwbxso419Cg]ojYϑw:L1uSayH"Ȋ.[b25>@3Iz2 IDATMMzbObmJ Br2 @ jhlt Ubl%sbeM ,>dh4 ӆ,0Zgqi(!S@8# ;͓$V: 11B`a&ބ|g<GS/4VF1;0,lن6Nʵѐc8Hg!:^\tXںc 1,DJR0V4C`aq>|dA 7q4CGHlȣZ<ոFw -%AsMY#e%Ǟx:|_qJ`d7n ܼrb U5aiqN3ͫ#*LM!Vy+R0kn!fZ6zV ƤVC89ͪLB0u1RTm֘J`e2)KƓ UU@IEIQ& A)"ư0O@Jus~vSDME1!?dΣYKΑe9U,;,KRXX[ك1xL^t/iQ)QYְu'W_y)"gi붔KSCxCHs&Ujac}M :(Osk4!daa!:IBrm9h?c&t Vys.Ke+}19<7%ul)pVÓފaF\O8#뾶~v?TU&W͞yO^dYVGj~BPZhuUSLI!yu*{ ; f(RvTc NA\],yx߻ yG #I "uӠd<ڤ*keay+yax:9XXڂPuɋ," (RL!^g20׼F,.,E\@ӳn=~X &0s#lguu9$I]XKcnn!b%Y2H:­t-/0[lAޑ<jk@4{:S SQV qcmj )]I#d:yfq~n٤*m2M&cL[7y%l;w'~:=u7Gg% _)O9ogA]1~/`1rcyy:'gSq~w6jAog_}8w*.qW_=W|r?ZZZZZ\uyIͤP5;.Gq缧nmػF^l2 Z$us+sE+ijdre* ))2- _9le_BnU>ez4S_XSWe\'BMcoE&-77GAq9 Df>w8x󈕯w?w|8T\kO~?Lvrj=wz8Oz/Mnr,_-rG='mլ_#^,wzB麏/{=|]xo{Ë]@?9iĩDz?BɖW.Sϙ/< <> y[)Jy ѿJ^K..wx'V~op=m$bs S`{pi&4EhXܲ e96 k{}ynm̩*Kͩ,#9+>Jž?9K`K Je9**j{ЎT89ċ9%2= 1ܯ's|wޟ'?퉩ykeG"g酜ǕG?3iyOx8;מ|ys?|Ky?ȮcΛmNɁ>'~o9E\{IOu5)V/x?ݟɟ|Zy~/޻O=W4CWn^FK8waD;}x9qz?|1c.7ױby/=5IOw}>7o?C]ygי [јn&c"F)rx2=V 5s̝cw?\eE,Y!e]TLC>OUc?dc4ZMTub)@HE@/b%3+{8! y4xډ6|[+G\Oysn^Yb=`Wwt6s-----muTuUUR͍ F!`nn(fY.XOU7q.QkŦM5&7H-AZ/)!P$RiFSY bl.RI"@pn7gnL;ɴǦj\a&.s;dYHZP˲b<ཧd|$پ}+;og-!P5Z|}B`zVM-[_$+rRh`gsZchkOƌ:9|T`(GR(q'W`f5hYչ*2%5ɤ$ˎV~ѻ?>mߟg׏g_j+I>gכWYˇtst447"#l{3o`s l2Ņ' 7r-]̅;(7fvn>l=ȫmalo^aGKKKKmK/NTy`rfxS"AE`u/=eU#DhFxj?QC=Q8ƶNU # @ PR!DЩ T $ys Gq|lR!eWy.2kLlmc1Z"Eğ'c,,̳ey^bR E3MB~>!H!.ιfETp)AJ(u_"ݢ9]{#/"B)%+1.$lnr xᣉP} !Ҕ)kWغHxP*岪cRRr$rD Lw_<=pϮ {K4'㯽?|_ 5[]ݘ9e*2g@!p>9ȴDY,bBl1f6Gi]!iEI**M_bmEZZI8O:VRZJ~-sTU-E㬣j*ʲcvs^m$Jz»8jG >:~AJ,3|HH/dgy1:FH!|tNI(b fMuB=H2ņgY@q.i0ҌqMayy%-L0R+*IIUj%fFu'V&ҥ XJ5E\gx,5E>-G.܏<y?[ot.o2et/x}aC^_u,7~AGqÏS`"X~Wwi K܍ݥL__ٯ=׿ϲ^I:;#ȸ}~{s Sn} C~u=[/MWgs;_}T)_~! O~s%G=x Os& =}08>w;}3+e۹P9sm98vfy\g5ucm\bD}M@oIqD(?V07GqOaiqNk^F{2^ekuӠtCTURg?9$:OQH)(IUAfJ!ĠqEH@*Pa#$m2: a)<g_~Y!:5\CUU,..Ptnnm zH~\k8.LˍK$G\w3=>wGZZZnJ~ggy-o2M6f&̌vA:6a_\<Ak|J)e7 ,K}xCf q4r! 2s J \Ӡ@LΥʨºy67,..C2OW4퓂Q*VQTH$)ɤds0$3<%*I!(__ θ3,o]k8nz{.3r9[x?Wҵ7qW{OUED4G IDAT Zkbm YtaR:$#<*h`;J q13ʪ{|l >V$f&cMс6b6u͆?hlĀ/rL ܆؊듨 qh<->PtrdI8g@ȳY k56lݶ5W]"Elٲ4  sPJV(T]e88?IkMp:g:Ȳ NN9)MaLt2VT8'SKS&׺-yKٸYqPp(rѶȶ޸KBPe4 FR2C4Ɍ!DN&%9 cc4y}ֹMI?̲YV*jߗO8ظ8{ |ʜid$gR xgQ@sF7ـ. \pݻ>3 ʌam)cuM(NS%VkMc&?_|_Y޲L4MMS(!xS]5pS)]a8ctt: iDk7,c~>V1+++ G0Fcmq ;M^n ̖he  xL+ YYYa}}LqQt6 Jj8ggY<)&yNg)Xy<'a0F5Ztr$ml|M4J;yi%K3JY+N[e} h3;!D̀T!3JhzcԕihΓ*>!hP"XVK)EY$IU6RM+0[ZZZZZZZn\qŔe|Ԛ 5(-1t ApEQ`LFĊsF ̖h[d[n/L uy>3q"%1L _Hm!mXlf(EUW`~OYUL'H*bUUPqFhCi~fΣHYa)EhuEThO(ʩk. eFE7X}R'Cx>[wɳ,vZd2hT}!`fcuxw?eg &{F6s/7kgjYSSSSSy)w0ql6.UbAZC2:ȲWEWo}ԆAIAy4M:!mwPK~eY-Ι"Nb8w6.a U*} βUUcBp^\XJ) !j÷{B7,Ptj:HY eN!F]Uto؍o#l6AH>vYV,;lSA)͌n3w$[؋׆w-/"GH[HljT5Mx%N-0kjjjjjjj^bX(/.@JIf$qJQt9&N\oaڷH! ֊V ڙO;vMgiCB+`J)J]e{F;RIbgTx+AUi/m!rxdgdse YRp*q8Ϙvnnvg}Vw ͹ gz߆ +HI) je qQڒf#l0oBL}W4l vV#NXQLn|LbI̼y~^טR͑RˌW[YKXeZd=HZkxYd޼QxYRSSSSPA4c-( *qD}TR`E*/0U$w@cA1^L3sX㫃߂kuVmFks-& Ѿ("MBͻEN`hpvK^ ю1#UY!Cz,BQTwVA1 9R c ;IAΚk]sjgaןOR#6~gH$1q78@ߟd $IU➳oMz+0*.{Qdo2w}>f;N *Jvqշq#OP M=]~~W.1{ϓr :Xvb{*()GU)4IB܇"#b*ʪDHLx~:oEbN&q4MF R >lѝNe qͅj]D-V s{X) `D!#>G*RޥVYL:z͋ce;sLI8DQlN)3@h7Nc4*Xch54>TWZ*rQ̧Ě"\1nŽ!!#>Sv  6n̔ѾBN2w9ķ2Yї1qj<;& b??x6ˍ)3#~?;'~5]{+ŧ\rܖ(,so8 bami﮹Icx>0O8N\sŗ9QzLϖV3sG9 q%[X'$m/~&k>FsɽLWͺGo /[s,[4 Kyof%PS_i' $ '3=~Ԭj|t(KycAHA$AhLg}R\DJsPVݢ Es,ˠH)i 4ɋ\Xcts4;x/CZo)EUEp$xhu`A4M70JH?i"ςO$lHnCJ%Y6Uk{`,lff)8d}qI$ݪ"ϻTUE$dY8Cw=:fi"3Nݱա=Q?=r2;M oG}DQ.<[k2}q»ǽ@6^Fιb;k?7Sr _CLOCf3GqO~=o0_pw/mۗ[v%P;g?ӫ@k$o|pk:zZyc\5P=3>R .L\Ć8hcq>c'&܁agqE5>O^gJֽlGf#!}^˧\_C_cUÜފ U3)4U<0WT5aJa{q#~!"$¹zV m mBŜ%k; $ ):.B"ެXFQ䫍zPB8&CIL-Pj DߤH"jECL0f,@'!(lkhXUEn8}s-4A8mBCB \j(˒$}u hl7?`UfkQR%d["-ty/%+} kr[!ѱ>7?lBv`O ]6g agXʭ{lDL=Hl sMCwMMMMhZDQD'Q##Xm#mPJ&G8K ɞ#*4 ƍO5Qvʢ^d 3%]0iq!MM3EYF*/$ADHIH9B};8bp?)%N8` ٙX@?C$1&h X"R^Di\,A<{vNT/8MnâR*G$H|Ɯei\ 55=ֻ tf-}g{mXm.g tҤn|ZɄ &P5'k4Tj7akxogo>F;2< 3$Ə[=զh<atxdX܂ShMUF&pUI{I4hdFip_3$6 \tJwMMMMذjzW7UXgRRC~:pI&}Y(F`*[ZP*M GH$M-!sk*RqJ#DoHIkl?R,sioҬAU~3ccdtNo#M`…RIidZf(к”+,(}Ͻ_=_lt64%ISh؛Zp)#q,SpuYq~^[?3.OV:O]>p`AaY0oI+.^B1-k&o*ysaMy<Ə[18&:;)㬯pyG0DEQnugDiӱ0Šy+z! G``hpwMMMMry9UEAkQzEh6[DqLY ;6ZM[t1JZGT_d9kbh? hLQ!"˚8+k|!r !NF[4ڄ( mHIm-~NXl"mD_m煯^ -ػEA$T:U<(KT4Hvgs]Yvi&w~3Q `+/(%fogyλu׬}ԟ^9ȫ~o63vXbvakS9=i IDAT)5wwptq= nl7yv+壵ZWk|Gaԋ@A ʲYj[H 7Ihh40q,,dN^TZx m",=V cN+V]&蠏9}/Cw>ӌ=q%_PƃفIqCw.zns;?;ë>E4ccē7sO~C{fгfJ?'h-΅lT |4ژ`_O(F340k,ݼ &$&R"qΠ"ńv"K# Dy8,#,o-KDB*预 AګC5-B) 8&\+]$IHgrf)v(=wYo ՕF*6Ha yW朿ގ!Z6ۇgMs,MS{/~zq q]jÂ}KϟE߸]kF\=mVD0qOrˮK~ΰz#}|eSca!i߈f'0u>\/2rw;\Nzl}+D] {]nc5UZugڜaxow.h x ^BLdx3&-r-poN6d}>1fY|}G!Kt0j^0̟~P+R6XHhy߄GQXbFoA  mwv;(%hffttfLbep@HI(eީЂ*@+!JEHWXg`}/lT!K"$IMʊeU& u!%D!hwVG&;+wg?q]jrWn„ k-/BXel.55:#\w|f\q KďԬ_,Xyp k`%55揿5&T8!"ǘ9ҋZSʋ(JBeЄ v'ɉTJF$ld9C"J$^ eI5q*#o:-lHS?h˛%P]+ixXU}G8$D4[ t‹Q)_g2YFUi("mAZtq/vԬ1˚:/]I{C qM^ھa][oMMMMM2o~ W3qH9m?wY5;z*J*(BJ+~@/Bbl՟OʷJIUcHc,i0 R!!|HetT{ʄʤjc T c-EY:qַ*@`ݦmGH% /*.UU!Ri]+.oⲦf٬s]-3,*@sj[\ְ"k뭩Ye?W$Qg-*AY80֢4YG((KֆFSEQn9ȲgZlhïz*((@_AE(|eᅨrGDkG =B,X~FԿWUU4!Џ7zá IbYJdyI^tg'Rq!~5x`xlpM:z"ΣbvNNdiL\-kVum555kEf]9eddg1Eo6R$B|5(RiM5JIut9XfE'h] ScкDhU0P9Ng-UYyA}3I6 R8|%/%"j .<='^!$Ѥq~͚VsQY0n8qFˊmwUU$1F!~555kEv} v&kXֵ,'}FR R tm4RtUTD YYEYD*"K1to35,KYJ&.V㫖Q?Y##K3:H!]:QPU]oh4IHI")1֋^k(8V&Y\r)c&M"%Iʲ,K4l200g8YC+i*h{ʒnYFdxdxwMͺF-0kjjjjjjj!89߈;eUjAU>32dHfi#T ALC'|f&&@Z18~ YTDbnNH7R8ftt"(%ґ$~NR]_1ehǕaQ'֚ +"b$J mvqFb*fd8Ih1EqĞ{ryMͺD-0kjjjjjjj!lpM),˫zt;]6H%)%.q~&4M(2t:D*"c9v[)$ih60`_G!րϝ Rp"Ʒq3Jkmzm~.x!gU9Pp)N%IcpEԌ"EQqs,kmag춆vfݣ55555555<|7q'RϋDj(ry5'x#N@ I$&jt}s㈲YiFYT:qYp}Yw"[T%A8FtH(J# ȸ ũBbE,K"h۔EbWhikGQ8(+6hYjYSSSSSSSE (om6X3Jh*ː;Q%yU`14˼{*i~$Nxsm=X$[mpQUJ)ʲ ˚4 I?OE!H f-D^7 =ڲV_cʛ[k},K>}/(h44bn# IG1h$9Μvfݥ55555555BAYȋpݮ7#m3iSДe,CUa#*뤟**!p*/X+cHUFCJB p("DJeV!R>2R ZD?ZC^A0 q-VQ 2뜯&IB $B0 ,5552YxZ/Rk_9Np*@e>#R )0!C$YRB`s/vD6m֢} F[i:NCYG5@}! r(!D6[pqN|tIU1aTTڿ'/r]\9$' Bbe=~Q@-0kjjjjjjj.RH/f5v;k|e0I,e,X4B3+41kEUQ6k!`ppou$:E149F/Hzܛ4.8Ɔժ(zWJXֆ8 n0ڋVEc,%21I -6FQUӦm&fZ^k7qT m xd:ʳv= 5nw Q R0(5VAƍτ ! cToH!wRP>#Pq%%hRXR|i%繯,CaF2"ybte]pJ|&ۏ)a>_JIƍ],ahhng "$fC8sԬ$ ~Bv>~ |O/:O! 秧ι/p=9lU0]9W~cyq\tµԼ y>8bpRIk),yFE1UU)ibNɐO?đqW>II,DXcPWM\ܾ"I5|;Qk G3B(8ņ(Mb%KP UX"KJH,Q*" B9K"IB"KS$R)qV[˚n%\MK,EʓΫWcfX]yXvZ[AVw+ڴUsMpUs{5L<=8hp<(jQiuJUA (B$YPVeinV -яY)#E.qi0*8(ES$#(귦*b}XWY4P=*?*Bݒ8gi5Z$q eQA8RU+q E0rgc-YY+YKDj㖫O'oǬԼ0*o;\=>ukrY55555(-CH!q)t:Ϊ@ڝFx(FQ C-JY%ͲPDYyN$HQi( "QO>ƏO'hcE3:: O$2Tu80a.cZ X!0GDQD\?SH)+tYe)ix瀠lD1&EYRT%oGR L%U!_t=.Լ4X[d'.{YSS2o(bf,^kY/Gyt;uiT) a҆Gz$ql6o*ѯ.zcY2!AJ(h_SJ0nN+¡BRP93h}ZTߧTTIf(!Ba*y{^WFeQ9NF`:gj6ԼdXo+K=XleN9:| 5v9wA^U㢫oGdaz84f'\c'ɓ L>uޱv>z5{xSqȻftK X=οGoOd7p''+>-y=8Z5{+?ˢ&7O\בb h~qF Grc <ɲUs7s+!~.=x'?eX嘜n ./n{d6ڪX]sʵwsYT ZMcs;d>ʤミ#f__J^͹a)#EGYϾA1jfI+~ sZ(,kjV\1nŽ!!#>Sv  6n̔ѾBN2w9ķ2Yї1qj<;& b??x6ˍ)3Xtÿ3̟;|Y-~O[8m3ܜ͕cs)?bv؞7q ʖ1@c;cwSҒw+~wN:j5/WO-Q38MO5W|S嫗 õvcWZ? ͩ8p8vn}Xa`Hzre pYA8w-5ג3iw]-3x{e{~U8{>߸lğ^5uvҫ@r2SyLϮfm7C7q P ph5,\0:%)EhӯB.싽(B(r8&Vb1eIE>E/ )2Ęlgw]J .QU%q1BÛ9khw~pz(2."0^q18n6\?펻y ~1KюGpꎽeQ鑓)̇ਣ`jOs| fp{Noaq^L4&xY ,K& /dyc##6XY4 0:na N"Ϝϻd'Y(B593#-y>oH)E ZW*s4MpT3f~7%z/0_92 IDATA|?Gu=7!-0]=]&RHܗw~C>}& J3O󌃡8ݷ|~o̯OvØa= .IƟj4_şCr1k}9Wp٦AL}+3q&oWs1g0{pi?Nptq?˩lw nl7ev+ϮfF Ts*,k7XKU8(ֆ Gx(z.lJP"Y%`#U0(H);lD$ϻ 7,Jt=BR@8!\6FIBUUQJII$dIr!C 4q8"E1ιmwqs@HhwMmmMK3sK岇r{I.>M܍M[ꁇ,¨M'>)xȮl֨`0ǀ}z.lLLJ*n-Lz.3B\>1J=O9Oz#?;rN?yo~vdO]?̻_54jچ7`ؗ8x~;Qҙwn0㞼]eޜ_qյw g}wLn|{AlG30W9m4.[v]1rs\{qLii1g5w&77~v{i|O|r\m=>m4ij?|Ӑ ZJuU"U\}+E)w5E'_$)"šdBiTc;Z-ڝn(|+mXhk|QJf<"_ IYXk)P#6J$qD#M8Q9qƱ.1 (2k=_ Y,MS{/~zq q]j?q ?׌o{0۴-麣Jp'+ }ʝxfYN# "6\ rJL`BiER Mbx%:H0_R<ɳRJBK,1&I]c1q- f$D" Pm N!<·A&o1yZC 9h_5Ɛ9"RZcA\F0)A BBTpu!@$l#=]4J% =ޅ!C:["%5-S  IDVZF! 'r =\hL)$օk  "Ȫ' H$D"AIpNŋbv)\Ze0j79Z'8h4Y6K!s,k&-͵% APl*6V,8Efz_:0ƐV~1$ADyhƀ$Z $!vR)XGEtZ> g~,ǚcrx )UhŌs";CH$D"SJJ",Z eeIjf{ A\K9Ol;G08ۏTVֹ%P fWD$D"H$d4ZT!2=VaVQ' *r嶨FJ Xc6vjyfkuV$IɲF(*̄AO^Ve# I!hCE2 kvp+*iTJQb9whM:{ j6$APyFص<&48v|bF"k Q`Z ]-VRV#Zw8^̻O^PR&D"A)YzqU!R$VyTzG?Gc6QY$-q.jJ)*RV& jdF& bߪ5G\e I"$3%% Z4i LI 6IR۩VxgGhg9ZkSّH#k4}K{ WʚMag5<,?O;;n;' ^1D=po B j}=%^6uEeҢ"IB+1ܘ֑$ i.ʯ`rK!Ry$$0E&R*Fl%T6$TMR*& J)rcZI\.^ohyA(rT,{j[;#FdZk1lmme4\); &A\rG_eZw~sҌTV~VJ,?^f]fP^ok]yss>w"߹옼?8}Iw>S?9ϰ?1o#H$P.0Ƅ KaM:GZ*$T I0;` }5$RN#<ڑ)Zk\'3$5j%R g:QE0QJu2dh&iB^G a^x{7^&XBRod8Zh$Ex(i00A0k*B(Uw'D/0\?aU#7\MqŒսٟ~sχO\+t2yqjk쵇oq/c:'/{µ6dZ+k"FVB54D"D"R <8P-5wJ^` $k=Z+rs!Bπ-BhsNr *%~<bQ\L B-JPaUq/9/>)|lPZ  9{ ԓ|aۢ'6kPcgr'1Y;>sλ:}uLX=?AW3 tO+sXX3!cb}w.dzáOc N=ﱫ8Wq)cst%7=CsUْwYwCՍcgᏏlĕg[ٗ0=i{ۃ B y\~nx(ݍor7?LoPN8G#Hd0V eꍜ,k`\*2X&Bc ZkJy({tQJ"hPQRⲆY.J!ȓj*I)Jjxk-Ά㔅!^Q\jʰaèV*8Y#Cvz^Ԑw)9L^0YY#2eR:ln'bk*D&% f6x} 1F3F{=Olw$d7뫡Lpzv_t6W2eiL}g<{ =ckF_ncxy6zO <=\C&q䉛RyAnL>L7: ?,ؚ?=19OW->Oo|q?^O/8/$q1;އO9u>f ^f0)}unzmؼbyeCr;uƋ OUܿ ?9KfMVcwf(&a}קSAan"BQAgH))`#ýR{GȊ,N,*&7$*zA;5-/%xpx"ס&'1|}׎Eץs<5Xq&_/]ew9ԑH$2Hȭ Q!>8*)pZ㬥Rh(Ad HK)92dR*Q L IQG?" E[Қ{, 2-60eNY5fÇѢڰ$MgY˝%Zjx(ulطwAz6Z[$ qqMX}x`_?gs&l̰X–]ӎq{KoB a ^ᕾeGق#y_һk~<7F{ˤd}[<ԒHP&NZ>?1X'2,#3LjC?ߺ|l2jr?QՌPtȃOC`؎{15:F" {t| 5OZJ:tV8{a7YnD@ZkP!ƶ"M26ZCHR4 3MT R.ʳlVx~Y- [68 yfpR)1|(jJBZA*A/A*A"Df-dMNDk\sq-n>tsYfDogiwͧI\Ur 'ϗ;Lκ˾0KFNaOƉM\Tuu/Iu = 0cE]t;˳?;_6ԛa*sFZ'*+eCh^颫;;V!܅9tȚD"X!6|{Hue:SQYb#d_իo;Dv*-?tvHי&s IDATXçɳ'G=sユf"Q31td&O^k8F~ )qGmΤyfu'P])M&㶝+[XꞗIؑi(֗*l1um7pm4~D" A{$a-BJyȌ1|Æ ¯ȼR`h2&IB)M@̐RQ_)19&ϱNGIBGJ t@i}B`3ΡR.F+ETb6ϰ&'3k5ɐl8neJG"CRl6ܔ 悳YmXM~eU?n_n=JN?9hX3Ef0mˬ;imTʂ?su`K;‡wĂyO 9:D"U+r%( T'`%JnlhjoȨ$I.$RX` Z5" Kdr) )%Z d@y|Q,İɑJ ٗE5) 2hg$^sUA{{{*T,,#-c(%zBwL#j' XW96~)mC3j-hԄ`.EKnMoc{3Jko~^h }08/s 'yћ=NGŹȕJ>)<6Z咎q/s9Ko o$ [oSvWgܥ2çrkO\-Yoλ..kkMd!WzA?YWsFi9n9(ƬNg#*GnZ g^/]Mv N>IˌI;lʓ[hns̷8c{~W Dy Yh45 Uk@bXG& ʥ"$ISRרTAPzubL"*qx BJJL!R dQT!P[byrp#H$n\0*J%ɳ<|B` nŬ< D$MSYF5igYG)>S\Z`\Ub!5q.փM=H(9G*RhT BHPd)J!&)xihd1f+-zs,\ҕ?u<s+mD"+Llny~*R*R,>c UAIt󞾾>zzzg I0$IRFֲ_0ƒhc: $z^TN-R**@k.g iZF(j 7\6X$95] bE+! 6rD_ll!;@Fl]УdڨսǻmD"Ȼ=:4#jvV=0iU)%:Ip6:sgm`Ls|!hNٖΑJ:iJIއ^¬fh3q+2JIʥraRQZC)CeS$%["H$DBJ(\V eiN6RB+lh15dyq֡TJRHCUR)U+5OY`afT`"۰+p%%8hOJ$ <O^"WP$hH$2H$D"A[o UI`493fTV:DfehֆJC-19G|"429Cmا-H)ǽBYJDSIӄ}Jimky##k44Q'PUD"XD"H$dŲ{_xOsBUB)S,k9*qg5 !H%Vf,mQI!\PKJ]O@h "^S*H C'*UTEs+eo8AlD+D"H$2ݩU EA1T S4dQZBtHa:Gh$zB;k[=axħ)f1Gru.T9e0)1֢ԢJ !(X~1 T*e JREULk-ynHKi!Ec wzD"+H$D" Z+8B il0 U,"Oa*ETH:[DL|B!j$sPIJRVHPh˅,sb + b3@LY݋Xy^ye>ٲ6$=?0"ݸB+"Bd1)[YY68&K/F"p.k*wX砘Ǵb b =<+]̌!RX)ZpPSRB mcZy ZVJdZz.H$0Q`Xzռ2ͣpGq_Zt~v_y~qW}?c; gvg{wqWd~k9D"k,ֹ=!9wZ>(#=ZXC;ipohbL%$ƒ5Zj*  VBHdQY."QUQ[dzYyZmFtw`z9ZZ_ZNOo/ 2o|&o$HdYO実ֱp4W醟r{4c**/[f2yq[5j}5U%Y|Kɱ}u{#H$Y"MTacA)+'HbN<ﯡuVC{y٣xI {,?en*ǂ9^:d(lrgض_+䇷<ɳ/aa&h[{<>?+ U$MBs9:RP)(WJA5C+S(iScM'D5R`.S\6,uf>v"> ?+OdR`nקOOOm4cs9a{pqG2JvjĽБ'o~5Nks)Sԛ}|x*e@Tg}/Y9w _1@>zƴ/xteCvٟ;GؚQ,ŗ^~5g=<` lP˝pdlBݗӎߙ\ _7y^r 3O]χ8ev/?&~#H6ӷEyǹ C)U-TZe9=ݖr%%MS$ (FCB>~IkE&/?z;;6ţ{+~x5ϯs$TTzr]ڃ ;'Na^99r3v}R $;.?e?$M3>x꣋s/rzGs'E0p3μ/ح0@Zpa96{iSb1qnSwb8#¹:pd>_?~ڱ=9w}Lj|㬙M̑_kD"rjkQ!DJR2ĉxR:!C tip.&Z!jE"9p(* D'Z4zGœdXarfl !b s!5&tȆwampE׿N|$Ynָ~P><şW9Z6ft,w=O;?[,A\ 1M7zWV'yn qTGyoܗI-Zɨgy੕Ycx/p-?g.X@{@LzGyi{+Gl;8e`V"W7Guj+@/r@c`wWgZl_^`؎{15:F",[m50kmvEHZVjB$Qɍ (*x Bf$I z?WJ55"E!py1MBK,ޓfɲQVnGiAk Yb6G"e`.NEW~ǖc΃1_ՐwKF]ra#/W\ f6Fdz!C,u}{N2lİ7n3r(,+ףL,yF|HTy;qxEwϧ)F>]t;˳?;_PoFw~Q1>[k=w̮l 1|3:". .9?y'4t#@wC=o/'D9[O݆G}c-H.V8[B 1(qV `Z-Էn sV`C+H}m لEe,ZK\R*N!BSNYo}'#`W<{~ؒp^>w7;㾾 O|/tǂy X~13 c~|<%GP;s2o<#{0Æ7نv50{NU85+;6_g_STĽz2ޣa;vɝw=ˡ|t >ɳ;s2CoՊV.zcx6 s5-#ql4{R5F 0MN+$)$V*`Tʕ)BMotεZs$їgX  Ά [' kTB`)}yOHdpkc8}3tl1ף;j9bKoU5V :쐸3wqA*G0f ޷VbTxW7hϒlNonzQܻov>q|<qrLzg]w2mT_ox ^y5Nɋ}MǨt`Q1t'۩gu5|{O@hp'>v։TZȓ~od<+諰MV=cy6n?5D"kSކ,ksMc JUJRttP5 ZdC!2saL BO$M4R@J1F2 B: ~y~Bkʯ?MWr IDATދd>W+Kn_lg?{EPqرrӷ/z8r T;{Tx齹?fs.v?%#; {mO5\B;= ܇6fe֝ӌp6*Lnuܡv(mpFm% ]ZqX0|sp%7ˋǷ1z㽙`eL$2m~rWlN?MqOsoŨ*C;O}*si\uяoඋKWCR6M߁͛:;}^p#W{+y|h_.]WʴʁϞǯʖ:AAw]\"֚ȤC 4z@b~Y]z _x;&az۸zz{?z.ڃwZ\ /cko~^h }ٻ(㿙N齗B{tDDv@4ł JUAQQAAi**J'(RA@$Fͼ̆dyG93sΙY>{yNpW$eKl-CmTUxz>ToFE<(݂zwz{ь"iOyMQIJuf39a@1r,TUTH09yX4nI|ssL˳ndžnlf0%tf`cUMSڬ*dem`(III vQwYdȯ,ԗQ[:2gȭ/Uc;19i 5B/{mȐ!P!gq:جVl6+6܆[wgۍߏӧ8s&]7 y͂g]gbeɴjr:q:XVv'`Kpp t:dٝ|NJ5 ? |H{>`4df̩Zn6Ήe@J%@=߲dy*FMAƙB! Zٰ3yt9x1pQSUsa`;GUUIEA7 sV3:vZNs;M _232;8s#~>6l>fkhq:>>64t YGU 0ovFj<9gʺiw{9^GBG'- ;V˄2>DMQ6 ZE?B\-Za43 t|l8]f2 0A3 BBQSAQR00tӅfPUӉjbTUU 0G<.7ۍfQX-h5(4MSPTAmVQq+SdozLNwN Jto釷B 7 "+n{~e ł8.UCQ5lrapgf5rzF.VQP1P4+`Yl(2lĤ$TE!8؟?|jp͵nx(XNq "[X"(kqmn6$!Vm'`*9z;0Ppܨ~RQNfa dZ4sUA*Ȣ-nӉbEQ,dUj`4uNv C7i2#37:B!ժe8j狪[ntó翪ۄj`it{m*irus.kbfNMzfnt)f+LL!B[T: .>~JdZI~tC]w('@P=# ghK,gۓ@ATty?qvDE7*nB\ 0B!nauEcfYMU1t3qvP1G=`=FUljhbEUTs} $LclkZO[]7 ܞDq8]]Bk$B!-v(TEA7챆acZ,.ꙪjQszSi=I|lٿ0P,bƞfbX,3EjA,4YOpi.SqS$?B!E@u8x`Et9]Lc&X4TEv**>*2ͩn]GST3kaccy׺up:]8N0qu@B!DRjsk%3IbN1 Bun7œUEexժیu3xu\fnQ5pnfeq6+ ݁m)B$B!(bUcNK5̞S@5V=\.u4UO39nyV]4EŊ?`q8ZOvt,Iyұgf.j\ʕH/a̲u%{2Ǐ'QIgߜ-.T!UanseDŜk鱺nnZIE1'bPo'gȋߒp=S^32ػt2jG&Mhq0SS!9Z6v{WvDAU, fX(Xl6sKL MUP3 VpYbUT՜Izf&g=#Yg].V+B"I~0KV=whسmTHeUVs_ʰg() p?ěa ym'x0 2 ψxu)ldY7r*˗՛{(jT욿樦hfi(ah9vVEbwȲ8[wvY,LRbR KVF2ȶer\\3סxl,6+M:~: #,<'Ch2ږǬq/:ٵv ?yu?CL"ϗB:2bjg}p*@4 C]7G21On!3AY;fڐ`'+3KSqK(#>>l\.SSQTFx!D)fe6/̌3*H®P~?V[ GNb.כ%֦f$Y03IM]я~>g>y|ocDL@+7w?{ȧfj7pg6y6,yifǑTbUiTɉ+3{O *Gt!| UGs\kky]0zV0Y8i2Tݝ#WHFxxpqY.gꂚy{JxiS/}ȲRz}!v36LPөui/}RNEW*C U'5=3ivv-Ĭ9t,3Uh.Ӟ e=>͗lmyOB\I>:ڬX4 :fVXs{3n4TsCMCuճ5@U pcC `,n ZYQdgp͋ 'I(YGE#csl: JAْdl?&B{Hʉ3JN[BӉSKht4Zh|ſ<5ؚQ: k&1u(Q={l5aJAږ 8~6gx@*MHE+@NW=r? o2|'ؑ --dmu0 ~TTO)VV,5ou}tm8O ǫxg5l1љl)דoH$=@/ gBJ8}F*Мr~89gt*GG#>9ᅮ nNe &p$ޛ6 <#Zފb*FR|ߧB!Ҳeb,ٮDTUܖDUբb`k%0 g-'.sNvZEUq8d1"`[_@)ȴØZ?uQMGFPMwGe׏pb,5w!UKfȽwjO^LZFF;EvHx1b@H,q?w!K8a1ī]B/}2/)_˙8n<;4#\ٟCLO;CpQ|%4. !]-6{1J&s'}ӹ(>6t6A矟*4m'T!WZj[lhUvX:XT N 쑩|m6lV ˅[Awӳh8YR!DA*rsȲE<Ό+Zss(MTНzQBQ,Jqg\ߵz/rDrvTe Mu*uJsijU"ui@6. Fv|4 G(R C!YGbβ+~m[}yml-y=ߛ^l=F0\?O1)7N|+c\4Ke߯ɻOBxat,.  p\Rt@ .:0p8E0j Eŭ4m֢p)(PEnB'zٯN'a|-&ŮCHn1DV,<_+~~(8q:qxYz*iJHhH3RIU"..g X(% :/K~W[{Y22߶iW۶j^>SF]XK\^%ΜD9?EUUt ΟߑJ?7G?J{+y¯bAHM9su[ѧB!N(E4G)u\iu+zysʬDuVQ;K?!n8EnR tϗL|mZ1̙;'ϭ RtnC2:6l#3>}+ansnB;\I$@`XuVWtRS\2H zL╗z,FOXs_3}ƪO_ޚ xyQ qLnq<xjc3O?uygZ*+4 S!WV=\.6tsKݍz+QsK\n9KQ_sۑаQBjz_}x/ᴽ!%^uǠQ|]שrJA*S0P#([Jr(GӸo`{ZYNw_ ?bcF 15OuhY:\=/Q[gi\\_ .'Noϔ3}b|6wrqq-gHZaoGѭuh8O?fuǰkF`s8K*WZwi~Z ߰)Ïzկr !v5kraTtiF7̠QU`R׍s`u]nwݸu06 Zunׅ|Fͼ.UAU*{UJtd5Uz|c^PIQF#PB] e'TNRh:z1;QLyؗCkaur3U>GMOƔ ps/g/Z{|Bƍ8À=/?[(keyUEK76k>?8% }w-VDm$Q)Q"c |ZR) {>z>?2cSpS;GʥP ِn/H^(C'k,$oŏkFWٯ0%BQ˂l S!r 11% Y .B!7"`\f29CmѲ@F>󺺷mIܱC&4kI6a]PǂFOMkۓ{Yyry=SԄזa cG'9C?kB\{`3 mr?l[>ƚ=⚍ar =|u{,&1֜?B!n=Erle6/V;\:t<>\s(h$uvMT 2H;[$ThOaTS9~Z(5;o1 )O'2N-QXYjC`kG$ĈסDH;+"ri[2|RwcM7m 9C^ȹ7 ҷQpbG?4R ~q1:6O?9Փ!cJg2`:oA]+ϻzLy'~U^Lݏ7$d uڶ]R3>o]tvvӗ]todk?mA)p׎Lnȝ]_I7|ϲwwM@ ]\WoE1P#cB!n~E.<7*@)ȴØZ?uQMGFPMwGe׏pb,5w!UKfȽwjO^LZFF;Ev~A?A|>o-)c zpe,ɜS>ΠI<6qK㺹b[qD_f s$[rqтZͻx~O[zӥS ? .>bL7c GO!vXj{uяmW/ZZ~8zTyT>D%_9ި2  )v5{w<ǽSJ4ߝcsQ }}.msmη' M۵NW!BJ@w.<&3 ūV#tRr glg:;t^.Ej.r7 QܦUl93iN]s.MJd4 Hcۦ%fA^HΖݔГ_ C!YGbβ+~m[}yml-y=ߛ^l=F0\˻mmK $vvԣSݱD;?GL\GPjウP{_mW\{B!7"`^(?Zt6Sc˦4iڌN&0-&5RHUŠk'Ng>E!0SI3TBBCrLvq9K8B!-9n^m5Fd| ~XB Դ+nm[}ۅ*A-xt$=yi^Ү廌<ږ6IӊwmbGΩ9R7&pf$n>k5_߫w@jʙ۲B!`֟.r[+=79sgu``0ANrbyA*6l#3>*ans lB;\I$@`Xuun++:)g~k >!W|3zV/)]Ro 8z.RԙQ>cէsoVK+Ib!,Q.f7Hw(B~O{[Ηk4t =ӯ4jk>)%>ɠWޡͳ9g+V"ݥX:M˜.k޶-'yT*uFtvԵLJ4@oуVk$eKl-CuUUxz>ToFE<^k!Bܼ|- ^uל۪Ke,ԗQ[:2g(J@PĤjl'&' c!VG/{mȐ!P!-X _G>`4df̩bAaڠswYr8C Prr,YJQӛw ӖVnB!(pE2ɫyltP֞)^].{X :i ٱz_&!\mΰUz8m)xrۄB!D+SdozLNwN Jto}BJmԭ6!r SdBdlQ`z®ŵڐVj˥n !B'B!B! B!B! B!B! B!B! B!B! B!B! B!B! 7,{f®Ft{2Ǐ'Ḟqeaw] j Yv®B!(r$PEQ |7=mF,%I|9&!:ӵ}*==a^`<Ы͚4E̎O;fا!BqKvnҪnF!HǞuS@]SF*.h 2z;>z׳/ª4WyY8I;ByqGM>C&|6?GӱDV#F%x_1RUp=W<9,ϐS~ ҷمw\0b{R*!S=yv7o5jkWP(ezB!`59}KgԐ>tjG&-0`*[:I;1>oGݸcG`n~ ЉqMhޱ?#~ßvoZ`ˋ]h ˸e jB+I1~yw5!n*Ο=3Ҹ3%cDC>p1ahZѺ&ċgqxؙ͛Mhc(>݋WMρT*Qu ̾}>5kvmxvK3&ӣq[^vT7מOw,zDFDž^R @lEuWήE6'[ѸI3gօt \'똸Xsӂ Lٟ͛׶'Swxdux/ل~w\veYj Cn͐{0՞ɽf awίAS۾gcjapfF蕹;*VJ]-۵#(0%iSތx8A>j1T˘_x,ͪklꍣ[ ز?Pٗ ~ә&aSF=r7*(a5v[d_Rc>9zG?f4W0jyG5?[brx3~ŖK;MwO\Ѕ['Wiv-xV.艿mQ%+/jE8]w2cx/:@APBp'q:Y3e,^{;0l>DęObǨ719vVe0 1`YIJ.7;*>WZ(׽/MRٶ֬#gO2 !Bȍ`^(ory>YΖbW !$HI"EW +~~(8q:(Ѽ]4K[aK]HM!UwsK~iEjF*iJHhl{ǝxṴ̈ZͻZU*YBpto+@;|ǝ{g='֌ \2)jD}v%M}oڒn-x+3Ψ33Ϻ-NvD`U >i1۫IBǴܕhW՘l(AJyb-M":rfpUA03"!C+Or`Û/ϏO04?~ΉӸ(Ys[ $("rT+S ߰)ÏկMel<L5M/B!y oF.ikPն~R'c(<'y0jU?+_ĘWspTшAD{;m2O4OOzr;"UoKLNf)SPǚDX+(zs>n~t%9kV:VR9uH;`'V>1aңu-Jd&7.E-Orb7>S6EνW mboGM:,;h%vН]3 %w|&˫t*BN+<MG}} _cQjE]|S(NZGxӧoJZ!==ߍ_+BZ^8ki<1{| JʊבQ m]&,bN޵,[#"H!BF bj>8xcװ`*\?%ҰUi6 CC3M;bܑxl^uQFWjy9Sּ,}+R]VԠm,ٴ cygViޚn ŮZJqԎvbf2yajps8#5B.>RN^%̜1DGF$Dqsh,4d<#6j IUcXηծ+RSi9~6/M㽕o'r6{h-H b(E8[>ĴQwQ'-FlnAY=  %3EӞB!ב4.aaay۪Ke jl'&' c!l?"$''_ڐ!C &B!D[`A>`4df̩O[HQmB!7"`} 9<<4\.WGtNHHf͚ԫW^xW_}]?X|˗/'%%]Q+b|}}  11;E!eGg?#,쮼 H !Evjժǖ-[]6AA! IDATA~w^zq}{n>cmFŊٳgUTɓ:tMx衇p:ݻ&M`)ߟ޽{_Vo! hǏ6?d'ud]" S%#rg3~'+Ɓ\Nl'NbŊ\.>|nʕ+)^8G!==02e K&((C[yiBkU(fN۹{ /*\j9x{-T.9 ɮHhSBς B!M—xz+BRRRaUy t2f-!B!nDEz.][b zw|E]..I/@ zo!TAz*(*OG}`GDқ{'@=.?RHBy^^;3; /Pm=ǣH8Su?^0ƎQ2sG>ONϐ5%B&gdԒ:|a:m5܅b^bxe*7|̹8|51&~Ni߬=˕wO1" j|r{M;o,e$4X;NMB]#1cbvC-5{2Wi-L( O͢oYYoiߟl&} 7bHSP~'FMOw?mc/-R5vx_ }i 9g9/Z# gAA$պLFS) wB{15wXh6.&W(yR>ۊڋQ&^`UR3\;:v=E ?uمB1G!xyB};3aki>$2}uR7ŔŨD,QZ"*L~2 ;bwJW=RoY`u s'~/ INF[Eo_2SH%/1g/rB/  Bu05M-bѢE,X*Kp>h^2@|,bޖ!|͖L.+"Kn&.}"AJkJ\rnBA}ا3}a'DžHƟ-K?&Mu`jFu46ae$}-:v.l}y-8EYDn\}~Q,fW3zp-e9fN  s NHp_ApI0*c!,`a!H\~hXCeHصLS&9[3*Cӽc*bG4M-z"d6ahTz(g=B~e+H6Vh P0$c &C=k+$,iҖsMx _J'kDkB"88AA;qz!2T!](9y$7 OjNOOʕ+ܺuڟ|;kHJH$H(̰I $*266#jaaD$gRTMuۙ?0!J'3wm˜ wcx4CQ@!$ch_D߾e$đ`$iK$$*HAAOhh(* I*%ÕoUms爊GV`#񠷵4h! 0ëC/gr=L8P$s~kJd"!."1 +Lٙ1wh ~l"%Lӗ)5XSbs4%~ G^Nd"^l*iRN"`Ч)q$+\=NXE_A2ȲLR Oj[A,_7| .$j2iܬVV.;YӥH*}7,b ,P9XBTn 7Ōη-?G[xN?-p.͞ѯҷ}SB4ٿC}B.m\ o_2: BHHuq7/ Prʜ'Zz0ׯ_CqV=^ϷWgޙ,[u:g˂=O5εq0w*pqFYA j_VMZĔ1wۣZ#GϐR ?}:''2c 'ٰٳaoQx^Ν8fI; =4j?-HH)kʷl o5C" 9*/ug xڀ܍hBK^.]0 ~K/]g`\L^##d ϷE).-AI͚5II)_VA %|K ^ P)IZ'/;O Y5W7k5F.4j[c754"fqvhH5? .M-P0Gƽ'|mً7KkS9VZ JJNd;$U\k|x=r 框}yhq |E: Oy%+~B5 ɦRm/UIwxfxU9g- F3j"?_Al".51טa%HOO'nݺ+>>~hb£ի]!4ir_< ~~>uT>|N>^_!i'{Wptt C\O w/rx Gr9^uh=q/ (D[qoҠeU$VAiɆdMnXZZZmFTTn.Ֆ.;QQ899Nw~,^am*;cLLLD+5&wCJ`SYя^^<)|;9cFJJKd\Jx'W^-sOfN@xsRܮ]}ԩ &ϟYaÆ1{llmm˔󉡦ϙ7l[N =bS$z}=-)I'f,\rr{Kx|۷xamë-m5kmߴh W vꊍMDC#%~/<ۘd9|3%U>y-:gFZj:$si:ףox PTlgkNjjj5H"A eZNcj#=={ReD׺ukvڕyzhu?rQ&1yU$IN`e?ܱ{چuZm[w`捴m77 1t1'KNj.\:...w~'|Z7tV"A&)L iqFZz>;*Vkݘ#j{T1*YFy`J!) &;we97TYZfb* Tݤ$vN=.JxNTjõkpws^H(:ĤD>H=iܨi"".p-  CgNq5\ݩS.ûz*ڇNt]6d$s3}ស,LiL(9,߼{]p):dܙ)$zɩ `N}Եz ȵ|y"oŐB҆1ƕ,s+'"HWplqm9j4jԈk׮;w,wp#""??z[Ы\ ]%ybVYtA3SN}牅  T4EAQ22 -2ep:@#qAeHHH,5^WEQrJYu!ey_DRWmIrr2vo{מht[7ٺm ;۰gnޕ.p!ڶnǡCU6sgطo»)-#CmvN01O/‰ȱGiټ5ݻ`etwwnݾFǟ``rS]T{YR 9!psueK`޺yV-ڒbΞmׯ01Q֙NNl{-֖-۰?< 2FGV:,_Ϗ)P0|P ;@wd;OaZ??Jb6>k7L7YbL?3e]t0n/{}0mݮck : sÊZ-!!!\|{{{bcc y{//E\beMAZ r did4qFAAA:v2%ys~=jEMKMXd„ f#LAA 37S2 퍏s@ &p(jޙl$)2PY22zmܰo݄7W׬ށGp|66#pwsxyd-þ{ɮ=;+sZ8}$gR JzzW[tɲKiӺ-nn\oÜcȠaUeǢ 3z,ZNcjU֮[# Nٓɚuk 8=)%f27qpqڵ¿p{bQws|R@`8_kvc~3X;yTbfXR2UX{s,r*,AxTK٥K Ę1c Nl]gK4;ݨ_2T*ѕ( L}G+@YP8;;{~C0\\9w4:Ֆ3gN1@N=ކk]1^2g&kfY5uwË_M&sSٔoxnT:][ hwڗ2/on+7z/TfjB ι n|7>gƌ~,eknzzlܸq8::J+Tj 0k֬`ʕٳMStV[0g4Z;_d2iw t1rva^E\ W>?#wcpho]B@.yyt8>E.yl&} 7bHSP~'FMOwL^7/a[j?Jm5@Ii3{7fZ̮swp=% IDATH5ŽfO|*A))9I 1g>֭[4`0`ffM_T4gn޾JGZ!L T*MP=n`dމ|ʺ,IA~2&7ȸbe__!˫eJ >ԩSq˔TjG닋 {@S՝/Qd'B !J5ʠ #Z!1OBž/y?xOe69|QN eЋC$,;93Sę0v'Pz葢Lk|h/O>{i0Nr7ܰJN/fW/F'bb_L+ O2z=...F3Z9h4*n7MAAAa4 O?V/XdFDDH -iIGGG1D =j4<<T@Qm !.—6qw坮N= Wb:q%No]hWR>=-`8_RcB! 2mV~]83c.dD 6K&րAAj,(:Tx G 4`ُo`MvO }- RB̎M~Ú'B@1fd^>ù4{:~MP1k`)]slWqb$&pieG.NFb XEAjz_g6*(DFF>Oj 0ׯ_Cu0 ~K/]g`\L^##d ϷSDY,IU6X)AAABSAAA"AAT ƴtsK%=۷(鋙igVEU  Bi()DlƏas1ŷR a*le^v7s/.ÇCjcY ȅ}kWǢ&݆+YOXaƖ|~hںavfF_̱]ӛ՝Ƨ tY>4k+ϲ{"/M17jJ6wG3ioC*)ޞf͚8dҥK\|Mkn4_E}+{ٸ~G.\'`Bw+(ݺȭ[wd.Xz VlɑQ$g9[FaeZUBYǬ~gp,ՈsL.-'lj+XDhNtlQIKA&Sx*Uʵ BU4v@;g-/[4yՕ~o.egwT,x9T픒;:ϓɼ4iSSOL2)~AL[FgpX+s:jp*'}-w<=gR~i޼y֫e~LM#wGҠi'Z٨IׅFn|]6 !Qr$2ZpE%Gi1R&yx 퇴KIJB4'}(gws%BRR .\'*D3Oh3GƁ|J gV1o:_!]٧=~z&Ϭe8x)tZ=SA|6I ]R%}F 9ߎ%15+ZZ0==!Qō&3qy\}7ILѺ3񳑄g&d^ڿY3&}O%0?1m؉]yMĞZ͂?6p("֍V2d@m!MEl'o$!ySF|r(LG}:"dIȪ5D6w@R#sm|6ޱHɇ[ .$],kU tTLD[+/cr8x*+=ԋ (#FC@7Q)~0bY^~1b4=j$$ 8b_f"IJݖsEt@?fHr>\ZAV1IXZHBұ_ߤ€<1?>gS>遜_nB0v$p%6S1zI183Lu¿yZ; Xw3qb n>ș`z |73#1vnl|x-Jcfp]LV҉F;y+ Z6yg2=%+vrzXSm_u>{wg1{^PpoD}i~0/6dL?U.4?&_ Z P=3DM,[Wc1ZԤ3}z6#t}j|jsF|l_:MX27Ƒ!aiA&ս14ŕo E+feրMJt$R;wm[u贄D\甸9s"3-ufcK>EԽ[qnDdj-<7-JQ T %Cb"Ԅ;DZo; OcG Lٸp3wz0}P5@XNǍ>ۗb0'z6+jŦԝ>AB'FjO=M^c7P];&-qNwwqaH-u20,t#igBɱgte%90:/B5-@)#d^ۅwog?m)SIׯk|5<&n3L{5:gSY’CmL3a~};YS7J 9RL3/-(#:CJ!,u#pm|?m3C ;,zytuʮRLŐLX B)KR]7tpl"*4r.s>Nֳ3V 4{ ɧ`Ʒ;IoO1^2G=;!fx7 /sV9.7*zj\}.%<,oٜ>hNs<e`0J}v3s({._9 ?Dߞ'ɫ4dy|wLٹ{fIzx;1I$ \u[rZoЊ.cα{2fH7{Wh_Y{psr/sk –Dn߱ZV #EI̱;!ڟ_Y%4'#{4S #5$($fO?yc$xTb㒂z\5~HpǠPnƫ^-@XphWR^"?H$r'\&M"o$ ۚ;{ J)_1QO<vDfğ b.\bpO" ۪,MkTIj9~isV{F`kRMI[ӵX>~']ݰ6Q1ɠM)>>am']hpв.}7W²zT>m?Oqv/|m|װ!s?r߅ǥm;>hZcw57gLCɮ6mgm{y}ͧbjPȾLwQix|yLIApÆ%d@AJ.Q!+e[E:=c݉1sfmCS/?naLWd|[=3hԘ[e3Eeׁ֣!9bWW?BLI $dllZe5$'$Ƀ7{JrɊ!PrEב>$s[ mp(l(I_:O[ 11$(`_Hbq$cokSIB#;㽾< @Wٌ1Ӭ rK ) Y[LR(%FvF 2کo tC:{$|klkxCїﻄ(1Kҍ7^jShE:9\Sp< [Pc>}̆qU8hK?rL$ j=:b8ܩ9$}\XiRP:'a] -q526%H7p`\H=h[N+j{|BBQ/u#YLOGP$«$^lm_`#o,<[3|j+]?ĺX㧤@ZDB| *w72 ƇRCoF|Z.-J”9?q%ںs.H:=:D|\L >օ>3]\L<&l|<Rud\1O5-|ucpdϢ'ʃ_K>}q@tœgMekwodSޅ}{<67ȄIrdT^>%G`kiБVKk?cI6(`wf=KWL=2df*Ŷ@n|??хDZb<ۢu\ km赐ThCQ`BˠJPEǔ,9&_35+=..ZջT翨MestX[Ap?p>x"HV! 8 U1klhA8&CgVs?f6+D b$<w|W1n4~m\1eFEp%͆}#<$:%(W"_8a=2O"S[f\94{Bm5h⟻o P2nkMHw)<{y>}EI68ҟ7< YUPBYԵYKO> i穭|/3\!F~ɳZ-iu8/%a֎e^kdDOYdE4?d< J#B&n(NYy$ݛo|<ΖeY`6iijiXs2sql7>0MqTH1XUqtH̙MJ7'Yˠ6l/8[d{SsP/mqTaAju<*e~_eA Kq{ٴ,rh5*N0|?NkK41'ؼ ${ߒZ[X֟j\8[?[Ǘޮnğ T\)k~PuJK||.QPV16O@4Ipݨ6Kq ԥ݃+Xf5:j|j%)Zne"9"65Ź YӴPE╋Y9gJ\UCd f-[cgCDGhf8߷b{=պSZI@ƨtR4޼ʵt=M!'̥mK\ 4~0A4Ќ'vj\Qv Jٓ(éKj89c:yC{O^!~ΤYLC[cV2l%չBw'Ҵz>x>v|Jq$,})?q9J_` £Jg :8ˎF4˴YV6.Arzz(i)D_ʖ0Uh|?p2#d=ed,Ky~ -6(HΝxeblgOaim}@M5,[Ɏ8XVg:P&9OA jZqC3 lnӟg6xp˜Nf5KWJ 0eYd2宅doKwF&S`^#\u #4jX75Ƥh"ϞEj;,WZ]&q3f\e qw0vk]*W/j_x/GKH+(rGZ4q :ªy<*߮[qh0nq J*djͮo6iMYvm=Ff`먡f&_q76*#7#إ~L{9ǞmGHF"4YUuV\6%46fa">0;\D5gגgi"U:m ;8aGcb?z0ڇ} ݓʻ ?ṞT8 ƃy"h= {Q+:o%>sۖ ='aϒ`zJ'0^Qkk^5/#cS;cBMGYʥ:"g[>ҸX1Mq&| KOvۜv~[BԊ9*%t\p|AVV籶.,{Tͬۼ;װ7UAc툇_0M}+͎ITcIo8e;I 5$@ƽp{bQws|R(qߥϩٓ`fik]6.z&y#NgdWX׸Z<ĩf;yj緸ѝFn|~B<7@Д5 {l>'xn }p3Ͽ?'Sg _+--}jE^+Z?XKW>^?)`.nyyy̕r|w*9\v=ybcc#:Na<ϣRD^RW}s-\U|3x뱸82VWWlNXcieJ\>~B]+Vyrq~OTF1`F cYTs~]O "˲G܃YCg5vp{yG0|ؕz"*˱us4܌J2RFf~jG v\XHc9^;;;i˲,rjC{ȣ5v0wqnO%8QFWޟ @~" @&I$!` @&I$!` @&I$!` @&I$!`Ŀ+"tWIENDB`DarkRadiant-2.14.0/doc/img/Q3RadiantTheme.png000066400000000000000000000036761413722237400206030ustar00rootroot00000000000000PNG  IHDR!obKGD pHYs  tIME 3KdKIDATxݽdc߈P y)txID/!"sC @'T?(Dhb]6oΙ9O2wy̏48og_޹s\ߟ\{mrNΞM}'kq ۽\g%ܓ|]r'?\5:npTPn9䥗nJ{/…oU#xIu%ˣ[3ɍ7&<|B̉Ќ^QxJlNo?{6y䫯kIz*y cNh&fnoTf6/ؙ3ɯ&~ 1GNl˨^88~[ə;3 b8!b ͖Lh0UBeĆ)-$6Ll)aJf S!4[NlalB3bØfFĆ̈ cMhfJlX'1a]fĆuĆ:!%4Z B%ĆUgƱJB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB P'4@uB PX.؃b= fb7K'Nh:Nh:Nh:Nh:Nh:Nh:_EMEIENDB`DarkRadiant-2.14.0/doc/img/SelectCompleteTall.png000066400000000000000000000003371413722237400215460ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME[lIDAT(ϵQ ! K:ڍf/ qBAm4)HPQ5 'f-@)廻{XsOˆu #KTD &n$[jlZ]!I:A1\@ ^NIENDB`DarkRadiant-2.14.0/doc/img/SelectInside.png000066400000000000000000000003461413722237400203740ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME[sIDAT(ϥ D85ί6r})VuDk@KH= 1޵B.}j""2Y](AʀcZVMzNzFU.i\ENIENDB`DarkRadiant-2.14.0/doc/img/SelectTouching.png000066400000000000000000000003471413722237400207420ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME ZUtIDAT(ϥSA +ć43~֝4AEmX U!Yiꥫ `fa?G,Ш|q$0z*#pxqՃKIYdR 6x@mgIqa:]1K/IENDB`DarkRadiant-2.14.0/doc/img/SimplePatchesControlPoints.png000066400000000000000000000167621413722237400233310ustar00rootroot00000000000000PNG  IHDRu+w= pHYs  tIME269kIDATxM긲(Phy u0&VfӦ{k _]7eI?dEF8Ba8|jvdzxo_ֻJuZ+{qn_z2̲&KjC4GG/^|&^w_xro2 !'oۏSgrwƇ߿P%5_P%5_P%5_P%5_P%5_P%5_Pk//\]=}7gZkmgS~(+W6⥭Y I~㥭_p<2S7O(՟oEX4_us]V~FS}Z凭^k!gEY'wr/<,b0[I2Wv^O5Ms u5=q8 ɌzmY(շŹyyZ7~.Z-ח~;٬G?)0Lrsy8͖4G?XkҦ_nJ~>gO2܆x%5u>?gsO^{rOɾ?7~YڟX\'smǏ{嵶BiOfɊѬy2xַd @Md @Md @Md @Md @Md @Mi>!^2{m6)`~G|>KǛV񉉹g3uRǤiŇm1|0.+>Ko~XkZbMao WZ-׵g!|Ηs??>٬G?]ۥd mrtSY Lg$˲*q?sH,?P{#?qYIjl^/Q%LJ~f|6d]%:vaY׃Vz'&t5~ 8_˹;+XJ-_i[H}Kj&Kj&Kj&Kj&KjC4GG/^|6~?#l>?+~rܳ:G)mcs4Cvw(>{7?5k-~&GsmǏ+~Pa?#YY?J#&k?Nqj:lK۵!m!յ] !|9 rBVZ+Jr'Z=q\IK, - Sr&YcZa~ic/-ؓd\1KtWŦi;٬䑬3 x^Ǚ*7wsEW7[nV4LbzKT<ɞd'=u9{[nme \Z\4!v4Ҳ\Z\4P' @M_{( bPtwj\_P~2or[,4~C ڶߠ$Kx?7Ts?}CeJ?wA.%7ga;Pva_ lXd @Mi>!^2{m6)`~G|>KǛV񉉹g3uRǤiŇ÷WG;{4>׬9ε?BSijde(q>yn7;/|:k.?[>1wNzՖM~㥭K}EY>8uel^/Q%LJg6y.I_m?2鯛ϚϻIZY柘/KrnO]Y!IJW\mirMBu0+~O\&Kj&Kjx|(U!oKDGͿ\YbIaSq_:~CPgYl`sεg? 徎\xY=4^b@Md @Md @MtغؗkChB%1kBBrΩkk2˭Wʕ.-N/rK{b SYB[㉧jkMZNJ_Zn'\b0+O4l#Yc]&N}T~y݉-7i?pMx!^2{m6)`~G|>KǛV񉉹g3uRǤiŇۓoz{7?5k-~&GsmǏ+~Pa?#YY?J#&k?Nqj& +Z~e?6{\&/n>~3w凊(TizW"+]UR<x<^ײ~/|??5矲Eow C/-Vn-e\m>\ @M_>..{\mio7^M>q\Ieߛ?8qel^/Q%LJg6w|GnKo,OLLSai (/nr5Ms Geì?Kj:4M3|tŗ[oO?Y:W.OL=sv?&}>H/>hnw>;BK~gAƇX{?`#G۹6V(?~JⰟxT%5f}85_P%5_P%5_P%5_P%5_Pa`_ڮ mC!\ΗĬB]!t9VKu/wB,^)W;oe/%LjO]bgQVmQV臎'5ir+ KiŞ$s_˯*6Maf5MsŸ#Y0x<^qʍ?Vk.~ܜF5M'7OsX+q Uv!?x{ ߭(gZsx\o;Q/.WX=+r}i)g7yS%+>Ko~XkZbMao WZ[\)~YSG~8GL?=4vKPBx^gYGySsmǟkmrM|~|g=I5?8uf%γęlx<&֛՞}:m@}W|)Z\W{͟6`[Bz?{N*|.+`r/pA.\?[?i`[?kElqGi~Kr_Ow3'5,qtg9+y/,OLLr/Cӻ_?3sfkj`sε? OL|g6kHVtf̧>{dz\&Kj&Kj&Kj&Kj&Kj&Kj:4M3|tŗ[oO?Y:W.OL=sv?&}>H/>hnwnÈqY_:>_kl{;_pZnkC!p9_B !O۵!{Ha]kFˍwjitm\Z< &64$K?.mt>SKs$I$CCb1SYB[㉧jkMZNJ_Zn'\b0+Y9u20x<^q]{zrܜF5M'~-75r3/gO2T]\?\Η\o &VV kͥ5M=[&__ZV֚Kk|ʖKj&Kj&Kj&Kj&KjC4GG/^|6~?#l>?+~rܳ:G)mcs4Cvw(>{7?5k-~&GsmǏ+~Pa?#YY?J#&k?Nqj:lKv]!t!圞;'tKgjK{&Vn%LjO]bgQV?.=+)T܂M2%I_IlÙ<5vF,x<^ױ#g|H^24vܞǿBeY4嚦v?' @M_{h6 !p9_V^|b-mw_znPb{X~ %5~ '*^|6vCeNMP~Ce 17T\L-',V?_s)_tv^/=\Ηo+V|b-m;mKjC4GG/^|6~?#l>?+~rܳ:G)mcs4Cvw۫sߣBX=o~XkZbMao WZ[\)~YSG~8GL_vmKnk'' r\nRti!wxi^K}EY_.?_7_R/_NJ_Zn'\b0);٬繌~|$'S_7?Unkk%~MfjO5\o|iS*V eO2T]z%u~ /˹oM\A֚Kk&$\w |}iYYk._i[ ([///p<_?JlH>k-o;Q/.WX=Gvr9r~gv&>Dt\񗎟m1mYzk֪?\G'smǏ{ᵶB%>35tVte%ͧ1S^>P%5_P%5_P%5nk.rN^irExi+7&.1(xVn&e_˯7Mw8Yϣm|X{g}sVu',OLLSa%|9.zBnbY+M~in! v?'_P%5_PӡiᣣF/z X6rG|bb}1GFcv;޿dMZKI#\_k+?%qOH/>hnw>;BK~gAƇX{?`#G۹6V(?~JⰟxT%5f}85_P%5_P%5_P%5_P%5_Pa`_B !/9[:&W[[4rO\&/`R{#?qYIjl^/Q%LJ`4lV4-m?z;xcYsIMV24v?/>^=Ȇw.ʙ֜^?N˕%Vϊw_~ʙaMɊ=AƇX{?`#G۹6V(?~JⰟxT%5f}߹//////:O5Msۮ}rdx^OV|v/ϧr~ z5kU\3msoZ]OY_k+kOG?O*ϰVϵR_NSrgk\~~9|Ξd(z Kjzͯ?o_ֻJuZ+{qn]&Kj&Kj&Kj&Kj&Kj&Kj:4M3|tŗ[oˉ/p݆st|fwƇ}\~|>@Md @Mv„z"IENDB`DarkRadiant-2.14.0/doc/img/StartPlayback.png000066400000000000000000000010731413722237400205630ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIME 3sϸIDAT8͒KTaƟ罯8]F-?(…HqJF_U.B0h.>W-Κ  3Nwf"83Eg>9Wb`ޱX Ow%~((/8/gd]N<7&b3mg׆nu>BBDBDI+k47e&Z^,SS ,zЭNE{zƣ??kt] 4yP\Ѿl5;peeh pxy_#1]RѫD$ uԨ}lozyydm9*8pCJCtX+d^[:7j7?9 RQp9D`nfVݣ͡غm9l!0S5?i{_n>L=Oٖ6:j(zOlU7ֻ;/D?sl)W_uo~IENDB`DarkRadiant-2.14.0/doc/img/StopPlayback.png000066400000000000000000000005661413722237400204210ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIME  IDAT8͒AJAE#(r\Bporw^;nYgY&4=.L\hmT_oGu//?\zBnFˮm&y@HJ3ɽ~b@$mnINu`*$&KQ4nGy(K퐉9z=^1}3'hFPIENDB`DarkRadiant-2.14.0/doc/img/SuperMalTheme.png000066400000000000000000000044361413722237400205400ustar00rootroot00000000000000PNG  IHDR!obKGD pHYs  tIME %3IDATxOTw:礆.PK.&P[I E]qc¥ [J7.Mc4`BډMԆZl'"[X:39g<ώw~͙ɇ.lW+iǩVVVj4=Ɔ|6y6GW(@h8 Nh8 Nh8 Nh8 Nh8 Nh8 n4Maɘm2}mp7٪umrl8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 NhA4ן&cyx<-4M%ןFgfɥguf^u7=~ug[Chh+{.p/ֹ'mq29:ukǮTUՙjy:9:_{.փ|6vX蝫U~rN;Q[R{/=K{uoﯷ>V|mZUU 3 3&4-m{ pȐ"4TȐeԒ~@#\'2Ds"<M "4=%2̓0oB3"CGDMO m&4KNdYb"CW͒Dh5BdD.%"2t, ˄f ]'4 NdXBDE!4 JdX$~gpzk?QLDE#4pֳᑛn k,2,iэ|BW M &pxDpXHB3GFbv'4Q5aMд "شz!ͱcG֦tuuF@`4oqlici>TMM57nk:.϶r{VlάhT֮so<֑~c~7+/P?xzg˖\R~:o_ݽ# Mдy6wQO9S?zѪzܹqRi׮is$.СOׁ ۷Fuut{@hhAךm>H}ԩ֭u۝w8дl#}{/;W._=!4-Z>dl>kռ^g쫯3;!4qrnv\T_c͛,6 fIhuB$Ć.%"6t,f ]#4KJlYbbCW͒@hz@lh&-B3bCĆyIhzLl9a!Nh*!KhNlH>@lHn"6̚а= Nh8MD^f&8x4\]:;[ϛ&  Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh84M=@zim2fLgMTrityl]>of\z6[' Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 n4Maɘm2}m0c7MS٪umrl8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 NhJ3 ~ FQlij<֟Fg[YY2.7Mf7[' Nh8 Nh8 Nh8 Nh8 Nh8 Nh8 \9IENDB`DarkRadiant-2.14.0/doc/img/SurfaceInspector.png000066400000000000000000001744411413722237400213100ustar00rootroot00000000000000PNG  IHDR5@(zTXtRaw profile type exifxڭiso pLC.>MWyr\9n/iY#紘=^vpZƠsqet?aLw+v|+\\/W毗Dx0.$-bu܇p)KB6?Sܽ'|N`r(ئbLO)RʩZ&s9%XRɥZZ5XS͵Z[ͷ@H[i;ԹsEÏ0H#2hOgƙfef_~WZyUW[}+wy]wk'xɧzV{Y_je5-ʻ tp™$a1/e3[]^lDEdmݸ v>n kXtf/vՖn^=Q5q+enV33ti^SaF0I(aB'߀'9yf>b f~ ~0yf0ulm?::yvyg-C;m3&e| '⠬%9lIWࣄ:^Dvr>'{ȓ0tX~L0WxF|;r"N-våYlI{M>#Pp'6ki1&@s˄}f#0Lw?ܯGaygLeAd>>Ҵ~  MG m.22 !q) K%iOKa lF;;*9kpZ._n~>  )6(9tBG\ ?FeAdLn֬)"Z'-m=o2K}U5{]Q-wrL7m^k—m,_ SR^fa'H{P\.0 nٞR= _`!\, ͻ ֢ w+fU+M>>U'򰑡.* lxT$I2KEF^Xt& Dti&:k=Ǽ.qٴW4&%SȲ"޴*c',dN($s}x qNY88T$tffe . gDQU7^UbF'Ul ֒Q/3c6p,1I,5LHl޷'uj_PmkBhHN!m/:A%<* wiXG/zR'9&?Q%AU@٥JTI%" 3ueܭzhKQ!t*V0AH(_帛|&j]qmg3*sI&*eY4a>,ہԷ+yM0Ťܕ|XA dK׀2͛aH?'M;) ֪ `@%E?'aQ!"" Q6:YJ܍H l Ո8'V҈>det# ~1%dxjv8VjɹX[ לu5YGAE%% q~J (t@ IA*)˜yl|u̫yﴱ`X5m@x1љU`Of()x=  c_l-Mj:XzBtkƋ4Dl]?"qSOA%) 9n n"1d%n'q0rlt0{@ C)E,RB\˄ˁ ){ҵ۞ ]B`lJ6k߷_efkPx3z \ Ye~qs-r2%\+ ;pEٓC?&[(>]pքy 6c.疧 p͎̄yւ!#xA "/ ]lA bFh]" kC4Y$tWt^D0,~>^KXT } wsw}DB\Հc1 UE/Ľ`%m>PJ sxۓ0ʁn2?*:RaE % ĻaT\;zh;E^~hp!n!#y|u.f4ރkCFvК`R.uŏ쮕 N$?a;CA%nUlOLM)Ct:%নj@r|#x) !BRL p8'vn*Vā܏ LCu6)!{B#"0HD Lphx h$M u?߈ [! XTm1 =ްAGB% on O9@)K- a;B7ʄ+5}s`eq"`\͒9^'~Y"n ڛ0 V3ֈBRq'Whu_o2?^6T)(IN;&$-5x *?e5HY"Z8q'RZm|<է"$F1CY!>) eg=pYHT"8! STY %dSFY88gC˕%*ڊd ~BPɼʐG=rHm] i,#$FR#Wo=h݋_:pp bM \^EbJjm(+N?MSO-}Wư&`Bq'kN$nTIAMd,M:mOt-t.zNB*_BW AlDA x(bFxЦ-6;CUKDQGZB4ѡTD zج`.ZxU1Ұ 2R;@zㅼBۓєĐgdF6!H1v,7+W|%y̻p\#mVW"Y6Ybu He! J]B6QC"U YH"T6TW3BOE1L)^Yi Ui$A5Q!^FS).' c<#֎+5'AlÑH"R/UwN#SIb}L_>&>4M>T4Rf̬zSݒfu/"٬AJ&,[6VUb^>|rCG@T|&UUVٟyAD#AST&G _L5dQY:P>HbmtA5Q, [-ƒC< [2K ĥ^*$a îHOǦD "|j12H%KV [j$-!e"(4^U}#ap^Eyu$5a Xs9( -2<9*nA[i(#,v J) `H<ɬA Aqz9XA bgNJp罵]Uġ )^̊NLgn o9I-[ ^IK)źݪTo -S$j8ŸƥFR}E>B<&MVU$v27RuXȧT[An)`yfL ;W q{b< aK Y ţ*ȓ#V#VN("#i<9% uՈia}RIuREEN.݋PЖADvH>]?O&m\^x//lVPOG(^^1Ӫ~dmHef**a;'%Sy+<#*HSA~#Jq]8jjy`Gu51ZӃ6,ق0$+ej'i$26I?iw¡=X[c A){@?\N]:A֦ ǻ[@יBZяg@g|ЦR[U%a ; dIfc qZw UY[(V4LynWW2fM(D#|xG,yQk=ݶqn'9))cc1 G*ƣ3E8,**Ie"hL&r7;B7( QHV|+Լ,,zR L`u"/ͣεLHmyyl`iՁ$u/XB!xuR߭i`.+t{o5-*`Rbjjk30=KL[c903IXޫHGb#'K3.X+'n0 2n$0Pcj:bm1~R@$ƧnZ=0σE'?-/Z+dG^"Y?BHGg5^tWG`Xμ2ꭂ wvm¦Y`: 3$#eD>yu'H)/\w pA-du8VAJi!|q}V({%y5MN@}C( &Ψf>Uc!TS9^p"|9. =djBJ\+~"27kT vQv;*Zp{\ }BM@$ oSA'|z=/۴SO:1NP-_`.~n"Cu0=D~x,^^Us|(Ŕo5>F /۬s7Eǻ Z~F.z.0c^>1qRWEgh{V֣RS{ۥUw$3+=f`q43@8Aw[ ޼:^!Ju%@*m"u"6;Qu n PTUfni %y<>x'Gg~1E!vBmwqY+nXVÎbY2^N͋wOu@c9 kK&iYTW*2eoY ħbrHK0B9STJv5 y֪g=;::RL6v6 El F JKWr/ Pq%ns*NK-5-~8Aaյ!qsim!uJꇄ}{Ѣje,u\|^ ;pƵE]? /B]s!\d2fHrKfBnR#Rg5]Q]Ϯ}Ƶ+Zc9‘:-0ZfTBOW~Z0Y0Uӆx%P640 3O(2Dz\!U*C6(Ƣ}eGO暪j"źF]"O,1LqVQBHwޠ0uiYDT܀$C>&zPUZ'NVb FNQ{V$'^'bP)AMGY?HB+4Ys['2ABav6xa<P^E*И@mCj: `^wgW(b$*A[W pǂ(}H'^<Y~ȧIgc6s/3qKqYq"RA'JQwba3ĭ=Ȓ6< zr$P: lGCZpi:X#bAӈrTU0N!rV:6%Dio *Еtafr'!BJ{`  ;iZVЊH'9 j!DC !ͼA1 jS(%hp58N$@z:NuN~":m8("G#|pz 8AhjO%t|VT/Sx*'/W/ա@Hl$Bu"zAd#ot:,}r$LNrtp[W;KUQt%pŽpe$`vua`,,CiˈuCVb)%Tm'/>)(~@UԦ78φW߂1{ v?zJ496 ^'|Zdf?!F0V'bcX0$J TDnj3:B-*ChUJLw1Ӥ;Σ`#QXY=5JU ަDW@[]{O5\W i \:3k}t~󢐽g>ߘԀoFa#n(A>Sd3fՍ6rߞ5 `dD&s6#6 ,䋿'I D*샡g4xwP$Y侗zV%`IgXMR AMN׈rdx nޝsmڒZso꽼x_wkR|)!sQ٪[cyEN@u&9Rb?錧srGl޽ ;L3 ɤoebЫi't҄q2iwy#BIB|WYSaފ&2F{k%D F-@q6pT4ٰ\B@4< "n~CkH UP)ZK `1#Z<ؚ6MI[ .NVuԬ/!.urCOw2\;i %_FI8*;S]]_Y?5Ay(?4|v}=R:=CUFjqcpB~cd QQ yCk޶*mѸo/Ն:klR;OWxMZV[畁w1lYI`U RO0s YmZO *(hR*A9*Gyq—螴 x:GU q.f5dzJZ9u$YւӐd}0uDY]Ku䟭|a<By/7QˠDr0eM6iMp^rS A{MG3zMH՚9}Utj/PG#k]uf_;oVx9$@Vbe<<  ~e2|HաoMAp82G؆UG8SbKGDC pHYs  tIME 4,ʒS IDATxw|TUd2L Ђt]:#zDHQVtEEQaE t) !H* H !I2GKHI&->ffΓs=B!B!B!B!B!B!B!B!B!#HSހpVH!BTe9@&i`ijժ۪U}Mi\!B(Q̜+Wܚ4i?Ϝ9s(aIfYfQNKK###l !BGFGGGwN9_(B!ܔݻ?̙PjnYȑ#{}}}|!Ba FCtt:"w,!BghNOZ"sTdB!T/4}{s B!"]Bܗ.jB)翷$4;AB!>Mb7a!4)wS\~ YAϠy[ !Btߢ߽2 ]I.b ;1>=%IPUٳgBѢE &O\a !#Ce 3oLۖI8hcUQjpa8@LL xyyѺukUsE-ZNOOh4ZZhgϞvڄTj,eqE"##U5pDw("ɺ= !JoeEFFAv///^z%U&7nZɢEdԨQ 'I˽o(E.\ ,,ׯiڴ)< rHIIAӤIFvgӦM\ttjԨA2d7o~#.. i޼9C )9qTwoo^zvիWiӦ >___u~wB(؟hu`#8vy[wAZ)& T<<cǎ 8|}ajԾ}{ZlYK.qt邢([L7n(lذDv5jc$&&r!gQ:wLpp0Ge˖-DGGs6mJRRN4ۓ7O^O ظq#)))1e۷ouаaٳ'yϏV^ox饗 !l>(f4hp:g ;H*lAAA}vΝ;d\tnnnS`=ժU˷ٙ_~7n;HH}ITTÇM67up֮] &7o޴пl6mgggUFZZ۶m#''v:かz.._LDD o.1 NFFFc BÆ ;vp)EɗXBKH*( k@XXᤥgƌ&0q}FF~Idedu_\ʕ볲JNCc4IOO@2eV\Ill,k׮%44)Sвe"ʋ=55K{q?4zƍF#899YT¶(.E{pi%Ǥ>jyDQ$ABXE͚54iΝ#)) w(@FFXYӧy&YfѠAv͛ŕ'...ߍAիWW/Ҿ}{XإVZ'pavŝ;wX|9׿4'Xrk}fO@[m[!D1Equ/0ձBǜI}8IU (5wDT!D-\ R^=t:/_V{oooݻlj'hӦM Xi<+V-0$pttˋ{C@@믿FPV-RRR~D7LDDDФIt邓+W$##|QQQDEEq]"""$ӜK5k$556m`2ptt___ٺu+5k$%%M KUFC]Ely`s7&ա~NǻX~UQJ7nܹs;w:{{{=zpExCÆ KfѱZ-FbʕűxbuݸqѣcƌaŊ$%%bŊ|wͪ=of{xxRӧ9}t 0@9qTmpMz-Sx7?h͛ȑ#~26!(twBH ?&ͿNHVVIT!DԬY`~̤z3j׮Mdd$SN%++~.]eZUV[oѵkWHFF'OfĈFx7ݻ7۷o'""H޽ ÇgĈ%YNGڵhڴ)Ǐ'66K.u_piժ'N$ @=ƚ5k8}4ѤʓO>رc1|OQyر3 /}VZ/BZZٓc{^Bh*\ǎcΜ9L&F#ja8t.]b,\O>,t/9-M6wzެ8]]]>NP*Ν999dffraΜ9ʕ+,P޽{9~8K.z9oMjjj'BRTEQXl&nݺ1yd޽˜9sHHH`Ϟ=17xiӦqy~m~ܘ>}z2'Lptt,U\={g%11___,IIIݻHuCq]d 999Ԯ]o$''`RSSYjof2~iFٳgYlIII|̜9z<ٜSMN_uwN||}[:thǽ~:n`ر4oȝ`ӦM9rEQh4jA-~c޽93|σ9oСT^_Cnprr*l!B<*5Aw~zѨW^[ O=y0+8KbggG-x ,vD#ff&TVkժo 5asj?G}DTT/73gΤm۶VG!UC&...g͚Uܙ|:3))+Wį ++իW'===Zga5kx{{=YiԨQQQ888Ә S-k=0s׮];6nȾ} %66>M6`qB!*u_zY&+W~͛;woVn;v ggg~mضmz>|7or5򲟟ŋPkY5jD:u,[NtÆ ?#GsN 7{w͛8q}иqc?3x&={B>}?~<iiizBQ=Z^z>>|GVV:qҥ 'Od׮],^իWD׮]vW\a@ͱc2`Ν;Gtt4JYeh4L>Yfq֭|VVI&ѣ=z4_GZ=;3x111,\xyyB!M>TPPnnn|\xLhԨYYY|]:~x8@||<6mb„ 147MDrr2[n%::^`VZԭ[*q'x?seZ--[dĉQ###dիDŽ _Qy.LIh4<\rt ?8&L(a!BTMf#5Q&EM/Ba+:GJN&B!6ET!BaS*} 6TvB!V!=B!¦H*B!l$B!¦H*B!l$B!¦H*B!lL3%J-++HɩpB*Kb0mIH<͝ې]A=ġWFTQ*YYY\pׯ^쐄B*h4ǥKhҤ :c-tZձTpb˜OGZ\# (HPB*O۷[n%j:-4B׺;%(ѝ7'=xU.Ǒ1T*}!ˋĢ7Dףkݭ“SSut^9s܎# (/BX^/);' sc*cH*B!l$B!¦H*B!l$BBBB8x`deeU1CIUTQu|T}s.DQlSBxx8;#F`ʔ),^f/ v؁FA{tݻyꩧpttVZ̛7OEعs'իWGDD`ggǺu-' 888_ fQ}fڵk7z b2J رct ;v,0944OOOe| ͛7ё tj޽4mWN~HR\ڶmZEj =kfժU|4k GGGj׮͂ ?бcGeƌdN ;?/2z>U˗j]]b7oZWyǟ'&&޽{SF jԨs=Glll)z='кukԫWzЫWOkhڴ)ꫯ4_gUp,X@֭Agԩ899;΋/hqnyv{P899mtt4&M"** 2e >D-_ZƏ?ȗ_~ITT^^^sqv ֯_1 3zh4 ŸsNbbbHMMۛիW/Ozj6m0k,W},޽{߿?ڵO>!""~'''f̘A~3f 3gdԨQɓ'ӫW/&LPlزe 7n7ٙdJ+==~G}W^ZjjyF VrѣGӮ];}ݻ_|Q .СC]6o?fС9sFSd:s >,'Ofƌ@:..>;;;L/cǎ% ͛73sLڶmwCydҥ>}6~]l2N>(raL&'OTGR^=ԩcv\(ڷoܹsy&˗/~ɓ}`N=J޿?QQQG2|?o9/911zh<==9|0~)5j`ܹ@13և[oaooϡCOrJ9ހo@^,_sgϞ㕴4%==]Ν;+SLQ6nܨXB6lҹsgԩSj9JPP2uTe6nܘ/*_~lܸQILLTz۷zTÇ+hٲҿB*nݺ)uQ_+ȑ#w}WqvvVnܸaV/?888ﯴiΟ?7|Sd<&M+w׮] OE5|P]Vly˯\(S\Ad IDATojjL:U]t:^SnZ[.[z(aaa'>>^h4m|}};;;%$$D]VN^((_(Z}SҾ ;G}TsޣGcǎ_RҫW/% ߹(;Y#և)l=z$''+믿_bbgg$$$m.9JʦJvvv?g)i{KR6-V|/k4Ν .dرlڴz{{3f5k[f׮]F1aǸqxvznݺuԮ] 2l0&LZ8+Wۛ 0`f͚O<֭[mСC۷/Æ +WgysgϞeذaL&222Ƞk׮ܼywoɒ%l޼y1|ԩSqկ____|M .44wwwuNvYF^7;ɤ^.q{ѻwo֭Khhz0իWqrWWWի۷ܹUO:Ř1c]?~˥\Z;VsuAŅ~wߩ:ēO>I5JUӮ/loZ*OPYjg& 5k0uTnݺU~M4ݻ~a(BÆ HHH 33k׮TlÞĵkԩ& шhEƖx㖏^^^fu=>cԟ9s[ЫW/ɡufhJuG9q9::?иqcN```1yF>OOc[n8;;cooѣrK͛7-kع;wo{{{<==,_a_~:t {Znرc޽NG^̎"/Nf͚@֣4Te05j@QRRR,[{/X>=W\رcg/)"ޞ 8v!!!,X%K +ϟg\tL\]]//VPly7mZrE-'''2^||uyp/'ri5+lM,ܸ5jΝ;po?<ۗ\fMuO?4[fƍxxxpa|MoԨsa1?(kM|| =?'?#{wt;;;ώ;ѣ~J"/LFF񸻻[OipQHHHVZXqYλi˜U} @ZX~=$$$0x2DQ%zPֶm[ڷoϥK̺D( 0k,2~-+ 888%K[/ryzz滌 PZ54iɓ'yꩧh׮]cͬYs5!ܹs$%%YqiҤ aaaq[jԨA=i׮6l(ŋ1{lLNԩEu0`7ndΝ̞=ۢ}N۶mnذ̩~~ w f8@qttgϞ_}1b㪨 l2L&{(Ҿ,GsEꫯʢCr4Kbg4F988Pvm._/luٕRUѣGfΜɴih޼9gϞe| :v1tP QQQtЁ~a41cǏW9s&1SN%00ȲNڵ+GYXvϧ}8::rAL&-[DQ0h t:]r/^LNhժ&Lݝ|۴hGGG~m"##qssٳ#FGѻw2=r…ѱcGFMdd$˗/gϞߢw~ qsWMxFqpttdȐ!UGFF?ƍѣG̜x>0}CL(Çcǎܸq>VZwS~}8%K /.FsY6|ɓy!pBTTPw8qB4h*6lP֮]oS:w̛7/]'N̷_~tYQ=z('NT”^YbҹsgĉJzzrik׮ȑ#իWC߯)/vZeʊ+Obbһw?]iiiʤIEi׮(Jݲ;vTU8;;+͚5SBCCEQ?XqttTn߾u}G6lXewJƍ{{{QiРϪeutIq={Vy''''AiԨpBK@پ}{冇+ݻwWW8::*J^ׯٳGi׮zWi߾r…b~xyFFҰaC~Jzzz)AAAiӦ {Uڶm888(^^^/X\ύ7;;;W_UݭҸ*" (͛7Wj֬t:nݺʛoNvK)z=ܿ_ի榸)>S:޼yS R6lXNXT?Pe}=_%F_XEQMh4իf+򸋿lT]u?&Yi%111rjҧO՞wy-[g}Fhh('O_p puuLJ_]Cuy .^dՕڵkk} +\^^^7N?xL&ӦMSA5+lQ(witlRUTgEQg((JewFNNvb߾}?~c|*DUO?H?,PGK%%%xR)j/lْ;wҬY A& VСCJi~~z(۷ohl["=>nU!(=={0S !BG$B!¦H*B!l$TZY)B!F#Z Jzj%=57m'Y$T qqqBH`0TH֩*O ~v_.]K&B!h4GTT7.rꭃH߿ n\B};M5LҳMTkTnDZG ەMdd$Tv8B!Dj1 c2HGƩN ]pβGJ*B!* AB!6ET!BaS$AB!6ET!BaS$AB!6EAEdd$III2͔¦M燃CF"##INN2V ո~%iDdeeq6Iϛ4iNW#F#/^ .3ܹsh7nVzHU6~"ruuk!URnB_v 戊"%%@Q u*̃*URR^^^Bˋ"'%%YÃd(:Jl$Trrr䲈bL&/Qո~YGy7$AB!6ET!BaS$AB!6ET!BaS$AiiiB!M!gW_cΛ73gMaq߿ɓ'̨Q8|yYjM68::ҬY3rG!(ӧOٹS E8p`.]O?mcY73==kرc={6gϞUȰ8_?___Oȑ#g۶m|V.\@߾}h4|xyy1l0""~CiB[*;_zBgN;gkmnݺŐ!CXtiec_ؚE([`tޝ~q=~7'>~8ʻヒ~;vӓÇ[e1o [-c׮];vL]_NO?-1k&11'x"VZåKx'˼BT&[KNTDjI;p۴aN8~:`Fvʄo>>t֍{N}"dz;P!TUQܹS`7Ϝ9ÛoIݺu?~<ի|G>""XFiiizN}||xw׿;6muf닏aaaѳgOZmѭ[7 ϟg֭0vb˟4iR24hQptt$++۷ocooONNN1X۽{0 רQ#V<坤Z=6:uwyƍ/믿n:6lOݻ<3t:.\MtGTZ;'OIP333yg ]Z /^,Z#GбcGu[Z1WNΝ>VAF0w\BBBXp!ׯgРA 8_ތ3`ٵkW ߃j֬Y`ʕ+mIcy JQ}2zrҥKIJJ⭷Bә_`` VbfNʭ[ݯI&ܽ{R Rj֬ PDeG!*^XF6B-|iKJJڵkt Ʉhh4ҢE bccxРAq)uYesTT;;|hμ7s^G&9 g̘1'(( ;FHH ,`ɒ%E₢(Z+/nnn9s&ӧOjiԨUB0<@OdgacaKMM 44Bz 3∪${#?VzTHUz~b$AB!Bu*B!$IPB!MU!BIPB!MU!B@T]YYYDFF$t!lJT8~~~888m޼ɕ2 ո~%iDdeeq,\hBQ^F#qqqDEEѤIt:]]x___<<<*h4riܸz|[Q W٘*̃*տVEFFJݺu ]5\\\EJJ 6ף@/(UU$*; !(EOJJӳ#*k[Q u*+IPEe!Ŏ14L_,iq= ~oH*B!l$B!¦H*B!l$B!¦HZ*;!B' j7o3g,vٳgꫯ[~&OLpp0Ff8x mڴёf͚wߕ>B!Dy>}:ΕƟ'sΥo߾~۶mݛgϖ8۶mo-վ]`ƎٳŔQb9iiizYW>C|}}>}:#G߿LV .зo_4 ~!^^^ 6P}|uުVvAnbȐ!,]CӱK.O? 2gǎNr,XMhҤ Ǐsܿɍ-Z>x ӇCRF2Z͛^gחw}ת!De{|}o}TI9m`Ujٳ ?ӭ[OǾ(IvӫW|RRR8w}ήrr픔c$&&O[ުU+rrrtO>dBdkiHR-ijcKjطoܿwwwus=>d2Y (Q~l>A֭?~]>;-ZԩS;4nܘ_|_ua 66QFDZZ!hРFѬ|}}!,, ???zV-t[;;;u`lݺƎ[l&MWFafeeqm)2t= C5j !!*!De4Oy'ۧOݻ<3t:.\MtGd(ʦJ$m۶zꄇ 9uT̕+W͂ g$$$uVСC f͚t٢4 s%$$ ~z  E͘1c&11]v:;;Sa\;;;`*R3e! )$Ւ6vv{ 4j*9Bǎqpp6P$ܹ3ǎSr ++ݻĵkԩ& шhEZ|Ò%Yjg& 5k0uTnݺU~M4ݻdgg[%R5ԬYOLL+Z}2]izmɗKm`YAaggǩSe={fDDDЫW/~G֭K iBCC -jj*=AAAq1BBBX`K,)rE!--\c,q̙|O>VQFVG!*?m0яS(MXv[c0ʵIT*6oޜ{ZnͩS2eȽt/Vd2Y%ֶmҾ}{1 tYa֌׏;wlٲ.]w߸qVKZGٻ/fMn*iRRyKٲmj&e5Zin_K%5A Y2|?s>g<{>s>Gڋ(Nof+[uV\|||7xM@1b֭cƍh4|Ae`]v$%%sz)///l.KKKC<())4TvvviKUV̟?8ƌӉ#%%['x֭:t\]]kl#j"1S{sU}V+aaakj́qM@>|8111ݻxҝ,^ٳg3`Zjŕ+W {v=z ::?:pyfϞMqq13f@ӧYd # ɓ'IHH`ĈtzlYmΞ={3gs!88Xe^'88\S!Psjo*ڛϝ;GTT\|]vѹsg@QQ*sp\*P===8p ~-G_~DEEm6n݊FחN:ոcb2ؿ?۷W&7t:߿? |7hZF#3gδc}kתә ‰'l.j6.R]!P/c) mJ煍vYXU7omۖ|l\dddC4._˗vEܯP.7W!PCѻwo{9"ێ9ĩָԕSݹU-[״ڄB!-O T!B*Mj B!n-QQQA8 !BUU!BB!BU@jX,g!ղX,Nڮj)..nĈl9NH }lH*IzzBjWz0͍mfwwwwH5[u%pH@@)))L&&*Płd"%%*#55d-X,$''seTWs n=J$%fZ1LdeeQRRpBj$00^_za6meZ777|||pwwWөָ _ܪOU!B4 yԩB!h@B!"B!P)PB!H*B!TDvvL!Pp0 ծ[>cNNSsrww'((Rj9ڜ[u!L H`` >>>ͅ& bNJJ ]vEU?hۻY,222HMM%44TٿZj$ՍVUdTѠ~۵Bd"//:\~ hnBnn.9U?j:"BjUl|||1"ۼQ~Wk\́QӹUWR e!jeC9NH }lH*B!TE T!B*R !BUU!B@QQ)))C!^Hz^{^xa믿;0wѻwoZhAxx8_}UmڵkKy5BB!u/{HYx+׿_]i٪Uصk{}PPPP/(,,+=f֭[Ӯ];qzGYYYl!$&&2rHxٱc&LᆪU'""#G*6FBmIЩ1l<;]h'ܹ"&NhqՕ#6j$ ƴbŊz-/_ΡCx5jW^̙3n,]^Ϯ]'""0.\l3!ĭm[b>; H'޽&7ݑeoq5&]!77#0szfS{n??իW{6999XVڴi !CʋSh"99G=m$٧Y'OdÆ ;w777SO=E-u˞={|2yyy~z.\Hff&}ϟgbbbj#77-[ָSX~=IIIt:vʒ%Kpqq^Lii)ݻwg֬Y>رclܸ_~OOOF͔)SpqqYfjQdeeѣG ٓΞ=K>}*\v~`q !D]8-EjmѣG6l~~~l޼>_űo>f3mۖ!CO(OH84LOѵk*J>}:fϳl2?tiiiL<-[RPPPߟ (eˮF#C=Vٳgy `ʔ)hтl%VZ1`|}} 66ŋfǏg3pibbb0 L0bquufLիxzzVxudfflOhh(111{h4"##Yj'PH70ydè|p \¤It$&&}vΞ=[oK5Gm$٧EEEL:C`0̊+8|pACՕcǎ9UVtv &::^{ ֭[Gdd$.]_駟xm7+++;l… 0R, ݻ Z57[euBBBذa!!!lݺB5V K)U|e˸qh4?~\y>#ˑ6dzP5Mb܍EgAqcVrٿ?sqh+ bРA=z(/_ʕ+۶m[eSNqFΞ=KQQ177 66X74ш ^?qZBpu\\\ ĉ B8dbiljL鼠렺>]v$%%sU9຺󉋋c̘1L>8RRRKt NGzz:L:HΝ1l۶d>U!"1S{iiiֱ7_rVk#68;5 22^z_|Ν;ի!_ػw/{?}QTTČ3jV}i,YB~jrI1b2駟f̚5ŋ5k;vDCFFnnnJF# |嗌?/^ٳ0`Zʕ+q=w} gϞ=̙39sLll2P^`P bǎ\x@>}Xr%Ço8.V6VϩyGDGGҡCΟ?ٳkWΝ;GTT\|]vѹsgk䯚ڀ8{55<[7`ӦM|AXX2ŤI_ٹs'Ǐ_~DEEm6n݊FחN:w}2dHckZ-'OڲeXlY%ibXJռbya]ַ7ύ;ɤ>g !:t޽{\Ͻv%N ,PS$՟έlٲ?p4SB! B!Pf7U!GTTCN =B!BU@B!"B!P)PCZ-a!D,KkZ1"nSq5GCR xzz0ZCMlqssl67bD jWk\́QӹUWR doBձX,L&RRR r=???RSSINNv2Brr2/_Oq5sIRaVDVV%%%G!ZOOOUWZZJ^^fF[jqsswww1j8{ϭ$))PB!DG !B&I T!B*R !BUU!BB!BU\h1Ldgg4BU) ' P:8e:'www*ũָ_͹U2͔pHqq1\hBP, 餤еkWt:]Fob!##TBCC5@W{nUEA _~Q] !ZL&С.\ݝ &)))긚_s*2hP:; !/YYYU.ǧ#ۛwH5[u%pHII\B^vaiii/Q6Tk\́džB!BU@B!"B!P)PB!HD0B!M믿;0wѻwoZhAxx8_}UmڵkKy5BB!u/{H E1rHl.߹s'Æ ɓuΝ;/j[XXȆ ~ѣ6mZcQYYYm1%&&2rH\\\xe„ :Ts󉈈 66Vy')j!p̶g7ɁuɱH业:; 8ÇCVZ?In괟ݻwĉkv:txQFqUΜ9&7vҥKڵ """ c…߿v999 8С!pmIb,tj_\X.iٓcőeoq5S}z9x`577#G83877#0sLĠfwfYz5WjjM6B88U*Rst$Fr}T_vmۗ#GPPPmݦ,;|0%%% 4Hyرclܸ_~OOOF͔)Spqq`޽ٳ˗/ׯѣ 6 ???6o\c|lٲuO:IJJBѵkW,Y Ǐg՘fJKK޽;fͪ9սRf͚N>1JVV=zzϞ=)))ٳӧR 8kׯBԖڊrQ&Vckqqq۷L~~>m۶eȐ!<;9m#9>/P ڶmK8~8 , 44gyӧO``„ :t4&OL˖-)((PN&O @-h4O\\^sܸqtԉh>L=9m#9>MTt=zzOhqq1<\pPZZbbн{w`y bݺuDFFr%%~|Юٲ24{߫?Nk||͟}VVo aÆ uR!wM ښ/;Xqơh8~Z}9ylk2wIPP?իǏgƌroooFms:Uj6AGۗbX}W5l6ꫯ¼yPn15={/yyy| 8PŋhZnv'>> ]!j"1v IDATӛݜz[\fZǧ~#˞67g[)PFuظq#|PYf0h׮IIII?՝[UiٲepM5iB!ĭC T!B*Mj B!n-QQQA8 !BUU!BB!BU@jX,g!ղX,Nڮj)..nĈl9NH }lH*IzzBjWz0͍mf³Ws ~tnՕ!`2䛨Bu, &\ϏTb˗S}\́䯺ܪ+ypjd2EIIBVӓ@z}땖l&77iZ]yLZj.$9s*>IJ T!B(QB!IU!BB!BU@B!"B!PWg bL&2MBUʧ `0Tn999NݝJq5@jsnՅL3%R\\Lbb"84B4Bzz:)))tNWz?3FooF[fX 55Pej9U7[UyPE_oBV&<:t`s pww' qIJJ :@Wܪ̃*Tvv6C!KVVV˳iĈl&''G]q5GMV]I*RRR"EcXZZZK 8Ws ~4!B!P)PB!H*B!TE T!B*R !BUk C;zM-端j6B!DC(--eȑ`2*,k׮...~͛H&͛74 0zhWܹ"&NX/ (((uDFIXXo6;v`„ |w߿!lKZԐNaLF_aa!_1ʹnݚvs]w]Xp!{,??FX5[Ml6cXGƏOff&-"66۽{7'Ov+VO>nK.E׳k.^xkF# Vܑ6Blےٹ/.,c˗}vvӹϯ0yW ~~m"""l.aL8Q;9I2j(ٳgyfƍIw˻EewfYz5K!p&徸 {Rsss9x <3gl}9õkK/D=X~}999XVڴi&SՕ>}p9Ҹ8y$6lܹs1x`z)ZhQѣG6l~~~l޼Ǐzjf3tޝYfUxv , 33>HYϞ8bcc9pW\Q A1c \]])--e֬Yt:>,Jjj*YYYѣ={gҧO:BgR[qZ1\ZlY㺶'cظq# =)S(?qqq۷L~~>m۶eȐ!<JTC˷zR-ZĎ;*-\v~Xo5 33xWСӧOl6_sy-[V3$$ɓ'(EcV0`dddŋYfVǏ?Hff&SLA?cݙ6m$''JII Z>ņsU<==+޺ukum#΢\CFࡇ2WʟǏg3pibbb0 L0'Np&MN#11۷sYz-\\\$_|rmVe'44{=4 Z IT&UfggSRRBVV?| w}RDGGᅬ` 88+Vp 7شiӆ￿tB.] ֭#--MljG۶myG3f 999gڴi ֮]Fir)@YYYm pB8ڋr Yh"xwٸq#ƍcرzUmϵkquue̘1dff*7ǖVn7n:u"::Zɩ /ѣcǎrnݺ@RRK.e͚5tؑsK&S_v{ɓ'3ϰeL吓CRR>R :WWW;Vqw뵫kaaa\r ?]-8P ++ _h]!3赶{H^#((uɥKmͅ 0`X,, ݻw'--RѸqh4?~\y>ezz:6l#//<3Wj†  a֭ǭz/^ oeʔ) 3Z-^^^JSSNqFΞ=KQQ2t8;eee(oF#^^^$$$Txĉh ui#01eFcSC^gJ WWW ĠA8z(QQQ,_+WV&//~?ỹzOOjغطo׮]cʔ)u҅?{28qDu+i2FW^^ӧOl2>c rY>$KyMV*:f3*!!!̛7N:U=[nV8SӥbԨQٳt|}}/dʗ/ji#j"1ӛۗbX6󧷷7GfСSJnn.>>>7tP>Vd  ^|EΝg}SO=8pS*w۷}ݧ"--6/]DQQSLﶹ_[nV8쑖Fi͟?8ƌӉ#%%EQXXHntZc!PQQRRkr";;`]v$%%sꦢ`Z+/}||*m Rw}7FSb4ܹ3fm۶,s׃&Yu] 8XF?K < vI^۷ҶGDGGҡCΟ?ϴiĐϟO[fϞ])6{IQQ3f@$o gϞ=̙39sLll2P^`P_MmBmV6VӧYd # ɓ'IHH`Ĉt:ŋ={6 UV\r0e?Ν#**p._̮]ܹrӱePP;vŋ ʕ+>|x9k*@DDf۶m̙3pCLL Zcb2ؿ?۷Օ7xM6S\\aaa,ڕw#{㨉Nh4tC rӼ}k0gڷo@֭jpq)++ÃSϙ3g/(,,dɒ%_}sqvB!h@ $00ӵk AAA׏;Ν;y'Xn'N 55<<<ӧӦMϭgv˗Z1|p&MKLMFZZ&MSشiҳgO"""~z ++-Zн{wf̘Qa˗槟~mC1m4B!_?z( Nb(_|Errr0a]tjSVV{Gqq1Pۉ'-- իWvyBN> *h=/KII W^o'--ϭŋvVd֯_?O?s璐@QQ̞= e?j%//Ç`ʔ?+C#, 9B!eee|G2dmƇ~H6m?Ot:N:şg~'x+m󩧞"..8 P\=ׯgŊ 08ovJKKE`6+-1bׯ^Օl6mdVxXf 96lPnڿXLXr%%%%k׎+Vh"Sz`o4|p֯_^t'OpU~7^z%vMLL Ǐ!B4 v+/_ --+WVX\On:;ٳMN[j۶-AAAJŋ튳>yzz*19soFy~nU$ J^xK.0m4NL ۷oÔU>EPP&MbУG<<BCCO6mڠjt֫3Y핞͛7s)>̞={fmzKKK?Ann.ÇgTB!DTV˳>˛oIff&ofFXC'dO?-[2x`.\sx駁c!MƘ1cIMMe K}'dӦMdggGUX7oKGȑ#b(/xܝwީ\RO˖-m 3 ?<ҥKIPe<\xQ)o燯o%Bũ*A>///tBqq16m"//eӧb6پ};O==Jr)|РAcRSSxzzrӡCz*O<ݺuoEϞ=4iڵ. k׮CǎyꩧԩSEޒ%Kؼy3.\-ZD=Lmѣo67n$)) V]wEDD~~~t3zs(,,ӓnݺSOyLB!L߯PF"_!kٲepM9}~!B!n$B!PAOX/BqT!B*R !BUU!BB!BU@B!"B!PfJ4 ŘL&)))qv8BŴZ-`0=9jsY,L&999~\iZ RuBjsԅ?~?Ym,< ,uU89ٳy5j}WWii)>,gv}1w\{SSSʢG=!={gڵ{W5cO{egtvW_} 9r!C0d&OȚ&ӃZVVFfffZhmVe`iѢC=~8 , 44gyӧO``„ s=<DGGs{G^6lXc9tiiiL<-[RPPKq+%%%hZ޿W^ӳ嗍233cuD{6'r5O׮x1W>١4;5N+G)P*}38q"3f̨M6m1Zv-~~~,_WWWƌCffr>K||p=X,wNBB999xxx̙3y7h4̜9???U>L8_6mɩzVVpʞuofzڵkhv+}:{ic.Җ-jՕwߥCδSZ @?3^OTTT5Upw7>%66rz`Ν;۵}{z.Pш =qZ.]^: 1l%{ATɱg:"} \ZpI(=uh{ j)--6=z4Cr9Uh۶-Zwe͚5jcmи\xVQسg2b^^_~%TgQw՝́{[)S0O!lk6wˋ:m`0Ю];ҥ ]vS>Ϝ9s;w.lڴXF#.\ ??AJKKl6*,,[nu]Xes5ƌիyGHII7PٳצN/s˖JK 稏ZCl =zosN}DDDٳ_Ν;QZ|' :ݻӡCqHMM6~Ÿ'>svə3g%"f̘Add$%%%~ߢnz=tYI-<<={`X3g)))VyΞu9_:9VksՋ_w}WzTI?vXL&ۓ[i׏(m֭[h4ҩS'+WNi3e˧~ʂ k׮,ZO? 6j+!Nh4hUX|9˗/Vɓ2dH׵w{צD[<Jy.]7|@Qr)g! 5h$BT!>>}xmeff*wd;b9t{v{Sw95RݱϽ[6Z#G9NqJ˖-kZ !M=͕\B!"B!P)PB!H*B!TE T!B*R jX,g!ŢLT(9#j:Z-ōmM%NN7:R $==a&&==渙{5{nnnx lݽjSSMO]I*T/ L&fY,L&)))i[rڰ#55ޝEU ð0KnaKne.yZֵ̼n^Q\5E%r}PA@ܐmdF93fyyY>Rt`0ڮIR&dffIBBYYYbwwwW}mOXm/;;dL&foWz=>0>IJ T!BPXZ)~!BaU@B!VE T!BaU@B!VE T!BaU*;!,;`RR ub4 ԨQNWd[Y׶MC$뺼0Sꥧ/`4*-ÕNll,e]>Y׏Y׏K׵%dTȸ~:Tv(nݺl',pGLJGq2xd$&&+; QHJJ*tGLJGqd]?>[I T!BaU@B!VE T!BaU@B!V+PҸuVe!BAjjje`u̞=[y=uT~JH!0N.]ׯϟ쐄&O̸qJ? &TPD6{W_}Ŏ;5k-Z7?''' 2ydN>]|VZU億Fܗ8'NԩSaڵ1"akײyfQTSN:wLNP,}}۶m#--X4]Xٳgo>Rq>ZǹHNNF]TUVj5nnnԯ_@ڴi+M=qbȺ/MݻAsW}Ү];bbbظq#]vA8;;rBCCRZ /֭ 6o{֭[2qDbcc9|0fƍ%/$$^oStxؿ?nnn_`.*d"=='V|=W_}" Yuܻw;?r֭bRJ|䣤{9/_fƍ/Vruz_tӢE :vXQ Kѭ[7!C5j;v(q*DAn߾`SʧhѣzРA;UVѧOJ=!Ǧ2dΝ4mڔCo>~^{MF||< .T?UV믿 4`ʔ)h46ml6 /oY/'N7oN=4h*Ǐ0a^~e.^Ȼĉܹ3ǎSo0Xz5GF3c eYlٲPvΝ;!99+PTEƕ͸qj|WE~O&88\\\`Ĉ888(m6mDXX&doAѠ}v閬;:uEN 6g{.^^^ :ݻJ*W9#Ǐb _zbȐ!JaEDD]Ύ-[ALL 5kdʔ)dztRݹsʕ+dggEÆ h43iÆ ֭[СCƌuW\ƍ{T^???6lX~\|ɓ'СCqrr,CdU󱳳#0086oޜ@uqqxObb"$&&r~ZlG,Y;-SO9s&Ojժ ^zΝ;a2339x Fо}{jrӔ%f3.\ @R5"..oׯ_m۶dggNzz:͚5$%%رc9p֭_`0xyWj87IIIDDDK/)@.]j?~ZMxxxEqpp`޼y̛73g2bL&cƌ!990e5k шd*U<v۷}ڼy<ߧ:ݻw޽{ӿ^u[y>ۛfΟ?ONJUOƖxǏc6iѢk4h#G{.[䐚Z$'''ܴiSsGӑFz,_R’%OvgFݝ"oooҏ(?͛+[nMݺu:u*wV֔vۄy988VxDəf֯__fYO=| *ݻwg kss4KljM`ѢE,Z(ÇөSb:^^^ѣ8s,XOOO/Xxr3F!;;;/NJKwww7"11I2331rT!,66D뮰|-hzY~(^?ۥKBE<jZq\pYf|cƏO۶mqvv&..FѲeK233Yt):uRnj0`7n{F7oNPP_5kڵk?ݻ{GpttҥKWZZo2(U>Ǝo[oE@@&m۶ѢE ZjmDDӧOI&BET{ّ#G]6ߟ%K0|ԩիW0aBKMʓ֭[Mҥ #G?dرkbcciҤI Rv{x7o΋/Ȇ ֭F1_C2g{=%$$˒u_0/Pߏk_Н;wرc:tݻꫯR`/EHH/`0M|||ܺukf̘uXv-jooo֭ ֭[3Aصk˗/gڴiՋHưZja6㣏>b\Rђ;Kb4j}&MLpp0ٓ#GkIjjr4}7N*g{{{̙CNNT^C2`4wܼy0j׮MRRRKMʓQ?d]駟r̙Gzֵ%GkgGPہ?&''_~={D*!B\?#RO\|ݻwoTvhǮ@MLLdL&^:GVB!(NBB{d2E57n\y ^zѫWC̚5CBQ޽{ $w!B"B!*R !B"zC" !!Qܺ.OR "Z}DL&\]] /!!Qܺ.OR g0&***sʅHOO'** Cd]>Y׏Y׏Kuy'I Mrr2& LVVVe$JH^յʺ}kKX$))PB!Cai*B!UU!BX)PB!UU!BX)PB!UDzz:$%%%BX9F+5j@Vr[Q.+)PKOO_~h4RN+;$!DӉʕ+BKs<)~a"##1L`ooFBIn a[, zCQB^^^$%%:_r[T\n)PFVvB/Rm!lSq]@B!VE T!BaU@B!VE T!BaU5--[nUvBXɇO>saMd{,|F)POٳSN߮Ĉ.{߾}|}l߾{y9P~1ԶmHKKc%z߃MO?֭[quu7۶m̟?sOz9`y'HZ7(PZ-oV;wn7}Ү];bbbظq#]vA8;;\z)PŴZmgTR`澌++搐z} T!x9|0GK. Ν#88+WjiԨ~)*JrLC|||iy(O&..W_}V˗ٰaW\Q68uӦMחѣGsEVZN_~lْ;DVpuue޼y+)@8pwYȑ#ܾ}Hjj**ظ222Ύ,4M~QyʒN"66Ajt̙֭3|0Lݻw/ӧO3i$ԩ1LlݺΝ,СC0dȐ<_F>#+W3_~aĉT^^{ NGbb҇m5--M)rߟ7|><[.AAA=z6mڔ*e˖a03gvvvٓx;1cgѢE<L&fΜU*׻}-Q\:e˖V8AS\ `̘1kCݺuYt).r[w^gŋ,XN@ݺu={vew 3/))),]+ץdYJΝ;UVU___嵃˖-#&&XhBThժ8p@)PSRRwJdU󱳳#0086oެ1/^LժUYdIEmޞӧV ,00`N:U511ׯ+Mzz:͚5̙3$%%憻;cǎe֬YjƎ`(SWj*,Q\eχ}Dxxx}oHJJ"""B9K.̟?Ǐٗ_~IBB9ZjҤ O&333iаaCQ,ىZ-/{QN:t ^z%>ڵk 80>y>}Zlܹs 2Ģf TZͳ>[}NRRRޟ ܿgӦMMBt:iiiԫWϢU*UX,I\6jZlY}Cbbb~M-NOOԩpc6X~=ׯ~\}Pn^^^m6SVLf3zTM=zЩSB,XOOO/Xxr!F)0aDȕe+wGgzVVWy֭[-+dΝ;L<3uT9ܻw^{УV̅(Э[7-[Ɗ+h4yt:jժůo]a 'N^zٳ)PF#gΜa֭ӧ6W^eƌ4nܘvAzJ}#?~#/_ʕ+h4zn.)..VhDVؠʢ <7nm۶Bx===IMMUl߾=ƍ+W4iNpp08;;ӳg3-ٳgرc;vLVٻwo.wܼy0j׮Fa̙\ 7V.13aڷo޽{ 7M6̚5իWfT*{0 ygOoCNNO>$TRErY'j}#I{p~a;K|L?3-Z(pvQVEvQGk'΄B!UU!BXG<8YfUvBJ$T!BaU@B!VE T!BaU@VOѐQa!J(==ȇHn a z...LCQB& WWBKn a zhHOOpHOO'** C$-vyxlٙڵkc2uYYYjժS$-vyUX=ZnnnIn ! #B!UU!BX)PB!UU!BX)PB!UMHOO'22$F+hpuuFt"Jn a;Je%z/Fԩ}e$(Bzz:\r__BsVr[bin9/^dd$Fف ah4Yh;m!l]@V/11^_a!JˋBKn a zhCQBE^W*-m*.˃B!ªH*B!B!ªH*B!E$33BAZZnݪ0 jΝ;G^PM:~;O{2rHzpUQS2k֬CasvɌ7#& Ԩ(:wҥK mΝ;sʕrYfZZZ*/^g}h z%^ɓܹs V?K_0{lCttty:t ,,mƍ3b< QY;_+˃9W<lQ'pzWZjlڴ ?sE;wn9pnnn|ٕ۷/ڵ &&7ҵkW4hsBCC߿\M… 吐z= (Uj-+#qqqdeey|CBB{.PJBGv CS{=zУGڴi2Ce_j,\CBQ`GPٳ' `„ K}]&Nx1իW3zhz=3fP̖-[ `׮]ܹ1 XJUd\ٌ7VW_}U[T.GGG^u͛G˖-i۶mmO<ɂ s999 <==ԩz%KGf˾' ᅬhdԨQjnݺ'Odʔ)1n8.\@pp0:W^y?eQl@uqqjժtЁ۷ӧOT*۶mUVԨQ<jPP^^^̟?_x|IΝѣGVf͚|ƍ3ubcMz駱Jzyj5O?t>e˖a03gvvvٓx;1cgѢE<L&fΜUR^^^Kt,[ Z-ũ{>|8sͷ]Wyeˈh4^xT1t %qcI.^^ς }dݺu={6γ(OOOܹ3nݚQFеkW9|R%gIJJw)%KPZ5ϟűyf)PmM\a6qrrO>ܺuǏse~Wܿl6ڈ\(ީS'8qpy|-i.'''ZlѣGiϟ~D_N۶m&==t5k۷IJJݝcr֭[믿`(,qUV oo C<=zT9^6l@|||EWiȗ^z)>K.hZ?^e:88PfMn߾Lsrrh4b2 |OIsOOO8tYYYʼD]F쓚7og$lMAMIIzѸqcv؁ k橧PN=ʆZX~qW8|0 4ɓٳT}%''i&e绹otQ^=WTC$qGC֭ `ѢE|;w+W/Uvvvv,2xg i味O<~);/>J*%uzK.ާK7aSSSm۶VK@@2]ӑ/P}}}ٿ_s{!33^iǞ={u `FC`` {e޽ e\ӒtԬY6l_ѣG9x .&M"::oV#ϩ\Fׯ+]yur *#Gܹsyܻw^{mҴiS6mm>>>-YFGVa۷o_}ݻP(o噳jbƌj.^NVZҨQcƏO۶mqvv&..FѲeK233Yt):uR.D0`7n{F7oNPP_5kڵk?ݻ{GpttҥKWZZo&M6ɍRݻ¯L[.c2pqqڵkyϒ%K?>uիL0={?;E9h2}|| e BCƎKvpqq!66&M g*\y4nܘO>UVj*޽;#Fٳoٰaٸ֒pqqSNر %Ѻukf̘uXv-jooo%)nJ\\ÇW3h v˙6mz"22{}f裏X|9+WDѠ-ۿZ-FV+-?BT*??LR 3gdʕ,\Lhܸr:wܼySybڵIJJQFfҥ,_F7۷/2K9x`nܸmۤ@I&|3={dȑKYsݻDDDFvv6ժUcر mڴa֬Y^5k֠R0 ߓ!{ 5}tT*}Qeb+׼bϴhѢyBخr(mŵ#dggs N:ł *;$!B!jذaO>$3gΤVZB!͐|וB!͒VB!UU!BX)PB!UUX=FCFFFe!("!-m*.˃깸ȣRA& WWBKn a zh<3ZaӉ"&&Ph;m!l]d)a]6&[nU! !hpqqVZ899Nr[bin)PSոV١!ʑ0r_!BX)PB!UU!BX)PB!UU!BX_؄ "##ILLhrwww|||tEMOO'22$m!FՕ5je%z\|իSn]+;$!򉏏jժPs\Zv.\@Z-'fܻw/ҤI ˷zPzu)NԨQ mNCIq* PJFFFV*w!Abb"ޕIHH(t~bbiZ*tR %;1!l}וfggRbDBV+q)PB!UU!BX)PB!UU!BX)P+@ZZnݪ0 dͱ !KJJ 7oެ0D!u޽9=z0p@.\P.N>ٳgK_͚ch7n̶mۊ}O͚5QTy%4BئokVv6$իWyfRSSQոS~}:vHJ5Lŋhժ'%%իK999y^F|ݻwY~=d2QJj֬ɀxꩧ*$6!˗yiԨ}}iӦ0b^~eeo-ewܑ1_~ɕ+W ׿USBCC1cNNN%bgWChh(zuΜ99r;ҭ[7O.]T a.ryIDAT-fΜ=;vZj1FwBߗD 1K-eFb֭ccǎKXX[VZ8::r>GBvvvtMy=x`g}Ƽy:ujs‹SKf:D޽;vle#D K.TV WWWâE0͸{ORRE>{ޒ~Kl!M* חgybYGuVJ;vԩS޽ԨQCw ~7ѣ R."""Ν;+9{,-d2Mf7n>>>=^ό3eBCC رcʲ W3l6p+V ""VQT:u Rg͸qj|W&DiEGG@Lʕ+cccؿ?ݣuy.ױիjBXK.BTT...oߞ.]Rp-bȐ!%+׮]cܹ :VZ/IVʿo><<<<طo_8z(&..T<==>}:*ȸJ_eܼyGGG}Yz暑W^eQNƍWϟ?ϒ%K۷/M.P~{nÕԩSL6 ___FŋYj:~)5kZ3m۶ۛX6mŋ˔Lg888o4V[lLJ^z Fݕ+W? D%_gATTvvvdee?=*U_RRReժƯ7ZͨQX`jڢ~s/*鲅/_f…ԩSsuoߎV% &MвeKlBӦMqrrbڵ*)ܿK.%z3gK.t:ݻJ*6Ҹr _5>>>у~Gn޼o~wKz=/2$''/dŊmVS+ajɤL[l9s`ggGϞ=WnzBvװaC6ltsm_iTZ5߲JRG1c իW˖-jժ,XBYt:-[ZTTn+bӦM|2̜9ŋSN&MdQ]b֭xzz;`ggGIHH`Jտ.]ĦM0 矼[yqss駟.U tرqԖ-[R &MBk5kpYL͛qww/6L,Xꫯ*&Ql@}pǒyW&==f͚qpss @ēO>IPPG!44`BCC9s&O<f+GNUEB5hfQׯʕ+9z(k׮eҤI[.>}XaܨTX,MKrr2tԉ222hР+)))8;;€XbjW^ykV\%;vi׮]UV_K.ѼysRRRz*]v-8MMM믿ӓ7x}Ӫ|;^'MشiSE.\oʕ+)mˎ//ǎcƌ̙3/Ryzzz:*g%Dy2xxxp̙Fsf(*Fqiuuu-e5zҧOQ,550 [j',zrZr?GJJJd6ȨB]ÿ䞒Gt)_1LL2ܐIIKi4 }YHJJĉf9r7ݝÇsEݻGTT/^$!!Aɳ'N, Ν#22GGGnܸ_jըQ… Ύ;hذ!={T>}ZYO?j:OF4Cz Ҋ²03g\,MAt:ϟZՕz1i$M[fƌ[kעVnݺE.J*_oeɒ%dddFFX裏X|9+WDѠܡꫯB>}իjl66ˋ6mph4FƎK=vf͚5lܸԩCJJE?[qVh4j崇x(:t\? kqY0<,q#" "#DJ@VDD% L1fѠ< r$%eqttZ\r}H3jT鉑Wajw 677cii)4#ڊȲ,_tbcc?קcrr2VWWRDRB`TNFį< Bz=؄{)\]]h%ZB8;;KfEJ?jnbj]O) ?"qn$E@ )*IPHJ,<Ͽ <,{Leqww>߃Jb4ͯ.xf9|7GPIh4~((%C6(\2T`((%C6(\2T`((%C6(\2T`%:V.@2ꧮ·9BOQ їn7]Zz$_dws搭BJ{׹P?gX\\ܫKKK&!]@_NIzL08ɼu6ů OF/.?}?q7%zێ}dq$~JQ.U lZQ69Zi PFFrĚFD@/B}+%-MU8vd7@~mp lS=lдj_\<̭7"f07`&;Gqhj6&fsSZtf}{\&Hqq1?+y ni\>[f~.V.ǔn8w,]g~d=G^93htd#BT*ߧk9tU?LA˙fo'fZN8mcuxCt@/G>\r4yG8yFp73+6Μ.ͷxsևFBǫ<$]xrkx.MǠoԝ$ok8Ԗ戯 0i:k^-ݘ=&786 ]Nq6Pɸ!'p4`Pq>ѐs@ KͶŬRi$k֜HϏ$^`降DfYXeY3<d!izqMe͹ٳi3QMÓJLHC4f]OFK/8y9k?'ʵIt zj5M~,Dp ^ J՞-o,b9d{$p2:4[I͡] f9d8-wa /=8SݱWZlrgl]㢏Nbu8a _L2uqjvƳK8>>UL"~Nֺwf;s]Lv%^\NuM;0 ̛DBӲpCD{?WoCrΒQ/ :Ғr--3]dq\srZ ˮ3a\~n~段 VZcMjސmm'Ͽ5-1"yӮNLOj9v]-NjHgر4:.'#(vn !HG8I.Sy:ÖcJů?-6]K9P)ɜ?$7ws@9ءq:8AؾEL֚Ag?_?vEcN_~ׄ϶8wo%R H3!l'SXڳP}zO%R&~&`?g*{OA.quEH @t:l,< 0 ;^~ y8p8BڤaLB!n\7>B} (qN\Na FO@ڜX[mEU)yzyi:m`Uqr+nZlZ䍛mpR*j|*2 >!~`Z cÀ6iY`dG@ J'!~?]q*F$X< n溩yكz~!xBg_fu Vܤg̑lx|8]󧗙0 ]R3ad(HHҫ`r䶊,}^O /OcKQ茁MivlNSqM=OR?OrSjF90D fX iJma=qxȞnԡH$j`eF|+^ն4qyS(e_o8=VSOߗt% Aj}j :ތ"r(_[lZ8'ZQTou)J {ٷqKkز7L'y(8m k7%DLxxe6ެa̾EQEQ."W`2KgNr0遟0|'CQE閺SOQEQK lEQEdFQEQK lEQEdFQEQKQ__O}}NEASUNʥj; %.99ih˖-꩜(\LBGQRR6_uE)(rqn lEQE( !m<((rɸ~RAQEQK^FQEQ^)Y)l4sd 6|'CQEQrf0X}m,zm=m~W y]i>9`iREQsg l=pi7`p8L]]]y_0PEQ"OKq3e^gDg;j:ObMi7EQE9/8xX XmA%-\.4kEQEQΩ3<{y`ѳONcR\\cuNHO ê+JQEQ.=ݻAåg%! <^PtEQEQΛ^=Ǧ[?%wJHO Ê(\4IJe \l{`::oG0EQEQz#vZ&O6MG+Ea9sy((S6~ dEQEPEQEQ.T*QEQ咡EQEQ.*QEQ6xX[P((:1/j˹k[@Br^p8a}l\\ӦM;)R.%_?~@cc#L:i:6--1ckO?4_җp\,YkC 'ldee1rr:fm֫tck=˺Zr?a̚5 >=_^H ˘1cf…ݻUVqu1d.]HHHiiiܹ3g"kw.ύ7ވmۼTWWu]G0_&tSO|+„ Xre'OLee%ǏoKOFF[nk)o&++իWc5j̛7o32nVz;/۶G}ĦMMW\ABB}>].7|3;UBtwjO<ɡC:]W]~=r 9?;s= 7@rrry8q"gf׮]펱V槻@G==?|~]Ng}QuuL喔ȑ#Yn];wۯ-sΥ˵ MJJo`m[+_^yVZł 9r$}. ƍYp!w_2SNEܹsm:t(6mb?[@zz:-"%%|+rn5kp-0j(}y.r-|nKӏ~#ϟעS5{XdxꩧXx1&L{Eǣ>{ܱ~K|k_###_~}kݦoҤIٳq:Ο`ժUq~z&Nt]o.Z=]c^y啬^@ e˘6mB^RSS<-3g'$''?g?k~W/<Й o~3.ZFѶ]Fɯe[;׋Zz&%%i&n6&Nțo^kz;-[LJ)%Ы#F" + IDATFx$ _gy Y\\,<|$ MӔatzHmO$#d8&Mv{#GQFr)n[ʬ^ߧ?ivڶٳgcǎ1ch4*Y$i+I&ݻwq?Zϟ/7m$%%%uAK@N0AܹҥKۦyo~z]:ZM7$_uկ~UnܸQ&%%uǷ+o}[򩧞j[RJ.?rĈm{'$Жwb~l2YWWׯǏ >|`0i8qŋ|#F0|֮]mݻilldƌn:N8RSƍ׮W^MFF TTTpȑ=V=ϧ$#FvήwM71gƌwvkvסPy\fM8tEEEmw{it]Vݕ[w:7˵ 7nK.m^lYw_| x7{G2tPDX|9 .4^oӲv] 'z饗?g>u7YDp8mB4Mò.}?uV~_M>}@T˲uǓזަ1vX=X몭mWmͥmOw:v9vjtwu}ʭ#'r?`TgZ|fҤI[<|nj?W/ɇ~~3nܸ>os͚5zm˭ފ׿r]wqWo*֮]'?I<~;{i=[k֬aɔm6 pOi={6iiiNn_I67]own}eeeA~aq\WǀeŊL:l V/^ܣr;w.@6v8>y/:ۗw&]'rFr?׬YwV6p|{/^|%%%'N0o<ΝK]]/w_ŋrJ n~u_|;3[RUUEss3hKMM ֭]/_ʕ+ٱc{eĉ~ZGwyʕ믿֭[:u*${窪*~򓟰fmԩS{T[l>`L6~]>m~tz8:ۗsyyyϴֳS}v3m׮]a/_Nss3g Ε˵[yNvAEEi cE}ٳgˌ @Ι3Gj^+ԩS6Ǎ'Ǐ/ǎ+ov9un߾]Κ53鞭V $gϞ-SRRY.g̘!nw?]:{湤DΛ7!--MΙ3Gi&?}9c]'e\.5k9ry{.3W!nj#Ǎwk_gbu6xX,[L.X|(**{P(OŃCөkBaR=CԛQ!?^AYU#ҝM!9;4jOTvjͷ| pjHI{F)i|>d5qd5G 㓰A2S8|nܺNcCcǍvrj.&5%̜~ן{ۅ%;;#GP[[G " aht]'D"hx(..bXEmI,3ˆ#4Mn4zC`[an)I xX0f1.t]'==vl߉$!΍zE1.R`mODž!phwHM~@Hp4B koa`8t)1|4/*Җ~B Bha8iĮGy475HJJJFƦu8 ۲HNI- AS2d(%il'SZZʰaIKN`oxp::qMБ\*rZŜ 'W| ><.YYY1rpF[2S E"74ģ;8  Es"1%#M9p㑚AM}uMn' p<7I)d8eG]3"qP[EnN6Ho|!Q+? NcS3 -L#)1lƆ::|Y9h?@ =v\+' b=RGő ,'RXύ^OBBյlٰ_'j&&??I3R $%&`O7Fic_T d } 4tAԌ H|͵01&xj8a 555@uBQ kqD#_MÔ+np1:.w{bh`9v۲h"Qt MTVh4h'9)ĸl.>iᐂ$NTG`Ԉm.'.6=8L! IKKÇq B0Q_gcFmj&1KzZ:iidq )m[̝3={&VĢ[j$$x ` ar H2g\VZIMm F7?z}9ф0E]ljmXiDfl'8 Xi XmK&BZl A61X&b . XˍpM-`:&O)m\@4 "H4nha Tt$Q3 [Ja@(@ EL `۱+}=ضcA%2tk5- KJl2MNÉ-ЉXV۲&p9 ((X4M1j Lp`:BXؖllKC4j4 @`6шmpi-FKg۱@6+9]cH`R8QE~nGfP "fSRxgƑBSS#'x77y~YΞNee98>X+l L8 ͍`ߡ#7?xT kbDN>)7-^~20~0N:NV-.3a C !+/#ǎRUQIsm ƍhHIL`Pv!7wo'N֓p3uhJ rq("'A,[R[߀W# rD%͠jc_Pl{GFZ;>`&5=abO`B-אNCp;XSICm5INC2hj犩L`(HČNeE9 \sŭ޳`4ʾ0mINV6m$ &,k&%/ƈ;8~AYdƧ-}t? ǏA?eHGO*#FS~cG+l _ H$Fc-8 }+?`& L#5FC3t=qD,`0@Cӌb4%n tkl >/KJp8w0&`p0tjkjH󐔖AJr 9CAطfib84$sj(BCh5v |Hlx@'$f$-=xOPWs)m-9^),Mө4l)mP$5v^3# TW0m]x_afyL)P@eoy^ S[l:V1BVN0D )v2[MTSծ֊2.eiXpE)B%XCY*7w[s%×&'5"VAcϟuF)ͨɭ{7 q 6g\j7yp>Gܽ{#xFS\Y08FNn?,w!R(5 % ?η?!ݼI3Z&/4s6ymD,^O?>}^\G֠b&D.|J#D>b '.׮]!nFT&a2O dla(^[dZg3V&W|'!MQ%#Bd n_^jӒ9ј ^~VC%$ /^'qL4OI?w%)k_+A2y__y.}@H8<[kkg``4wYqs`JW|1u6i IDATósGt:~xtA$llb_ v_ qɳ*A~iSh!dpxĻ},JdL]CYVab1O26:]Ƴ +H[ъ}&ZdF0j%Z Ҳ$/܄(B$R$46N/*Fhcʒ4O5IR6T @cʂ0ўV*kW4M4R+SV|:D)t!82MO(j)l>++kloŕk7x1PUNTdEF 8'0e*A% <)B)3@D'' HVbi#”9s`0;k6p3]JC%H (.%'15Sn4cP]Ԯ:F(WphEQH@+Ai+PC< D5JrFdVejS>J5Ti ӟ׾'S?+Ո(F-.F笆<1.<_`@ʤO O1?c -"{}y =O Ynի;d8E>gtm Og}kK<}yPl-.megf97ȧa/ >Wp2I&Jiav`:SW8g?7b:>Wr12] |y2',*O?/^h:ֻZ .o_7nF*Ai* `euc2ڢJŔ*)R}:颦J԰tL%ҔƒWaQU%V]E"JB% (m!$5pme'EU)dE86(*,YO֠@Ќ%(+h6" xZhPŔE$fxZ!D =TE$X%Eزc#%ZK bDQ@gOX(푗55TB^T/AWxyMQf++|%M0+sE4Da n~`٘^ФJOθ8"^wgO |Nyft1i=h1fGٌH/&U Jڛ9^b 88>C3n!^s,ַMi5^^r6/ [4!Y2dxvN2nSYQCQ3{=8doE nN\t4q "@'2VX[h49:9ea& Z糒#&" kp5Rhl+ZT s\EI%5J97RPTKMHFʑB $($ I5^(JEYLsꥄ'Uk~/Bb*p5vڒe`Х6˿++Qs"8ߥE>;y=,:ld``+ Z{AH!#1>gXk~y6:g1Fpag'|ݤ(r†x흫<ME`KKm%o3MRJNFx& Ԝ:[{uVG F;f#ؠJXi8sJ{ $قd6ի,ꂟ|!;W)J+~||J^kjQ{1@ yguB<ppoEk}xA}ZtXd9ST|/wާ̦ܺӧ([2=;[o2L{n?DۢtbNSkYnoqk16XnzN)QE>٫G_2Wi|z>{?'+ qԤnъEEnpӥ/PJpp**È([vVMWLg q a"D|6!#ʥCjF$IBLʂ8n"[_%|M]f4sںJi[ %e^"9,rHRjo Z3$˜,bFp>s)@Q\M&qD@W crZ-V>TtA)RB$$)V֢)]QAH-jW?jڅҔG!J0Њctĵ QclRK"ˈ(1iQ=T,e+,۵p<ز$ #* UXcPR`lq;1ulqj'Ie$iFyBR%H,uRA],gJX[+Am*Q*32E.WF+RX@kKRZk7")RQ%tNQ:X{SJx\_i>ZҼ Kֵ }AVdDaH,<ҐJkJrp,4)1F-ɌXmJ]lu_7_g:鶉BkjMy2$7ep\I$AC3 }IɲN`xiQB\bx2"[6dB{#jIِ  EO~@t*09V ؔfMYY %+Mː"MV1i OC*R^%q7o?+:LT ȴg/Aoiv:ƋBho1YYg;zp CF\^[O h(hܺ}$(yaxd=;ӏ"@H*볿k׮QۊC4G)ãSh?x>ku G{cՏ% TZoFIY֍;deΣ]vWo GHݤtã#~Υu>hLJL ӽV]y=WVJs/@#G{7Xwx)x@?lZn2ω+gs)03Ot @e2qe 7_ ,xDQ9UPc!c`a̠"nDT'@[[hjxbnb I2f5a3ñP^@#!<"ϑaҚFA^ B(kCksՆFtQ>EU9)Jh'.-Z)CKǧ4k(/첓=Oi[ %RAĈ)I8d)c\]'X|#=$α&RD- (_`deI# QHE\eIƸ,f:ۗ$$&/i5cRA̶&I3D+-Amew_N8d.5dyF$vώ!-R6MZqWo胟 q;a1d6Ɉ%Nu?~CGAR2ac}|:dN&Lg a2赹[+4[mF1skxaWy.4k}<-|[􄲲sdQЎ|ڡfЍŎr:pysR|WK޼`r-~q~~NX1~3ɽށ?W?55~ӡr$',X_s*yc+8<:,+6{ OO95%Ei 9 u;.^[C~㟐ev }Re-8{TrQ)HAU,S VzyJsdsx$YggS:&i2HT|e΢.PZ{YeY"ټal9!_۟s :gCV.lT~lrd2Mrny§OJ(쐴3ܢۍɋAMNNc87d{HdFhs6#uKHՄڒ-Fml]S .wnsG i17 )4(Wo0ΰ~!&To~;|t+y/ 4y3<>iL♃[kC-F֠}_k@!B`[ܺq(gry1"aee(@喇_0^=j{][.ג_PVV#'$0 O׊0 !P^}Dvwu4Xk&ZHgr$+,%y;=Ύwc- `AWP%1a+[A+H|¨cgl6?e0X! B&)3Z^+bue@#+i; 4^4MuW.mbs\١2n" Qe>ߦL9:bVm Aw/hOܸDN%@i$ V}Jc(*W}Cr#?#/Fx//Y\"n5Y7lw#n޺hH27)+CV):⣏?'lxx^>׿/BN(mEty}Zg?j҆[ w 0RS֒C拜<_<5׮^捛xΠס1O_7Mab)mRV4[Z1[č2 SBr:<&}6VyBjqZnvX.KQʢ< IDATV[ "Ztqvz9ͨО"IQڙg:(U@2 )Ji^|&;;; Ð_b>q1elVZUtt6Rm33Ec. ]0/K.uI,8+2V=dyJFF9{{xck{qz:"S/4F+ۼx~e/e@x~ ^yJ}BRXE^# a,v,PYPX0@ _ezMV8)ܵҬi4"Uy(OcLNY<k#T,*|]}8}gs Ν7gLw&~/&Ty(MӦx5+۷\h9Gmr2nfi3q@ [L.qERHܺdRsX}MOsM˗ܺztU|/$<:,ãCV=^u$/x)W7;WnR$c`zqPV3;^;iwZqfw<~pu<=8{o6[b/;o8Y{qLrڧh vWYd1%9^v)إKe@+>U:vZXdFY [׮]u [࣏>E)E&˱3FXWIV~5UI^A7KX6`ޔx~д4lb`|b>'b4 X[DQbJ>f^j jk$`t>c5;;;)dtqNH)<)<"VtEUbl1,]¢=")ɹ8: lXSٜxAͫϰ_^y\VfY8gu-A-YSYNa,-9 kky`CǑQ 4K7'%B5ڱ2Q<:Zq4Yd9tRJ%!j7\H*V"qALiR`XzIghɋFRҎu˂*썠h܁"K+MN3*M]q_M7J"*]a+Sz9 ɁB;S8:9cǭgsNJxի7ƌf#4eظ{ز"]]]Eӓ *ڭ>J/ J$'3F;o^E ( SvVhcp*sr͢"%W^{#._`t6O>ec}no=*#<7gco4h;$!3ׯ]9Hj7.ZӈCx./q6"xMCINDh C/_< $c?+_b>2 iBPA3n/JłRK+b@mz5؊#ZqFd>=ibJ*\h!jMhwb:R2߉7[& J!p24/u7:מ<#s,RU媖nhaѿEWR쪲THd$)"c35b(%{e"<'CEVTA@jT"%M"<_Z$qLTuElp|qIk7 U]qq~LUEߧ!RY/ X-Pֵpl}A0uR4}BR&9hMY\^^gK5{%yyrL=~pO"B1ӈ6%1UdA<5覬&z\\NA!߾/MZII4%i,9>c6ZM| ~=Z|~Ni"g /#i(36;M~y{&wV_/'il&/=7_s~|זx KcNsΎS:?ōw2.HII7Mg;qyuE "5"i4iV!eq & S7R9ZƗg$; whvѵqFKyNkGaHۡ,V8|05Ef/~AQexB?nϳr-jedlnn=89=?[n~@Uk^j談Dƀ|1j2# 0ig,.G/?=<`sp&;{xq?dD#~.h v-,M:?@kM\qaS6orlNX+^ # S)UURUaj&FbGgMRhm]j'dv8'hu, 6X+jK't}vuX4ҀxOXyfTHNmƋ)2t-<0"]NEerai^^]ivŋOȨdyAFhU3lwt,b5Y!Z,^I#}lImj$}'Bb*lpk sfBx$ILZ7!3:jb9i&SVI @$z NWkw<9dT 0 pn1() c׻tdXa)j_:Khe?$yq6%B_9Aa_kUUUhc "ba>R )HS{.8%E`xP|XBJ櫕kw#ySIf.k:MV.oy;TZA ~[ 6La)NE`Q9`⯛l(tm!g'SʢPM^"-|s ipvxb *kNИ\&NZ,:gs 1'YYl57|s~ko"jD~i=)\"V&Y^prqx7H]l*v+ׇ$A3ڤQAD.t)Y**WIRU a< )%[{TUI÷yˋ n޸l6%h1 ?W}D]kn߽ǣ/c n&~)jSa(i7U`|d9IHb_i3bb>9o#RX*rm8v| n{­6WYr惷NWXLZ5xpGAb>o@V#Uy?ރWo;rrqE3]K=s5ՊŜkwn XCGgWWM0KZΝ ~gْyE+%`V$vyݷǷn%'VpyqEeXD޸O5O~r>CZzYd@4,s+W/TyAL.GeYPN!U^`0 i4SjU1K6ky;CܽCY-1U %NDY|TJpvv9V4Ւ8R aVXE1J)f˅{V>rEt:M; 쌢) r^r(bkgUYƸ/^]o^*]TpSk]T:v z!5sfBch BMsj#/kP'.vw2/F3[.:w%/IFV0JjVڅ.GN1 $0j`Xe9YQnZ{O*whdP)x~@QU(mPxt* IBQV(Ǿtm!=ҮqMjBh4&,H#>~xjKp-b=AQT4Zyc~VE!O=&Ċ/,i1^ύ=XPl[:g,xyv?~ķ̣HF1/~x 1XG5BTV"3Ej}̢䠿E/nrmoq9rgcrɔ(tb~YFm-W)1Z+Mؿktu%XA`RUc䫣c:Q%́Ä`g[7oωw~/_b+}'O0xl6#( ꛯI \377B)ZCjcW0=~yP"!pïdJU_q||L`r$ #ixoLNPUG[l:ٜt!_% vwpyuf/2^ll c)*[ɋov/f>xYMVi>[v*gI[M͈^Ͽ:LTUyFAyVQV6C3*wy3jeXx~ļ(IÐ cA5\U<~-{4„ˋ+qzMt伢(r$b-e :4 ezx>z~DGQ|9JX>VZJ66h\\\!%#igqR'VU~,2$.]!ӕT]\*8 'MDQ2ѫk80A~'lQWk'7AW@Bxh!\K8$ʲ n*s(r6kJ(jJX%+5S%AFT#AH hVш#v1eV`q_OXQbp8i$ RLjQ 'EFuOU)5HX( CT(*E>E:s\O܁3J)8 C K8hQ' a)V%/XUNg()B&v$qx5-VEYԴ[kՠl \*wPgS~KH*7,<)e^ӿ?/ď>6_#ktqqqΪȳ AtN__ ,W<_?BZ2`Ö"\YxdY Eʺ"N;"&c9qB< ?6*g>[0]oma,38&\U4)*sҢu|9i:HH$V a4h6<ՔUIYפ"e9Va\LeߠkרGl^S hnG[6)ݘMP PHA٤+,paV#1zXqDAy¯QGM(b$I##ZH$,2g^-RiH"emqJJVYOҵL P[F{.l4/!/J(FX%hzut-=hƑS%?)A+Ma$QD+NX2FfAe|]Goђ_LEǜ Vif' `skώh.ruAz,'#"#r6FL&s(a tF M".GI^3 R^QnCɅ|J&aV ~cfټ5dckS+Ɠ)E2X.}6<;F1_qzvɟɏyz}EG+MCt]HUyq9шf ~ϩ (>5*>2`ᗤit)ۻsrvd:`:g=/($D*ُYe9M:fՈ(tM䋯gllQ㱿w[B4mctt]>]:- \Hܾyի߿˼b.H*=$ass HHk5ͨ±x~D`-VjPuь#K%EQ ϳko -^1S,4^k4)TJ,B/GԪF{0[eTe*FZ1/EEֺJi6v |HxAHE&-)a4h<:H_PKZC`:H)AQ!2X.In%~6F |{~@7M(HÄFҠ* Hg秔?`wґeVIBWkhJZ-]V3e\Q[K(}(:SbNPJVyɪ.*tUH"|OnHϣjp$_TuM-}Z}R\juJ9ݼPD iS'72V$!)k3J t @x]E'}<_P%).IH/V(@d$Q $\E (to!ңT zڂv4 cUX2DEYw&vo(XD62ӓc"-UI&Tb$ s$hޝ6_|9}?]..l"2J8}F'NP7I< m>~%&!ONO{};]k5Gܼ~~|2* 3 _} X66olGG|٧ܼOU\;g|.(ٹ~x[KƵ]&ݹ65WW\vg-cSjhw|l\5Uehwȹޒ6o7Ø۷ospEQq}v(;wYή8zyLף4(K<~L7`cg5Ҕ2c N'C9J)6C0ywܹurAbksdBZl v !<G/ւҙts;Fho u"||DG~HhU>2(tm<(vz7DbŎbZH?`3$ C@:!bJz6qa2:t`yքOf)BեjPOd2j4|3qBYUlnmryqN(CB2舝n`e8?e5RʡC8(kGu9mCGkͻ6 !)$x`-YYR)MYkjUcAf)*뤖xңRE^!=IYh,E OPYE,?(@x(e *Vx+SXmE^CECTuMi-LPpxJ! $ :ՂgHBR)rKKu: N@VVnE[{s4u=*fU+|/@C-X ߭ v%<GmDxt:]VI9~3{1~%o;$9ALxEJbZ'W'{6J*Deh1'jBYU~Bl#d(5gq@ЩiL%/&t+%#4N YeX.*|H7y퀧OcY\Jŋ#NOY.ܸOν!hD |F#i8pͲb28m!qO$Oʲ`#[7PeK:M/.I[mV X|ѯH){[ܹsݽ]|?{@V$aϟ? `/?wߡfl1/9ؽF& #rN\&Dfb:j2!!V1V,j‫n3DV>)vEO(&E^|>g:#%5y(u(e=c>-ʜe,KզX3v69h˜ZAX*E/i[/WϢTpkl:b4Z ePJc}Z4(+?%kWn5$EQ9hu08O8 ,'F4qh|eֶ@!w[,+sHNDRJ&jjU (s##멏wY9&K,h+w4 #R`wo6x,8Rhv+ m#Kj (r5iPZ V2,v]-P@*jIpPq yk Bϩh!Q/vP Aoe` s+? /xMy&WܺsS{V j<$|9[[}0Ekl9DF>"G>:E,1 x4coKٗ4^ƀN 7 |jց8q F(<_45`ϸ rKEV2"EY4 XeZ4.XD,4UtY4IԪ& $vɩ [B|IG KkXk F[ʲ"l(ׇE X$8G2GY!q<0E{Hbji֓jE13(h6nՔe6 pS0~$ʾ(fD/ʂ[7o%ZzLs$ / ( Um}A]YF"4hRS+B+fXO1ZQHUIxMKAo\~a YT1ij4aȍ;8Lɨ9;?Ck׎ w)[=_?dz~NON:eiSVqU UNE+"[1ovՊeˆ٦뱱I6J{}gZS~bk{vw{1fKb)(X,<`c JO,h%-ߺl9WFf2[rzvbqpUvOy1.F z.;;;ܸqp65]f%.2w Cy=&ϞqxxllnX-3z4[ WkcJWLGܼy-ݼՄG'ag֠C|{2/ֺWUa`1%ggll4Z-'{0 Uh|_+GMƜN.1{DztvUXBJQkȭC hKG4! dUIYjU3/Fi%ya {9&#yb$ew{]W~[l:ekibU)@.t5ƺ7&7-t\ B*>DŽU6H\6Y%{z""҅ kPt<cКX,RJrzДyF$\9 |LU]FJ}ŰT]#\e.5AT.bAxX[5a,F'=6(PK҇,Ն[@ps]^;hm?n޸d2'i-kD1`w{C߽ h8<+$JbʸܵPt.N48zq惻u3򊳗K?`0_=|r*C>;l\rYAE|^Ŵ&ڜnlOq2pyyD%eQ:ʿ/_鴛 “'fҤrʛoεkI"K m2 e"1R*b |'?x??5VlosrvF69=?s(Kqٹrp8dXpu'Zk;[|$FE“)9}yLei'Oh5S|%kq~ Vjr1gsgy|>ngg3lI4ހtpI'1RIf%?~3n\ |ء۝i3XM>wzc^kwoS&4浊~@-0􂣧y?[6o[[4m mȃ~`wo$|l ,f (_-Պ՘<ϨgggcssfOQh@j」~M&K,'3_e+@PV(qr j40J(c!"(ZFuE0gX$qD(CUk/GoO)Qt i0MiM•5reLg J*)- uY{X%3$AC8[]Uь.lɉ˨Mtc5y;ϒ%i( IDATe2E^ݸte( Vlp?7w ?\O(;Ե!bC][OPq\(:8_%su5\Z,$B%(t"F.ɺkiU!d,/] CthILhjLv4hEixy1׸2urAyY"ȊU)v ,eShEQe( w';x\)nKyQ% Beh‘R=. ) yB`*'C,Sw MQ!By!;=cvrXDW $lRkI4| Р%@Jhb?zl`{}}a.f$sOΘ/HӄoݢoqUڝ6'g4^CJgq3tuF$OJzK{wt-~3ъCƣ._E gL&fo&wwvC'n8壼Anmrxmө.\qC٘|E`|vwwh <(XR\\\"i q$h-j[txZ|d1ISyA4cHIgȰ$+P6PjxB064!`r>"C"[`Y[9V1( 7lp [hyi,1RslniU6t+݃/%ecEAU5HB{TS|J1͈-D[WXm*T(O.y5'6.-n7Y1֭ *@cQ har>[>M Gnjo25C#ͬ$ee ٦vA` 4Xy,0]䮗_g7BTYN4Tt[UY""/JK(OS֖P.0$YaPJDNPTi^P4B XRPM%aΪK8PJ!WTE(\J\6PU5Z;RTbTƠ}TMM*C!UZib\O&V&>'GVt/񤇯_uo@=_[[[z=<_2ӊ;}<ߡHNOrx1InYʕ+ipmWp||1T|Ɋ}%~bt}㛜{yǟ|“,K™$X1eZR)) ź,6+{pVm5`sYu1UQ(m!%2g9h6/2gi/#$٫[Cʭ?2Hj*'ԞFNV)]chmHѐ DaR$ҺDV霗%RTfyQ4S*ġO]Sz9pͬ(]ΦqݺOheY:u;[ ;pZrTTHu V-Ftky=a2[qmXޠɌk^c[5`Ε+WBxD)M"/V8<F1pC=y+H7`g:O_xA/ irbN4xJgb \k5eY[m7p}lSiXy0e;^qET9USFuzSٚJC8`e8 YGYHq;t|قv8NAzˆɌ5'#z+.7S/%4A|pﰳOs>VWo}noRkU`+åmF :ŜvMa2gt;m3|/$ ܹ{ئ0MN&`ccقׯюC*&s.& EiQ^ˬ=lonr~1vrXcP:_K44h4& c$,Y'=#/ oQu ^feGE1%ngS*/0fs!=ӧ2$J)ʲΝ{|_g:sNOO>$ރc??&RV64MYYY!MSzɄNW welFa15dNeV$鸯guHA@;S0+U-eQI~QץS1FGaBLsq|,ȳ![IFX["Md:!=}Ӕch:G#vtMH=\{5x[s:pig~cIn-qUW$y ?ibcW*!:6{/p<^Y;_\vن<zO=h\+kkC.mn9V9H6$ 6,$N")D_@=@m E&I;TJ{ [;'5ҎKjG1PK/J5KeCU!4t;1IQ4nkj deE]֎ɣR\eXQKg0p˺iBRĮtrD\BBP%4;-$k)ت<4JW%58`Tu~Cuq; ?n<7 6vorxx[o; _ahJFh" 36]5yiQ"`Kt٘t %uѠ=' ^x;H)dTLʜjq}>=ydR+J17󇇴t,$_ʗ1U{w2^UQy1Rh67q}vɄ$AkN7޺LM(&cͭM:ZuVu3|,!-mp/q *S1(˒/}4w؊0bo/ի6uUjgt{]]1yq5nxg?B]z|&9y~i*ސ8nQ9֔mG}&)bh-Lq6:s RP6`QuY(!(ji8F)[SAx>uXh0K(&NÉ<.)tytyB R.O8A􆫄6uQq+b:Kꀄ"1uJ%=V]EFԔe, JHN2FI71.U F*Ƽ̳BDt| xrCS՘2ҥ})&Iluhois~[l|퓗%օhPJ/UZc"ة}MB%Hf ƓĽ~J1 ZS1ާ?X_% iJD~p?_Gqtz`CRnMy.Jwy>2{l6׈m" pr~ηco\與Ϟ[7_C_wޣn3HӔ͍-f d“gc]G-{=vw/3%jE WTed4V% : a4 t9IZp)K}A͸5ֆk&c8r_vň:a{2=[/۝eYJGPׂOx !qo4?ݝmR9w>h1'NǔSs _RJ4LF+\5Z'pMWb|pictrBgmm~OG; (N* :XЊ-FxE`sc>|[-^oHȈN$ hQ 6UY_3~Π‰?f(9Oh ` "%8boc.S&O^q|`.iW5Qڀ$][o3LG#դdmkj1$ɜ8jQTϳgϑRDl#Q| ]FRc8>!gcf3%k._ygO y1FĜOf,RCPJszvBE 6y|xl $agcwF[ ']$}ŝAjk}vw?lͷƘ_~s;?|_j1Ё4Oώw |`9 Q_/{}'?}ٳ;zC魏y>8<:쌍]Z6XA!Ch<#{ XYY N'c ct:]E %$UGGUI&Mrֆ+,)V E|B](g6QAndE'& Vf[b*kLV.UYh[4B:R}Yvtf3F#zu2eUD!3\f~0=`:[ppMwvҰ9PEIWtZ4 C',Jߧ݊d{VhlB8ekWݛ҉[& TYҿN;9;9à?6b\eG41S/oFeVV_KwQVH(ʊ$_K S9 pksP4cL..*K<)!\m|n6%ia40 xZRR60O4Z)R9i.c+ [W/'DEa0!\%]. i^ $gsgJ%OFQS>yZ" }<ϣ N"aH~\+e1E4ElH4My ^ IDATqgg()GUqe>5cЧ eJX'G`@lnuȣǏ#dʠ#Y,3)il/qvvJS(_ v -NGɲ)gϞԂkPƺl\+)[N#&3ƺdBHA^ZҢDQԲzm iꚢpJFASxZQۆҺ,-<TEZBZ)L<|j̲$@qcMKН**d$ޭ`-0pk.il\皦AhWݫL( % a.]M|R[jCa\&]KsVkZwo[ZӠ /+u55RW,&V[1)99=$MVmFŔn8@)h-SUSdTyRYK Ǫ?jؽzZ!&c|ꀬXZct0\ 5d{c s&ݷ ';(ýw6o޸~}YF֝^W'ǜ1 y [[<}|j5oX {_"Yh5B(ONJ8b$doߡ 6_[>&IST5_b*KQ73߹};~d6e2`4ll#I$Ix){~뜏Ƽ| z]vw'*?OihHӔ+tZmOb)㝛ﰱ/~yY!+ܹ&Mk<x|/g}Ni/Mł|"&,Ҍyn}s R7{88֭OX8:~Wy^H͛_/ywF{Q۟qe1MHs?n9 ?x_NœKge~}$ !Hǟ~ʯ~k+}o:uR?awgdjQ<8w€з\|Wh0}(82\ZW Xf_<' c!ʪ,K T^p^:iE1Ki*04 R:(f4h%voyYFe2+"X,288|`0$-.i45I92_d"%OEGƵ\4S꺦,s꺦G/,h08 #Љ[aVLFcE2B0[xJt{ 5v4˖>y VEHRv/]e>k5 WWɋe}1ZZY1N1ni VEx2FHAw QMo} |jC8^N)SWu'79MuRJMiσ!nh,ϭЭ}pf2[(hEk]H*:6YaMMݍ4')JVcR/ TɀX`IUxપ‹ny kSA*x<@m Z TKyn2%u;4DKEYq3rץrPS$A͠&-o,S5He<R^RV#V/m{} Y` Vx:z[u].&ĝ*О֟el:e_C+p,w0N{*6wMi>U QgM90V Ef T+-*qrzpũA4-Ȓ4|< 6?g~_r:?)o~_pxx> iEmZMS?|p}"O9;!oE!eY[7 >t1gg^Ȳ :lSdllnrqvB-<'Ty&W^#-,CIDy׍%I]"]dLgyp|6eNy(q&G?zEHݎ]ݿ!:Rق>qG.9>=cEAn:28׮18Nfd4+{>?ހ- k|"Op}0YE,DZg<9% y9׮n3Lx9/^>W}DGdYիWo~?~i:ך,Y3].YbgN.SĭΒ#0! }Z,K.v,,<[_c(vh4rPH0,JÈS4GHΦ, d3¸E# j~N:L甥.s19|Y~:g'(֎Lsע縹+Wӌ*9q" &#yYTu>z9.DcS.0YH2y!tyVU6ˆikɋBM#ȋ_it=eD+zG)x9yZ45K{L#URIZO:)+*b=mȊkGtQP]ҎQn8X'zL`vǁ(pp/]75Z8)("AIjSTRfMds|w-#̪̬F@7 fP6Cɴѕns4B1qh ,/UյuU垱{/gʼnn] sV^' A Rl?<7-WM|7^ljEIe ;;[xaDIth`c F+IjD%<☝mw4MvN2N6#v(K][C?hë1˦Skr:#kigw aVKMgmͭ-Wt}x9S.?]?b׽}]aٳg\νf|[ !nv %98_di`0*hg2NhVibQ$IB1-X`m/޾l67"c.?f 2/rzzB%` 뛌.9~|6hF{_xYsjQ ‚FdyJQ];mZ6jJf9sm8 :t:m\J2I%+>OxDQ,ȒaxrE_`R7~6Iʳ'OI'5Nz6n#V ǭ$ }Eݬ(('D@ A%qyQ}pٻ6(|ͯuQ}#!L@[ qAkH҈b̴q^˪rdU'!C۵i=vc%j7| %wVPUEwK ܤ=X=of6g~YKUVeҌYp9qŢw.hhHEhm,G$I~`~ϣG_-)x|z._yC={Bg~.WׯP \?+oE̲, 3 77i3Oh_Z__wAߺw?JI6LFhe@u|׾ UUnCܸqT qC IӔS67X_0$qbW<˸;iʛw}$ x!br~.o&锪(4f}ml6%og|E d6f:{OKJ^pu$w2'.,k+εC_Ap>goe+) k(Uٓm NZy&J+NONhZs}< j+^r|81]k? Ic5RW5ZKU]z.4Zʂmj?;1%@XKxJ:iAFh;/<4e:R5 ) jtYΚT2$kyZPqٜ؀-k*)ѺA{M%4#5ΞZp:bJ|Ox6KhV_, I"f)aי̦KHZ-Wfq ,ٸBhg $J._DqBs{/6<6VЬr q#W4|FJvP>!)kWsVG!h+klj#Y 7HqB% Rj`_|=<Hە$VD0(>VFS7ZSI"|Ғڈk* =q(ρt@!k=B'X+m(MaFj0"6gs,˒8J [akts^w ֺ.+ U|5-+d?n SVd>.$;-/`^Vk 2ͨ~jZ>ZZ&˺x`>dmEhJKqpt-l^sNK^e76y8YN(y7 F9`1xۼ77[]☫c֎׿ÅG)QDj1ؠ(sc> Gl{}>S,s^AjIz6A 7oS .Oټ5`oNh<윺,Y.J#<")K ߢ eG$lv |Pc+mՖVjGȪ$+E'g j\?:'4^:Qț/ݦ%azxٙ'r8f89hʂxtO$G,swPJ R(mʹc4zUn`YKíudxn5z%E}C*I z6{]ƓGY,fILyep< \14ihk 1,( A46tkV5k χ,R[j(*IisF*I,A<ʽZIB+M -ëK2~ˁb8Iܦ.sh 7pLV~o #(+E+ZaU@5hHAly'4,\7Md:zx"\2:yڷnUCDװBs9a:F5\]|  2_T }V;ʨ[>eCT !<e<ԉіVDfs` a"|`5ReKJb(\U#3ʐ%Jut$ƢnVZxQFQWAci9JjUKPs=a-qi(e q9O86!uWԱFgJ1a 2-'}$I 6$ڜ^sr"5,`K¬&)yrV4Mop|zN(5&A@\^LlW%aA:攵B.K1p1PF1Q6 U]2khgf͒z5-_VMx:?X^'-ma!2YA&O3ֿ *鎞=k)%n;3<|p8hMbK5/i,*kZiъ pA#< [ܼy)tW7߸!l>8n5ks$tJh!I15aXVS"|K?yD{^{g?~2H.V xv~Ivx!_z+{.ob ;L^ѐZ}vi_*8u4Νzl 6i5[{L'37%J6#}bbQ8~V"AD糳񉥪vy+mZchXt1ωNIZYrYG>RijrUYS.iLSWԮ'M"]?`}s@qGͭ$yY8BAYCݱ﹛?I^# VG7eZg)h"4n2,+vS7量 IR7j,w\ j%CO)@ YQFi0D6)k<_횝v/?Q 6KQȕ)\IJ>c^ʲ&I!]~-FWw(%%F1nd%ȳVl6kg7Wա$=4vNYQ5A6EYcJV/HI%i"B s4 smÆZʦ;79~wxzuO n8ؾ(񓔞jv/ԥd|~Q5y[)Q䱱CQ-kPMI 4>x4 "$aDA>% CmL# f3h&)ED#8;w~Lv3EZ{lwj $`olJU- ܵ,F Ie ZJ67( uU2L8'Ōo G\a0#F<{/x`s(LdYh4" "za"RJOO뚗_~4M{sdU] ټ!Z &\vH&=W6Ъ$k='l{s{w7ND|՗yO9׏<.UMG\^sxpZ;qna:3/w#+]Ji)UU~Lfhmi'}& NVG}h2.//=|aggrY1Jˊ/^Ys$,9:ɝ;wMƬ{)?~秤qD; `wk-IӈlVb0eM&T1,v1iJw"ܹFZ+4!R&QAS\$1iQ,fH%B+K(=x͛Tg<ʫX,xv||~}<u#4Ibɓ'ܸy@odoT Ř$eFT/uPFy+%MR cpF+xu8b1R.ii+E֍sV5 nk1"b߃( ',*MB(( jsw?pc7YsE<7~vzK>gOF#<(5.ﮐ?yOOx4 ṀQlt{."< >zh(dYUn"kn`s__&f3t]..z5f?{J+˸w5+҆zqZ-Z\\^]3bʟ?V {ai6s}s8qw?z}jsȚ^:`>qihe8nۿH?c,G099;Ν;(ٰEYqr?5O88za(6P~?bYIn8i*£YLqFe->ɓgt:8CP` T |XK1xw(K+~xq6Et$tuS,$?-k{NS|a88d=c|אG+)aa1DÛ/X*z^V|$tbY4R]qy#hĎh\fxG{^ek|ߣWVJbߋhmed PŲ'jj S8"NbVb-~k ZVdQl^(H+x3TMC(Y(Ν9|T}y,/|G'$PfI%{t=} gy嗙iok|o"Gw \d-}66淎?Svv(8Ѹ|x8BZ) N\R vmuW܆Fk .YxzoyW ,;a<ֶxM{T^>C6lZ\>CsȴSVNwkQ_}{޿/yF!.qrqyJψ=_׮_pZsrzoƷiw3ַI>bIo{wfcY<O}QQ5rDy%!vv7b^4\_Rgwk-w(لZ Y( CtU"X#£]KZz zƫ1O<|H,%Qptu]2 98鱱FjLY54uAw(s|c4YeȆ|TX6ak ֘G?=4Rs8u'0v5i-^;)[I;^R5ф۷o3/F4(i%)b: Uc.hb4uL]7,Qa@&?EjV)+Ak]( yY1dI j),hJ xI <#\%%R;A/jo%f>&։d<Igg'tBAߞJ'qO._  hwzn4$yNӔX]eUEZk!ز$ gO::Sy:~eXבX,x!&OO>/!$Jagoh͢ﶱg<SV?яØ7x/Ά GcK/jK(E*Mlnm^f)roFY$QlVt>gw{gVƣǟQ5NMeܾ<'!A* |Aa0Ш?v7u^2z!iboACv^?Eyx겆>oB0]齻Բuf))tr.NO89=|o㘫Ѣ"Hr:kxa7Q x[, Hte|{ }1Z0]?eplUE>Ox֚^ϭ[7AB<'K$AzpІ<N`FĽ7Zmlsuqh2C*A9rd?1˪E֒tMe  gSZ6n1qVDKWilmF)ɘ(Hx%4AH$gD 6m^yUX,+frkP-HU1ω<+Ŝy9=n߾E-+j9W11ۧΙ3q0 XsB(Ha(hc~ӳsڠ_z%}ǁaOsʺAx#\.DkӫrX ǟVdޭ.Hm|F9FL%5Q Fkm;ҡqDN;ʰqj>ٯb(p<##|#CZ!"Kl%JԗIC Ce!HZx|0( yTMj%.`@PVPK6kZ(2k*(kWAfmpG|Y>h|V+]as>|,'CW݃-lܢ >|ddGp;pЁ,f%q'bCdy lndgJgaDh-XCU/%yEY.I<ϙkZk9?;N)4J$.^!C)UI&h!7 o޺ͳYQ@`F q1OYVz>Jvf י-|';ΎdU3sMemm4RVUEloX,ߤK~_{^d>QU%vd2MvvxݻwMNOOXx4$ =<|6[ۻYTe<gbIEl2鲻I-)uSE^jQMQGFS8"veU|ƸVQeE4M@P5뛄QWWKtNݟF _Xd UV|wЧOX̑"B+J-)GWX-x~b,R>Vb4xG%Mcd#]Ex%m޽wnnDU,@F9I;$yμs9sy>$;, xr 67uz^lj>edmc8EYe~g8m-Li4jGFBV6H#>L<6=Qʐ BQfYQ=G!u <U?4M2ce8z.ILi Ri:4Dqj_hWjfuVS9ԍ% #b.?;dI G{3hvUo*Ic].8b'验t eYdu|:&X1-*cdIx.>9IC| &b:s5<'<&;ׯq A#l78=??O櫯I<{<#1uk7g T>:^.ĭ.DX0apHmĪk8b:qyyɍ#^yR60 gnn;grfOdםw^_c}FwMrf432=Hc2H&LErnd][ג{fz#P@ʬjHsK, IzL׉Z1}=FR8Qc^+WG??1V8sqӎl1$ K!aw.Q1N89> |~@ c>SNNQ^#kyƆ]k:$1Va78Bf{9BjOt;-EoW^m֗|zʢ$M"A:dFYV1EU1h1e^Zlln'G:|,BEaX-lQcӏ;-Q%΋/JD%IJ^U0J^OsUٌ/?-/@H^R658ߧ(%'GD/QJrxxkB_[oI !rpU;mVІ*Y[_第lʝUNZ-|m0dcfee ڝy^Ѝ{̦cqh-ScT4!I:O?$WBm&˛W)+M#;Lfs:q{*їŏ~ĝ׾EaG+qe-w_8Yo)O{iNv4dtK $ L ⸽PԴ}?lTɦUi).<,hmz=N)a0h&)VHU%M() s3AWq;" [8ҵzYL%Lk$.S̒H$K{-Vl>jdcB | t'O,rAH4RZ>UӠ7^" r|堔Gc4qP OS+B8O3{)jJPҦAU0 ץ*|C7 ߢj1; 4FvW5,X{,G )U8*خrm| q$18HZW vqLemSZ8![bRd) ʊ5x0yUӍ[mtR+bnMrV,9UKh"ץ2 IZIA+ij W1# I:svw@Bptz:bWn1-<iFlpU v&eMpH&C°G"/R&J-FU#.CV($nLGS;1ITASӣs<[_s^1Ⓩ[""V6nL(.Nh`euՎ_u(ׅSyU>Kfyys>|䒽...X-gSܱGڣG_m]|:E%b73\P4,SyzD>uҬ BkR%y^?GHܸ)_~B~{?>y3rqqo6 "%>eUԢ52_B%.ZZgee<{ sarܢ;dJ%4UdasOϹumzlr=G+}TLϏYiV+iem0UU$9# Cf]Bf1A[HQ1M&`tW18re (nCt]|.i1&!("/RYtkGv+ascWar6nGYz9cph͐ud>h±QJK)a0!%GYDQl%W"]f0D:.UU%T5@(%y"] 5ZSZcaFH۠(&ݞOUPl|2&"YB79'<|7Գ_]tac%b R R.)R-vؼNێ54F#C;-Dα$MBA{&㩡mQ=$kAzeIm i@s&NQT5k<<߾ u\7 Z7T5dY0 ][9R9aPe]h[yNn4Ui ӂ"/UY1OzV:Y B[G@+htM`&)#iGW@U Fwm+-A0YNݦI T[aCY;p5릱L~uM7 byy -(%dPNwmх.#$ fT-UʴKߧڠPxȵz5ӌFhLA29)@ `<smʒnb<{O̮A{ ^7npqq);ۛLG#|uoݤpvr̝۷89=iS<9ovZ-%g*JG]} _1<׉x!47<Q"# }ٜ4H3^yLKΏ֛rz|H@9k tX!seYφd?2qm"csmG\{S:.c,'_)KY_]jr`4 ]Xnt\z#)1VsRW'(櫷FD6s felx]# d6NdxZ!kx4IhƀdIhE4$j_^ FQԵru=G}aE-Op1BS75UE8ʥn)a8.UB.dbW"vV6rQiH)-ձN?0!#4YMH5+KNχ$I,qa+ٌȦCַx㍻?ߧn "3}򣨦h4hLmpFp1+ԍքߘ[iܬ9<> O)2%t<2J̲G:I$!գjj$(eYQRiM^ָWH!qu)*aתk+㐕L[|4+VY}C䕁O-Wnec;3@4e<Ƴ1o4KT a*W),qj0!FW VZUV EVuͺ,k[1V+" |ϥ^xƱcHG5k퀥m./\^!Ւ##^{*'Vu 棑Ia8Lh|VCH$7olS ʍ9zqD>;?ܹٗqHOsp畫r"XGtm bsȋt[1qv$nx[r~zX[Bx2d09[[4fggd:cee3"9Nx4pU:EQ$ A dgg/eaԎ3h4@kgʋcV7!y.F8|dE,{TZ?O>[vwvxW_2+ܺyxZb2w]rgX GɅ_e~dq.er~>1Yɍ+{LG#ƃ|Gl`o6?/%ediɣx7p]!;L>w>(w8bhQH#|VBt:!R"·݈o,->Gǧp|;Ȳ&e>[|Sr{Qkx~w.I^t:'OtbfԞzAS90MKܼyno #]py!۽(TZ!>d[ocW蝂/ؼqnuJccsM<'櫸IZ;6Ѝ"Gpt͍ 6ַ-~߱+[| _|7ofcK?Q8ЊC?-I0Kf% ۅъn^!$;{\]0i{,ͪhUPJ!RԚ0yDyvSW* c8 %:%{x'K+׷4Upq68d8-wos'[a!dvLUlIP9baI/˚,}DZNwC'$IcT+A)+n siV4K܎וZ/f膇Op5 68R.e/e  SRT_Itac+Zۛim48P*^TvazA` Eɪ(QʱqDZHcW ’oRU6dMA(!#-T|EF` +KR$,eUڍ€FkRR@\E^X#V)&Tvܢ,rƳ$9\,pE`FQh;8 5z.a/2*c4eYE mai+N}ug4 뽞0p62M҉iDI#JɐfTƿz-Ύg#6ktUo;6VkhځT . 8El$Wn(4唭e qØ$y-\.m8 !LJx.|PV9)[ǏOB__tU>a+D!C.g0bumMf1QbD>|U2cye/hW_ܣ,*_r͛7 [^G񃀏?w^agg ̍ <(r\\ftW)ʊ7n2L6nurַ6PfDw] ֺvoG;obΞi?[ofacsGUOU .yq:|. p IDAToMMGپ|)i)v'#Z]>}[D>uy睷9??r7xp8`:M"kF4UE] G/0/ c0FeP#j4b<"x &C|OY/w;!ׯm#L 3PB;0 %a3'UAƴݦF(尺AyLs"-00M@Zm#|lkS%q1r!3Vʧj26V1NI CJ}C)Poa:j v ߏ(ˊ9uVw=;d?(.la@Ji|ORW;@ F7E a"Ks1ZGUksy*|[P rQf N/x:ey%fmMľO5aR2gL'hSϿW@)X O_~3~p6~OZ} r4[҆N7f> fLOX^Zb0 4%'dӔ\i\c6w>>P|F}{l>' ĝ.IQN_W<4e!o\# |Wk}kߧ$s0Wom+w 3V(7m>3.+WɊOf4iKW͜>aO?c>ƛp]&IE*~ &ݡc}EuMyUM?}E^!0%IBB1iPcum0tyWy- 3B 7UQ Fϩ+A:~G` Wry1"/ X_]e:/ + HtQJRUrƸYL J 9i8:;eie)'4Js9<4Oܼr qp%vY҉CҪ`JeQRILZSV @`G*J)()+|_5tck#ЍuhTU6-Ҋ< i'шFJxRBi6G"]$kW|OY6"$ltCwQ7~x$,R2vp;Ns$MmvHJ +Eܲozj[h9N\|郶F$/mHE_3[]w~9;8;2jlNo9q2|%k4;G4L9hS! Bt6kLX\') lCoeҔ)'qbVhtC]8B1mڝ׳"0 %gG? /]aei?;W~?w ΏɘU<͡lE)d4eBLBB#x^ppFLӢ_"B:E[(׵$nסxLf4 ʺ8-'ϞpU>gC^{4*2V1#bu}^ ф2iBd-o!~_]h@;vx0 2~= {yxDB›Oq %/Y[Y. (*9kk ,/Y4 fb`$oQVۢ(*v}6ih4D6Ӊ[f)I2Z_ཕY[7x9/YYDA^ՔUcu9%/&Jd6NQxC%\YCPRY [< !].Y]q1qkEyENU &o]_2%TeҊ(ZB++vKSqc4Zk#{39~ i,ɓQR)i:g>Ov1qepV)M|F7 '@2\{Cf%|/~(Pp2EA(v$o另pAS5`pIQWhָHW0.a(4(%Q%,87BZ5`y]5F[]y#1n`F뚼(@v$srmvF)mH2Keu]F!JZMAUxJQ!y^6۰ pC^٢2~@5F,͑,-a RBf2øXJg`<+%^LÓ7iw:\^ U@Y]ߺԍu$V<+9ڳݽ%v@Ay!gg3.gjFSg gs0) :.O?[_A`MaR0i@+]WD`uhdG:a1=dFR>\h\fSrdYFۆx<#&Ai󚺮r1}=7~S CWVxW(˂s./,.*j.Jj-9Zk_ uS ymʞO*kQobTi(f jҦ\(9A ; G+3iBRA: r KRc}gTyx;k@Љڧj*ÓSD-Xؤr]z+kOOhhT8&9Jʲɳ3?~OxoQK%Ǝ,u)&CT ǧ'8̦37Cv\vrq:'|7Gv6?ɇJT5/9:?}1wosrtE㯹MWXb&1qi:xt}/b6щ;ԣyNjfY.w|!w^CU<9gVfee @@I$[lIےv(:k ;=VQEX#P*'_C,7MEFVEkϻD?C1l\&IVx /^=&{>ys|pH\Y[V*1M0M1Jp̧ϞLӡ\䳇8o_Pqp9}*Ptkܼ&qS F(0 t}$Ab:!/~QRH ۴0M}NNg%IQ X=<,æZ j( G& dYq!+^Z5KG$E"|2rRIƖEY&MtUby}4$Ã}ЦRnaSVh-,}gbр'Q-)kLgc &SRh<0Ȉ@(JAP5I MS)(3DQD5ܤH]lpf`!K]p(2y"Iqtx@:f,,/seݹ 0Ntd\\z7nl(y(Id@&Tjan.`E`E2@sI YeUJ ^es+Ed1Y.\eY(ү% Q: "[DE I!D$A‹8U2fn!%q:O6|r -9^Xhꡪj bgDq#@gdiFso@eI(YZqFcU.B<'3U!!gd8OSH4 P,^Ǯڼ;#"99$sƖHxQڬ6(mӨؔYb:`A2 "͛82$0X5V#7fyx~2OM<666y7޼؋5RBj5Ǐ&_s}o^z΋ÃWLG}$eJyyh#@5Ɠ,ǟ0j 94] Js\DR4 pBIRY :~e EPUE)ܿ\R<8Fh3!!08, LC޸&&?a:iI6qRmI cL79?=Dcd1ekkZS14xn}?~sW'Xܢ3 2EEDQD@,@P&i6'#HBar$ M.t7A.H’ f%s0!DQJ>_dd0T$OQe y|)JH@D$E 榯9XZ $%WP%(I |rf9eb Q$B("dQD u&e;Hӂc#Ks Bj$I4H)Y# E(YȂAV%nL*y^/_ *!c2y3⼁>9إR#ʥ~y!399ҴjxVQZ |jV(ɹwKU\d4u\w騚JHVkprqcx>|-| [rqF<~ a3Zlo┫|E.Lݔ8qyPjXhY_[mSUz3oS* BQtIO"wD3@VL]tY\ZZYATf)"53JeHb3!Rn$IY^hq{^ }FF {}>LMee G$@d9z+<=pY[WJiqsλic^d0N!KȠ ISONM$+/^_#Y,+Q1xKXA] IDATȪ(DI+dYL'Z1M+_҉B# >D G)(Ib6Q@A% 04jEsA'>NZe6g1F^R o~&L"TY!Mb*m Zn' Uy%$(JdeAXEd{!!$K,ϰ y1^N!WC Ĺ\9&Gd8p=i, QXI]҉"fWkb$`1s<'f9hY6%ILg"\ " J\#9gs{$JDq<UQ)_S8"՜0( #EȨIaDq oQYbQ9^X8>MGK-ɝO\&"FAJ4dH @P+ )rI'S4&1ղCoRa:iru棏?'lE6JR;8I#"d7h4\8:: M#5$UYgg*QPjxlK_ ޾Wg} EUʔm|2u}sJz!ĉ\D.hd:q,L?[OH2Kv)+4_ VV%7ow2bﲾd!sLě,7I#Nnqv;|󟢊pewȢUIӔO;˽q FDo ŝLje^zmu~x`S.qs ~௾CUAwyj%\7V_d:,C\G*hƥ+exÛD`Lg 'cTDd,g,Z~H֥mʵZa=c8wy35uq^ (R *Y/FS"WVɳE+waI,}"Ef< KbJT&)B< 8N15mvX4/ |aT~$?K$T]g4]?yFE0)2| CN) h6l6I"`YfE$y~yZRg)m$),i r/ņ@/آ.+k~aP IR$ S8=;cL;0 4AH`gg z/_ųD ʈg(Z@h'SF!W\⢍aX}~~]ƍMiNɲ|$ "FQqr L0u!/BsQ@²] @}Q Y,r ˅^' gREȊR0dO)9Z%<+:$$ Q2tlN3D璂,ZZ[6udIr4M( 䂌L0-ۄ\DY(e CA!W查(RWD]33HEU>̛]+N 4U8u B0 F\.QB A^:ay[o@׿~_p)V.!y\vJIE<} .qxrlnޢ7谸 aaqYXeU#JRYT.rlf:$Oky U!Ҝ\T ,&)S8*F<ؽr|7¶ʔKeڝgomP6T7@sDq@tBMOqydYBDOZ=6AAR"lQW,b]61n> EI0B (RNT⭷0M8~!:hexzM(@na)˭gTkԥ$F/,ūF *:W,Oc^p}NOϊRA:g*]}z]~+z8.AM 4ٻzǍ7h4<{1?Od w6?ea}MfEO+-]pm*UFTA%NOSGZ"\*";AyPL'0jɜH!1S[XbqqRաV)&~AY]_Tt e̒V<ЪeU A@ґd4#u],ah20*&/"TUÛ(1SB͂hd4HIHҘ8I}>˫8|@Z#I..locZ6lU$0|ŝϟ?m$Q$=A4mNp*{1If(q 99=~Я;ɗe%q묭,ǿ }ADo}>RL$u8X[og*PPJݳi 0eowU㜴﵉kIזP5LYZg eL!\B,ȒӳSVw.!F`QP*;0I)4y# xE_.YQwwehzƣGX]'"Nfi AHs\Ŵl8좃(oѲ`\lv->} &ͅ4}J?^[@Q߸B?#~ Zh"D {W9?9FlOq=$„هQD$lnrtz74L٫lS3RAG?k.p:p+M[(x䂀S*A1LG <*YIc]5 'Q4ޠK)EB65,KG|ʎ`DE#2D wB>gOeJ¢Ra6(ϏcXqa96$믬VTT@lJ}tL47/dyiX!Aq~>pЍa FE$4$1q%EVdJ*h>d y!^aX:rj!iQ!JB)! LLE,8 ž( qPL. c-YQ4!Y\hFܧ2ieHꬭn I A!^eNASƣBoe*na>YaZ^Mhwziv=NSBDG/Yl6_,C+10 P^\F!}&V 9.ZASÐTMgy" (*vvKe8 vwf,ʔ2AL6錻AbinD)pct: L?ADٴpjǷ>1?۟a\RŸxu4/kWTŸ4WBmq&]&TIBS5dAf:8GL8ؾLZT-fƸ4xɧxA mEl,rzr(J;u&3(p20N88ܧԗyxd4MDȒL`4N?(jRAߣVmraJ%fAM CCQ<~D\g4Xe<0O!t]. }N24YASE_dJdxGRﰷVt@\Bdrs$DE0'J1 _}_k}~f1'''4j54!t4[KYf$Ky枮=;.IL(`& MQ <2Q@ 2%GF hٱfn:ٔRF0q= pr~L@y}O1 vw.D*9\d>~HFdL VYT(ƲL8T8I?sl'31-vww4 ^ev.2 `YBg..ٺ]Q8#DW*\H+","g9s(`63EX]d?6 vucgŸ?ƗZeIL{4/:fkc/]c%m)OmbY# Sz!3C4,]3 ^!#*MwJS5J8*,,qx=IO IyT ț0gSDN/82$1 AY.5)%! \\Ed&?c2Q6+aDUԧnRk"Vnx6#)î6 <u ܸff+|M(D$Dx!Su/Q7 Oqp&c\bey<񃐅F òfdiF-iQ*UٹtKT$Y[ja]Cq66a~$ ،ex2&IRt(rx(9==e{)"!`! 9[>G{]TY}>AErK[;D~+']4~ 1Wbusc4l2 hW.Xi-y9*GGqKE{o* /%? &1{x.ɢ&%f6Yk,It]G%ʥPDL=5ani#*s`$ Q<%¢(diTD"ThWpeYE8 <-ptE w&D)CEtY]\?"%"NPDZ2( x,˟ Mf)͍4B0ЋT($+5L4'C콁$~/ܺqem^|zaB*z^*!f*1v[7bB ^)U89l/?cf)e24NlFZgqqц4Ce W FCE׶ݯ.,H8u,\~8.ITݘ;>իlnle)F`19"QR3Wwo^+7-TY.r~4di۷ywۜθy/sX[͛a2;O(1uƴL']S"FDh' z1]L2-.-C+BBeE-"WQ$tXY$0\vpt6#cV7izShwxp9n]W,DU!bn\cyeK]N?B4F+}Vɳ˅u+I4]$&c* 2J4Mg CDIb8L\#c,!s0DFa6"*(2ͅ5LD4D$4F0ҬjY dyMEHT;7Q5.aH$i8I?Zdiʙ$IMq%EAHSK (F&K.d SEs%䬬ф,)iZ\4MBl~cLB%$o~}676VCHEZEz$Xq4aQ# |DqJ)Q2d0ʄalmlbjzaI ?%H#M<%Ԧɭoj-Z&SlSn( %fHBL]^N˯J{ Gc4a 2ABVtAKFH"ByD*礩`8"#'}&'$]'J2ZK^D<}~BqJDI;H2qSA 0] q(KiL Dsجaض:l$QD4Ey}EYF (e\\\ +XNc^ $atlgc:E^+O#E6>^tF@ \TYR0 }4Q(thgdތt63"*)K@xyrd_66_RiS_lhywY]^&tƕ2SMQg)T+5,Ǫ 8U:Q58Uϛpi}Sv Z*lOzK-Lݠu.M:C*>y*BQ1mOGܽ;V''#LCA%>w|%1˭>R]Wx S]PutϩoEzcmUGSukef13$BVd6^YX]Yak$e9u=k$aG'/y-r9lTcӳctdNlȨסK(p0\&6 +DYc[zؕ: ~zR! t!9xcZ:7I{4M$Ȋa`e.mn)I2y \`pLju秹\ۑrvzd@UUQU Bw)h, -'b!KomnZЪE> KudUFTD]FDbdBg@V < |,PUX^]e22 MHFEXNƴdUTg)R6'qnHLyNTb6؎M)X/"cX6yaqɧRr,$Y&Ns/DQ (ʍoRT1 U,@ #e;} }ȪBgqd2gRMӴ HBVo,f..]! }m0UUI׏uece}!)JE"x2ј1fbbyG UUiiURrƣ pvY8i<;<`ɪwUҤH,fZy :#)~Qr(!KKl-Nw~H<~=s4&_t4=?ŲJ}_HHPkUc3 ZT5Xh-# ac!O|Lf3FW/Xm\* =fʢd6'1?D6l{ck{EޚS1"zS*$R#2V%)f! gǧlmnqG/1 4hc& ZX@1LNO$U)kׯ)Ku%{w~|-j:Z'X7ɓ4V*x~HedE~(lo,I.?M51"dJh_th-2arܾsR蘎% \i"N>4BR44Jh2dYNDYbMsL9B Ir?eoop'?'B2hwڵw*ܧZҾ@ g2>es}4'G<|*yx%MbH~EC**&gllo!}|Ah<>R8,S6/P_^tl.. F]vϋ?{V,Mhff;~|2bȡ(E Dם@@!. RuUYәf{.[ P5q:-[߻ާn4u01Yagqe] ]רDomA@(6k׏YN'TՊv240Lx⡈"-AgaL@ URt!N1 n3& e^ "!H I u! RKw1͐D4M(K MWVWU$ɴ]nf[3j w]׹y6P_}FDQ (<+Q, Q(WXħ)b fN*,bU*\!IR W yQ"J2q2@Loek{,͘-\12@Rr=zؼ"Eu{lnݥ4|]܀ӓsdYCeDrLCS4E 9+q]d=F5a]?y˧aJ-tɓCnp1[ q`)Ya6pU@%Hȸtihd1 MjX}'r\yL;wcC6s/gt;-}eTYt{=vw|޽KڙN͵uբm19:?c:nϞ=3WAL,XMOlA8N#+Nq62B/M35k/s&Qs|>b4-̚N&fwa#8l6IBT=~ eݻP͏?9z%_{&oF7jL<?x?˟w S0uB`{4a!2y%Ɋg1.Y?'<doq}2df&f /׮I3 @D벜O054R3 d!R!/3HIO'FF@gYA#IW < QVPd I["2eQ)ie,/V,C"NՕv^R%ј9(2ܸ{eW!E PP ʼIDy3)|,K_0BoRZ F8$:r:>$ K욍eb YE$2$eI OC Q4De4Q9~ asjYBw0@$4MJ]F%Et9HOo7ANABf8YzG ; F]Ċ QQI_4L`A^VxUA&;:K4U!=RFj8-W6ɞbk^'y.2{9e7w>B1 1^`<9cPkPQK9rUBCH#?Q*P=zt2eks` ۶ f$iɕ+W /888 |4Ƀ.eYﯳw2GG'^i79/_$#z"7\co{ /hZt[Mśrl8ʕ+&_pzVrw,w;<~yBdt]ݢX$IZ& ~%ZSVNJE, MW/q~zJCBVeYe<fv(;ׯo1_}DiIӌ×YhDI(ZeBE 3"V(EQ9QvFYTDArDD4E "`V9/_Uwp~xAeDABPU,N\i#K2y*zUjd2k4 *D%8<IDI@YJQ TD,$3M0-,)ʔZ6}[Rb*Q4$H$ȲfO%nESY.(v Oh4گilQ ,qzR$"FlCfI~NNU5OO4N(ႂE1#j&PQaP6y9>}yʏ?`IVGRU"_) p2^w譭Nw@l؄YZÏ>f _ z0f8Slil78<>"ª9d(F sJd52'JBb=)N#d$Jξ>gn)( Y,,☟B{,IbX1 w$I equ_|q3%w{o#ֶ/Ө䡋Hqȣ^~4Y!IBLKCTEf\"V "Wb ESj8hR(FEDTA"cLF@$/2qHDB&L&sTE, UU,JdIPLƣggHR^a(YVݻt_L0(hYV骪(ia6^xDANQ @4,$M2%ID!F$ɋE0)n6X.Se:b9%XQ1 iep. 4 3 ]' J dss^GPTloE)Ko(Hz}$ Dy}*K\RPu !gO§Td^I0պa%2y5¨JD+ΎOVZayqH9a1[R6z 9rtC?<㉟'O>]6nX%abiIJ^;mLDC8F)Usr,Vfw@a<r|>ً#v6//k_FQtTED?x $>4)?SClReܼNeqAD{FJ"}B߇J@5-P40 \|Ͽx:BU%y J<:ݶv2QxKʕ{-=~'\m_xMxqlp:$&UYR9'F1BUR! =xEUXv U0%Ljy@)  5$#OK4͢gƓ9U2p۬0";s y6 ""IQ]CVW_"^{+?46oH ct1A:xqa@&YL˵W89=d8:D7jDXNlmr"BdI])jzUTpC7-rף4bv:YeEi3>>GӤh'Bu"O1l~f$I~J@Wb4[RT"n(˒۷oqFEV UE*֐E,% Sd@Mn]F1L8Ic԰,BPH Fr1fm}z4͹vp R ED;WM:76R&l1oY7l>cDI_#]Ii6ʂ+7{1iqi뀼k,3 r4ۦe($c:VUq]t{, )U0"Wtfg# )f͡;X윽7ӦR]9>!\C$"歷^FeFY蒓 ۶i5 گ?y `5bmzNW,I`[l쑗Qp9y`&IZPDQeu0(h4[6&T"_-Y q3O>3NOOZ "ϟQ:v/~UVPTDo0@MOiq~vJTE\@ݹ\dq$yN@( TI`k{H$Qg1 f%I^Cֻm`s"w(-")<łf-hZ*Ĝv,PWEdEb6ck~c4蘼5W.swxacLʢ,rA>uU{ɫTf"plbvӦ7Vg(HJ@'B GQ}"+"ɒdSkf9 'iG"!Ir|`4 =0VDoA sEa6ܼ~ MTVe*DXxi2qMIB5U.5U!|A4|ץjXz4,,ϑ ]b+D*JEIQye%( ċBde5<+ɲQX: +McF?4MF%%n/$S}0 oDQL·ZYLi8,cVKEVDLYE [ٝ(\!* l>'Cӏ;ͻ߽D"d~,>VtD_04s]^q95&>Mh%_[5d,N!i1u2/ElLj6IsbpxADI̠NA(4jn$%P?GsGSʢ 2QL"TMfsc~ c:yRY'ZmãC&?G?4i6<{Cƣ1U'g 'cnl6Lc%ZNP4tj # IDATx1"#R,~M`ۈi'#v2_̨Ss i75-;YΓ%I٠8Eƻ7r>9FB/dޥ֨srr,$HTlvt1ge2h+,e֙!:oc>qeḅ'wqu>T b4b8Sq흏ok)y("'UiN0ONYC2Jb8CL:Aa)t:FQ E@T4Sv lȝ;w7nUO^*+dI"Oc _.ܤQsz~'idB7t^Ii-EDj:Iy/.]v7~]g>٬v<US'/2*Į,D *Vo*"cNH☚aQ( QcR)IR)eZM)A) $ +0gFTP/j u4͢*%$F1q}v-uIddz(I)W[UQe f<-hw( #=Өe3>fR~)Rf%]'GDŽa$ a[|Y7ϟb2L -]zM%"+s4YYj%AXMDY&Ril4{-O_7|_p{z?bvF%`Xuq@Y (j / (,@9:ƻr$<8/sIHUxU(,Jq:z]lUmZdYNJ$-YۤDIF4^fP&&-Љ9?'G/YߺbC?'|͛7 NH Dd$T:mL݄?e$0US:.-44'NNЍ:ӅF%2`7)ӥQﱈ+>yo~7@oƮ)?4j >~4NS֡8=9(3:Nh̷CU QQ5yw cQH,Ii8^d5 䔗Gv!&sr[|߲k! %2;_=}E\\ FW5mo1vm(py ! 6E)J Z9,89=Ŭ7KDtƨY[6Nbo>2T iqch*A"+" B^TyL#+*~"b , N3@!.**i5I%id%dqFUTB,< UU!I"eYY,ijpuEh JfQŒZNg+K.{JAĬV,'O W$ȲQucղdϱLmbNY$E6iQ,+)q9`Z%I͆ (D)ſiY6is4νovTxOg$IJi" ;;Xy!rN$HIJ@$t '7 2d,ɧp?_Y*=n8:9CV@Q'ƣUUqs, NTʓgcdbnf`t|vb RZN]˿{{,sMf_{pu '#._th<YUSlpjL=* ZaXa@'˴ȳ l1ßo7A$)hreDYnՙT2g:[bhw2%A?NТvwӓc%"8C54V3h4LIB HRB.99͈BbJ^t;9Fw߻S2P`X6SwNRG7PP(+MSqvʹyy<H{h"H|&?<-?͑ ^Q5xY0t񔢄8hW2NC-I2F]C }Q=ΏPS`f)wi w:/"z.׉Ғcr* F$lm!H*ZM70$iE┛o_QAtdA`:1mQɃYf|qq,sOW ?o9^N*?zdDk\Seq V7nu{'~]j(GQJl\gMeskTLgS j5z~3hdf+bI4ֺ}NNL2I3, E.\^c{7~gO)Fl#2 )Qa&!%ipH^ TThn̖3l^,ː$˲/p99:J0B4V&dNYVdjB\_x H(;DiDͲI]3x%""*en*LJ/E]C3M$#MA@)A"KsdQ0 IST99=dDe4TYNQ+a BЧ,J 7 2dvȶEE4mN(|tZ)oޠ3i: 4/U#^GLgߘ?>>DFC\eS % "UNDs@%Y#Gl@5HQ7i!+cek2D˱7km7(t7dBVarWTm1Th@^(*SE|Ų,$%Mr4U( 0"K,wZ$|jdӨ+""ʂ05fʋgUm_ߧ^iy"3QU$q7/4^3\w7Ӝ|hNFB+,W3.W^ UX֨Fl6IJe Ӭ s寮xrƵCF)*qq2̗+Td=pٛ>VDEM4:8\5(Mi6,z]<HjFjJbJMئ䜝]k`:+ìH"O)Hℴ?6l aX:??Gr2 JA:aߢbUØS'B$KfzKJj/?'_I,}t:M °tk(wCSe:6npxae9Aq{ȱYgOh,eHNVeo$qsLF]`{{EQiU *BƜPM4CZ59h$j Q⢋ppaW=ZAۯ]?,}[VK(J, 2񫭵JIq]k?FT$B +@e^FhLHӂvAR %|4Aj" AꨪJD BalheYJ7A(mB2,Ӝ(<MPuei:y*t6CD"^kQd9ER9y٦t>F37ϲ,)S˂$1 iQF=`Z"T+h4"H3 $N4^{k$%/ b f"y+4M4c# 9fbVW5$b:&A! jVLU*˵O^d5_p7fC3LgDQLF#prO*n4[Ռ"rv~ٜoi4y{jc:_ o ĂeLF" $aZs1d)I4FRwT%v:AɃ\qlwDix!>,sf)Zf<3Qdk\^"߸t8l2q,DZz O< s/θu|=^n6/xܻQ"nK=~/De.v9 ??j ϟ>`|uG}jLۮoYW Fso1dtyKypxm(PeN~QbDN?$Z&] IDATb׮zihZk5[:R18vJ'\M&EtrA^ AgjIYB֢lqD2G3 @DQ!L CR +RdAE_5& ƨg@QH(DI UP$bԛ Dr:zmm4FtWBS,/=…2l_! +>g9Pb9ɂ$ʒӓcz-*T˲0 g)AUTdY!O56oFT IQg_ q<#J!ZLs$]ÏcZ{xZ@GT5$FVf8<=Yn eNŲ `*~g?<Qh FZ_ Ŋ~cBC>)w#j͟};z;~|>?3JWW"S 3Jc޻Gfyν8:,S\/f6[*')Q"%q䳽whJT+ﴐ {=*?Qz'9#Rb*f3TQc>+$oM&Z-`6/N_ YQ31-76m;E,?q޻t[ms[oRh1/ڥ^ke=n 7/]d CnjQv{k./7 $* aHQȊ|EV'/J ĮUQ5Q*B,IҐ4M4$ p5*$)c8"sچAT$OE(iDIJbؼQv/yMNo1ZIEĖ@i$Kͬ+*:qn6 EY>]MܽG$E@*ZQzA-r-p=0*6bb'!FATm"g4TI)U2H^ Ƽ|%XΏ_'&o_[*=tݤ(!>OT8hS>WLg3n߾l>bLGܸylD^CHF"+^o(^ [ZV$ O/=[CP:N4Y-oo,]moIY q E7(ʜrܾ{]SU-4H0)|ŗ+BTI miݭ.|5Ns&!f f~r5g1LS4 0oqr2cZqpp̗3Z匣k78>9|p`B >|jzEQHoҙ<4 4kp5]Ż?ĴldEư+(YO'R~$UȅM5[JVs8^o!t[躁a踮IDmu<% "֞mWqW.i;~P /IB@t:[u,CEDb^m:Dz(wtSƑbYa}D4MCE$VuNgec, C&%C! aJ)~8PNVȲj9CMz1Z4) 4X?DU\!RLӠFTJQ{loc;pzvË'8|8aͤQP OFF ;, tz(G+C'Fũ" "钗4mB`^3mLA|IJ$N4w= Lc &+i"+ i!fHX<+i7$ED0,4Môl$EU5<&|Ƕ+HR%}յRe4HIrbD;Mh4|iBծ|J((Ȭ=Zf$-֫%ZL뀢,>( 7nA%dI$b Ӥ(3-J2k={HkwBHӶD''afg8P)08?#sj2Cn{IbnSf9$RmWXsh7tp!+ YHqQJ[ `|5@@"2|?dOj(e"i9Պ*N(tzSTSG. ,EG5bYeTy9Q);X7_|8;|3gK,x5K"#Ls,ws4YaMFWDb3\q|rB'[u4K <ƭ[L'c8ewPH"$ ;]"*#v}L$#IӔy׫n):yd0:bQ-gԛ T]`:dy# "eY`ZZ7N=A4Ncn[~HV%tME$V9fwdN 3,ۦ~̓gO$T+m&S(x "!"2Q4?ObI7)u,tV4!s ŀlSn6pHx@+2TIvmT)K8 @E?Q EL]3H”fNV%MRO?&+r~_>Yuכ} ? qfk֨6DqJ, $U%Kr4awwˮaZU<95y UQ) " 0<6LZIq>Q1%)4ͰU" C>B <%NCB"6i9Y1z!XRWW5[72J)DDA@2ʘZf2!.\4btv)Hz ID^& "f2d Eǐ4-K oӴpX4:@]AK,0g|ßdqx4/qjHvȲB0t$E MB2G1L ˦aXLs0"2.$Y5̧+DR,9'r\?GLTrpvY">!Z B(D,]p9^?%I6X}4s,S% Ch4|~!+"˲EV4SCD޽(ؖXx56˕K&+ *MXt8'$eDT*u3(+?}FovAZ( . 0U,ij@Q%T*k?#(EsfEoe8H2 #GW@9d$Dч 2,Iq5MHYh4ưyAHFHYAA a!"p~zNmx7Qp]D\ߥZefBQ ѓضvY{k6vJf mj6(K$ CdD $!sDDWdY&J20B%[:6FzFfs Iʂrlm\.eimI7PS?{jp4ƴjtz+魱y70@,)X]JC!Jc恇(=z'VFKΣ'ع`>d۩zYב4^CXS!E!E)&N9a*I6vz/O&WE>?8!n?iXMuE`9P "gsq1l}&c[biI32w8x/ڍ TH^b6уoeʂ \Ga20-/IE ^Oձvn@E D댭.NŦ3\E vwv@Ȳt|lkTp7!7Q4GGG4?cέ7Ayo9B<'Gf4] )*1pu5"3$S:/dwEyY.4&B²vI%/AYc 1(ɳIhۈ%KVEUUVI;;.Q5NEH{klKR?)߽_:/]#tLHK:A N! F!"ezr-xX70+9P2Й/؊%iYMsbՊջGr*  X6Ff-_Vk|=}Os*d ܺ~dpv5,J0fv5AQd|Eb:A~knݸrGܸ{SmѩZjxrhWɛ5("s4g`0/t;%!_}[ U"G* ~٧,f>៲OYɘY' %Yb,&1tco^ii~gHˆ~H']^pwO%ѐrݻw?GZ:)ݭNv9ggoYYR7g &Ȫpxŵ.P;;D |9()%TR7(DSSYfԪQ^jCEBmb c(NTMG HRBGKcgOò+hz%SVe 4uw] IDAT`8@evww*RDj^!"2(>yJLm#:7VI|>GU4%׮ߧވ\EC8\fܹGO? ?|WKĸ@OeV9q+F USQDluxTTLGJ_rJ!#M8 $N^*IӶk$똭vA N3JQED%ft.L#?-Yxkܣh 9d"?/VqO?m4a݀8;x$̨8V Q!zׯw/v m1b<ҭظ6l%GGUǏw{x3f8 .8ib:39sVͳg9 +de%$j̓/zBݛ(*,fsn]p4bzԚmZ>_?zj;T= tWyb:BulFt8uabgoM7_ާ(r)(b6#+ ~m >-~\)Y RpM{5<|XT\L,MW1 4]Sp,0/1TYXΖm{)m<'/ Etqj JULFcf( x>! ʢYXN$arQ F1)cZ]6p(8@j"KbF)HZgZ`Y ֬<ӱ>15fZ%i1f8 8N9??[Cu,äRdY,nGs{ ^|w_fsdNHĂ@Ĥ( +ļKDQc%e"S1SF1)1C+dI"+KYFd":fOeJ]3NO? 1VW_GثZ  *ݮMS5uTY"#64F.u]&c~g^,xtx-FϿ'/uΎ_dшͷBOPR rE iVb%hhxfwɒ&B&[yNݡݨKfC(jbj:ݫ=TݠHsKU#bK Yei60 9Dq Q!iyR * ٔG'$IFӶgOe<4FnUp=ؠa$!2dſ*-zy+~)y^uM5H*!%bF[ l鰶'Ir\,+ D$Y&/ ҬD \'*a!2#:E#+jr@UDYEDRIJBQԯ@2.*j$[=4% 箟ߤ }#&\r@}c4x>eقKepyz?lr,+LwC^ 63G25%z(9\g9_OYZcpPoK2ӐN4cˊYhgZ6E,PoHt`gc7HӒ$RJB@{p͛<3]Ts+A.|CTAA 4a {Ȣi i4ԪZ0LZ,O0 ^b>Ie5b&v_S{qttV׮]#>.ob9F-ɇl53va;p̦B@VM<ǥ]z!{ȲaX #8e:yI\"Y_No/٠ﱽIV|҄VC%ܽw (h۷nrt<`,]$IeעӮqq~UhֹfrA)iUȪt[EkiNQ\/K|m]?#6;w(Y$$N"UQVse۴ɒU`n!a"J2y.e"Ka䒗%i`YPYQi֭S $l>:hdYAQA5IQ%4CnG,K`6 `AE1A"k2_|DBEEQ <g֤p|CS(=*ٱlS A& =(!(Z6U:$In5m;!9,mۤB1&!% ̙Trc[FCHDoq1}6wj9b|Ko?dMX̽kyt\"1Z,Et |8[C44i֘M,܀N eb[Wڸ&U՝;\zլ1{6h&|1NgHJb԰k|y\Es}|lL??# ڛGHDYH^i)B%}@Ư?mDUˇwIZIVc;8;?s\~ tEe8typ`@Ummf4[m~{nD )[{w!c4jQe%M)")~`w65~ IRZGgo6P^"U%p>=wa wHJYG$[ $IDW45e"9ݸAfp]$El1 2 W(v֐uYYX_cf 78%t],EJrl`>sɳ]m`IExAeYqJIEh,H̗[8VYC666}dHHj5.K%R$BDqM S_=i  +*>$0]-3dY`4:9hNDIȊDXVFi[xC$H@QHBE$ȲhF@ c%ZA箟ߤ }#* yr!_'v8 g<.'''熴:Tx3}*j^!Q2LYG$l[L&QLn1uMENOCg40U& &k{Y@eQPX:W>QC8aA=TM d8nʣU<\s+gcbbq9RdZ<924Unuܹo Pp#fb7ȪlW_~AgI 6pWlln0tB>PfwcmtEfWO2񼄏>j$/2ktz[ȪGdk"No5/]~y4C%]2Nxi`:FuZ:oJX-M#*tF%f1fa.b<+"KrN , Qx4.<:z$QL䍷a[kOǮ5umD23궁s9[`h ftY&K0e>{oco~?e2' U^,m"/&MbʲCdEÉc8$"9w,Y6h[Q@,ᜋ)pp}{:CwJ$dIѮ㫫oh"[M\A "#TM0t6eQ e*c*,1ٔ#,CD4UfkO^Xk\v`4B WPqhn]QzAE @QdTUe<}t,ϱ,$V[vbj %E^0Ni5[$IBEVB*+TE*FPe$MX,( UEVGF"+VKYYo5We(o_46/Hodq ۢ%rU]XTlt,=65SGLs޺2ŕ}T< F!EonJmFt6R+}A(* ?KXwXNz Op㘶ab:ݨa:*|I٦R=7q- n{^4a2VsBsm?]C$.YNo ) iQY') ky@mvyz4qV\98@$j6ePk4g؆\ams]~ˏ&cI!\ܸEt׺)f|N+Yc"E;{Vk/F$_;|q3 ]#8BVdM'S@dr9i.#z~S&=MŰ,Ua>9*+$'B n8"ΖdeIR肂((J$dUT,it]ddA$NbT}e% LFWE)YYju ld<&%v$M)ʒ^( C^#/K(qjD4Y4QZA*\zIR0:IRU%IY.LFOkDYh{>]/>b_!K*9p."-;أJ&qѢ$k8~HXiyoDBMְu [E8& (n5P q1G*c[.5dIy2'_x \FM*(63gIH3$l4"wy!re j 6huz<{vFxN@Y 8zWf0$YZ$IF 0t YI A"B7x~78<oQ)YkLKEnLǗNŶYVAnrqz~Щm"6ڌ.H9xe^۷nq䈛o~S^*阛/]c2`[ ~5O9> :ib0 ʜNΫn KdIpwL6W^Ӈ8iߤ,+$ɳ>@S%DILjjȒr4ɽGm[iK:U: ZSDS|>Ic57ѵ:NOO?YJQGUZuuh],Ke1>8>~JwQ䜝U8#@2Vjw~$QEbDT{(HVP Ίtf 9<@Qd$0!eFQb%B)"HO(gX(h "~ d$HJDD6thp(b" 4dqJ8[0?\\"u{Ȗdx$I[ $U@e?9|B&4EdeJUk6Ajlo18A54{?WnT4zxo巯ʒ?5zlr>F3lM 4fl3t`@T./Nɣ:Yÿ5I,&KvßReQy[kq_+;g2d<ݻ?3\wի{x`Q6Be4 ]IAڭܹs;_|>ԛ8.b )JUppr̳'GDaD}4/"mJI&S!Q֛op> }8n2/<Th{:"1w.׮^^Flmlcm>~_~A~_.Kg4[lQd);a\\K.a0o=Wi(+L^{u 1ɐVEPU`H(,.a!I |zC:y:f<#8$Jt<'Ws&'SGm -ײlQLG9ZaN袌 ,#v%К $}VJDd2G#ߩYR%q!fȍ18'CFΜ윷z~UF_| !Y!K#NO FsaX6劳c>"?ʙ/Bs\B5j\z-Q Qc>uHF?{Jf8Y_a"gGlnRŘw>%4e!(F_|d}g.MQT HrAU _~u (+7_rKvë{L#"K88gXlwM676eQރU( jEX%gwwYzE%Ygqxp* V>M" kuDI@48D40"C/},$K*05Ī"+E2 vLOEXC+c06 ,c>"{{r5F!C999 doI^ThA^ֺ-Ã4i;Ț.DhZI%I9ضMVضW$gQSU9 H,bV^o-D 1ɲ CӐ$4fdY$I-Fm CBU,Gw0$#K~ q魣_>8YNhR^ IDAT6p3ofl=w&hl^iz~-Y?[79=~:Ы8 "hUi ^37BeN;ābt9y(1UbxI{ý6ۘLsK Qb2 }U30j $I hr|JŔi|:lGmCCgyV89[PU)p_}kI$S4D"G7,,AUzhTgC/oq݀(Đ%Lte0-V<"J.> }כ,GO?8K\?a>񃄝-F9%{ض͝;”$dli }q4i T^2Ś6# :3 Q0te0w 0wep.4ա-.N&;f~wmK )Fa2_hvWlYFRKA`&$]4M<"G%tI,J$ |Z&i( l<(++G / [)MH4N,I^Kʲ"E%Jc$c`JVT!iJEX(PT@^dBqUo!h(QH!"Qc&rI^J$q$G/F$+~'x1O֭[b (h5H.g~,sm_cVN**x bcL,2MCAF,S~oӯdUTPL,KMF]%MK|xsspxOVݚ'&BUF໤Ebg ]MI }kS|᭷d4u9?)nb`w$<(ȢvT%EQ )I?ewn( w|4j+V-i6lF R%zM=ױ_+pF\Nfg8)z].(aG1 VjovCł Lf34r8Feߍ"Ms( Z&Ql6D9IVEOUV%I2J5 Ae<(?? }#r㣧j{|_|Bצh*G!W6 ?p).MC-2CT`B(m4G7$J "EC3&4E&Jr'c KΎϩ5ZPe'**(P!r:UEjl514Zw&QD)뜜=rt7[W SQh[\]"UpsIL ҩLRAaEO8;;=n$)Ubyw(,Kv(l,DA(]S4:=tUg}:'ǜ]wADIp]lcwߥ]GLLCek{Й`tC=FQ5 Zc: (hv:h%lWqqpx U63[8TYk%ɔQ^wѠqv~:hxfqʒpBQ䜝^/GlwPt7^R-F}w۷o?Ǖ,I$3NOh-~;o3xIR_G)OIY,$iNdIX34mYHIG "`Q QH҄0@(*(%(%ju91_,5pYLWhZJA5Y$+xn PmX![IB(IBi(I\^5,KClf1>P>r q" q#D1 KjMU*yzK:Eqa# V"bLUH $OU,c RH/UU)))2j4ɪ/'5" #T]w'* ~nmj&+%TQpTolebtrBoMJX5*H4 {Af?9A%ꨊJiSeYi2iR +{ Ξ`3?Ν>Cmx R7dp?A{l#/߶:%ј4謯᧟<>z|p[E n_ OsW\TivQtzx4bp~z,X{[IIIY;xbY. ]Û/)muymn@6V߿Gc2p|21[xe#)q%k] ?& "| K]xLC^{56V^4`p~(2Ã]4S"=<ÙH_Gdz<;~rkIn#Cy躊ɬ0 "yWpr~IADQa& ]?f/&lmn1UQҴ5$QH Q_nIESNw(ΉA(iwS*\Y$ED$0 Da" pDdY8CnNAiVݘ`kD48Z› g>c2g)sz6 S' !K/chYJc0 &*W:`:cd T(MPT 4,Oh6<|0M(ð)K$(hBEF ES(IHӌ<-)ЉF T?e^46/&Ir9v ,QEdtC6iAPNFt{=Gx2iuΒY'|6{6U8GBR&Vs 1  Y!#18ha:,2_o7Ȳ_:r12xrr>ַEK$LH ”(j.{(Jyr㋈'F/;DoQz:a+ ;[hnQDdYW8~v﯌e3r?=uK{8ͬX,PM1Vi6 R˹ ]u[ VÍkt6%)2wPʄ" }ATӊAֶzdy$Q Osw0&ٜnb1#KrQ%d~xC1$?sTAhWͽC^JPVhͭW^K6(g9a"ň4Mi<=9]gȲ?J rI!H_ H4ˬQP"NwmD? M3u4e:1_.e]LST$R2-,U]ՆM4ګf1X` i)nvI)YYYMً-/j\|F4p]ӳSj2N%ȊLQeh4[mF>iFHiy$I~"ɴk5,m$ 벹L*8K n )*qeWEWoP5[ @(3(Gf| g2ŝ <@0-YoV3 A,::єjƷ$qijEFTkUWe0j~MSXkSHY_]Fa0*Ă*KK pvrgOx ]*ј{??!In" ͣf2cQ}2KKȂ-x,O3icV\\vy;!!R67h;'g3f!ZU 8N aNQnVq\'p)YӴ(ahvJ!M!H""" EY"zdbsr(L48y a"2Q:e1u(ei!J0N Je,>P5Z'TUg<#"!% L]ƛd%afU7 (KeAM(U3L1*2 (N=LM$!Y2i㑃]PnwVP ˫<~4&DhA$q XIQh/^ؼWo4 ?9puB377G) q:bYoM9(0RRf3O[DFѪ`m&CknL% wq C̸r0$ <7=nT BݧݾgSݹKw0"TX_Ƶ9g'lOȒx8_[wi5j$"C)2KdYN^eggYf>g\qyMjV41l_}SҬDtD`8_Gַ;_4udY`ss/~)y2b:sik80E,348?;g8cV4,U b'Y]Zl2b}*Qԧ(^X_^$MBHB(Ny%z*AnՊŕ+WF=.9C>B&K޼ GSFiiՐUU/ϘLGdaDR6Ovx1{VNĴte^!K G?$,nܼ> &X]g~I';aD$OF|OaWD"T 90;D$G@ >E*&̢lըwxwDWmǮؖ^zEV "K(ʒ[[Dm,90@+ V:M% 3j=/8{}UF!?el%i( IdyͫMjz EӰ,x9qJǤYp8xN=xIl^+b|ٯMgG<>ss-חs^ Fx!2$"\4X> IDAT@f[i*6wcy~m.Qeͯ؋8u2Mc! f>KȔY3{\]^ѣg,W}/z}n޼P,.,0x!>$M3J%$ѨQ9\^/>୷΃ܿce}"6 L]%cGE q&hLf0 INZ &.+DGǸeY\\\0iBcWt=#,ln3T,ãSnz<`nyY4]{OtwڧU9NgY>׮SͣWT{}F!GGȒ]ouϟeydr.+T:7C=g#m np ܑnDfMPq\zUܸ$I f(999Q BV+8ޔo1Ad}i O: dj"K2+T$`UPTJ(4Vϳg<U5TUٺwDLB$4j6e"o)7n^gPWi=?$ <sg2ufe)P  5im(1 \A%n2[I"e!>PtY! 6y%P>_cyaNR$AYRҔEY;oE^A@YmWiA'("G ص*P٬j U Aў'DVM@Y C]Ct|}xIl^+A**wn^j#~ɧ(|TUQl]Ҍ3 a G\^ocWt~N8XK΀NFjz<U_NwSCLMeU#~A%1KsmwsucޠO7 P*ǃkWcAטTIW}/< <}GǤ Y][жm$ ?zH^0 ><}e?cee并DUe:I!Trm:Yar::f~a0~#ǣj6a}}Vɽ{c*TϾ$Nr藿~\2gQ[Wqi#2',bs$I|ϰu$G-/g|Y\\w}( |$Ck[蚎\"";rxTBHR|/| 0`<h($HIJ{nA FQxvtLj:cg`i$qDfm}E޺_|Ư~gO)L4, 7o ÑOQ8Eyw@g&yPR11靟#2zC׈v{nq̃{>((A!EQ IF€R( uz}V2 `X(\' #.9mS&iE1#!ZŃ%8($'4 \C5dI%|#l2 xk/IE,/+-F> R̊)FI5F!|,cZU:6~kwo1:ڸ$Cq}1y'2ܥnI$ޔյ58ɽ&ScUz3 1G;(,xͰ/x?g~yLֱLA(GT+BL|OOrmAR8;>*Y@Ze:^l\RY]YFVDC8#$6/@NKƨ{aJFReam"R5hBô bH/bO"O7MZ" VͤۿdyyȋaKNt"bnTUay]}s`DDɐg'''eNBErvMHQ5"Iǔ%q[oIyB{a$;q U捛lml*ͭ8+YHKj&TнQ6e`qi0JTMC>_bʽ'?')UD@EVֶil,C $IA(VQd YO"#Me٬0uAE>)Q5%J LGC ggX ǻ_B {z [~'\Xl8!OQTBa]kXz>ͶEg̎ <.b2@DJGl Q)b1Ye݉Nh䳚wTPMA[fa,TLĮ ?CE4L* Rm$!pߣ@IJ*uDQF@IFȲHQiX$9m8\^3N@L  XNj-dIDd,#fA b( XbZ''"/܀~Hծ+SYa~NHӘ($8Ju?ȳA,-cqMe4 b23FT R%l<6o3Q[$FcJQdskiSP40/Oi/lp> Z- ØNj&s?GT Is9y^Ь9D6R>=ǧ$ZnYJ㽧l"veO+b/IJؾ PP3'm7Ws~rB*JT8~ˆEE,^ǵVsesdqyyY#_͚+ׯRq]Q6Xߠ?ybWLv)2sZ6a$ J r9~vg$$J9 PaH2QE/|"Љt4qc(BE@*ad0uE8C^31p:$)eij 7bTH,P 4-W[hA,;GD ǮTM $qKTEA$,& PTwɄ$͐%SӰuij:y!P)!2Z ɲ4ErӲP$VghnCfN"@A) *KN*a(*P)$d) cXtTg]ԡ^c2zִ g%yfR)-Cv[7o-rzzFg~_~+(˵&롉J{$Ӥm۬,X\갻)ɬlp+nJorv9->Wܹ{'O_#O"]rӰX4':"*Z J`9;]9 )! C9jkkFc00ۥjt69>x)3`k6eooEl n2)J6?! dY삻oɨAEG?$S:cʢ37eN6[ B:|]EFdifXfkziH1y  CN"\dї_wPe'hl\j/"&^L<*@<$}jV+[(OvIgqS9I:zyAb<E %yQYVbYixiZ覎 FղĒ ̊F=\@1#5 j4CWŒ<%(sPd ZUYBP\Fm8a2q)0N &Aijt:pvSE3*h$DIatTY"2dVw Iȥe( PTUOE%NdqDz!>YV{>E!ID4G@"KFGH(fN/ETU8~N30%zNl-] ω_a(4!,; ;cm1|Il^+Ahp7S7_79Dze~ˏƻ!KR>cM) |s·](pťr'}ǜt)'SלO\_cdYʻx< ޷soTK\F=ߥ7/mBE -..89hl ;#S>ysXX q3Wp&c\Ķm>,옳.Uщ4EYE{OJgEɭۯ(2\^^b~O! "!I"Z'U&)Cii6u(R^ uKcqCfie6)$v{ť6$JIjQ}$2 hZ<~]ױm(zqdamDEf8"rE4MHUfeϷ14]C(&Lb Gs=/=a~ih5PTU3 Hu9;;O3Z8J)|n.y;dmf{8N*ϞuugY[[cmmmeNiȲL^CUU:eYR/jyx2ELFRD|7jWҔzi*A$(︌c\%36$+0J>dȝ̡#pt|ڬfEY2^$idyaX"E6[I9%b|'c Ub\LBdYU Ȳ MUyy1{MWyQT T$q)iFn_g0eY,4(h4k,.,Ƭ2˟(BVCEl&2& 1" E Eq,- ]j:\zFS,-(//Z$1. ބ+ɠͥ%C9?n3Eh6l Q {yehVm,3?k7i.-џQe,uYXןNDKUcj?_%v淿x8 |LMŪ0 .1z1t=RZp:J3gnr Y]]^m j6 ]2*ditЬE&s~r7W6k\~A [q\4Ѭy0h05<}ybYɔpȻK( oɲ3euuKhT s,..b6j?8:=E4M$A=w|%W07Ӝ.9\-|r i)cTz5+dY!zPyr0@)V[+<=ì,qhry|ILˈn/,qkK<ޡ C:u È fMݧ,ηa>IWw9#9هlU_(q\Ĉ//T G?f "cZ~U ɓ](@J8BUUΧӲe׍y>GGFܼyNE&a0 + Ny7ɲ8o A99=uBߥ͒o/{xOO~t갸p4RsoJza0R, `0qCڻ]?nr9lKKIhGyL~"@_@A8M"Ȳزdy.$IQ Xn|fdop/_Z~ p-s"IVvyQ~7z~>|p?(nQ~'^IモOswϟ>ʯ(k6?ɵvVFiw G9=g\r%^?k<~00}AYNN՗g<[냬zMCVJ~7j$izsqvr|~$YM^].pE7Wֳ/$0$b)5u:4MEvww駟&yWtr1d?ggiNz&kkbZ`eôm?^|oyݧ7\.Y.E.&,<=yA(^|,$rrtN98̳2lLYvz9l2 2endcj{VNΦ(L:i.,./ޝI{Ür4Yֵ{;ϲ e?d$[^&_dԶY\.3Hf=f~vkܜ.ri,j\<l~J~o*_e9oʕ+gmJIխ,8=;Vǯ=~.rNIl~~K7vߤiziW̦ o\br[Oիʧ'Y.4L^4MoyHn},wI۶M@^ˬsu9OӴGY__~..f2zk'?OskFEr6_~ٺz-t^NOǹg{}e`"zM^/ܽ};?*xM,,3lh?wN3\4E6Fyiiڶh/^d6'Ym5ʷN3\tr1λwX$Eg繸8a>aܼv-^/,I3ؾ?i{ g/ki[.B~߾C?F'lx:o*׏a&ޘO|ߧkpxo} ׏a&=a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(Ce a!l2 P6@(i&>?b㜜i[.yI˗/?tjiɍZdD4cIENDB`DarkRadiant-2.14.0/doc/img/brush_flipx.png000066400000000000000000000003261413722237400203440ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME7Y"ZcIDAT(ݒA 0W?驅KBJ;4TD0ͷ]}D`̙qIeׅY˲c<yo?13uV?x3IENDB`DarkRadiant-2.14.0/doc/img/brush_flipy.png000066400000000000000000000003161413722237400203440ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME7Y"Z[IDAT(ݒA 0~<ӓ`r(r!kb=ӌvXSN[AWHs_=P%^ $9r,ϒX?/9Xi$IENDB`DarkRadiant-2.14.0/doc/img/brush_flipz.png000066400000000000000000000003261413722237400203460ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME6^cIDAT(ݒ 0Co~yv*tNaJ*$T%awNo|0 cLbxz2mĖ,!) WV,\5#\He"IENDB`DarkRadiant-2.14.0/doc/img/brush_rotatex.png000066400000000000000000000003531413722237400207100ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME6^xIDAT(ϭR !sx廗PK(AL )'LW)橑\d!Bu{q%Gϊ꬝`E& Lĩk{nVi)߹/;u~[jɡ%IENDB`DarkRadiant-2.14.0/doc/img/brush_rotatey.png000066400000000000000000000003471413722237400207140ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME6^tIDAT(ϭR[ VN}| H@HʎZ!=W)@`$/)"HJ[v ^-79P8 V <K'liFǘ ֔6gC LɟL>m(yPJWb>]J@YAy^Ois6w^伀R W o ^&x7.M(3y{/sn#p,9 V,҆qx&:Mt>pJ'΃x%ucP*Oq+^<8|:VY͇k9?.yJyW. 3YQvxn^?1..0jN+rr F3m1w5l~?/rr3τӑk 6Hر1  G&{a%Zs`O&9]18@Ν;PD>E<]pkد7ἩϿ}\? F<`KKrԗ4/ݯՅ7oBcOSppC-̐uw;_Om#9A3d|& |ҝWig ,ˑ :$ P܌˗/ڵk}@h0 hooiЀjDZ2+Xg͖ 0yd߿ѣG"TUU:.e@; x"M,1Y)݉O6{}@oƱcǐzT"5MNySSM.v)>>>khL"Zef->'Z[[[#)) 4ߙ$$R; @Au@EF >}Soc,ƌ_ǎKw> 5%ߛ8 Q-!tw&|4MhyXfI@H?q  .V /.2f$tIfNaӸ^e&OS}}b8Y7X0O(Qۉ6tmv1RL˲ Gq{ثr)Q"QTvN^׵}_+nsY9{`Gzw)n/{:~0,$AX De}ʊd)QGֻ()9-K4E H*F Kw~r!LP@󒥀.!-/GN8}Ȇ3@D=3MB.B!(Y`)>@DLH%B"w;2`; Yk1@IENDB`DarkRadiant-2.14.0/doc/img/dragresize_symm.png000066400000000000000000000003701413722237400212220ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME.2IDAT(ϥSA0kssC6CHᆤT0ƑI앍3KYgԼ'j+x䱇d< H琗Xydr~boUM>:q;L/ĩEIENDB`DarkRadiant-2.14.0/doc/img/example.png000066400000000000000000000045411413722237400174550ustar00rootroot00000000000000PNG  IHDR00W (IDAThY}LU՚N\uf؏`;vmINe $Cee 8IƢk*ۺ([& Z3˘0G*_rA@~s>99:49}|{U0E*c,YQF86rss+ xb:t ,P0>>P(bUyCѿ+!{ƍ|MMMEOOВՄه ztU轮C&B1cl۶-5-e-LeM ,0 N,y`F(>k,ZQRQ a*Pq<6$@#btK,Io);J 9ÜYN K4MܹsQPP $''##^ƥKpS7,czҥx__o&C(-5MX6ʕhhh˱n:߿aR\>TVTķx=B TIlS y&9瓬@`J("5%{ jxT@7$adc$!(Ժ(U, y# #I$&^^ YT9%I=C H/l1[p]MPq /VIPQ7,'+WH U̧  \(M(M\LVYu!p3A{p&@ͩtadb_T ۺ!ʮSNBrCEqJtz;4N<=C͚-CL>g{*l񳾾8P{EQ:Bmex@b seLUh 'ȋ4X_IL%͌IHAfNaMX)+3pkPsnQ]BBAP@4B1%eh+V.4=|?-*re僄nSN7dPj~D.iD*KDVVƝwf8{>ɼpydz4ct.'jC5). )A)>-GZMB%6u|݊uE Aʉݭ|~ j WY^R[f [?U7f%HJCBbbXE8fZ0|Ƃ&i|{`'OO^}i6'&P1&'=W!!$LزkӾ?/܊]ե(u c{~# #xzTVX )H!kɼ^+Q;AcBl&}cSMT؝`;C,8TQIENDB`DarkRadiant-2.14.0/doc/img/farClipIn.png000066400000000000000000000003161413722237400176650ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<[IDAT8cd )bcQ3@ Y`85cA !Z36CpjfcQHd``h$v#(#P |#ٴIENDB`DarkRadiant-2.14.0/doc/img/farClipOut.png000066400000000000000000000003001413722237400200570ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<MIDAT8c`:?lf hCi&h11 ah|j@#_I'y(IENDB`DarkRadiant-2.14.0/doc/img/home.png000066400000000000000000000022131413722237400167440ustar00rootroot00000000000000PNG  IHDRĴl;RIDATxڍkLU;uDhż-cU1 Lp:u&i.Sa"l@P 6 VƼm"7EȐJ_ {bF'=y;{<`&$o Ir!'BHfR ן S7=5(TT-Br߄2,& T$tD4pJH̸)ȷp7m".#FHt 0Ms`gN829^sc E/~j᲻V0-zrv~0RK"̘rkmty *йE4uM_HԏT73 G&Ά 'Fg$ؽ~ ͭ}waxڅz cڲQSmNԻQ3`ƴwL0:?H/:X me*x1cB:ui V4v۸Ĭ' E~DNoEi]蘤HZ/> ocjͱi5mf04儏E̦&"/Axw*rq "zy2ڸeȋ7O/|(x(uGP|/.wZp}q BuF:`;453ȨK)R9f.SzVnou \+|>r MwDtjfOr0>V%pgE|T."WgF^"Use3!WwCru쎅jZx؈i g7ﴖ| U FD/Ju]"Qvi%7qֈ/w}5VpMWk]['R]RV=;o.PHcol~"%(o>EN5}EaƳRtkB! -;u)j(TTTQRttQ3 ؿAHDIENDB`DarkRadiant-2.14.0/doc/img/important.png000066400000000000000000000050661413722237400200420ustar00rootroot00000000000000PNG  IHDR00W IDATxZyP?XNV&QS-#mGiQ3˕! Y̼ ¤""*s7y~p{g.3}~>" (xݿ_ݻwΝ;g3iEh4*ᆪtu#%H/8ZD+PnT>}n޼ "]&aؼ:- YpF#ɉ˰jB@z3C+ jH'gӹsƍv[fOwt bx/S2|vl,&%åOv ߵUSPK/kanQkAr\YZJ$FIcƌ={x6?t:9:{U'C6JFNIH@PHiРAZ3gٳ'S,@QD}P]$v櫡ϬJ>>>4`,Z֭C}+ #iΝP'f0}Y 8ڵˢ^^^ԗU4,+8`4j?Tn6oތgqs?~1xfZjj3 /_?/Ƞ6d@ $L>(?x`<yFmѽXA0Iq$˖-9Ӧ}1 ~$ + =̖Gi7ݶ#>& J;- $n݊r-})ϢI|.c"L4 hWX}?d?82owi…TQQ!?CFRNdD05@y eddH=/8x=Y;/ ?=†$tg͚E̓mpDDsܧ cwsQ0DFv”QZhʕR,"Á;w\l(:u*%&&^@Т8!Y:LZӷ\( B#\UA8P/DVǠ} ;8Tee%G`3!Hn3ի~xz9nykH_Ttfya#X!AH&#+(hm 4Jx, EAFX mjrgxGA!p "CiE#6† 1R-珿 kE[4$IENDB`DarkRadiant-2.14.0/doc/img/lightingMode.png000066400000000000000000000005041413722237400204270ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<IDAT8Փ= @]İՃN@Uu,_5QRvCnibF,~hqۼ3r>\4K$_I<(, * ?룲i ?57z(@DZ?{!VJyj#hshc4{p/l. :~VvOҩ8DF%)(`åv;A4HؤN\l]\QRc 맶'f=uDC|*tcjGeC\hq`v~!H9?[;rg:A5Tb9զ1І~q^~$< Cy Ū7XɅ9gLerbdx`Qa }X~@+߆ lS^,7ILj?&ʸMc3gzΕ副[s BP_VU+½FLW%l[q_ׂ:9 ؔIObA736(FSJxڨ[De_6Jqċl/8aăe~<{|8v:*pE<~p{8sR\QIU*d<׋7" :OM΀găx=s8W B'eabzʶCҧ8mWmE/ ~Ϩ4359 u>6Mr%VTՄ*4nĂ#gxUo$}9\f1J}ԩnM'iOgM(8ge|h|IY5)w?)>_CÝ$y'IENDB`DarkRadiant-2.14.0/doc/img/note.png000066400000000000000000000046251413722237400167720ustar00rootroot00000000000000PNG  IHDR00W \IDATh[\gUsjc NX;+H8$O@Zd J> f+% ((HF`8aǗILOn{O*͜nuWտj{> %1>QVyUh6}lv'cgNqjvOXϰcyF`llzxxd33|mU6v*S~/+i'裏DDPسg=YF@BH@GVgbXy^%b"BR!?6I+E$txe_o"[F$iL٤hp9YJ9[>{89}Y(. w5:;+bٲn:+dYf\ dED˨k/QxiﺊNmC%j]{9[;'U!fpsŁ&fF_WExy=nkL7b[91Wƞ`f|"!V D iv$ h.C4mX2 8ԧ|S➧'< ne[ھSJf^jݕMɣM ID4%sBKJ4§ⷵ:_}9Qf¶_g떵437g4m/m4E|uoaOy>4[Y͘oDs/-a"ʄ6s\^6{D"!x뵫gf ρtueQcvP(Ķ/_ C# T*Q1޺m4-"IkC?VH pPjFWp*T++W,ٌ(jќ *I.`6 \ &|B<ŬJ &@Q9qYyqEQ\ХPQUT'X9 $4M[; ) H6>"sQbIJz{&y|׳1D?çž'j t*)k)[;{0b۳"ER3hdDDSA`S_@cfvկCcfGɛ ~'NXtuvՃ\a"0<_DPfƋGZmIS|'<fhZ:^Κk100,g՘69sj5]7a`CԑS>$ `)R2ad cd#l'r?:* G12+AR\~ViKcAF(RZHYd| 㭮BK[¬` |瞅<{ޟ9RXsFn!%ެ*V: E$ ^LIENDB`DarkRadiant-2.14.0/doc/img/prev.png000066400000000000000000000024311413722237400167720ustar00rootroot00000000000000PNG  IHDRj PLTEeeeeeeeeeeee2h2i7eeeeeeeeeeeeeObeee2h2i2geee2i2i5fVby9eeee9e2h2i2hAc2i2i8e2h2h7f3fFc9f8eIcAfFcDeBfCf>c2h2i2h2i2i2h2f4g2f6f3e2i2g3h2h2i4h2h4g4g2g2f2h2h2i2j2i2h4i2g4i2k2l2j4lAr3l5l=p5k=p4k7s>w>w?wFzFzN~WH{2o2o6y7z8q9z9~:;;CMOQST[`benIDATxc6~)Eiv oaǒ6_nfCl TT2k˩9gZ*D\2r W^}\@F<ҳ۫6ܽ=1g;a }M&Wb6c_QvvLbJpb>t&$iWϑgJ'*bŰgz^0]Ώ b:ud#L1]HG(kQT$iXy=P|ALu\k :z.f;ArV[YCLcxS~PM(YIENDB`DarkRadiant-2.14.0/doc/img/select_mousetranslate.png000066400000000000000000000005451413722237400224270ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<IDAT81 @Eߦ(vx;%6V Ven C;"]W˟3g !aϓdF-Oby?Ы1k QET$U[ zHz?'(.7`ה;:0΀=amVn[.T6 Xɣ ːȤe#~U3M,d%x/S3<NcIENDB`DarkRadiant-2.14.0/doc/img/solidMode16.png000066400000000000000000000004421413722237400201040ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<IDAT8ݓ 0 F_b[`^& Mi*Qn|%K ̜1&q1~qw{lBеBj]mB[HY}R:g`{hGU[4s--f'\큧|4@Cy+IENDB`DarkRadiant-2.14.0/doc/img/textureMode16.png000066400000000000000000000005131413722237400204710ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<IDAT80 DO|::҅`0TEKQ||wra߱ 4(NVp={x&|<cFZ[g$ /Uv55!HB"&h4\j5I>Ȝ0eBp8 .hnnFgg'FGG`0`PVVKb͚5ظq#t:]\h ЬfI鮮.8qOF^bT,YȶZ`bj@0I b۶mؽ{79H^VzdVdP(ÇѣX%T-% ۋI`ps zLF=Yffu5޹>كC!++ &IxD7 ׯ_Ǿ}sTbl2oh N4D$&jƝFȑ#Xr%ByCPʨPذa،g??:7$5SL txp  T<pKŎ+o{qd/i< E`xmݺ?By"iCollav|qI=6Ϥ Qf@ш<{f< o~ 'O*''Fv?SN %lJիQ¦&(l~DUeqnAk{7tJPz[pYvXV,U:Tm(aI6NVi+yx",f6Ccqr y O g^(Sz+@.‡n^7K6އ!YC","Svwҧ25+%e E9حa/DSS6m4}6Ӌh *=Bz/HHeD+̩)xo9Oʔt^olA[D܉ )Qe)h@iIQʞB$NfV>&ZN)TJI/%95,bןXy2~tϸe'ӦVL0*{ujV7"c@teCNsHlvaEn45T+;,7s"/E)Q7K`!24d1KRn0)H8/ O{R>R n{fifX LQ6~Umq'[mb{NɼJP >o>릳T2_'9y?N;% <辍Oz))B>2pczٓΤWɘ)c dP|GO-4LȀ gs|鹔&vZ>IJ)@{wӌpIDҫȞƀ8LJao`˖- lKK'|Uי2lҚz/Фs^{PWWRd36,(B0أH{FӆBbH\E,<(^7&{Yv=fYaDC.O7}ǔszC8G`=$V{R~j3'w^ KX5 ״tzWy,Yut{" ]x8^*i[" l"NrA<=KuU9 aVm\{~^\nTWz*_X?j6M" aF]æ+'Ü7sr nl|oC{y%0`ds, Zn5 2l~IaLq pz^m(aIἼRrSM+{6:Zx:Ols~?@ XIh @x[[)(I1bD̈= f^&Iм@!0$ C""RIn-(&;21 Ҋ&h1) _;do%#>ϤDŧJMaǣzOz*iem`IENDB`DarkRadiant-2.14.0/doc/img/toggleFarClip.png000066400000000000000000000004211413722237400205350ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<IDAT8͓ @ E]R0 ea$$uca Z&`@ C7n,' —0\1B=tLV m vW'0P_ uX29X,U-.نB!щg9OA<{5\eN'"L-S2VlekˀOLVf]U\J}2*Y.$otSܦ)cOc.`1 ABSriy2A9M[ ~aIFQF8-GڔZݝV)%.{L~&rQ@;'H>q,flҵMݨ`)stJ<+@_敁+2?~oBIKG^;p;WO -@ S'>ñJͫĊ!=XX]Fezo8K2U'E} y?uݚV>A "֚cT杆^dW<@a_;U>߲Hn71^DmxT?f? 7vdI{saLY99Y7򣣣(?tffd`$5+r!%%EhY*ӏkb͚5hnnkB+^ܹS#^FQTpX<ΐwHI$"Xt_~}ܕPHKKӋdΖqsd neG81'?w65)ס%7n]xvڵ+^ڈT }~jJ jSfP^ܯ4X-1fbώ`%Bt=NS7^%mV,{'F}`jLNu@pʍ9?S͍Cz&D4w'IX!^y[,9"i΀f49(:͕F ͌{U(): %ǰ'$9%9KC޽P p8tRfiBmk xXJ\C==Ņh(25 p$ x}K٨+5 s?/IN:?L-^FHLLDYYր8C竜m|P󇶠,oȇ1&9x]D|'\#-sfQeLؼEhz8Xq"'Γa W(چ}_epRV~CS|&\ˉAI$K"(~aXb+ԒLNNeĈ4gaF|\ '_[ZfG{w&wh!-Ũ6n]Ňo'`*>1 l6Yi^&6Gw \vƬ`K!y MIL9Xĭܭ@i~ZWY|>\_Bk #L؏PJzx9,\nuxFL k{qn= }. kJԡWZm~ӚJ=mHxC@E&xѱdɒ5Mttth ;i{3SRA FDlVic&Xzn&XLLE|[ƝaaYi>_Nx(^}3|Jڶ+(g{gr4N@XNDxy]6@BpĽm[<,& W⥘a/438Е9!? :VIENDB`DarkRadiant-2.14.0/doc/img/wireframeMode16.png000066400000000000000000000004151413722237400207530ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<IDAT8I 0 E{tە.IIpa9{L۠08xW /5Z,Tü܎qH*UV2ɰ~й$ .N`ijk_IENDB`DarkRadiant-2.14.0/doc/imgsrc/000077500000000000000000000000001413722237400160205ustar00rootroot00000000000000DarkRadiant-2.14.0/doc/imgsrc/2DView.png000066400000000000000000000330411413722237400176270ustar00rootroot00000000000000PNG  IHDRdbKGD pHYs  tIME)h IDATxtTW@aH@Aj QKť񈠈Vu+V *xĵZl5*.R%& $DX [V~  H>I&3336s'Ͻ;}u4$-ɓ'FN;~f7[պv߳5sw٩*VR߾}ձcz:uJ<󌮼Jkm/YZܜO<7|SwV^^o'TTTkС <… ժpB{̟Ug*++ohJOO_V\\>@iii*,,HYFmڴ VWW뭷Ҏ;Աc@=g_o[SDZdWUUSgȑ#z7iӦzMst1,//O>V2uM]w wI S{nڴIk׮U^^u,kJIܱcy:t裏jҤI 6םkjjTPP_])))z/J:}.((В%K$IG֯kjՎ;tѣ >^o1~D"8p/_j1Bo$ӄ W^yEO=zձc_ɓ'j~S&Nh|dܹʕ+uM7iҤI:t/^})==]'OԩSuu]r}s˖-zO'*{O6l]=Vz|˗/W5k,ꫯ̙3իWFZWu3335rH>V;6#0Ǧ4t}]ϟoQ#Gw,wO:S>q^}U=SZvmʪ_~kΜ9>MmK =N:iJM=cnݺRSSUSSΝ;ڹs$iݺu޽/Ǫ94~bݺ袋_G[n誫tNzzΝWjwuݺu}^~eo^sk1ch2(''GӟH. hɩStjɒ%InKC빨H|=Xƞ[PU)++Ӵi_kƌ֭[x[1d3en:Mu=sNqq߿IKK33sLӵkWSSSc1fɒ%K/ I&SPP`yzY;v4۷o7_ڌ3cMZZZ놶n7ܬl1UUU'0^01ƘkךnݺM6J3uTse{"moSs׮]ͫjӵkW}zg<-[{ҤI&33|6/$_t;vc̬Yygk_nIϹÿO?=ztxF9yd\uH'Ol='|2z͛7;ϼˍ]ׯsEᆎU_|qe]ͩ%ٍ*++͂ <`JcLDlLUycټy9s=Żd_s5Mc˿^eמ{u]t1Ƅeu_צ}&Ro~ 8PԡC޽{[EcJuykjѢEȐ1FպbŊeddhԩN-gyFRϹF#GTffmۦLJ}]1BzH?<c׹) <\7|Z}ޏ=&OuMoԣGm۶޽{FD289?S1cw~RVVڴiW1;9>|뙗h  SڙypUUU8|M7YǪɓ'kϞ=I3cJOOW\l=#PEEF;4ݥKwǰP(Tشo߾=6TZ{w~k$7N>.cYYY8q.beff꥗^ /^=z]v~yѣ*//Ν;w}W jp[yy>H"s9zK.ծ]K/u֪PeeӍƍU]]-IڲeZj:$9DsSyTTTx\BPqF竪J9sQ*++Ç%I[nU(R׮]}~;97:b?tƤ| Eg>3_5k( X99=kpaa%3c;wO<^VV6zN6=v7;ǰ={;6I{ljرc95u 8sLo^v[[mۦ3fLw /[o|N[N}0<;C\i  ~- 0@]t*55UZbPS~~֯_b]СWgV몫R^^V^իW]'z~=?|}g7o^ ^h5t0aZnwi-vw귿uj׮]={֮]̹AQw>??_7oC=m۶wl*++ gQ;V ͛:;.4ˢ͹o/ر|v[L)S^ZZ>ӧO^سgOuٳG\C?II_umٲEWֽޫ4I?;SѣG iժUwuٲe;xu7kݺ{sީ}=,Y1c(##cɮ}p׿Xe+9眣UVi֭ZjFP(믿cwPy{ ׯ>CkǦ/ jϽq]|޽g˚n͛yI:٢.]\=JKKU]]d@Xב#G b^zW^lrssw^볤A~νz%\A5zJIIQ~_* ]js鹴TNN ~m^s5l] ¥49 ٳg9Ң9 ִΜؒ<^rɓ}#m'۝}v_?Z-vgj]d{ٚ9ڻ,n4$|r?$Nʕү~UƓ'CtiL^lWJlW늴8dj].gs.;I4H:?'P#G.%g[b,o_i2)'G1C_zIR#h;w^~Yяit";uv-RұcҸq~WളI|moqg{,ڴnIU8+)$T ӕ{<59ִ?'q,cv5ǎΝ>=lf0#պ5պ"mgN".gZٜgGڳGjڶ_~3pXDD&DXh`I嬘5f0z5IC63j]ɚj]3'l]lesDXh`IU/97xC2dJIɓ'oj})s ;V^zh"}j߾b_/wz 8X@=T;g…fȐ!۞,X` ͅ^h1߿ߤEUt;דd{ٌ!lWr9swW\qnwڥ,eddhJM=֭[+55U555h&1;;[Z|ƍJ_^{Uaa$>ѣXm۶fęuwsAA}}ݺ뮻$I՚2e  /:@w+B={#< 8qB#GTffmۦL?@Iܹsx2hڵk^z%nZX$FI;M4zh͜9S۶mG}vСC~ 8 I$c׿R={Tzz幉L@p`aM{vNbg$s63j]ɚj]3'l]le`I&DXh`IޜD43`=šsߗLvdvHۙHٮr6hﲹ M",4$B #pb@p`aM{8vdvHCٮr6hﲹ M",4$B M",I3`=šsߗLvdvHۙHٮr6hﲹ M",4$B #pb@p`aM{8vdvHCٮr6hﲹ M",4$B M",I3`=šsߗLvdvHۙHٮr6hﲹ M",4$B M",I3`=šsߗLvdvHۙHٮr6hﲹ M",4$`pB:tcŚ:u.]k޽{ӟT/?|Iҫ5k֨@+V5\oݯ}@p`aM{QFLbon1f…& ÇcOرc[|[uKs{=~K]v.9G{]rua۲e*IҪU 4wvH7|ڳg^yyy7o^J_ZE:r䈶o߮m?5j(n:5 "ءCm۶<q/$_eee:|$i͚5 Bڵk܋?"^nCOڼy͛DXso>:tH^xaيL@p`aM{DIlf0#պ5պ"mgN".gZٜo7B M",4$BK$`  kCI~_f0#պ5պ"mgN".gZٜr3,4$B M",z5!FD/#պ5պ"mg.gZٜr3,4$B M",40'1`  kCI~_f0#պ5պ"mgN".gZٜnw ʕү~%)#۴ 2D༾}'6o%I>(\X$eeIKUUG5x4gsiߕM"H*7K?RN#p@8v~i$81z 8X@0F/ukjm6PTRR‚8vdvHCٮW1ݺ7G66ۜAr3pފҴioU(w5gD9s {U+A_uz&bqJUUDXh`I91`g 81$F/sj]ɚj]3'l]l$zfXh`I&DXh`aNb $z9˜`dZWfZWI$lWr59fsDXh`I&z#pjjjrJݻW]v."s#3`=3zh3tP裏;e˖%-fN0]+Y]+vFruo[6۷oŋo>G:u{1?{X uiJOO$]{ڰa1ăSN u UVVRnSSSUUUP۴ipح[7ݻ7a߾}RVn 2}璤~[7xo?)_4L{ZzjT.]o>3FYYY>ɿ$Vc'=WwN1رÔcǎuN2g3'1ٮ֕ٮi;sv9պ\K?s?׫W/m۶~1{lF[Ғ&[[']{V/^|kIk曥ןEKb5ht9K<ҁuWu%fREI˖I99ҌƍRjrG;ӟ\}~#cGi4gOjnqpPA:vL7r|XuVB!u5 !5'[ns=?_ZdrssE'N_z & 8X@=iNbcsvaVZe~4{ۙD~f3'l]legz!C?o7B M",4$Ҭ9L@p`aM{(9-` Fu%kuEΜD]v.9G{fXh`I&DXn  kC~_nFu%kuE]v.9G{fXh`I&DXh`aNb ִ` Fu%kuEΜD]v.9G{fXh`I&DXh`aNb ִ` Fu%kuEΜD]v.9G{fXh`I&DXn  kC~_nFu%kuE]v.9G{fXh`I&DY%% @8kH]f0z>{ VR@=ĜeS0]+Y]+v$=RZ%O6hﲹ ."%DXh*@lhEĎ&&G;vL%\>}HN:R}ݻȚ}@p7g'ִSQQazaz3eӵkW3gS]]mhzO /w}ߒi;דd{ٌ fvCnn/=[9G{ݪq޽xgϞ9szꥃjڵJMM[oO?DF+B}վ}$IvRVV:uӧ+5[jT$b*7mwyGwq*++~z;$>ӣ>j۶mŠ@|n.**Raa x?߿}}ݺ뮻$I՚2e !C^HxwI>|x.嬬,+==]mڴQϞ=#(##C5j233m6mٲ%|ஔ:eذBDC&1 ) 7ܹS&L I*++SNNJKKk.kJUTTpW@SN*++ձcG}駚0annZhڷo} & 89Az.hyM{9SSSc̙c֬Yc=읖ng~K}I<~uŚ][}le7zw$ /ԕW^@\3 cN77$ [ ~|'puN";.]D h r4 "4Fb 1 s V(I#d&"šPSs9{'lWJlW늴lf+zƾٱlWr9sw\nD%Ynl24$Ɩa YH D@̸.iZF1>0S}8N"Ɯn伾LDzhG46b7kC~_nFu%kuEf9.}?H6H]v.9G{gqS{KƵ|>C7}I%% @chΩ7,@|qw3 jv9يu D@\4Zuź&ț3?;@|N"Su9b4zx91`go:3ni1'1}lWJlW늴9g9~?&~{fs.O%2p4DWqLaH D@\ocʙj?Hs$ Q;'1еvN"ĠI$Ts?gq>g70'1`2-sߗLvdvHۙHٮr6hL",4$B M",z5!FD/#պ5պ"mg.gZٜr3,4$B M",40'1`  kCI~_f0#պ5պ"mgN".gZٜr3,4$B M",SUU"5J_D_~>}$Vgp{=g XXj|Фc9uꔹ-b|Ic^yoɎs_lFru9ڻV͛7kٲe?cݻWׯWJJRRR4k,?s\Y$NI//jΜ9:wǏkΝm۶{ ;ƍѣuĉu]vB8wTXXB-^X3gTuWaݺu1cʴ~vm[eIx;Ç%IYYY?~-Z *--MM7ݤ#F(??_tkڳg"Nb(R=ԣGkNѣGjΝJKKSyy qFUWWKvܩVZK.= xYs=#GX՚Č;6ߤenO`"}v_?Hٮr6hܼrJ]uUUV) iܹ/RǏל9s mwޭ={g?yi޼yqG\:@jGQQ?Cґ#G4sL >\~Jo^v:[p8|p 8PÇ+??_ַ$IyyyQII/_ cTSS -[L YS&1 ) 7t1IҚ5k TTTIҡCԹsg'lSW+3ӞnpcII6mڤl߿_#FP޽ۏ?g}V&MJTHFz̪Ȗ#G<۹l?%}f.gZٜnѐ!CѯfXh`I&DXR:^i6|:ʕ+UPPw image/svg+xml Grid position labels View axis indicator World origin position Camera view direction Camera position DarkRadiant-2.14.0/doc/imgsrc/DarkRadiantWorkflow.svg000066400000000000000000001117031413722237400224630ustar00rootroot00000000000000 image/svg+xml Models Textures Sounds DarkRadiant Game engine .map file .darkradiant file DarkRadiant-2.14.0/doc/manual.adoc000066400000000000000000002740161413722237400166530ustar00rootroot00000000000000= DarkRadiant User Guide :toc: left :toclevels: 3 :imagesdir: img :icons: :iconsdir: img == Introduction DarkRadiant is a level editor for Doom 3 and The Dark Mod, developed by The Dark Mod team. It may also be used for editing levels for similar *id Software* games such as Quake 4. This User Guide describes the features and functionality of DarkRadiant, however it is not intended as a guide to mapping techniques. Level design is a complex topic, and is covered by various other learning resources, some of which are listed below. http://wiki.thedarkmod.com/index.php?title=Main_Page[The Dark Mod Wiki]:: The starting point for most Dark Mod documentation and tutorials, including gameplay, configuration and editing. https://modwiki.xnet.fi[ModWiki]:: Online wiki covering editing topics for vanilla Doom 3 and similar engines. http://forums.thedarkmod.com[The Dark Mod forums]:: Online community for discussion of the Dark Mod, including various ad-hoc mapping tutorial threads posted by individual users. === Editing workflow image::DarkRadiantWorkflow.png[align="center"] The level editing process starts off with basic assets: models, textures, sounds, entity definitions, skins, animations and so on. Many of these assets will be packaged with a particular game installation, but a level designer may also choose to create custom assets for a specific mission. These assets are installed into a directory tree which is accessible both by DarkRadiant (for editing) and the game engine itself (for playing the mission). Once assets have been arranged in DarkRadiant according to the wishes of the level designer, a `.map` file is saved to disk. This is a text file in a format understood by the game engine, and includes both level geometry and references to the assets used in the map. Since the `.map` file is simply text, and does not actually embed the binary asset data, it tends to be fairly small. The game engine includes functionality to _compile_ the `.map` file into a `.proc` file containing low-level vertex geometry derived from the brushes and patches within the `.map` file. The game engine can then render the mission in realtime, making use of the same assets that were accessed by DarkRadiant during editing. DarkRadiant also maintains its own separate file containing various editing information, such as object layers used within a map. This `.darkradiant` file is never used by the game engine, and is non-critical -- a `.map` file with no accompanying `.darkradiant` file can still be edited with DarkRadiant, although certain DarkRadiant-specific state may be lost. === What's in a MAP? There are three main types of object contained within a `.map` file: entities, brushes and patches. *Entities* are the top-level objects in a map -- essentially, a map file is just a list of entities. Every entity has an *entity class* which determines the type of entity it is: static mesh, AI, sound emitter, particle emitter, light etc. Entities also store a list of string key/value pairs, known as *spawnargs* or *properties*. Some entities also contain brushes and patches as children. *Brushes* are convex solids used to define basic map geometry: walls, floors, ceilings, steps and other medium to large items. Brushes are often rectangular in shape, although a brush can actually have any number of faces provided that it is convex (it is impossible to have a brush in an L or a U shape, for example). Brushes are not smooth-shaded by the game engine, which generally makes them unsuitable for representing curved surfaces. *Patches* are smooth one-sided surfaces used to represent curved objects such as vaulted ceilings, pillars or cave interiors. A patch is defined by a number of Bezier control points, and offers control over the level of detail used when subdividing the patch into triangles for rendering: more triangles will produce a smoother surface but may lower rendering performance. Brushes and patches together are also referred to as *primitives* (since they define the basic geometry of the map), and are typically described as such in situations where the distinction between brush and patch is not important. The entities, brushes and patches in a map are arranged in a hierarchy: not every entity has children, but every primitive must have an entity as a parent. Each map therefore starts with a single default entity called the *worldspawn*, which acts as the parent for new brushes and patches created in DarkRadiant. == Initial configuration [[GameSetup]] === Choosing a game type When running DarkRadiant for the first time, the *Game Setup* dialog will be shown. This is where you configure the path to the game installation from which DarkRadiant will load assets, such as textures, models and entity definitions. image::GameSetupDialog.png[align="center"] The *Game Setup* dialog contains the following options: *Game Type*:: DarkRadiant ships with support for several different game engines, each of which is contained within a `.game` file. For editing Dark Mod missions, the default choice of `The Dark Mod 2.0 (Standalone)` is the one to use, but it is also possible to edit stock Doom 3 or Quake 4 missions. *DarkMod Path* / *Engine Path*:: This is the path to the game installation on the system. The label text will change depending on whether the selected game is `The Dark Mod` or another engine. *Mission*:: Optional path to a subdirectory containing assets specific to a particular mission which is being worked on. For game types other than `The Dark Mod`, this will be displayed as *Mod (fs_game)*, and should be set to the path of a subdirectory containing a particular game mod, if one is being used. *Mod Base (fs_game_base)*:: This field only appears for non-DarkMod game types. It allows a two-level mod structure, where the *Mod Base* can point to a major game mod, possibly downloaded from elsewhere, while *Mod* can be set to point to an entirely local "sub-mod" which contains local changes and overrides. Before the release of Dark Mod standalone, this field would have been set to `darkmod` while the *Mod* field would have been set to the local mission, however this is no longer necessary when `The Dark Mod 2.0 (Standalone)` is being used. Once the game paths are set up, click the *Save* button to proceed to the main DarkRadiant interface. NOTE: It is possible to *Cancel* the *Game Setup* dialog and proceed to the main window without configuring a game installation, in which case DarkRadiant will show a warning and ask if you wish to proceed. If you do, DarkRadiant will run but there will be no available textures, models, entities or other game assets. === Interface layout DarkRadiant ships with a number of different user interface layouts, which control the position, visibility and window type of the major interface elements. The current layout can be changed from the *View -> Window Layout* menu, and will require DarkRadiant to be restarted. All of the provided layouts allow window sizes and splitter positions to be changed, and the changes will persist through multiple editing sessions. It is also possible to create a new floating 2D view using the *View -> New XY view* command at any time, regardless of which layout is chosen. *Dockable*:: Editing tab widget and 3D camera view are placed in dockable subwindows which can be floated and positioned freely, or docked to the window edges. The 2D view takes up the remaining space in the main window. This is the most flexible layout. *Embedded*:: A large 2D window is shown on the right, while the left-hand side is divided vertically into the 3D camera window and a tab widget containing the main editing panels. There are no floating subwindows in this layout. *Regular*:: A legacy GtkRadiant layout which places the 2D window on the left, the 3D camera view on the top right, and a 2D scrolling textures panel on the bottom right. Other tabs in the editing panel are shown in a floating window. *RegularLeft*:: The same as *Regular* except the full-height 2D window is on the right and the 3D window and texture panels are on the left. *SplitPane*:: Three separate 2D windows, showing each of the major axes, are shown alongside the 3D camera view in a 2x2 layout similar to traditional 3D modelling applications. The editing tab widget is in a floating window. === Colour schemes DarkRadiant defaults to a black-on-white colour scheme in the 2D windows, but ships with four other colour schemes, which can be chosen with the *View -> Colours...* dialog. If you prefer a dark theme, the `Black & Green` scheme might be suitable, whereas the `Maya/Max/Lightwave Emulation` and `Super Mal` themes provide a more neutral, low-contrast look. [align="center",cols="^.` origin position, if visible within the view. .Components of the 2D view image::2DViewMarkedUp.png[align="center"] The 2D view also shows the current position of the camera (used for rendering the separate 3D camera view window), and its view direction. The following commands are available within the 2D view: [cols="1h,3"] |=== |Right drag|Scroll the view horizontally or vertically |Mouse wheel|Zoom the view |Shift + Right drag|Zoom the view (alternative binding) |Ctrl + Middle click|Move the camera directly to the clicked position |Middle click|Rotate the camera to look directly at the clicked point |Ctrl + TAB|Change view axis (XY, XZ, YZ) |Ctrl + Shift + TAB|Center 2D view on current camera position |=== === Adjusting the grid The grid shown in the 2D view is used to snap the position and size of brushes and patches, as well as the centerpoints of entities. The size of the grid can be configured, in powers of 2, from 0.125 up to 256, using the *1-9* keys on the main keyboard (not the numeric keypad), or the equivalent options in the *Grid* menu. The *0* key on the main keyboard can be used to toggle the display of the grid. Note that objects will still be snapped to the grid even if the grid is not visible; this is purely a visual toggle. IMPORTANT: Level geometry built from brushes and patches should _always_ be snapped to the grid to avoid problems such as rendering glitches and map leaks. Static meshes and animated AI can be positioned more freely, however grid snapping is a useful tool for ensuring that models are appropriately aligned with the level geometry. [[Using3DCameraView]] === Using the 3D camera view The 3D camera view provides an approximate rendering of the map in three dimensions, in several different render modes: wireframe, flat shaded, textured, and fully lit by in-game light sources. While the 2D view is the main interface for creating and aligning level geometry, the 3D view is a vital tool for tasks such as texturing, or configuring light parameters. IMPORTANT: The fully lit rendering mode in DarkRadiant is very limited, and only offers a partial view of what the game engine will ultimately render. In particular, there are no shadows or foglights. The 3D camera view provides its own toolbar which can be used to configure various display settings. [cols="^1h,3h,10"] |=== 3+^h|Render modes |image:wireframeMode16.png[align="center",width=24]|Render in wireframe mode| Render objects as wire meshes. |image:solidMode16.png[align="center",width=24]|Render in flat-shaded mode| Render objects as coloured solids, without textures or lighting. |image:textureMode16.png[align="center",width=24]|Render in fullbright textured mode| Render objects as preview textures, with no lighting or material effects such as transparency. |image:lightingMode.png[align="center",width=24]|Render in lighting preview mode| Render all available lighting and texture effects. 3+^h|Animation rendering |image:StartPlayback.png[align="center",width=24]|Start render time| Begin rendering animated effects. |image:StopPlayback.png[align="center",width=24]|Stop render time| Stop rendering animated effects. 3+^h|Far clip options |image:toggleFarClip.png[align="center",width=24]|Toggle far clip| Enable or disable the far clip plane. The far clip plane is a performance optimisation which avoids rendering geometry more than a certain distance away from the camera. |image:farClipIn.png[align="center",width=24]|Clip plane in| Move the far clip plane closer to the camera. |image:farClipOut.png[align="center",width=24]|Clip plane out| Move the far clip plane further away from the camera. |=== The 3D view always renders the scene from a particular camera position, which is shown in the 2D view as a blue diamond. This camera position can be set directly from the 2D view with *Ctrl + Middle click*, and the camera view direction can be set with *Middle click*. There are also various options within the 3D view itself to adjust the camera position. [cols="1h,3"] |=== |Right click|Enter or leave free camera mode. In this mode, moving the mouse around updates the camera view direction in real-time, and moving the mouse around while holding *Ctrl* causes the camera to move up/down/left/right according to the camera motion. 2+^h|Default mode (not free camera) |Left/Right arrow|Pan the camera left or right |Up/Down arrow|Move the camera forwards or backwards on the horizontal plane, without changing its height on the Z axis. 2+^h|Free camera mode |Left/Right arrow|Move ("truck") camera left or right, leaving view direction the same. |Up/Down arrow|Move ("dolly") the camera forwards or backwards along its view axis |=== === Manipulating objects Every object in a map can be selected and moved within the 2D view. Some objects -- including brushes, patches and lights -- can also be resized. For more advanced ways to select objects, see <>. [cols="1h,3"] |=== |Shift + Left click|Select or deselect the object at the clicked position. Any existing selected objects will remain selected. If the clicked position overlaps more than one object, the closest one (according to the current 2D view axis) will be affected. |Alt + Shift + Left click|Select the object at the clicked position, and deselect any existing selected objects. If the clicked position overlaps more than one object, each click will cycle through the overlapping objects. |Shift + Left drag|Draw a selection rectangle, which will select any objects contained (fully or partially) within it. |ESC|Deselect all objects |Left drag (_inside_ object)|Move the selected object(s) |Left drag (_outside_ object)|Resize the selected object(s) (if available) |Space|Duplicate the selected object(s) |Backspace|Delete the selected object(s) |=== TIP: Like other editors in the Radiant family, DarkRadiant offers a rather unusual system for resizing objects. Rather than clicking exactly on the edge, or on a dedicated resizing handle, you can click and drag anywhere outside an edge to move that edge inwards or outwards. Dragging outside a corner allows you to move two edges at once. ==== Flipping and rotating DarkRadiant provides six buttons to quickly flip or rotate objects (in 90 degree increments) around each of the three world axes. These are available on the left-hand vertical toolbar. [cols="^1h,10"] |=== |image:brush_flipx.png[align="center",width=24]|Flip along the X axis |image:brush_rotatex.png[align="center",width=24]|Rotate around the X axis |image:brush_flipy.png[align="center",width=24]|Flip along the Y axis |image:brush_rotatey.png[align="center",width=24]|Rotate around the Y axis |image:brush_flipz.png[align="center",width=24]|Flip along the Z axis |image:brush_rotatez.png[align="center",width=24]|Rotate around the Z axis |=== [[ManipulatorModes]] ==== Manipulator modes For more precise control over object motion, there are three manipulator modes which can be selected with buttons on the left-hand vertical toolbar. [cols="^1h,3h,10"] |=== |image:select_mousetranslate.png[align="center",width=24]|Translate mode| A manipulator widget with axis-aligned arrows will be displayed at the selected object's center. Click and drag one of the arrows to move the object along that axis, or drag inside the manipulator box to move the object in two dimensions. This mode may be useful for moving brushes around without accidentally resizing them. |image:select_mouserotate.png[align="center",width=24]|Rotate mode| A widget with three axis-aligned rings will be displayed at the selected object's center. Drag a ring to rotate the object by any arbitrary amount around that ring's axis. |image:select_mouseresize.png[align="center",width=24]|Resize mode| This is the default Radiant drag mode (hence the "QE" icon referring to the original QERadiant) which allows you to move objects by dragging inside them and resize by dragging outside the boundary edges. |=== === Working with brushes Brushes are the basic building blocks of all maps. Typically they are used for coarse-grained level geometry such as walls, ceiling and floors. Brushes also have a vital role in sealing a map from the void: even a map built entirely from patches and static meshes must still be surrounded by brushes in order to avoid leaking. .Additive versus subtractive geometry **** If you are used to mapping for the legacy Thief games using Dromed or T3Edit, the system used by DarkRadiant may seem somewhat back-to-front. In previous games, the world starts out as an infinite solid, in which you "carve out" rooms using subtractive brushes. In DarkRadiant, the world starts out as an infinite void, and all brushes are solid. The space in which the mission happens must be fully enclosed by solid brushes, otherwise the map will "leak" and fail to compile. The need to deal with map leaks may at first seem like a burden, however the exclusive use of solid brushes frees the engine from needing to worry about "brush ordering", and allows an important performance optimisation: by "flood filling" the map interior, the map compiler can efficiently discard geometry that never needs to be rendered. **** [[CreatingABrush]] ==== Creating a brush To create a simple rectangular brush, ensure that nothing is selected (*ESC*), then *Left drag* in the 2D view. A new brush will be created and sized according to the dragged area, with its dimensions snapped to the current grid level. To adjust the third dimension of the brush (perpendicular to the view direction), used *Ctrl + TAB* to switch the 2D view axis, and *Left drag* outside the brush boundary to adjust the size. TIP: Whenever you drag to create a new brush, the third dimension will match the size of the _most recently selected_ brush. This makes it easy to draw a series of brushes with the same height, such as when you need to create a series of floors or walls in succession. To match the height of an existing brush, simply select (*Shift + Left click*) and deselect it (*ESC*) before drawing the new brush. ==== More complex brush shapes Although each brush starts out as a six-sided cuboid, it doesn't have to stay that way. DarkRadiant offers several options for creating multi-sided brushes in more complex shapes. To create one of these shapes, first define a regular cuboid brush covering the volume you want the new shape to occupy, then choose the appropriate option from the *Brush* menu: [%autowidth] |=== |image:6Prism.png[]| *Prism* An n-sided approximation of a cylinder, with the axis of the cylinder aligned with the current 2D view. |image:6Cone.png[]| *Cone* A tapered n-sided cone, which always points upwards regardless of the 2D view axis. |image:6Sphere.png[]| *Sphere* A rotationally symmetric n-sided approximation of a sphere, with the axis of rotation pointing upwards. |=== While these shapes can be useful for certain architectural modelling, remember that brushes are always flat-shaded and are not generally a good substitute for spheres or cones created with patches or static meshes. ==== Creating a room Although it is not too difficult to create a hollow room by creating floor, ceiling and wall brushes manually, this is a common enough operation that DarkRadiant provides a couple of shortcuts. These options can be found on the vertical toolbar at the far left of the main window. [cols="1,4"] |=== |image:CreateRoomBrush.png[width=320]| image:CreateRoom.png[width=36] *Create Room* Create a room whose interior size matches the size of the currently-selected brush. The wall thickness will be equal to the current grid size. |image:HollowBrush.png[width=320]| image:Hollow.png[width=36] *Hollow* Hollow out the selected brush, leaving the exterior dimensions the same. The wall thickness will be equal to the current grid size, but the wall brushes will overlap at the corners, rather than just touching each other as with *Create Room*. This is legacy tool from GtkRadiant, and generally inferior to *Create Room*. The overlapping wall brushes make it more difficult to precisely align interior textures, since part of the inner face is obscured (and therefore removed during map compilation). However, there may be occasional situations in which *Hollow* is useful, so it is retained in DarkRadiant. |=== The room creation tools do not require the initial brush to be rectangular -- you can quite happily *Create Room* with a triangular or trapezoidal brush, or a brush with sloping sides. However, with a more complex brush shape, the complexity of the resulting wall geometry increases considerably, so attempting to hollow out a 7-sided sphere is probably ill-advised. [[SplittingBrushes]] ==== Splitting brushes Sometimes it is necessary to divide a brush into two or more pieces, perhaps to create a doorway or other opening. The *Clipper* tool, accessed with the *X* key, is used for this purpose. .Splitting a brush into two parts image::ClipTool3D.png[align="center"] . Select the brush to be split (the Clipper can be activated with nothing selected, but it will not do anything useful). . Press *X* to activate the Clipper, or click on the respective icon on the left-hand editing toolbar. . Click in the 2D window at two different positions, to define the plane along which the brush will be split. The proposed split plane will be highlighted in blue; feel free to change 2D view axis with *Ctrl + TAB* or use the 3D camera view to better visualise the split plane. . Once the split plane is defined, press *Shift + Enter* to execute the split and keep _both_ halves of the brush; press *Enter* to execute the split and keep only one half. The part of the brush that is kept with *Enter* depends on the order in which you define the clip points: the points (marked *0* and *1*) will appear _clockwise_ on the brush edge according to the current 2D view. If in doubt, just use *Shift + Enter* to keep both parts, and delete the unwanted one afterwards. . Repeat the process to perform additional splits on the selected brush, or disable the Clipper with the *X* key. The Clipper is a toggled tool and will remain active until disabled. NOTE: It is possible to create _three_ split points before executing the split, which will define a split plane in three dimensions. Defining a three-point split plane which is actually useful, however, may be challenging. ==== Reshaping brush edges All brush edges can be moved independently, which gives you the ability to quickly create shapes like triangles or trapeziums. This functionality is accessed via the *Select Edges* tool on the upper toolbar, or with the *E* key. .Creating a trapezium using edge editing image::EdgeEditing.png[align="center"] . Select a brush. . Activate *Select Edges* with the toolbar button or *E* key. DarkRadiant will place a green control point at the center of each brush edge. . In either the 2D or the 3D view, click and drag on a control point to move its edge. The control point will turn blue and move along with the cursor. In the 2D view, dragging corners is generally easiest, since the resulting shape change can more easily be seen. . To reduce the number of brush sides, such as changing a rectangle into a triangle, simply drag one corner directly on top of another. The two edges will be merged. [[BrushBasedSelection]] ==== Brush-based selection As well as using brushes to define map geometry, you can also use them to select objects. There are three commands on the top toolbar which convert the selected brush(es) into a temporary selection volume: [cols="^1h,3h,10"] |=== |image:SelectCompleteTall.png[align="center",width=24]|Select complete tall| Select all objects that are _completely_ contained within the two-dimensional outline of the selected brush(es) in the current 2D view window, ignoring their position on the third axis (perpendicular to the screen). |image:SelectInside.png[align="center",width=24]|Select inside| Select all objects that are _completely_ contained within the selected brush volume(s) in all three dimensions. |image:SelectTouching.png[align="center",width=24]|Select touching| Select all objects that are touching the selected brushes. Unlike the previous two commands, this one does not remove the selected brushes, since it is designed to allow you to quickly select objects that are adjacent to real map geometry. |=== === Working with patches Patches are smooth-shaded Bezier surfaces that can be created and manipulated in the editor (unlike models), and used to represent a variety of curved shapes such as vaulted ceilings, arches or pillars. Patches are single-sided surfaces, not solid like brushes, and cannot be used to seal a map from the void -- any patch work on the boundary of a map will need solid brushes behind it to prevent the map from leaking. ==== Creating a simple patch A simple patch starts off as a flat rectangle, which can then be manipulated with vertex editing to produce a curved surface, if desired. To create a simple patch: . Set the 2D view axes (*Ctrl + TAB*) to define the orientation of the patch. The patch will be created facing directly towards the screen, so to create a horizontal (ceiling or floor) patch, the 2D view should be in XY (Top) orientation. . <> to define the width and height of the patch in the current 2D view (the third dimension is not important, since the patch will be infinitely thin once created). . With the brush selected, choose *Create Simple Patch Mesh* from the *Patch* menu. . In the dialog, choose the number of control points to define the shape of the patch along its width and height. A patch can have between 3 and 15 control points in each dimension; there will always be a control point at the extreme edge, and one in the middle. More control points allow more complex shapes but also require more manual adjustment -- creating a simple arch is much easier with just three control points. . Click *OK* to create the patch. .Simple patches with 3, 7 and 15 control points in both dimensions image::SimplePatchesControlPoints.png[align="center"] ==== Manipulating control points With a patch selected, press *V* to enter (or leave) vertex editing mode. This will display all of the control vertices, and allow you to select and move them. - *Left click* and drag a vertex to move just that one vertex. - *Shift + Left click* to add a vertex to the current selection set. When several vertices are selected, dragging any one of the selected vertices will move all of them together. - *Shift + Left drag* around several vertices to draw a selection rectangle that will toggle the selection state of all vertices inside it, selecting them if unselected and unselecting them if already selected. .Making an arch by raising the central row of vertices in a simple patch image::PatchVertexEditing.png[align="center"] ==== More complex patch shapes Just like with brushes, DarkRadiant offers several default patch shapes beyond the flat simple patch. These can be created by choosing the corresponding option in the *Patch* menu. There is no need to have a brush selected first in order to create these shapes, however if a brush _is_ selected, it will be removed and used to define the size of the patch shape. [cols="1,3"] |=== |image:PatchSphere.png[]| *Sphere* An approximation of a sphere (the quadratic Bezier patch implementation in Doom 3 and DarkRadiant does not permit the creation of a perfect sphere). |image:PatchCylinder.png[]| *Cylinder* A hollow cylinder aligned with the direction of the 2D view. |image:PatchCone.png[]| *Cone* A tapered cone pointing along the 2D view axis. |image:PatchEndCap.png[]| *End cap* An arch or half-cylinder covering a 180 degree angle, aligned with the 2D view axis. The peak of the arch will be at the top if created in front or side views, making this useful for curved ceilings and the like. |image:PatchBevel.png[]| *Bevel* Portion of an arch covering a 90 degree angle. This may be placed along room edges to give a curved appearance. |=== ==== Controlling patch subdivision Although patches are defined by Bezier curves, they are subdivided into flat polygons for rendering. By default, the number of polygons to create is determined dynamically by the game engine, based on the shape of the patch. However, you can also use the *Patch Inspector* to explicitly set the level of subdivision required, which can be useful when optimising a map by reducing on-screen polygon counts. .Default (automatic) subdivision, 2x2 subdivision, 3x3 subdivision, 3x10 subdivision image::PatchSubdivision.png[align="center"] To subdivide a patch: . Select *Patch Inspector* in the *View* menu to make the inspector widget visible. . With the patch selected, enable the *Fixed Subdivisions* checkbox. . Use the *Horizontal* and *Vertical* numeric spinboxes to set the number of polygons to divide the patch into. The value can range from *1*, making the patch completely flat regardless of control point positions, up to a maximum of *32*. Each dimension can have a different subdivision level, if required. === Applying textures When a brush or patch is created, it will be assigned a default texture. To apply a new texture, you must first select the brush, face or patch to be textured. There are two different selection commands: [cols="1h,3"] |=== |Shift + Left click| Select an entire brush or patch. Any chosen texture will apply to all faces. |Ctrl + Shift + Left click| Select a single brush face for texturing. This command is only available in the 3D camera view |=== Once you have selected the objects or faces to texture, you can use either the *Media* or the *Textures* tab to perform the texturing operation. [[MediaTab]] ==== The Media tab The *Media* tab shows a tree view which contains all of the textures available in the game installation. Selecting a texture in the tree will show a small preview swatch, along with some metadata about the texture definition. image::MediaTab.png[align="center"] To apply a texture to the selected brush, simply *Double-click* on a texture name in the tree. The tree view also offers a context menu with several options: [cols="1h,3"] |=== |Load in Textures view| Load all textures contained within the selected folder, making them available on the *Textures* tab. This option is not available when a single texture is highlighted. |Apply to selection| Apply the highlighted texture to the current object. This is identical to the *Double-click* operation, and is only available for single textures, not folders. |Show Shader Definition| Show a syntax-highlighted text window containing the definition of the selected texture. |Selected/deselect elements using this shader| Select or deselect objects in the map which the highlighted texture is applied to. This can be used for organisational purposes, or to identify whether a texture is used or not. |Add to/Remove from favourites| Add or remove the selected texture from the favourites list. The favourites list provides easy access to a user-chosen group of textures, and can be accessed by choosing the *Show Favourites* radio button at the top of the panel. |=== [[TexturesTab]] ==== The Textures tab The *Textures* tab provides a scrollable canvas containing preview swatches of all the textures which are currently loaded in the current map. image::TexturesTab.png[align="center"] When DarkRadiant first starts up no textures are loaded and this panel is empty. New textures can only be loaded via the *Media* tab (described in the <>), either by applying a texture directly to a brush, or by using the *Load in Textures view* command to explicitly load an entire folder of textures. Once textures are loaded onto the *Textures* tab, you can apply them to a selected object by *Left clicking* on them. By *Right clicking* on a texture you can access a context menu with a single command *Seek in Media browser*, which will highlight the clicked texture in the *Media* tab. [[SurfaceInspector]] ==== Using the Surface Inspector Once a texture is applied via the Media or Textures tabs, you will most likely wish to adjust the alignment and scale of the texture on the brush or patch face. DarkRadiant provides the *Surface Inspector* for this purpose, which can be toggled with the *S* key or by choosing the option in the *View* menu. image::SurfaceInspector.png[align="center"] The Surface Inspector can be used to adjust textures on a single brush or patch face, or several selected faces/brushes/patches at once. If more than one face is selected and these faces have different values for text boxes in the dialog, the text box will be greyed out, however it is still possible to use the buttons to make changes which will be applied uniformly to all selected faces. [cols="1h,3"] |=== |Shader|This shows the full name of the texture applied to the selected face(s). You can use the folder button to bring up a new dialog which allows you to choose a new texture. |Horiz/Vert Shift|These text boxes show the current texture shift (translation) on the horizontal and vertical axes. The associated arrow buttons will increase or decrease the texture shift by the current *Step* value. |Horiz/Vert Scale|These show the current texture scale in the horizontal and vertical directions. The arrow buttons will increase or decrease the scale by the current *Step* value. |Rotation|Shows the current texture rotation, in degrees. The arrow buttons will rotate the texture clockwise or anticlockwise by the current *Step* value. |Fit Texture|These controls allow you to fit an exact number of copies of the texture across the face, so that the texture edges correspond to the face edges. The numeric spin boxes control how many copies of the texture are tiled on each axis. You can enter a value manually (including fractional values above or below 1.0) or use the spin buttons to quickly increase or decrease the number of tiles. Using the spin buttons will apply the fit immediately, so you can quickly preview the results in the camera view. Toggle the image:preserveAspect.png[] button to *preserve aspect ratio* when using the spin buttons to fit the texture on one axis. This automatically adjusts the other axis so that the aspect ratio of the texture image is preserved, ignoring the value in the other axis' spin box. This can be useful for textures like wooden planks, where you might want an exact number of plank _widths_ on a certain brush face but the number of _lengths_ is not important (since the texture is seamless); in this case, avoiding aspect ratio distortion is more useful than fitting an exact number of lengths. |Align Texture|These buttons shift the texture so that the Top/Bottom/Left/Right edge of the face are aligned with a texture boundary, but otherwise do not modify the scaling of the texture (unlike the *Fit* operation). |Flip Texture|Flips (mirrors) the texture along the horizontal or vertical axis. |Natural|This button resets the texture to a default alignment and scale, based the location and size of the face. |Texture Lock|If this is enabled, the alignment of the texture will be preserved relative to the face if the brush or patch is moved in 3D space. If disabled, the texture itself will remain fixed in 3D space as the brush or patch moves, resulting in the alignment changing. Typically, if you have *Fit* a particular number of texture tiles across a face, you will want to preserve alignment with *Texture Lock*. Conversely, if the texture is applied to a much larger group of brushes with a common texture (that needs to align across all of the brushes, regardless of how they are moved or resized), you will want to disable *Texture Lock*. |=== ==== Using the shader clipboard While constructing a map it will frequently be necessary to apply the same texture to several different surfaces such that they appear seamless in game. In order to assist with this, DarkRadiant provides a *shader clipboard* which allows shaders to be copied and pasted between primitives, and is independent of the main clipboard used for copying and pasting other objects. ===== Copying a shader There are two ways to copy a shader to the shader clipboard. 1. Select a _single face_ (not an entire brush) with *Ctrl + Shift + Left click* in the 3D view, then choose *Edit -> Copy shader*. 2. Directly *Middle click* the face in the 3D view (there is no need to select it first). In both cases, the *ShaderClipboard* section of the bottom status bar will update to show the new value of the shader clipboard. If the *Media* or *Textures* tab is visible, their contents will also update to view the selected shader. NOTE: Selecting a texture explicitly in the *Media* or *Textures* tabs will also update the shader clipboard with the selected shader. ===== Pasting a shader Once a shader is on the shader clipboard, it can be pasted onto another surface in a number of ways: 1. Select the destination face with *Ctrl + Shift + Left click*, then choose *Edit -> Paste shader* or *Edit -> Paste shader (natural)*. 2. Directly *Middle click* the destination face while holding down either *Ctrl* (to paste the shader with projected coordinates) or *Shift* (to paste the shader with natural coordinates). .Natural or projected pasting **** The difference between natural and projected coordinates is apparent when pasting a shader onto a curved patch. With *projected* coordinates (*Ctrl + Middle click*) the texture on the patch will be aligned identically to the texture on the source face, which might result in a stretched texture depending on the angle between the patch and the source face. With *natural* coordinates (*Shift + Middle click*) the texture will flow over the curved surface in a more natural manner. When pasting a shader onto a flat brush face, there may be little or no difference between the two options. **** === Working with entities If brushes are the bricks and mortar of a map (often literally), entities are its fixtures and fittings. Every object in a map which "does something" other than form part of the level geometry is an entity: lights, audio speakers, particle emitters, static meshes, animated creatures or machinery. There are also various functional entity types which provide vital metadata to the game engine, such as determining where the player should start, or how creatures should navigate between locations. DarkRadiant provides certain common functionality to all entities, such as the ability to edit properties using the *Entity* tab. Particular entity types are sufficiently common, however, that they have their own dedicated creation and editing tools. *Light*:: Every map requires at least one light source in order to render anything in game. A light occupies a rectangular volume, which can be created and resized much like a brush, and has properties to determine its colour, visible shape and falloff pattern in three dimensions. Lights can optionally cast shadows, and can even be animated to flicker or flash. *Model (func_static)*:: Model entities represent geometry that is not compiled as part of the map itself. The model geometry can either be derived from brushes and patches created inside DarkRadiant, or from an external model file in ASE or LWO format. Model files are the primary mechanism for including fine detail in a map which would be cumbersome to create with brushes and patches. *Speaker*:: Essentially the audio equivalent of a light, a speaker entity represents the point from which an in-game sound source will emanate. It has properties to control its size and falloff, and optionally override certain properties of the sound shader itself, such as volume. *Player start (info_player_start)*:: This entity tells the game engine where to place the player when a map is first loaded. A map without such an entity will not be playable. [[CreatingLights]] ==== Creating lights To create a light, *Right click* in the 2D view and choose *Create light…*. The position and size of the light volume depends on the current selection: - If _nothing_ is selected, then a light volume will be created at the clicked position with a default size. - If a _single brush_ is selected, the brush will be deleted and the light volume will match the size and position of the brush. - If _several brushes_ are selected, then all selected brushes will be deleted and the light volume will be sized according to the bounding box of the brushes (i.e. the smallest box that would contain all of the brushes). Unselected lights are shown in the 2D view as small boxes, while selected lights also show the boundaries of the light volume. .Light entity selected (left) and unselected (right) image::LightSelectedAndUnselected.png[align="center"] A selected light entity can be moved by dragging inside the small center box, and it can be resized by dragging outside the edge of the light volume. Unlike brushes, light volumes will by default resize symmetrically, so that the center point does not move during the resize. NOTE: Although light volumes can be resized like brushes, their shape can never be changed; every light is an axis-aligned cuboid. This does not, however, mean that they need to _look_ rectangular in game. See the <> for details on how to change the falloff texture using the light inspector. There are a couple of options on the top toolbar which control the display and behaviour of light volumes: [cols="^1h,3h,10"] |=== |image:view_show_lightradii.png[align="center",width=24]|Show all light volumes| If enabled, light volume boundaries will be rendered in the 2D view for _all_ light entities, not just selected entities. The default behaviour is to show only the center box for unselected light entities. |image:dragresize_symm.png[align="center",width=24]|Drag-resize entities symmetrically| If enabled (the default), light entities will be resized symmetrically, without moving the center point. If disabled, lights will be resized like brushes: dragging an edge will move only that edge, while the opposite edge remains fixed. |=== [[LightInspector]] ===== The light inspector When initially created, a light is pure white in colour and has an unrealistic rectangular illumination pattern matching its shape. You can change these properties using the light inspector, which is accessed with the *L* key. image::LightInspector.png[align="center"] *Light volume (omni vs projected)*:: The majority of lights in a map will be the default, omnidirectional shape. An omni light is a simple axis-aligned cuboid which emits light in all directions from its center to its edges. + A projected light is pyramid-shaped, and emits light from the tip of the pyramid towards the base. Projected lights behave more like spotlights in real-life, and can be used to highlight particular areas or project images of windows onto the floor. *Colour*:: Use the colour selector button to display a standard colour selection dialog, or enter the RGB values directly using the text box. As well as changing the hue, the light colour also governs the overall brightness of the light. *Texture*:: The falloff texture controls the shape of the lit area when rendered in-game; the square texture chosen here will be mapped directly onto the rectangular shape of the light volume. Light textures can be simple, such as the generic circular gradient of `biground1`, or much more complex, including multiple colours or animation. *Options*:: There are a few light-propagation options which are mostly used to tweak performance. In particular, disabling shadows for any light which does not actually _need_ to cast shadows can give a significant boost to rendering speed. [[CreatingModels]] ==== Creating models Static models can be used to provide fine details in a map which would be difficult or impossible to create in the editor with brushes or patches. Models are created with an external 3D application such as Blender, Lightwave or Maya, and saved into the game asset tree in LWO or ASE format. To insert a model, ensure that nothing is selected, then *Right click* in the 2D view and choose *Create model…*. DarkRadiant will show the model selector dialog: image::ModelSelector.png[align="center"] In the top-left of the model selector window is a tree of all available models in the game installation. Models may have different _skins_, which are variants of the same model with different textures applied. If a model has skins available, these will be listed as children of the model entry in the tree. Choosing a model or one of its skins will show a preview render in the large widget on the right-hand side. Various metadata such as the polygon count and the applied textures are also shown in table at the lower left. When you have chosen the desired model, click *OK* to insert it into the map. The model will be inserted at the position where you originally right-clicked to show the model chooser. ==== Creating a player start marker The game requires a special entity (`info_player_start`) to mark the position at which the player should enter the map. Without such an entity the map will be unplayable. To create this entity, ensure that nothing is selected then *Right click* in the 2D view and choose *Create player start here*. DarkRadiant will create the player start entity at the clicked position. Since it makes no sense to have more than one player start location, DarkRadiant will not enable the *Create player start here* menu option if there is already an `info_player_start` in the map. Instead, you may choose *Move player start here* to move the existing entity to the clicked position. ==== Creating other entity types Entity types without a dedicated item in the right-click menu are created using the generic *Create entity…* option, which displays a dialog very similar to the <>: image::EntityClassSelector.png[align="center"] Just like the model selector, the entity selector displays a tree of all available entity types in the game installation, and a large preview widget which shows an approximate rendering of the entity, if appropriate. Purely functional entity types such as `info_location` or `info_player_start` do not have any visible appearance and their render preview will be blank. Some entity types have a short textual description giving information about their usage; if present, this is displayed in the text box underneath the entity class tree. After selecting the desired entity type in the tree, click the *Add* button to insert an instance of the entity into the map at the right-clicked location. If the selected entity type requires a brush selection and no brush is selected, a warning will be shown at this point. [[EntityInspector]] ==== Editing entity properties Every entity has a list of key/value pairs known as _properties_ or _spawnargs_. These properties are displayed on the *Entity* tab of the editing panel. image::EntityInspector.png[align="center"] The entity panel lists all of the properties of the currently-selected entity, showing each property's name, its current value, and an icon representing its type (boolean, vector, text etc) if known. Selecting a property will populate the two text boxes in the center of the widget with the property name and value, allowing the value to be edited. If the selected property is of a known type, the panel at the bottom will show a custom widget appropriate for editing the particular property, e.g. three separate numeric spinboxes for a vector property, a colour selector widget for a colour property, and so on. *Changing a property value*:: To change the value of the selected property, simply enter the new value in the lower text box, then hit *Enter* or click the green tick button. If the property has a type-specific editing widget, you can also change its value using the controls in this widget. *Adding a new property*:: There are two different ways to add a new property: . Enter a new property name in the upper text box (which shows the selected property name), and hit *Enter*. This does not rename the selected property, but adds a new property with the edited name and the current value. . *Right click* in the list of properties and choose *Add property* from the context menu. This will display a new dialog listing all known properties along with their descriptive text (if available). Selecting a property in this dialog and choosing *OK* will add the property to the entity with a default value of "-", which can then be edited in the entity panel itself. *Deleting a property*:: To delete the selected property, *Right click* on the property in the list and choose *Delete property*. The entity panel provides two options controlling its behaviour: [cols="1h,3"] |=== |Show inherited properties|If checked, all properties that apply to the selected entity will be shown, including those which are inherited from the entity type declaration in the game installation. If unchecked, only those properties explicitly set on this particular entity (and stored in the map file) will be shown. You can change the value of an inherited property by selecting it and entering a new value in the entity panel; this will create a new explicit property on the entity which overrides the inherited default. |Show help|Enables or disables the text widget at the bottom of the panel which shows a brief explanation of certain properties. If a property has help text available, the question mark icon will be shown in the *?* column. |=== === Reparenting primitives Whenever a new brush or patch is created, it will automatically be made a child of the special *worldspawn* entity, which serves as the default entity containing all of the primitives which define the world geometry. However, *worldspawn* is not the only entity which can contain brushes and patches as children. When you create a model using the <>, DarkRadiant will insert a type of entity called a *func_static* into the map to represent the model geometry. A *func_static* can contain a model file loaded from disk in LWO or ASE format, but it can also be used as a parent for one or more primitives created within DarkRadiant. In either case, the behaviour of *func_static* is the same: it represents a static mesh which is rendered in game but is considered separate from the main world geometry, meaning that it does not participate in map compilation, will not seal the map from leaks, and will not cause intersecting brushes to be subdivided. It is therefore often useful to make certain brushes and patches — typically those which represent "fine detail" rather than entire walls, floors and the like — into *func_static* entities to improve in-game performance and reduce the chances for map compilation problems caused by excessively complex world geometry. ==== Converting primitives into func_static To convert one or more existing primitives into a *func_static* entity, simply select all of the primitives, right-click in the 2D window, and choose *Convert to func_static*. After converting a primitive, a number of changes are noticeable: . The primitive may be drawn in a different colour. . The primitive will no longer be resizeable by dragging its boundary with the mouse. . When the primitive is selected, the *Entity Inspector* will no longer show the *worldspawn* entity, but a new entity with a *classname* of `func_static`. You can set spawnargs on this entity like any other (including giving it a custom name). . Selecting any primitive contained by a *func_static* will cause a small X/Y/Z axis widget to be drawn at the entity's origin position (which may be inside one of the primitives, or outside all of them, depending on their layout). . If there are multiple primitives contained within a single entity, selecting any individual primitive will cause all of the entity's primitives to be selected. ==== Selecting individual child primitives As mentioned in the previous section, selecting any primitive which comprises part of a *func_static* will cause the entire entity and all of its child primitives to be selected together. This allows you to easily move the entire static object by simply dragging any one of its primitives. However, it is still possible to perform operations on a single primitive, for example resizing a brush, by selecting it with the *TAB* key. Each press of *TAB* will cause DarkRadiant to select a different primitive contained within the entity, after which it will return to selecting the entire entity. With only a single primitive selected, all of the normal operations are possible on that primitive, for example deleting or resizing it. The <> widget makes it clear whether you have selected an entity or a primitive within that entity, using the text above the list of entity properties. If an entire entity is selected, the text will appear similar to `Entity 1`, whereas with a primitive selected it will read `Entity 1, Primitive 1`. ==== Adding or removing primitives Once you have created a *func_static* or similar entity from a number of primitives, you can add or remove primitives without needing to create a new entity from scratch. *Adding a primitive*:: Select the entity, then expand the selection (i.e. using *Shift + Left click*) to include one or more existing primitives to add to this entity. Then choose *Edit -> Reparent primitives*. *Removing a primitive*:: Use the *TAB* key to select the individual primitive to remove (you must do this even if there is only one primitive in the entity), then choose *Edit -> Reparent primitives to worldspawn*. The removed primitive will still exist in the map but it will be a regular worldspawn brush or patch, not parented to any other entity. *Unparenting all primitives*:: With the entity selected, simply right-click in the 2D view and choose *Revert to worldspawn* to turn all of the primitives back into worldspawn. === Compiling a map DarkRadiant does not include functionality for compiling a map into the form needed by the game engine; instead, you must use external tools or the map compiler built into the game itself. For Doom 3 and the Dark Mod, the following commands are used within the in-game console (which can normally be accessed with the key immediately above `TAB`): [horizontal] `dmap `:: Compile the map called `mymapname.map`, which must be located within the `maps` directory of the mod installation. If there are any problems compiling the map (e.g. a leak), the error will be displayed in the console output. `map `:: Load the compiled map `mymapname.map` into the game engine and start playing it immediately. TIP: When compiling and testing maps, it may be helpful to set your game to play in windowed mode, with a reduced resolution. This will allow both the game and DarkRadiant to be visible on the screen as separate windows, which you can easily switch between during the compile and test cycle. ==== Preventing leaks A map "leak" occurs when the play area is not fully enclosed with a complete shell of opaque brushes. If the map leaks, compilation will fail and the map will not be playable. In order to minimise the likelihood of a map leak, ensure that your map has all of the following properties: - The map interior is _completely_ sealed from the exterior void by brushes (not patches). It is much easier to achieve this by building up a map carefully, making good use of the grid snapping functionality, rather than haphazardly throwing brushes together and hoping to seal them later. - All of the sealing brushes have an opaque texture. Skybox textures are considered opaque and are OK, however semi-transparent or perforated mesh textures are not. - The origin point of _every_ entity in the map lies within the sealed map interior. It is OK if a large model extends outside of the map, provided that its origin point is on the inside. WARNING: Do *not* be tempted to avoid leaks by enclosing your entire map in a single huge box. This may seem to solve the problem (the map will indeed not leak), but it completely negates the important performance optimisations that the map compiler carries out when it "flood fills" the map interior. [[PointFile]] ==== Locating leaks with a pointfile No matter how hard you try to avoid leaks, occasionally they will happen. In this case the *pointfile* functionality is helpful to identify the location of the leak. After the map compilation has failed with a leak, return to DarkRadiant and choose *Pointfile* from the *File* menu. This will automatically load the point file associated with the current map, which contains a series of points identifying the path to the leak. This path will be rendered as a bright red line in both the 2D and 3D views: .A pointfile rendered in both 3D and 3D views image::Pointfile.png[align="center"] In this example we can clearly see that the map has leaked because the far wall brush does not join up with the ceiling. == Organising a map Since a fully developed Dark Mod map is large and complex, DarkRadiant provides several tools to make organising a large map easier. Objects can be grouped, sorted into user-defined layers and filtered using various criteria, while the prefab system allows large chunks of map to be reused or shared with other mappers. [[Group]] === Grouping objects DarkRadiant allows a number of objects to be grouped together, so that they can be selected and manipulated as a single unit. To *create* a group: . Select several objects. . *Right-click* in the 2D window to show the context menu. . Choose *Group Selection*. Once the objects are in a group, selecting any object in the group will automatically select all other objects in the same group. To *remove* a group, select the group then choose *Ungroup Selection* from the 2D view context menu. NOTE: Groups can be nested, by creating a group that includes one or more existing groups. When you ungroup such a nested group, the original component groups will be restored. [[WorkingWithPrefabs]] === Working with prefabs DarkRadiant allows a collection of objects to be saved to disk as a *prefab*, which can then be imported into other maps. You can use prefabs to store anything from a single small object to a vast section of map geometry complete with lights and AI. ==== Exporting to a prefab . Select the objects in the map that you wish to include in the prefab. . From the *File* menu, choose *Save selected as prefab...* . Use the file chooser dialog to choose a location and name for the prefab file. TIP: Unlike actual `.map` files which must be accessible by the game engine, prefabs are a DarkRadiant-only feature that have no significance to the engine. You are therefore free to store prefab files wherever you wish, either inside or outside the game installation directory. [[ImportPrefab]] ==== Importing a prefab Either right-click in the 2D window and choose *Insert prefab...*, or open the *File* menu and choose *Import prefab...*. This will show the prefab browser. image::PrefabChooser.png[align="center"] Like the model selector, the prefab selector shows a tree of available prefabs on the left, and a preview window on the right giving an idea of what the prefab looks like. Using the radio buttons at the top of the window, you can choose whether to browse prefabs contained within the game installation, or within a custom directory of your choice. The preview window functions much like the 3D view in the main application: *right click* to enter or leave camera mode, which enables the following motion commands: [cols="1h,3"] |=== |Mouse move|Change the camera view direction (pan or tilt) |Mouse wheel|Zoom the camera |Up/Down arrow|Move the camera forwards or backwards |Left/Right arrow|Move the camera left or right |=== When you have chosen the desired prefab, click *OK* to insert it into the map. Before inserting the prefab, you can use the *Create Group out of Prefab parts* checkbox to control whether the prefab is automatically grouped as a single object, or inserted as separate selectable objects. === Exporting models DarkRadiant provides a limited ability to export scene geometry into a number of 3D model file formats: ASCII Scene Export (ASE), Lightwave (LWO) or Wavefront OBJ. This functionality is provided to help with organising frequently-used map elements — DarkRadiant is not intended to compete with full-featured 3D modelling applications such as Blender or 3DS Max. Exporting to a model is similar to exporting to a prefab, except that models can only contain geometry (brushes or patches), not other map entities such as lights or speakers. However, unlike prefabs, models can be edited with other 3D software, and exporting map geometry as a model might provide a useful template for creating map-specific static meshes in a more powerful modelling tool. To export a model: . Select the geometry to be exported. Note that DarkRadiant currently does not complain if you select non-geometry such as lights, however these will not appear in the resulting model file. . Open the *File* menu and choose *Export selected as model...* . In the *Output Format* dropdown, choose one of the supported model formats: `ASCII Scene Export (.ase)`, `Lightwave Object File (.lwo)`, or `Wavefront OBJ (.obj)`. . Choose the path for the exported model file in the *File Path* entry box. . Click *OK* to export the model. === Using layers When a map contains a large number of objects, it may become difficult to work with the 2D views as a result of the visual clutter. Organising the map into several *layers* can help solve this problem. The visibility of each layer can toggled independently, allowing you to focus on the objects you want to work with. Layers do not impose any requirements on the physical layout of objects: it is possible to include objects spread all over a map into a single layer. For example, you can have a layer for all enemies, another layer for all lights, another layer for brushwork, and so on. ==== The Layers window To show or hide the *Layers* window, choose `Layers` from the `Edit` menu. The window lists all of the layers which exist in the current project, and allows you to perform various operations on them. image::LayersWindow.png[align="center"] *Creating a layer*:: To create a new layer, click the `New` button at the bottom of the window. A popup will be shown asking for the name of the new layer. Once the layer is created, it will appear in the list. *Deleting a layer*:: Click the red 'X' button to the right of a layer to delete it. Deleting a layer does *not* delete the objects in the layer, only the layer itself. Any objects in that layer will be moved to the default layer. *Renaming a layer*:: Click the edit button to the right of a layer name to change the name. A popup will be shown asking for the new name. *Selecting objects on a layer*:: Click on the name of a layer itself to select all objects on that layer. *Toggling visibility*:: The button to the left of a layer name is used to toggle the visibility of objects on that layer. If objects are visible, a tick is shown in the button, otherwise it is empty. *Changing the active layer*:: The visibility toggle button shows a star for the layer which is currently set as the active layer. To change the active layer, *Ctrl + Left click* on the layer you wish to set as the new active layer. ==== Moving objects into layers An object can be placed in any number of layers. To see which layers a selected object is in, look at the narrow coloured rectangle next to the layer name in the *Layers* window. The rectangle will turn from grey to pink for each layer that contains the selected object. .A light in two layers: "Default" and "Lights" image::LightInTwoLayers.png[align="center"] All newly-created objects will be placed in the *Default* layer. You can move or copy objects between layers using the options in the 2D view's context menu. *Create layer...*:: Bring up the name entry dialog and create a new layer, exactly as if the *New* button in the *Layers* window had been clicked. *Add to layer...*:: Copy the selected object into the chosen layer, without removing it from its existing layer(s). *Move to layer...*:: Move the selected object into the chosen layer, removing it from all other layers. *Remove from layer...*:: Remove the selected object from the chosen layer. === Filtering map elements While the Layers feature allows maps to be organised into manual groupings of objects, DarkRadiant also provides a mechanism for controlling the visibility of items based on their characteristics. This is controlled via the *Filter* menu. ==== Built-in filters The *Filter* menu is populated with a number of built-in filter rules which are expected to be useful to mappers. Each filter may be activated independently, and each activated filter will be shown with a tick alongside its name. Filters operate in a "subtractive" sense: if a filter is active, objects matched by that filter will be hidden; the remaining visible objects will be those which are not matched by any active filters. TIP: Active filters are persisted into settings, and are therefore retained between DarkRadiant sessions. The built-in filters include: [cols="1h,3"] |=== |All entities|Hide all entities other than the worldspawn, leaving only brushes and patches visible. |World geometry|The inverse of *All entities*. Hides brushes and patches while leaving entities visible. |Brushes|Hide only brushes, leaving patches and entities visible. |Patches|Hide only patches, leaving brushes and entities visible. |Caulk|Hide any brush or patch which has the *caulk* texture applied to at least one surface. |Collision surfaces|Hide the additional collision meshes which are embedded in certain models, while leaving the models themselves visible. This filter is especially useful because collision meshes often obscure parts of the model itself. |=== Aside from the list of filters, the *Filter* menu contains three other options: [cols="1h,3"] |=== |Activate all filters|Activate every filter in the list. Very unlikely to be useful, because it will probably result in every object in the map becoming invisible. |Deactivate all filters|Turn off all active filters. This one _is_ useful, since you may have manually activated a number of filters and want to turn them all off at once. |Edit filters...|Display a dialog allowing you to create, edit and manage the list of available filters. |=== ==== Customising filters In addition to the filters supplied with the mod distribution, DarkRadiant also allows you to add your own custom filters to the list by choosing the *Edit Filters...* menu option. This displays a dialog containing the list of all available filters, including built-in ones. Use the *Add* and *Delete* buttons to add or remove custom filters from the list, and the *Edit* button to enter a new dialog which allows you to edit the rules of the selected filter. Built-in filters cannot be removed or edited, but you can choose the *View* button to open the filter editor in a read-only mode. .The filter editor dialog image::FilterEditor.png[align="center"] Each filter consists of a number of *rules*, which are applied in the order shown in the list box. Filters may contain only a single rule ("hide all speaker entities"), or multiple rules ("hide all entities, then show only speaker entities"). You can freely add, remove or reorder rules using the buttons to the right of the rules list. Each rule has the following components: *Index*:: An integer representing the rule's position in the list, numbered from zero. *Type*:: This controls what the rule is "looking for" when it tries to match objects to hide or show. Currently there are four rule types: *entityclass* which matches the classname of entities (e.g. "speaker"), *object* which matches either "brush" or "patch" and is used for controlling the visibility of map geometry, *texture* which matches the name of an applied texture, and *entitykeyvalue* which matches the value of a specific property on the entity. *Entity Key*:: This column is only used for *entitykeyvalue* rules, in which case it contains the name of the property to match (while the _value_ to match will be contained in the *Match* column). *Match*:: This contains the actual value to be matched by the rule. Its interpretation and allowed values will depend on the rule type. For *object* type rules the value must be "brush" or "patch", whereas with all other rule types the value may be any arbitrary string. *Action*:: Choose whether this rule will result in matched objects being shown, or hidden. The filter system starts with everything being visible by default, so a filter which does not contain at least one *hide* rule will have no effect. === The entity list As a map becomes larger and more complex, keeping track of its contents may become more challenging. To assist with this, DarkRadiant provides an *Entity List* which functions as an "outline" view of the map, listing all entities and their child brushes and patches (if any). The entity list can be accessed by choosing the *Entity List* option from the *View* menu. .The entity list, showing a number of entities in a small test map image::EntityList.png[align="center"] The tree structure shown in the entity list corresponds to the structure of the map itself: a single "world" entity which acts as the parent of the brushes and patches in the map, alongside a number of other entities that have been placed by the mapper, some of which may contain their own child brushes or patches. Clicking on an entity in the list will cause it to be selected in the map. If the *Focus camera on selected entity* checkbox is enabled, the camera will additionally be moved to view the clicked entity. By enabling the *List visible nodes only* checkbox, you can limit the entity list to show only entities which are not currently hidden via filters. == Dark Mod features The Dark Mod is a considerably more complex game than vanilla Doom 3, and its maps therefore include certain settings and features that would be cumbersome to configure manually by entering property values on entities. DarkRadiant therefore provides a number of Dark Mod specific dialogs which are described in this section. NOTE: Most Dark Mod features are compiled as separate plugins, and may not be built by default on certain platforms. If these features seem to be missing, contact the distributor of your DarkRadiant binary package for advice, or examine the build options if you are compiling DarkRadiant yourself from source code. === The Difficulty editor Most Dark Mod maps can be played on one of three possible difficulty settings, typically named "Easy", "Medium" and "Difficult" (although these names can be overridden). The precise effects of each of these difficulty settings are fully under the control of the map author, and might include such effects as spawning or despawning particular enemies, changing enemy health or patrol routes, or modifying the details of objectives. DarkRadiant provides a Difficulty editor dialog to facilitate one particular class of difficulty-dependent modification: making global changes to entity classes throughout the map. This could be used, for example, to change the health of every instance of a particular enemy, or (as shown in the diagram) removing a particular enemy type's ability to relight torches. .The Difficulty editor, showing a modified property on a particular entity class image::DifficultyEditor.png[align="center"] The Difficulty editor shows the names of the available difficulty levels in a dropdown widget, beneath which are the settings for the selected difficulty level. The difficulty names are customisable on a per-map basis — normally these will be the default values of "Easy", "Medium" and "Difficult", but if the current map has customised difficulty names DarkRadiant will adjust the tab names accordingly. On the left is a tree view showing all of the property overrides for the current difficulty level. Each top-level item is a particular entity class, which contains all of the property changes that are made to this entity class in this difficulty level. In this example, the `ai_builder_guard` entity has its `canLightTorches` property set to 0 on the Easy difficulty setting, meaning that all enemies of this particular type will not be able to relight torches. *Adding a setting*:: To add a new property setting for the current difficulty level, click the *Add* button. The widgets on the right hand side will become available, allowing you to choose an entity class, a property ("Spawnarg") to change, and the change to make ("Argument"). You can choose a number of mathematical operations for the modification, including a simple value assignment, or an addition or multiplication. After specifying the values, make sure you click the *Save* button to commit the changes into the list view. *Removing a setting*:: Select an item in the list view and click the *Delete* button to remove a particular setting. You can only remove individual assignments from the list; to remove all of the assignments for a particular entity class, you must select and delete each one individually. *Editing the difficulty name*:: To edit the name of the current difficulty level, click the edit button to the right of the dropdown, and enter a new name in the text box. The modified name will be written into a property on the `worldspawn` entity and reflected both in game and in DarkRadiant. TIP: For details of more advanced difficulty-dependent changes, such as modifying the behaviour of a *single* entity (rather than an entire entity class), consult the Dark Mod Wiki. === Game Connection The Dark Mod includes functionality to dynamically interact with a DarkRadiant session running on the same machine, allowing certain information (such as camera position) to be synchronised both to and from the game, and for certain entity property changes to be pushed to the running game without needing to restart. These features are accessed in DarkRadiant through the *Connection* menu and buttons on the camera view toolbar. ==== Activating the connection . In *The Dark Mod*, load the map which you are currently editing in DarkRadiant. . Bring down the game console and enter the command [listing] com_automation 1 + This should result in a status message indicating that the game is listening for connections on a particular network port. [listing] Automation now listens on port 3879 The game process is now ready to exchange data with DarkRadiant. ==== Synchronising camera position You can synchronise the DarkRadiant camera position and the game player position in both directions: editor to game and game to editor. This feature is most easily controlled with the buttons on the camera view toolbar, but it can also be activated from the *Connection* menu. [cols="^1h,3h,10"] |=== |image:CameraSync.png[align="center",width=24] |Game position follows DarkRadiant camera| Any motion of the DarkRadiant camera will be transmitted in realtime to the game, resulting in the player position moving (in *noclip* mode) to the same position and view direction. This is a toggled option which remains active until switched off. |image:CameraSyncBack.png[align="center",width=24] |Move camera to current game position| Update the DarkRadiant camera to match the current player position and view direction in game. This is a single-shot command; there is no mechanism to continuously move the DarkRadiant camera in response to player motion in game. |=== == Command reference === File menu *New map*:: Prompt to save and close the current map (if necessary), then start working on a new empty map. *Open map...*:: Prompt to save and close the current map (if necessary), then display a file browser to choose and load an existing map file from disk. *Import map...*:: Display a file browser to choose and load an existing map file from disk, merging the contents with the existing map *Import prefab...*:: Display the <> to choose and import a prefab from disk. NOTE: Importing a map and importing a prefab are functionally identical operations; the only difference is the user interface used for choosing what to import. The prefab browser is designed to offer a user-friendly workflow for browsing, previewing and importing from a library of frequently-used map elements, while *Import map* may be more useful for merging two or more partially-complete maps. *Save*:: Save the current map to disk under its existing file name. *Save as...*:: Display a file browser to choose a new name for the current map, then save to this new file name in future. *Save copy as...*:: Display a file browser to choose a new filename to save this map into, without changing the current map name for future *Save* operations. *Save selected as Map...*:: Choose a file name and save the currently-selected items into a new map file without changing the current map name. Equivalent to *Save copy as* but it only saves the selected items, not the entire map. *Save selected as prefab...*:: Equivalent to *Save selected as Map* but it saves the selected items into a <> (`*.pfb`) file in the standard prefab location. *Save selected as Collision Model...*:: Allows a selected map object (typically a brush) to be set as the collision model for a particular ASE or LWO model. After choosing this option, DarkRadiant will display the model chooser dialog, allowing you to choose the particular model that the selected object should be associated with. The selected brush is then saved, and associated with the model so that subsequent insertions of the same model will use the new collision geometry. *Reload Models/Selected Models/Skins/Scripts/Readable Guis/Materials/Defs/Particles*:: Forces DarkRadiant to re-read the selected category of items from disk, refreshing its internal data structures. This is necessary if you have edited or re-exported some asset which DarkRadiant is using in the current map and you want to see the latest changes. *Game/Project Setup...*:: Show the <> dialog for configuring game-specific settings. *Pointfile*:: Load and show the <> for the current map, if there is one. If more than pointfile is available, a dialog will be shown allowing you to choose which pointfile to load. An error dialog will be displayed if there is no current pointfile (which is usually the case if the current map has not leaked during compilation). Choose this option a second time to hide the rendered pointfile. *Exit*:: Exit DarkRadiant, prompting to save the current map if necessary. === Edit menu *Undo*:: Undo the most recent operation. *Redo*:: Redo the most recently undone operation. *Copy*:: Copy the selected item(s) to the clipboard. *Paste*:: Paste the item(s) on the clipboard to their original world location. NOTE: Objects copied to the clipboard are represented using the same text format which can be found in `.map` files. This makes it possible to save clipboard content into a file and load it later as an actual map fragment. *Paste to camera*:: Paste the item(s) on the clipboard to the current camera location, ignoring their original world location. *Duplicate*:: Make a copy of the currently selected item(s), slightly offset from their original position. *Delete*:: Remove the currently selected item(s). *Group selection*:: Combine the selected items into a <>. *Ungroup selection*:: Split the selected group back into individual objects. *Reparent primitives*:: Make all selected worldspawn brushes or patches into children of the selected func_static (or similar entity). Requires exactly one entity to be selected, along with at least one primitive which is currently a child of the worldspawn. *Reparent primitives to worldspawn*:: Unparent the selected primitive from a func_static (or similar entity), making it a child of the worldspawn. Before using this command you must first select a single primitive with the *TAB* key (even if the entity only contains a single primitive), otherwise the whole entity will be selected and the command will silently fail. TIP: To unparent *all* of an entity's primitives and convert them back into worldspawn, just right-click in the 2D view and choose *Revert to worldspawn*. == Configuring DarkRadiant DarkRadiant offers a large number of configurable options which can be used to tailor its behaviour to your desired workflow. Most of these options can be found either in the Preferences dialog or exposed directly as menu items. === The Preferences dialog The Preferences dialog can be shown by choosing `Preferences...` from the `Edit` menu. The dialog contains a number of pages containing groups of logically related options. ==== Camera settings The *Camera* page contains options relating to the movement and behaviour of the 3D camera. *Movement Speed*:: Use this slider to control how many game units the camera moves forwards or backwards when you use the scroll wheel in the 3D view. It does not affect the speed of rotation or lateral dragging (e.g. with *Ctrl*) in free look mode, nor does it affect motion with the arrow keys. *Rotation Speed*:: This controls the speed of angular rotation when dragging the mouse after entering free look mode with right-click. If you have a high DPI mouse and want to be able to direct the camera more precisely, reducing this setting may help. *Freelook mode can be toggled*:: Disabling this checkbox makes the free look functionality behave more like typical MMO games, where you hold down the right mouse button and drag to move the camera around. Uncheck this option if you hate modal interfaces or find the default toggle behaviour confusing. *Discrete movement (non-freelook mode)*:: If this is checked, moving the camera with the arrow keys in non-freelook mode will cause discrete jumps in position, rather than smooth motion. *Enable far clip plane*:: You can completely disable the <> by unchecking this option. This will avoid the need to manage the position of the far clip plane, but may negatively impact rendering performance in large or complex maps. *Invert mouse vertical axis*:: Enable this option to flip the sense of the vertical camera motion when freelook mode is enabled, so that moving the mouse upwards tilts the camera downwards, and vice versa. *Solid selection boxes*:: This option controls whether selected brushes are drawn with a dashed outline (option disabled) or a solid line (option enabled). It affects both the 2D and the 3D views. *Show camera toolbar*:: Uncheck this to completely hide the toolbar at the top of the 3D camera window (which includes the render mode buttons and the far clip plane controls). ==== Orthoview settings The *Orthoview* page contains options controlling the display and behaviour of the 2D views. *View chases mouse cursor during drags*:: If this is enabled, dragging an object off the edge of a 2D view will cause the 2D view to automatically scroll to keep the dragged object in view. If disabled, the dragged object will reach the edge and stop. You can control the speed of the scrolling with the *Maximum Chase Mouse Speed* slider. *Update views on camera movement*:: This option controls whether the camera position indicator in the 2D views is automatically kept in sync with camera movements in the 3D window. If this option is disabled, the 2D view camera indicator may not move until you explicitly click on or interact with a 2D view. *Show crosshairs*:: Enable this option to display full-window-sized crosshairs tracking the mouse cursor whenever it moves over a 2D window. This may assist with precise selection or object alignment. *Show grid*:: Control the visibility of grid lines in the 2D views. This does not affect the snapping behaviour, just the visual rendering of the grid. *Show size info*:: Control the visibility of the text overlays which show the dimensions of a selected object on the X, Y or Z axes. This option is also available in the `View -> Show` menu. *Show entity angle arrow*:: Hide or show the small arrow which indicates the direction of an entity with an `angle` spawnarg, such as `info_player_start`. This affects both the 2D and 3D views. *Show entity names*:: Enable this to show permanently-visible text names next to each entity in the map. This option is also available as `View -> Show -> Show names`. *Show blocks*:: If enabled, the world space is divided into a horizontal grid of 1024x1024 unit blocks (of infinite height) which are outlined in blue in the 2D views. Each block is assigned a pair of numbers representing its position from the centermost block, which is assigned `(0, 0)`. This might help with "blocking out" a map at the beginning of the design phase. This option is also available in the `View -> Show` menu. *Show coordinates*:: Toggle the visibility of the coordinate rulers along the edges of the 2D window. Also available in the `View -> Show` menu. *Show axes*:: Control the visibility of the axis widget displayed at the top-left of each 2D window and at the world origin. Also available in the `View -> Show` menu. *Show window outline*:: Enable this to draw a rectangular outline around the edge of the 2D window. Depending on the platform and GUI theme this may be almost invisible, but might be useful to improve visibility in certain environments. *Show workzone*:: The 'workzone' is an imaginary axis-aligned cuboid which encloses the set of currently-selected items (this is what defines the volume of a new light, when a <> from one or more existing brushes). Enabling this option causes the workzone to be outlined in red in the 2D views. Also available in the `View -> Show` menu. *Translate manipulator always constrained to axis*:: This option affects the behaviour of the <>. When the option is disabled, dragging a selected object in translation mode will behave as if the manipulator's *central square* is being dragged, and allow motion in two dimensions. If the option is enabled, dragging the selected object will behave as if the closest manipulator *arrow* is being dragged, and allow motion along only a single axis. Translation in two dimensions will always be possible by clicking on the manipulator's central square directly, regardless of the state of this option. *Higher selection priority for entities*:: When using the mouse to click on and select an entity which is in front of, behind or inside a brush, this option controls whether DarkRadiant will prefer to select the entity (enabled) or the brush (disabled). ==== Multi Monitor settings The Multi Monitor page contains a single setting, *Start DarkRadiant on monitor*, which allows you to choose which monitor DarkRadiant will start on if you have several available. ==== Autosave settings *Enable Autosave*:: Controls whether the autosave feature is active or disabled. *Autosave Interval*:: Use this slider to choose how often DarkRadiant will make an autosave. By default, autosaves are made every 5 minutes. *Save Snapshots*:: If this option is enabled, DarkRadiant will make each autosave into a separate copy of the map file, allowing you to potentially revert changes which were made several autosaves ago. If this option is disabled, there will only ever be a single autosave file, which will protect against DarkRadiant or system crashes but not against long-term erroneous changes. *Snapshot folder*:: This specifies the name of the folder used to store snapshot autosaves, if the *Save Snapshots* option is enabled. *Max Snapshot size per map*:: This allows you to control the amount of disk space used for storing snapshots, by specifying a maximum number of megabytes that will be used for storing the snapshots for a single map. If the disk usage grows above this limit, DarkRadiant will start to delete old snapshots. ==== Clipper settings *Clipper tool uses caulk texture*:: If this option is enabled, the <> will texture the newly-created clip face with the texture specified in the *Caulk shader name* text field. If the option is disabled, the new face will be given the same texture as the rest of the brush. ==== Grid settings This page contains a couple of options relating to the appearance and default behaviour of the grid. *Default grid size*:: Use this combo box to choose the default grid size used in new projects (to change the grid size in the _current_ project, use the options in the *Grid* main menu). *Major grid style*:: Choose the rendering style for the major grid lines. Available options are *Lines*, *Dotted Lines*, *More Dotted Lines*, *Crosses*, *Dots*, *Big Dots*, and *Squares*. *Minor grid style*:: Choose the rendering style for the minor grid lines. Available options are the same as the *Major grid style* combo box. ==== Selection settings *Ignore light volume bounds when calculating default rotation pivot location*:: This option affects the behaviour of the <> when multiple objects are selected. DarkRadiant will place the rotation widget at the approximate "center of gravity" of the set of selected objects. If this option is enabled, any selected lights will be treated as point entities, with no volume in 3D space regardless of their actual light volumes. If this option is disabled, the entire light volume will be taken into account as if the light were a rectangular brush. ==== Undo settings *Undo Queue Size*:: Use this spinbox to control the number of operations which are saved onto DarkRadiant's internal undo stack. Larger values provide a longer history of undoable operations, at the expense of requiring more memory. ==== Primitives settings This page contains two options controlling the default behaviour of applied textures. These values can be set on a per-object basis using the <>. *Default texture scale*:: Set a default scale factor for newly applied textures. *Enable texture lock*:: Set the default value of the Texture Lock button. See the <> section for more details on this feature. ==== Texture Browser settings These options control the behaviour of the <>. *Uniform texture thumbnail size*:: Choose the size in pixels that will be used for texture thumbnails. *Texture scrollbar*:: Hide or show the scrollbar in the textures tab. If the scrollbar is hidden, scrolling is only possible with the mouse wheel. *Mousewheel increment*:: This option determines how much the window is scrolled when the mouse wheel is rotated. *Max shadername length*:: Choose the maximum number of characters that may appear in each texture name. If a texture contains more characters than this, the texture name will be abbreviated with "..." in the middle. ==== Map files settings *Number of most recently used files*:: Choose the number of map files to list in the recent map section at the bottom of the *File* menu. *Open last map on startup*:: Enable this option to make DarkRadiant automatically load the most recently-used map every time it starts, rather than starting with an empty map. == Features for game distributors DarkRadiant is designed to work out of the box with a standard Doom 3 or Dark Mod game installation, however it also offers a few features aimed at developers of the game itself. === Controlling asset visibility As the development of a game progresses, certain models or textures may become obsolete or deprecated, either because they are no longer needed or because they fall short of the quality standard that is expected of new assets. If these models and textures have already been distributed, removing them from the game installation may be problematic, as maps which depend on them will fail to load correctly. DarkRadiant offers a mechanism to deal with this by allowing certain assets to be marked as "hidden". A hidden asset will no longer be presented for selection by the user (e.g. on the Media tab or in the Model selector), but will continue to function as normal when it appears in a loaded map. ==== Creating an assets.lst file To change the visibility of assets, you need to create a file called `assets.lst` which resides in the top-level `models` or `materials` directories in the mod installation. This file may be inside a PK4 or in an extracted directory tree. The contents of `assets.lst` are a simple list of key/value pairs, assigning a visibility value to each named asset. For example: .assets.lst ---- darkmod/chairs/some_broken_chair.lwo=hidden darkmod/tables/another_table.ase=hidden ---- Asset paths listed on the left-hand side are interpreted relative to the directory containing `assets.lst` (which must be `models` or `materials`). The visibility value on the right-hand side must be either `hidden` or `normal`; a value of `normal` is equivalent to not listing the file at all, and results in no change to its visibility. NOTE: Only *files* may be listed in an `assets.lst`, not items in a virtual hierarchy such as the material shader tree. When an MTR file is listed as hidden in the `materials` directory, all shaders contained within it will be hidden in DarkRadiant. This means that in order to hide specific shaders, you must move these into one or more MTR files which are listed as hidden. DarkRadiant-2.14.0/doc/manual.css000066400000000000000000000715031413722237400165310ustar00rootroot00000000000000/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} audio,canvas,video{display:inline-block} audio:not([controls]){display:none;height:0} [hidden],template{display:none} script{display:none!important} html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} body{margin:0} a{background:transparent} a:focus{outline:thin dotted} a:active,a:hover{outline:0} h1{font-size:2em;margin:.67em 0} abbr[title]{border-bottom:1px dotted} b,strong{font-weight:bold} dfn{font-style:italic} hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} mark{background:#ff0;color:#000} code,kbd,pre,samp{font-family:monospace;font-size:1em} pre{white-space:pre-wrap} q{quotes:"\201C" "\201D" "\2018" "\2019"} small{font-size:80%} sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} sup{top:-.5em} sub{bottom:-.25em} img{border:0} svg:not(:root){overflow:hidden} figure{margin:0} fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} legend{border:0;padding:0} button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} button,input{line-height:normal} button,select{text-transform:none} button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} button[disabled],html input[disabled]{cursor:default} input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} textarea{overflow:auto;vertical-align:top} table{border-collapse:collapse;border-spacing:0} *,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} html,body{font-size:110%} body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Open Sans",sans-serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto} a:hover{cursor:pointer} img,object,embed{max-width:100%;height:auto} object,embed{height:100%} img{-ms-interpolation-mode:bicubic} .left{float:left!important} .right{float:right!important} .text-left{text-align:left!important} .text-right{text-align:right!important} .text-center{text-align:center!important} .text-justify{text-align:justify!important} .hide{display:none} body{-webkit-font-smoothing:antialiased} img,object,svg{display:inline-block;vertical-align:middle} textarea{height:auto;min-height:50px} select{width:100%} .center{margin-left:auto;margin-right:auto} .spread{width:100%} p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6} .subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} a{color:#2156a5;text-decoration:underline;line-height:inherit} a:hover,a:focus{color:#1d4b8f} a img{border:none} p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} p aside{font-size:.875em;line-height:1.35;font-style:italic} h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:bold;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} h1{font-size:2.125em} h2{font-size:1.6875em} h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} h4,h5{font-size:1.125em} h6{font-size:1em} hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} em,i{font-style:italic;line-height:inherit} strong,b{color:#7a2518;font-weight:bold;line-height:inherit} small{font-size:60%;line-height:inherit} code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em} ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} ul.square{list-style-type:square} ul.circle{list-style-type:circle} ul.disc{list-style-type:disc} ul.no-bullet{list-style:none} ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} dl dt{margin-bottom:.3125em;font-weight:bold} dl dd{margin-bottom:1.25em} abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} abbr{text-transform:none} blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} blockquote cite:before{content:"\2014 \0020"} blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} @media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} h1{font-size:2.75em} h2{font-size:2.3125em} h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} h4{font-size:1.4375em}} table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} table thead,table tfoot{background:#f7f8f7;font-weight:bold} table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} body{tab-size:4} h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} .clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table} .clearfix:after,.float-group:after{clear:both} *:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed} pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} .keyseq{color:rgba(51,51,51,.8)} kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} .keyseq kbd:first-child{margin-left:0} .keyseq kbd:last-child{margin-right:0} .menuseq,.menu{color:rgba(0,0,0,.8)} b.button:before,b.button:after{position:relative;top:-1px;font-weight:400} b.button:before{content:"[";padding:0 3px 0 2px} b.button:after{content:"]";padding:0 2px 0 3px} p a>code:hover{color:rgba(0,0,0,.9)} #header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} #header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table} #header:after,#content:after,#footnotes:after,#footer:after{clear:both} #content{margin-top:1.25em} #content:before{content:none} #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8} #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px} #header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} #header .details span:first-child{margin-left:-.125em} #header .details span.email a{color:rgba(0,0,0,.85)} #header .details br{display:none} #header .details br+span:before{content:"\00a0\2013\00a0"} #header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} #header .details br+span#revremark:before{content:"\00a0|\00a0"} #header #revnumber{text-transform:capitalize} #header #revnumber:after{content:"\00a0"} #content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} #toc{border-bottom:1px solid #efefed;padding-bottom:.5em} #toc>ul{margin-left:.125em} #toc ul.sectlevel0>li>a{font-style:italic} #toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} #toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} #toc li{line-height:1.3334;margin-top:.3334em} #toc a{text-decoration:none} #toc a:active{text-decoration:underline} #toctitle{color:#7a2518;font-size:1.2em} @media only screen and (min-width:768px){#toctitle{font-size:1.375em} body.toc2{padding-left:15em;padding-right:0} #toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} #toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} #toc.toc2>ul{font-size:.9em;margin-bottom:0} #toc.toc2 ul ul{margin-left:0;padding-left:1em} #toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} body.toc2.toc-right{padding-left:0;padding-right:15em} body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}} @media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} #toc.toc2{width:20em} #toc.toc2 #toctitle{font-size:1.375em} #toc.toc2>ul{font-size:.95em} #toc.toc2 ul ul{padding-left:1.25em} body.toc2.toc-right{padding-left:0;padding-right:20em}} #content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} #content #toc>:first-child{margin-top:0} #content #toc>:last-child{margin-bottom:0} #footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} #footer-text{color:rgba(255,255,255,.8);line-height:1.44} .sect1{padding-bottom:.625em} @media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}} .sect1+.sect1{border-top:1px solid #efefed} #content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:left;font-weight:400} #content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} #content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} .audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0} .paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)} table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit} .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} .admonitionblock>table td.icon{text-align:center;width:80px} .admonitionblock>table td.icon img{max-width:none} .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)} .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} .exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} .exampleblock>.content>:first-child{margin-top:0} .exampleblock>.content>:last-child{margin-bottom:0} .sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} .sidebarblock>:first-child{margin-top:0} .sidebarblock>:last-child{margin-bottom:0} .sidebarblock>.content>.title{color:#7a2518;margin-top:0;margin-bottom:1em;text-align:left;font-size:1.1em;font-weight:bold;} .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} .literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} .sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} .literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em} .literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal} @media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}} @media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}} .literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} .listingblock pre.highlightjs{padding:0} .listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} .listingblock pre.prettyprint{border-width:0} .listingblock>.content{position:relative} .listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} .listingblock:hover code[data-lang]:before{display:block} .listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999} .listingblock.terminal pre .command:not([data-prompt]):before{content:"$"} table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45} table.pyhltable td.code{padding-left:.75em;padding-right:0} pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8} pre.pygments .lineno{display:inline-block;margin-right:.25em} table.pyhltable .linenodiv{background:none!important;padding-right:0!important} .quoteblock{margin:0 1em 1.25em 1.5em;display:table} .quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} .quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} .quoteblock blockquote{margin:0;padding:0;border:0} .quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} .quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right} .quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)} .quoteblock .quoteblock blockquote{padding:0 0 0 .75em} .quoteblock .quoteblock blockquote:before{display:none} .verseblock{margin:0 1em 1.25em 1em} .verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} .verseblock pre strong{font-weight:400} .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} .quoteblock .attribution br,.verseblock .attribution br{display:none} .quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} .quoteblock.abstract{margin:0 0 1.25em 0;display:block} .quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0} .quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none} table.tableblock{max-width:100%;border-collapse:separate} table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0} table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0} table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0} table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0} table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0} table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0} table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0} table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0} table.frame-all{border-width:1px} table.frame-sides{border-width:0 1px} table.frame-topbot{border-width:1px 0} th.halign-left,td.halign-left{text-align:left} th.halign-right,td.halign-right{text-align:right} th.halign-center,td.halign-center{text-align:center} th.valign-top,td.valign-top{vertical-align:top} th.valign-bottom,td.valign-bottom{vertical-align:bottom} th.valign-middle,td.valign-middle{vertical-align:middle} table thead th,table tfoot th{font-weight:bold} tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:#7a2518;font-weight:bold} p.tableblock>code:only-child{background:none;padding:0} p.tableblock{font-size:1em} td>div.verse{white-space:pre} ol{margin-left:1.75em} ul li ol{margin-left:1.5em} dl dd{margin-left:1.125em} dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none} ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em} ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em} ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px} ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden} ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block} ul.inline>li>*{display:block} .unstyled dl dt{font-weight:400;font-style:normal} ol.arabic{list-style-type:decimal} ol.decimal{list-style-type:decimal-leading-zero} ol.loweralpha{list-style-type:lower-alpha} ol.upperalpha{list-style-type:upper-alpha} ol.lowerroman{list-style-type:lower-roman} ol.upperroman{list-style-type:upper-roman} ol.lowergreek{list-style-type:lower-greek} .hdlist>table,.colist>table{border:0;background:none} .hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} td.hdlist1{font-weight:bold;padding-bottom:1.25em} .literalblock+.colist,.listingblock+.colist{margin-top:-.5em} .colist>table tr>td:first-of-type{padding:0 .75em;line-height:1} .colist>table tr>td:last-of-type{padding:.25em 0} .thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} .imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0} .imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em} .imageblock>.title { font-family:"Open Sans",sans-serif; margin-bottom:0; text-align:center; } .imageblock.thumb,.imageblock.th{border-width:6px} .imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} .image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} .image.left{margin-right:.625em} .image.right{margin-left:.625em} a.image{text-decoration:none;display:inline-block} a.image object{pointer-events:none} sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} sup.footnote a,sup.footnoteref a{text-decoration:none} sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} #footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} #footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0} #footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em} #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none} #footnotes .footnote:last-of-type{margin-bottom:0} #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} .gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} .gist .file-data>table td.line-data{width:99%} div.unbreakable{page-break-inside:avoid} .big{font-size:larger} .small{font-size:smaller} .underline{text-decoration:underline} .overline{text-decoration:overline} .line-through{text-decoration:line-through} .aqua{color:#00bfbf} .aqua-background{background-color:#00fafa} .black{color:#000} .black-background{background-color:#000} .blue{color:#0000bf} .blue-background{background-color:#0000fa} .fuchsia{color:#bf00bf} .fuchsia-background{background-color:#fa00fa} .gray{color:#606060} .gray-background{background-color:#7d7d7d} .green{color:#006000} .green-background{background-color:#007d00} .lime{color:#00bf00} .lime-background{background-color:#00fa00} .maroon{color:#600000} .maroon-background{background-color:#7d0000} .navy{color:#000060} .navy-background{background-color:#00007d} .olive{color:#606000} .olive-background{background-color:#7d7d00} .purple{color:#600060} .purple-background{background-color:#7d007d} .red{color:#bf0000} .red-background{background-color:#fa0000} .silver{color:#909090} .silver-background{background-color:#bcbcbc} .teal{color:#006060} .teal-background{background-color:#007d7d} .white{color:#bfbfbf} .white-background{background-color:#fafafa} .yellow{color:#bfbf00} .yellow-background{background-color:#fafa00} span.icon>.fa{cursor:default} .admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} .admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c} .admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} .admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900} .admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400} .admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000} .conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} .conum[data-value] *{color:#fff!important} .conum[data-value]+b{display:none} .conum[data-value]:after{content:attr(data-value)} pre .conum[data-value]{position:relative;top:-.125em} b.conum *{color:inherit!important} .conum:not([data-value]):empty{display:none} dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} h1,h2,p,td.content,span.alt{letter-spacing:-.01em} p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} p{margin-bottom:1.25rem} .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} .exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} .print-only{display:none!important} @media print{@page{margin:1.25cm .75cm} *{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} a{color:inherit!important;text-decoration:underline!important} a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} abbr[title]:after{content:" (" attr(title) ")"} pre,blockquote,tr,img,object,svg{page-break-inside:avoid} thead{display:table-header-group} svg{max-width:100%} p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} #toc,.sidebarblock,.exampleblock>.content{background:none!important} #toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important} .sect1{padding-bottom:0!important} .sect1+.sect1{border:0!important} #header>h1:first-child{margin-top:1.25rem} body.book #header{text-align:center} body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0} body.book #header .details{border:0!important;display:block;padding:0!important} body.book #header .details span:first-child{margin-left:0!important} body.book #header .details br{display:block} body.book #header .details br+span:before{content:none!important} body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} .listingblock code[data-lang]:before{display:block} #footer{background:none!important;padding:0 .9375em} #footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em} .hide-on-print{display:none!important} .print-only{display:block!important} .hide-for-print{display:none!important} .show-for-print{display:inherit!important}} DarkRadiant-2.14.0/doc/manual.html000066400000000000000000005471411413722237400167130ustar00rootroot00000000000000 DarkRadiant User Guide

Introduction

DarkRadiant is a level editor for Doom 3 and The Dark Mod, developed by The Dark Mod team. It may also be used for editing levels for similar id Software games such as Quake 4.

This User Guide describes the features and functionality of DarkRadiant, however it is not intended as a guide to mapping techniques. Level design is a complex topic, and is covered by various other learning resources, some of which are listed below.

The Dark Mod Wiki

The starting point for most Dark Mod documentation and tutorials, including gameplay, configuration and editing.

ModWiki

Online wiki covering editing topics for vanilla Doom 3 and similar engines.

The Dark Mod forums

Online community for discussion of the Dark Mod, including various ad-hoc mapping tutorial threads posted by individual users.

Editing workflow

DarkRadiantWorkflow

The level editing process starts off with basic assets: models, textures, sounds, entity definitions, skins, animations and so on. Many of these assets will be packaged with a particular game installation, but a level designer may also choose to create custom assets for a specific mission. These assets are installed into a directory tree which is accessible both by DarkRadiant (for editing) and the game engine itself (for playing the mission).

Once assets have been arranged in DarkRadiant according to the wishes of the level designer, a .map file is saved to disk. This is a text file in a format understood by the game engine, and includes both level geometry and references to the assets used in the map. Since the .map file is simply text, and does not actually embed the binary asset data, it tends to be fairly small.

The game engine includes functionality to compile the .map file into a .proc file containing low-level vertex geometry derived from the brushes and patches within the .map file. The game engine can then render the mission in realtime, making use of the same assets that were accessed by DarkRadiant during editing.

DarkRadiant also maintains its own separate file containing various editing information, such as object layers used within a map. This .darkradiant file is never used by the game engine, and is non-critical — a .map file with no accompanying .darkradiant file can still be edited with DarkRadiant, although certain DarkRadiant-specific state may be lost.

What’s in a MAP?

There are three main types of object contained within a .map file: entities, brushes and patches.

Entities are the top-level objects in a map — essentially, a map file is just a list of entities. Every entity has an entity class which determines the type of entity it is: static mesh, AI, sound emitter, particle emitter, light etc. Entities also store a list of string key/value pairs, known as spawnargs or properties. Some entities also contain brushes and patches as children.

Brushes are convex solids used to define basic map geometry: walls, floors, ceilings, steps and other medium to large items. Brushes are often rectangular in shape, although a brush can actually have any number of faces provided that it is convex (it is impossible to have a brush in an L or a U shape, for example). Brushes are not smooth-shaded by the game engine, which generally makes them unsuitable for representing curved surfaces.

Patches are smooth one-sided surfaces used to represent curved objects such as vaulted ceilings, pillars or cave interiors. A patch is defined by a number of Bezier control points, and offers control over the level of detail used when subdividing the patch into triangles for rendering: more triangles will produce a smoother surface but may lower rendering performance.

Brushes and patches together are also referred to as primitives (since they define the basic geometry of the map), and are typically described as such in situations where the distinction between brush and patch is not important.

The entities, brushes and patches in a map are arranged in a hierarchy: not every entity has children, but every primitive must have an entity as a parent. Each map therefore starts with a single default entity called the worldspawn, which acts as the parent for new brushes and patches created in DarkRadiant.

Initial configuration

Choosing a game type

When running DarkRadiant for the first time, the Game Setup dialog will be shown. This is where you configure the path to the game installation from which DarkRadiant will load assets, such as textures, models and entity definitions.

GameSetupDialog

The Game Setup dialog contains the following options:

Game Type

DarkRadiant ships with support for several different game engines, each of which is contained within a .game file. For editing Dark Mod missions, the default choice of The Dark Mod 2.0 (Standalone) is the one to use, but it is also possible to edit stock Doom 3 or Quake 4 missions.

DarkMod Path / Engine Path

This is the path to the game installation on the system. The label text will change depending on whether the selected game is The Dark Mod or another engine.

Mission

Optional path to a subdirectory containing assets specific to a particular mission which is being worked on. For game types other than The Dark Mod, this will be displayed as Mod (fs_game), and should be set to the path of a subdirectory containing a particular game mod, if one is being used.

Mod Base (fs_game_base)

This field only appears for non-DarkMod game types. It allows a two-level mod structure, where the Mod Base can point to a major game mod, possibly downloaded from elsewhere, while Mod can be set to point to an entirely local "sub-mod" which contains local changes and overrides. Before the release of Dark Mod standalone, this field would have been set to darkmod while the Mod field would have been set to the local mission, however this is no longer necessary when The Dark Mod 2.0 (Standalone) is being used.

Once the game paths are set up, click the Save button to proceed to the main DarkRadiant interface.

Note It is possible to Cancel the Game Setup dialog and proceed to the main window without configuring a game installation, in which case DarkRadiant will show a warning and ask if you wish to proceed. If you do, DarkRadiant will run but there will be no available textures, models, entities or other game assets.

Interface layout

DarkRadiant ships with a number of different user interface layouts, which control the position, visibility and window type of the major interface elements. The current layout can be changed from the View → Window Layout menu, and will require DarkRadiant to be restarted.

There is currently no support for custom layouts, however all of the provided layouts allow window sizes and splitter positions to be changed, and the changes will persist through multiple editing sessions.

Embedded

A large 2D window is shown on the right, while the left-hand side is divided vertically into the 3D camera window and a tab widget containing the main editing panels. There are no floating subwindows in this layout.

Regular

A legacy GtkRadiant layout which places the 2D window on the left, the 3D camera view on the top right, and a 2D scrolling textures panel on the bottom right. Other tabs in the editing panel are shown in a floating window.

RegularLeft

The same as Regular except the full-height 2D window is on the right and the 3D window and texture panels are on the left.

Floating

The 2D window, 3D window and editing tab widget are all shown in separate floating windows which always appear above the main DarkRadiant window. The main window itself is empty apart from the toolbars and status bar. This is the most flexible layout, since each subwindow can be sized or positioned as desired, but the multiple subwindows may be cumbersome to manage.

SplitPane

Three separate 2D windows, showing each of the major axes, are shown alongside the 3D camera view in a 2x2 layout similar to traditional 3D modelling applications. The editing tab widget is in a floating window.

Colour schemes

DarkRadiant defaults to a black-on-white colour scheme in the 2D windows, but ships with four other colour schemes, which can be accessed under View → Colours…​. If you prefer a dark theme, the Black & Green scheme might be suitable, whereas the Maya/Max/Lightwave Emulation and Super Mal themes provide a more neutral, low-contrast look.

DarkRadiantDefaultTheme
DarkRadiant Default

BlackGreenTheme
Black and Green

Q3RadiantTheme
QE3Radiant Original

SuperMalTheme
Super Mal

MayaEmulationTheme
Maya/Max/Lightwave Emulation

Each of the colour schemes can be edited using the colour selector buttons in the Colours dialog, and it is also possible to copy one of the default schemes into a custom scheme with a new name.

Note The game installation may specify the colour of certain entity types, in which case it will not be possible to change the colour of these entities via the Colours dialog.

Basic editing

Navigating the 2D view

The game world is a three-dimensional vector space with a central origin, rendered in the 2D editing window as a grid. The unit of measurement is an arbitrary game unit which does not directly correspond to any real-world measurement system — in The Dark Mod, a typical human stands around 80 - 90 game units high, making a game unit about 2 cm.

Each 2D window shows which axes it is representing with an icon in the top-left corner, as well as an identical icon at the <0,0,0> origin position, if visible within the view.

2DViewMarkedUp
Figure 1. Components of the 2D view

The 2D view also shows the current position of the camera (used for rendering the separate 3D camera view window), and its view direction.

The following commands are available within the 2D view:

Right drag

Scroll the view horizontally or vertically

Mouse wheel

Zoom the view

Shift + Right drag

Zoom the view (alternative binding)

Ctrl + Middle click

Move the camera directly to the clicked position

Middle click

Rotate the camera to look directly at the clicked point

Ctrl + TAB

Change view axis (XY, XZ, YZ)

Ctrl + Shift + TAB

Center 2D view on current camera position

Adjusting the grid

The grid shown in the 2D view is used to snap the position and size of brushes and patches, as well as the centerpoints of entities. The size of the grid can be configured, in powers of 2, from 0.125 up to 256, using the 1-9 keys on the main keyboard (not the numeric keypad), or the equivalent options in the Grid menu.

The 0 key on the main keyboard can be used to toggle the display of the grid. Note that objects will still be snapped to the grid even if the grid is not visible; this is purely a visual toggle.

Important Level geometry built from brushes and patches should always be snapped to the grid to avoid problems such as rendering glitches and map leaks. Static meshes and animated AI can be positioned more freely, however grid snapping is a useful tool for ensuring that models are appropriately aligned with the level geometry.

Using the 3D camera view

The 3D camera view provides an approximate rendering of the map in three dimensions, in several different render modes: wireframe, flat shaded, textured, and fully lit by in-game light sources. While the 2D view is the main interface for creating and aligning level geometry, the 3D view is a vital tool for tasks such as texturing, or configuring light parameters.

Important The fully lit rendering mode in DarkRadiant is very limited, and only offers a partial view of what the game engine will ultimately render. In particular, there are no shadows or foglights.

The 3D camera view provides its own toolbar which can be used to configure various display settings.

Render modes

wireframeMode16

Render in wireframe mode

Render objects as wire meshes.

solidMode16

Render in flat-shaded mode

Render objects as coloured solids, without textures or lighting.

textureMode16

Render in fullbright textured mode

Render objects as preview textures, with no lighting or material effects such as transparency.

lightingMode

Render in lighting preview mode

Render all available lighting and texture effects.

Animation rendering

StartPlayback

Start render time

Begin rendering animated effects.

StopPlayback

Stop render time

Stop rendering animated effects.

Far clip options

toggleFarClip

Toggle far clip

Enable or disable the far clip plane.

The far clip plane is a performance optimisation which avoids rendering geometry more than a certain distance away from the camera.

farClipIn

Clip plane in

Move the far clip plane closer to the camera.

farClipOut

Clip plane out

Move the far clip plane further away from the camera.

The 3D view always renders the scene from a particular camera position, which is shown in the 2D view as a blue diamond. This camera position can be set directly from the 2D view with Ctrl + Middle click, and the camera view direction can be set with Middle click. There are also various options within the 3D view itself to adjust the camera position.

Right click

Enter or leave free camera mode. In this mode, moving the mouse around updates the camera view direction in real-time, and moving the mouse around while holding Ctrl causes the camera to move up/down/left/right according to the camera motion.

Default mode (not free camera)

Left/Right arrow

Pan the camera left or right

Up/Down arrow

Move the camera forwards or backwards on the horizontal plane, without changing its height on the Z axis.

Free camera mode

Left/Right arrow

Move ("truck") camera left or right, leaving view direction the same.

Up/Down arrow

Move ("dolly") the camera forwards or backwards along its view axis

Manipulating objects

Every object in a map can be selected and moved within the 2D view. Some objects — including brushes, patches and lights — can also be resized.

For more advanced ways to select objects, see brush-based selection.

Shift + Left click

Select or deselect the object at the clicked position. Any existing selected objects will remain selected. If the clicked position overlaps more than one object, the closest one (according to the current 2D view axis) will be affected.

Alt + Shift + Left click

Select the object at the clicked position, and deselect any existing selected objects. If the clicked position overlaps more than one object, each click will cycle through the overlapping objects.

Shift + Left drag

Draw a selection rectangle, which will select any objects contained (fully or partially) within it.

ESC

Deselect all objects

Left drag (inside object)

Move the selected object(s)

Left drag (outside object)

Resize the selected object(s) (if available)

Space

Duplicate the selected object(s)

Backspace

Delete the selected object(s)

Tip Like other editors in the Radiant family, DarkRadiant offers a rather unusual system for resizing objects. Rather than clicking exactly on the edge, or on a dedicated resizing handle, you can click and drag anywhere outside an edge to move that edge inwards or outwards. Dragging outside a corner allows you to move two edges at once.

Flipping and rotating

DarkRadiant provides six buttons to quickly flip or rotate objects (in 90 degree increments) around each of the three world axes. These are available on the left-hand vertical toolbar.

brush flipx

Flip along the X axis

brush rotatex

Rotate around the X axis

brush flipy

Flip along the Y axis

brush rotatey

Rotate around the Y axis

brush flipz

Flip along the Z axis

brush rotatez

Rotate around the Z axis

Manipulator modes

For more precise control over object motion, there are three manipulator modes which can be selected with buttons on the left-hand vertical toolbar.

select mousetranslate

Translate mode

A manipulator widget with axis-aligned arrows will be displayed at the selected object’s center. Click and drag one of the arrows to move the object along that axis, or drag inside the manipulator box to move the object in two dimensions. This mode may be useful for moving brushes around without accidentally resizing them.

select mouserotate

Rotate mode

A widget with three axis-aligned rings will be displayed at the selected object’s center. Drag a ring to rotate the object by any arbitrary amount around that ring’s axis.

select mouseresize

Resize mode

This is the default Radiant drag mode (hence the "QE" icon referring to the original QERadiant) which allows you to move objects by dragging inside them and resize by dragging outside the boundary edges.

Working with brushes

Brushes are the basic building blocks of all maps. Typically they are used for coarse-grained level geometry such as walls, ceiling and floors. Brushes also have a vital role in sealing a map from the void: even a map built entirely from patches and static meshes must still be surrounded by brushes in order to avoid leaking.

Additive versus subtractive geometry

If you are used to mapping for the legacy Thief games using Dromed or T3Edit, the system used by DarkRadiant may seem somewhat back-to-front. In previous games, the world starts out as an infinite solid, in which you "carve out" rooms using subtractive brushes. In DarkRadiant, the world starts out as an infinite void, and all brushes are solid. The space in which the mission happens must be fully enclosed by solid brushes, otherwise the map will "leak" and fail to compile.

The need to deal with map leaks may at first seem like a burden, however the exclusive use of solid brushes frees the engine from needing to worry about "brush ordering", and allows an important performance optimisation: by "flood filling" the map interior, the map compiler can efficiently discard geometry that never needs to be rendered.

Creating a brush

To create a simple rectangular brush, ensure that nothing is selected (ESC), then Left drag in the 2D view. A new brush will be created and sized according to the dragged area, with its dimensions snapped to the current grid level. To adjust the third dimension of the brush (perpendicular to the view direction), used Ctrl + TAB to switch the 2D view axis, and Left drag outside the brush boundary to adjust the size.

Tip Whenever you drag to create a new brush, the third dimension will match the size of the most recently selected brush. This makes it easy to draw a series of brushes with the same height, such as when you need to create a series of floors or walls in succession. To match the height of an existing brush, simply select (Shift + Left click) and deselect it (ESC) before drawing the new brush.

More complex brush shapes

Although each brush starts out as a six-sided cuboid, it doesn’t have to stay that way. DarkRadiant offers several options for creating multi-sided brushes in more complex shapes. To create one of these shapes, first define a regular cuboid brush covering the volume you want the new shape to occupy, then choose the appropriate option from the Brush menu:

6Prism

Prism

An n-sided approximation of a cylinder, with the axis of the cylinder aligned with the current 2D view.

6Cone

Cone

A tapered n-sided cone, which always points upwards regardless of the 2D view axis.

6Sphere

Sphere

A rotationally symmetric n-sided approximation of a sphere, with the axis of rotation pointing upwards.

While these shapes can be useful for certain architectural modelling, remember that brushes are always flat-shaded and are not generally a good substitute for spheres or cones created with patches or static meshes.

Creating a room

Although it is not too difficult to create a hollow room by creating floor, ceiling and wall brushes manually, this is a common enough operation that DarkRadiant provides a couple of shortcuts. These options can be found on the vertical toolbar at the far left of the main window.

CreateRoomBrush

CreateRoom Create Room

Create a room whose interior size matches the size of the currently-selected brush. The wall thickness will be equal to the current grid size.

HollowBrush

Hollow Hollow

Hollow out the selected brush, leaving the exterior dimensions the same. The wall thickness will be equal to the current grid size, but the wall brushes will overlap at the corners, rather than just touching each other as with Create Room.

This is legacy tool from GtkRadiant, and generally inferior to Create Room. The overlapping wall brushes make it more difficult to precisely align interior textures, since part of the inner face is obscured (and therefore removed during map compilation). However, there may be occasional situations in which Hollow is useful, so it is retained in DarkRadiant.

The room creation tools do not require the initial brush to be rectangular — you can quite happily Create Room with a triangular or trapezoidal brush, or a brush with sloping sides. However, with a more complex brush shape, the complexity of the resulting wall geometry increases considerably, so attempting to hollow out a 7-sided sphere is probably ill-advised.

Splitting brushes

Sometimes it is necessary to divide a brush into two or more pieces, perhaps to create a doorway or other opening. The Clipper tool, accessed with the X key, is used for this purpose.

ClipTool3D
Figure 2. Splitting a brush into two parts
  1. Select the brush to be split (the Clipper can be activated with nothing selected, but it will not do anything useful).

  2. Press X to activate the Clipper, or click on the respective icon on the left-hand editing toolbar.

  3. Click in the 2D window at two different positions, to define the plane along which the brush will be split. The proposed split plane will be highlighted in blue; feel free to change 2D view axis with Ctrl + TAB or use the 3D camera view to better visualise the split plane.

  4. Once the split plane is defined, press Shift + Enter to execute the split and keep both halves of the brush; press Enter to execute the split and keep only one half. The part of the brush that is kept with Enter depends on the order in which you define the clip points: the points (marked 0 and 1) will appear clockwise on the brush edge according to the current 2D view. If in doubt, just use Shift + Enter to keep both parts, and delete the unwanted one afterwards.

  5. Repeat the process to perform additional splits on the selected brush, or disable the Clipper with the X key. The Clipper is a toggled tool and will remain active until disabled.

Note It is possible to create three split points before executing the split, which will define a split plane in three dimensions. Defining a three-point split plane which is actually useful, however, may be challenging.

Reshaping brush edges

All brush edges can be moved independently, which gives you the ability to quickly create shapes like triangles or trapeziums. This functionality is accessed via the Select Edges tool on the upper toolbar, or with the E key.

EdgeEditing
Figure 3. Creating a trapezium using edge editing
  1. Select a brush.

  2. Activate Select Edges with the toolbar button or E key. DarkRadiant will place a green control point at the center of each brush edge.

  3. In either the 2D or the 3D view, click and drag on a control point to move its edge. The control point will turn blue and move along with the cursor. In the 2D view, dragging corners is generally easiest, since the resulting shape change can more easily be seen.

  4. To reduce the number of brush sides, such as changing a rectangle into a triangle, simply drag one corner directly on top of another. The two edges will be merged.

Brush-based selection

As well as using brushes to define map geometry, you can also use them to select objects. There are three commands on the top toolbar which convert the selected brush(es) into a temporary selection volume:

SelectCompleteTall

Select complete tall

Select all objects that are completely contained within the two-dimensional outline of the selected brush(es) in the current 2D view window, ignoring their position on the third axis (perpendicular to the screen).

SelectInside

Select inside

Select all objects that are completely contained within the selected brush volume(s) in all three dimensions.

SelectTouching

Select touching

Select all objects that are touching the selected brushes. Unlike the previous two commands, this one does not remove the selected brushes, since it is designed to allow you to quickly select objects that are adjacent to real map geometry.

Working with patches

Patches are smooth-shaded Bezier surfaces that can be created and manipulated in the editor (unlike models), and used to represent a variety of curved shapes such as vaulted ceilings, arches or pillars. Patches are single-sided surfaces, not solid like brushes, and cannot be used to seal a map from the void — any patch work on the boundary of a map will need solid brushes behind it to prevent the map from leaking.

Creating a simple patch

A simple patch starts off as a flat rectangle, which can then be manipulated with vertex editing to produce a curved surface, if desired.

To create a simple patch:

  1. Set the 2D view axes (Ctrl + TAB) to define the orientation of the patch. The patch will be created facing directly towards the screen, so to create a horizontal (ceiling or floor) patch, the 2D view should be in XY (Top) orientation.

  2. Create a rectangular brush to define the width and height of the patch in the current 2D view (the third dimension is not important, since the patch will be infinitely thin once created).

  3. With the brush selected, choose Create Simple Patch Mesh from the Patch menu.

  4. In the dialog, choose the number of control points to define the shape of the patch along its width and height. A patch can have between 3 and 15 control points in each dimension; there will always be a control point at the extreme edge, and one in the middle. More control points allow more complex shapes but also require more manual adjustment — creating a simple arch is much easier with just three control points.

  5. Click OK to create the patch.

SimplePatchesControlPoints
Figure 4. Simple patches with 3, 7 and 15 control points in both dimensions

Manipulating control points

With a patch selected, press V to enter (or leave) vertex editing mode. This will display all of the control vertices, and allow you to select and move them.

  • Left click and drag a vertex to move just that one vertex.

  • Shift + Left click to add a vertex to the current selection set. When several vertices are selected, dragging any one of the selected vertices will move all of them together.

  • Shift + Left drag around several vertices to draw a selection rectangle that will toggle the selection state of all vertices inside it, selecting them if unselected and unselecting them if already selected.

PatchVertexEditing
Figure 5. Making an arch by raising the central row of vertices in a simple patch

More complex patch shapes

Just like with brushes, DarkRadiant offers several default patch shapes beyond the flat simple patch. These can be created by choosing the corresponding option in the Patch menu. There is no need to have a brush selected first in order to create these shapes, however if a brush is selected, it will be removed and used to define the size of the patch shape.

PatchSphere

Sphere

An approximation of a sphere (the quadratic Bezier patch implementation in Doom 3 and DarkRadiant does not permit the creation of a perfect sphere).

PatchCylinder

Cylinder

A hollow cylinder aligned with the direction of the 2D view.

PatchCone

Cone

A tapered cone pointing along the 2D view axis.

PatchEndCap

End cap

An arch or half-cylinder covering a 180 degree angle, aligned with the 2D view axis. The peak of the arch will be at the top if created in front or side views, making this useful for curved ceilings and the like.

PatchBevel

Bevel

Portion of an arch covering a 90 degree angle. This may be placed along room edges to give a curved appearance.

Controlling patch subdivision

Although patches are defined by Bezier curves, they are subdivided into flat polygons for rendering. By default, the number of polygons to create is determined dynamically by the game engine, based on the shape of the patch. However, you can also use the Patch Inspector to explicitly set the level of subdivision required, which can be useful when optimising a map by reducing on-screen polygon counts.

PatchSubdivision
Figure 6. Default (automatic) subdivision, 2x2 subdivision, 3x3 subdivision, 3x10 subdivision

To subdivide a patch:

  1. Select Patch Inspector in the View menu to make the inspector widget visible.

  2. With the patch selected, enable the Fixed Subdivisions checkbox.

  3. Use the Horizontal and Vertical numeric spinboxes to set the number of polygons to divide the patch into. The value can range from 1, making the patch completely flat regardless of control point positions, up to a maximum of 32. Each dimension can have a different subdivision level, if required.

Applying textures

When a brush or patch is created, it will be assigned a default texture. To apply a new texture, you must first select the brush, face or patch to be textured. There are two different selection commands:

Shift + Left click

Select an entire brush or patch. Any chosen texture will apply to all faces.

Ctrl + Shift + Left click

Select a single brush face for texturing. This command is only available in the 3D camera view

Once you have selected the objects or faces to texture, you can use either the Media or the Textures tab to perform the texturing operation.

The Media tab

The Media tab shows a tree view which contains all of the textures available in the game installation. Selecting a texture in the tree will show a small preview swatch, along with some metadata about the texture definition.

MediaTab

To apply a texture to the selected brush, simply Double-click on a texture name in the tree. The tree view also offers a context menu with several options:

Load in Textures view

Load all textures contained within the selected folder, making them available on the Textures tab. This option is not available when a single texture is highlighted.

Apply to selection

Apply the highlighted texture to the current object. This is identical to the Double-click operation, and is only available for single textures, not folders.

Show Shader Definition

Show a syntax-highlighted text window containing the definition of the selected texture.

Selected/deselect elements using this shader

Select or deselect objects in the map which the highlighted texture is applied to. This can be used for organisational purposes, or to identify whether a texture is used or not.

Add to/Remove from favourites

Add or remove the selected texture from the favourites list. The favourites list provides easy access to a user-chosen group of textures, and can be accessed by choosing the Show Favourites radio button at the top of the panel.

The Textures tab

The Textures tab provides a scrollable canvas containing preview swatches of all the textures which are currently loaded in the current map.

TexturesTab

When DarkRadiant first starts up no textures are loaded and this panel is empty. New textures can only be loaded via the Media tab (described in the previous section), either by applying a texture directly to a brush, or by using the Load in Textures view command to explicitly load an entire folder of textures.

Once textures are loaded onto the Textures tab, you can apply them to a selected object by Left clicking on them. By Right clicking on a texture you can access a context menu with a single command Seek in Media browser, which will highlight the clicked texture in the Media tab.

Using the Surface Inspector

Once a texture is applied via the Media or Textures tabs, you will most likely wish to adjust the alignment and scale of the texture on the brush or patch face. DarkRadiant provides the Surface Inspector for this purpose, which can be toggled with the S key or by choosing the option in the View menu.

SurfaceInspector

The Surface Inspector can be used to adjust textures on a single brush or patch face, or several selected faces/brushes/patches at once. If more than one face is selected and these faces have different values for text boxes in the dialog, the text box will be greyed out, however it is still possible to use the buttons to make changes which will be applied uniformly to all selected faces.

Shader

This shows the full name of the texture applied to the selected face(s). You can use the folder button to bring up a new dialog which allows you to choose a new texture.

Horiz/Vert Shift

These text boxes show the current texture shift (translation) on the horizontal and vertical axes. The associated arrow buttons will increase or decrease the texture shift by the current Step value.

Horiz/Vert Scale

These show the current texture scale in the horizontal and vertical directions. The arrow buttons will increase or decrease the scale by the current Step value.

Rotation

Shows the current texture rotation, in degrees. The arrow buttons will rotate the texture clockwise or anticlockwise by the current Step value.

Fit Texture

These controls allow you to fit an exact number of copies of the texture across the face, so that the texture edges correspond to the face edges. The numeric spin boxes control how many copies of the texture are tiled, and the operation is performed by clicking the Fit button.

Align Texture

These buttons shift the texture so that the Top/Bottom/Left/Right edge of the face are aligned with a texture boundary, but otherwise do not modify the scaling of the texture (unlike the Fit operation).

Flip Texture

Flips (mirrors) the texture along the horizontal or vertical axis.

Natural

This button resets the texture to a default alignment and scale, based the location and size of the face.

Texture Lock

If this is enabled, the alignment of the texture will be preserved relative to the face if the brush or patch is moved in 3D space. If disabled, the texture itself will remain fixed in 3D space as the brush or patch moves, resulting in the alignment changing.

Typically, if you have Fit a particular number of texture tiles across a face, you will want to preserve alignment with Texture Lock. Conversely, if the texture is applied to a much larger group of brushes with a common texture (that needs to align across all of the brushes, regardless of how they are moved or resized), you will want to disable Texture Lock.

Using the shader clipboard

While constructing a map it will frequently be necessary to apply the same texture to several different surfaces such that they appear seamless in game. In order to assist with this, DarkRadiant provides a shader clipboard which allows shaders to be copied and pasted between primitives, and is independent of the main clipboard used for copying and pasting other objects.

Copying a shader

There are two ways to copy a shader to the shader clipboard.

  1. Select a single face (not an entire brush) with Ctrl + Shift + Left click in the 3D view, then choose Edit → Copy shader.

  2. Directly Middle click the face in the 3D view (there is no need to select it first).

In both cases, the ShaderClipboard section of the bottom status bar will update to show the new value of the shader clipboard. If the Media or Textures tab is visible, their contents will also update to view the selected shader.

Note Selecting a texture explicitly in the Media or Textures tabs will also update the shader clipboard with the selected shader.
Pasting a shader

Once a shader is on the shader clipboard, it can be pasted onto another surface in a number of ways:

  1. Select the destination face with Ctrl + Shift + Left click, then choose Edit → Paste shader or Edit → Paste shader (natural).

  2. Directly Middle click the destination face while holding down either Ctrl (to paste the shader with projected coordinates) or Shift (to paste the shader with natural coordinates).

Natural or projected pasting

The difference between natural and projected coordinates is apparent when pasting a shader onto a curved patch.

With projected coordinates (Ctrl + Middle click) the texture on the patch will be aligned identically to the texture on the source face, which might result in a stretched texture depending on the angle between the patch and the source face.

With natural coordinates (Shift + Middle click) the texture will flow over the curved surface in a more natural manner.

When pasting a shader onto a flat brush face, there may be little or no difference between the two options.

Working with entities

If brushes are the bricks and mortar of a map (often literally), entities are its fixtures and fittings. Every object in a map which "does something" other than form part of the level geometry is an entity: lights, audio speakers, particle emitters, static meshes, animated creatures or machinery. There are also various functional entity types which provide vital metadata to the game engine, such as determining where the player should start, or how creatures should navigate between locations.

DarkRadiant provides certain common functionality to all entities, such as the ability to edit properties using the Entity tab. Particular entity types are sufficiently common, however, that they have their own dedicated creation and editing tools.

Light

Every map requires at least one light source in order to render anything in game. A light occupies a rectangular volume, which can be created and resized much like a brush, and has properties to determine its colour, visible shape and falloff pattern in three dimensions. Lights can optionally cast shadows, and can even be animated to flicker or flash.

Model (func_static)

Model entities represent geometry that is not compiled as part of the map itself. The model geometry can either be derived from brushes and patches created inside DarkRadiant, or from an external model file in ASE or LWO format. Model files are the primary mechanism for including fine detail in a map which would be cumbersome to create with brushes and patches.

Speaker

Essentially the audio equivalent of a light, a speaker entity represents the point from which an in-game sound source will emanate. It has properties to control its size and falloff, and optionally override certain properties of the sound shader itself, such as volume.

Player start (info_player_start)

This entity tells the game engine where to place the player when a map is first loaded. A map without such an entity will not be playable.

Creating lights

To create a light, Right click in the 2D view and choose Create light…. The position and size of the light volume depends on the current selection:

  • If nothing is selected, then a light volume will be created at the clicked position with a default size.

  • If a single brush is selected, the brush will be deleted and the light volume will match the size and position of the brush.

  • If several brushes are selected, then all selected brushes will be deleted and the light volume will be sized according to the bounding box of the brushes (i.e. the smallest box that would contain all of the brushes).

Unselected lights are shown in the 2D view as small boxes, while selected lights also show the boundaries of the light volume.

LightSelectedAndUnselected
Figure 7. Light entity selected (left) and unselected (right)

A selected light entity can be moved by dragging inside the small center box, and it can be resized by dragging outside the edge of the light volume. Unlike brushes, light volumes will by default resize symmetrically, so that the center point does not move during the resize.

Note Although light volumes can be resized like brushes, their shape can never be changed; every light is an axis-aligned cuboid. This does not, however, mean that they need to look rectangular in game. See the next section for details on how to change the falloff texture using the light inspector.

There are a couple of options on the top toolbar which control the display and behaviour of light volumes:

view show lightradii

Show all light volumes

If enabled, light volume boundaries will be rendered in the 2D view for all light entities, not just selected entities. The default behaviour is to show only the center box for unselected light entities.

dragresize symm

Drag-resize entities symmetrically

If enabled (the default), light entities will be resized symmetrically, without moving the center point. If disabled, lights will be resized like brushes: dragging an edge will move only that edge, while the opposite edge remains fixed.

The light inspector

When initially created, a light is pure white in colour and has an unrealistic rectangular illumination pattern matching its shape. You can change these properties using the light inspector, which is accessed with the L key.

LightInspector
Light volume (omni vs projected)

The majority of lights in a map will be the default, omnidirectional shape. An omni light is a simple axis-aligned cuboid which emits light in all directions from its center to its edges.

A projected light is pyramid-shaped, and emits light from the tip of the pyramid towards the base. Projected lights behave more like spotlights in real-life, and can be used to highlight particular areas or project images of windows onto the floor.

Colour

Use the colour selector button to display a standard colour selection dialog, or enter the RGB values directly using the text box. As well as changing the hue, the light colour also governs the overall brightness of the light.

Texture

The falloff texture controls the shape of the lit area when rendered in-game; the square texture chosen here will be mapped directly onto the rectangular shape of the light volume. Light textures can be simple, such as the generic circular gradient of biground1, or much more complex, including multiple colours or animation.

Options

There are a few light-propagation options which are mostly used to tweak performance. In particular, disabling shadows for any light which does not actually need to cast shadows can give a significant boost to rendering speed.

Creating models

Static models can be used to provide fine details in a map which would be difficult or impossible to create in the editor with brushes or patches. Models are created with an external 3D application such as Blender, Lightwave or Maya, and saved into the game asset tree in LWO or ASE format.

To insert a model, ensure that nothing is selected, then Right click in the 2D view and choose Create model…. DarkRadiant will show the model selector dialog:

ModelSelector

In the top-left of the model selector window is a tree of all available models in the game installation. Models may have different skins, which are variants of the same model with different textures applied. If a model has skins available, these will be listed as children of the model entry in the tree.

Choosing a model or one of its skins will show a preview render in the large widget on the right-hand side. Various metadata such as the polygon count and the applied textures are also shown in table at the lower left.

When you have chosen the desired model, click OK to insert it into the map. The model will be inserted at the position where you originally right-clicked to show the model chooser.

Creating a player start marker

The game requires a special entity (info_player_start) to mark the position at which the player should enter the map. Without such an entity the map will be unplayable.

To create this entity, ensure that nothing is selected then Right click in the 2D view and choose Create player start here. DarkRadiant will create the player start entity at the clicked position.

Since it makes no sense to have more than one player start location, DarkRadiant will not enable the Create player start here menu option if there is already an info_player_start in the map. Instead, you may choose Move player start here to move the existing entity to the clicked position.

Creating other entity types

Entity types without a dedicated item in the right-click menu are created using the generic Create entity… option, which displays a dialog very similar to the model selector:

EntityClassSelector

Just like the model selector, the entity selector displays a tree of all available entity types in the game installation, and a large preview widget which shows an approximate rendering of the entity, if appropriate. Purely functional entity types such as info_location or info_player_start do not have any visible appearance and their render preview will be blank.

Some entity types have a short textual description giving information about their usage; if present, this is displayed in the text box underneath the entity class tree.

After selecting the desired entity type in the tree, click the Add button to insert an instance of the entity into the map at the right-clicked location. If the selected entity type requires a brush selection and no brush is selected, a warning will be shown at this point.

Editing entity properties

Every entity has a list of key/value pairs known as properties or spawnargs. These properties are displayed on the Entity tab of the editing panel.

EntityInspector

The entity panel lists all of the properties of the currently-selected entity, showing each property’s name, its current value, and an icon representing its type (boolean, vector, text etc) if known. Selecting a property will populate the two text boxes in the center of the widget with the property name and value, allowing the value to be edited. If the selected property is of a known type, the panel at the bottom will show a custom widget appropriate for editing the particular property, e.g. three separate numeric spinboxes for a vector property, a colour selector widget for a colour property, and so on.

Changing a property value

To change the value of the selected property, simply enter the new value in the lower text box, then hit Enter or click the green tick button. If the property has a type-specific editing widget, you can also change its value using the controls in this widget.

Adding a new property

There are two different ways to add a new property:

  1. Enter a new property name in the upper text box (which shows the selected property name), and hit Enter. This does not rename the selected property, but adds a new property with the edited name and the current value.

  2. Right click in the list of properties and choose Add property from the context menu. This will display a new dialog listing all known properties along with their descriptive text (if available). Selecting a property in this dialog and choosing OK will add the property to the entity with a default value of "-", which can then be edited in the entity panel itself.

Deleting a property

To delete the selected property, Right click on the property in the list and choose Delete property.

The entity panel provides two options controlling its behaviour:

Show inherited properties

If checked, all properties that apply to the selected entity will be shown, including those which are inherited from the entity type declaration in the game installation. If unchecked, only those properties explicitly set on this particular entity (and stored in the map file) will be shown.

You can change the value of an inherited property by selecting it and entering a new value in the entity panel; this will create a new explicit property on the entity which overrides the inherited default.

Show help

Enables or disables the text widget at the bottom of the panel which shows a brief explanation of certain properties. If a property has help text available, the question mark icon will be shown in the ? column.

Reparenting primitives

Whenever a new brush or patch is created, it will automatically be made a child of the special worldspawn entity, which serves as the default entity containing all of the primitives which define the world geometry. However, worldspawn is not the only entity which can contain brushes and patches as children.

When you create a model using the model selector, DarkRadiant will insert a type of entity called a func_static into the map to represent the model geometry. A func_static can contain a model file loaded from disk in LWO or ASE format, but it can also be used as a parent for one or more primitives created within DarkRadiant. In either case, the behaviour of func_static is the same: it represents a static mesh which is rendered in game but is considered separate from the main world geometry, meaning that it does not participate in map compilation, will not seal the map from leaks, and will not cause intersecting brushes to be subdivided.

It is therefore often useful to make certain brushes and patches — typically those which represent "fine detail" rather than entire walls, floors and the like — into func_static entities to improve in-game performance and reduce the chances for map compilation problems caused by excessively complex world geometry.

Converting primitives into func_static

To convert one or more existing primitives into a func_static entity, simply select all of the primitives, right-click in the 2D window, and choose Convert to func_static.

After converting a primitive, a number of changes are noticeable:

  1. The primitive may be drawn in a different colour.

  2. The primitive will no longer be resizeable by dragging its boundary with the mouse.

  3. When the primitive is selected, the Entity Inspector will no longer show the worldspawn entity, but a new entity with a classname of func_static. You can set spawnargs on this entity like any other (including giving it a custom name).

  4. Selecting any primitive contained by a func_static will cause a small X/Y/Z axis widget to be drawn at the entity’s origin position (which may be inside one of the primitives, or outside all of them, depending on their layout).

  5. If there are multiple primitives contained within a single entity, selecting any individual primitive will cause all of the entity’s primitives to be selected.

Selecting individual child primitives

As mentioned in the previous section, selecting any primitive which comprises part of a func_static will cause the entire entity and all of its child primitives to be selected together. This allows you to easily move the entire static object by simply dragging any one of its primitives.

However, it is still possible to perform operations on a single primitive, for example resizing a brush, by selecting it with the TAB key. Each press of TAB will cause DarkRadiant to select a different primitive contained within the entity, after which it will return to selecting the entire entity. With only a single primitive selected, all of the normal operations are possible on that primitive, for example deleting or resizing it.

The entity inspector widget makes it clear whether you have selected an entity or a primitive within that entity, using the text above the list of entity properties. If an entire entity is selected, the text will appear similar to Entity 1, whereas with a primitive selected it will read Entity 1, Primitive 1.

Adding or removing primitives

Once you have created a func_static or similar entity from a number of primitives, you can add or remove primitives without needing to create a new entity from scratch.

Adding a primitive

Select the entity, then expand the selection (i.e. using Shift + Left click) to include one or more existing primitives to add to this entity. Then choose Edit → Reparent primitives.

Removing a primitive

Use the TAB key to select the individual primitive to remove (you must do this even if there is only one primitive in the entity), then choose Edit → Reparent primitives to worldspawn. The removed primitive will still exist in the map but it will be a regular worldspawn brush or patch, not parented to any other entity.

Unparenting all primitives

With the entity selected, simply right-click in the 2D view and choose Revert to worldspawn to turn all of the primitives back into worldspawn.

Compiling a map

DarkRadiant does not include functionality for compiling a map into the form needed by the game engine; instead, you must use external tools or the map compiler built into the game itself.

For Doom 3 and the Dark Mod, the following commands are used within the in-game console (which can normally be accessed with the key immediately above TAB):

dmap <mymapname.map>

Compile the map called mymapname.map, which must be located within the maps directory of the mod installation. If there are any problems compiling the map (e.g. a leak), the error will be displayed in the console output.

map <mymapname.map>

Load the compiled map mymapname.map into the game engine and start playing it immediately.

Tip When compiling and testing maps, it may be helpful to set your game to play in windowed mode, with a reduced resolution. This will allow both the game and DarkRadiant to be visible on the screen as separate windows, which you can easily switch between during the compile and test cycle.

Preventing leaks

A map "leak" occurs when the play area is not fully enclosed with a complete shell of opaque brushes. If the map leaks, compilation will fail and the map will not be playable.

In order to minimise the likelihood of a map leak, ensure that your map has all of the following properties:

  • The map interior is completely sealed from the exterior void by brushes (not patches). It is much easier to achieve this by building up a map carefully, making good use of the grid snapping functionality, rather than haphazardly throwing brushes together and hoping to seal them later.

  • All of the sealing brushes have an opaque texture. Skybox textures are considered opaque and are OK, however semi-transparent or perforated mesh textures are not.

  • The origin point of every entity in the map lies within the sealed map interior. It is OK if a large model extends outside of the map, provided that its origin point is on the inside.

Warning Do not be tempted to avoid leaks by enclosing your entire map in a single huge box. This may seem to solve the problem (the map will indeed not leak), but it completely negates the important performance optimisations that the map compiler carries out when it "flood fills" the map interior.

Locating leaks with a pointfile

No matter how hard you try to avoid leaks, occasionally they will happen. In this case the pointfile functionality is helpful to identify the location of the leak.

After the map compilation has failed with a leak, return to DarkRadiant and choose Pointfile from the File menu. This will automatically load the point file associated with the current map, which contains a series of points identifying the path to the leak. This path will be rendered as a bright red line in both the 2D and 3D views:

Pointfile
Figure 8. A pointfile rendered in both 3D and 3D views

In this example we can clearly see that the map has leaked because the far wall brush does not join up with the ceiling.

Organising a map

Since a fully developed Dark Mod map is large and complex, DarkRadiant provides several tools to make organising a large map easier. Objects can be grouped, sorted into user-defined layers and filtered using various criteria, while the prefab system allows large chunks of map to be reused or shared with other mappers.

Grouping objects

DarkRadiant allows a number of objects to be grouped together, so that they can be selected and manipulated as a single unit.

To create a group:

  1. Select several objects.

  2. Right-click in the 2D window to show the context menu.

  3. Choose Group Selection.

Once the objects are in a group, selecting any object in the group will automatically select all other objects in the same group.

To remove a group, select the group then choose Ungroup Selection from the 2D view context menu.

Note Groups can be nested, by creating a group that includes one or more existing groups. When you ungroup such a nested group, the original component groups will be restored.

Working with prefabs

DarkRadiant allows a collection of objects to be saved to disk as a prefab, which can then be imported into other maps. You can use prefabs to store anything from a single small object to a vast section of map geometry complete with lights and AI.

Exporting to a prefab

  1. Select the objects in the map that you wish to include in the prefab.

  2. From the File menu, choose Save selected as prefab…​

  3. Use the file chooser dialog to choose a location and name for the prefab file.

Tip Unlike actual .map files which must be accessible by the game engine, prefabs are a DarkRadiant-only feature that have no significance to the engine. You are therefore free to store prefab files wherever you wish, either inside or outside the game installation directory.

Importing a prefab

Either right-click in the 2D window and choose Insert prefab…​, or open the File menu and choose Import prefab…​. This will show the prefab browser.

PrefabChooser

Like the model selector, the prefab selector shows a tree of available prefabs on the left, and a preview window on the right giving an idea of what the prefab looks like. Using the radio buttons at the top of the window, you can choose whether to browse prefabs contained within the game installation, or within a custom directory of your choice.

The preview window functions much like the 3D view in the main application: right click to enter or leave camera mode, which enables the following motion commands:

Mouse move

Change the camera view direction (pan or tilt)

Mouse wheel

Zoom the camera

Up/Down arrow

Move the camera forwards or backwards

Left/Right arrow

Move the camera left or right

When you have chosen the desired prefab, click OK to insert it into the map. Before inserting the prefab, you can use the Create Group out of Prefab parts checkbox to control whether the prefab is automatically grouped as a single object, or inserted as separate selectable objects.

Exporting models

DarkRadiant provides a limited ability to export scene geometry into a number of 3D model file formats: ASCII Scene Export (ASE), Lightwave (LWO) or Wavefront OBJ. This functionality is provided to help with organising frequently-used map elements — DarkRadiant is not intended to compete with full-featured 3D modelling applications such as Blender or 3DS Max.

Exporting to a model is similar to exporting to a prefab, except that models can only contain geometry (brushes or patches), not other map entities such as lights or speakers. However, unlike prefabs, models can be edited with other 3D software, and exporting map geometry as a model might provide a useful template for creating map-specific static meshes in a more powerful modelling tool.

To export a model:

  1. Select the geometry to be exported. Note that DarkRadiant currently does not complain if you select non-geometry such as lights, however these will not appear in the resulting model file.

  2. Open the File menu and choose Export selected as model…​

  3. In the Output Format dropdown, choose one of the supported model formats: ASCII Scene Export (.ase), Lightwave Object File (.lwo), or Wavefront OBJ (.obj).

  4. Choose the path for the exported model file in the File Path entry box.

  5. Click OK to export the model.

Using layers

When a map contains a large number of objects, it may become difficult to work with the 2D views as a result of the visual clutter. Organising the map into several layers can help solve this problem. The visibility of each layer can toggled independently, allowing you to focus on the objects you want to work with.

Layers do not impose any requirements on the physical layout of objects: it is possible to include objects spread all over a map into a single layer. For example, you can have a layer for all enemies, another layer for all lights, another layer for brushwork, and so on.

The Layers window

To show or hide the Layers window, choose Layers from the Edit menu. The window lists all of the layers which exist in the current project, and allows you to perform various operations on them.

LayersWindow
Creating a layer

To create a new layer, click the New button at the bottom of the window. A popup will be shown asking for the name of the new layer. Once the layer is created, it will appear in the list.

Deleting a layer

Click the red 'X' button to the right of a layer to delete it. Deleting a layer does not delete the objects in the layer, only the layer itself. Any objects in that layer will be moved to the default layer.

Renaming a layer

Click the edit button to the right of a layer name to change the name. A popup will be shown asking for the new name.

Selecting objects on a layer

Click on the name of a layer itself to select all objects on that layer.

Toggling visibility

The button to the left of a layer name is used to toggle the visibility of objects on that layer. If objects are visible, a tick is shown in the button, otherwise it is empty.

Changing the active layer

The visibility toggle button shows a star for the layer which is currently set as the active layer. To change the active layer, Ctrl + Left click on the layer you wish to set as the new active layer.

Moving objects into layers

An object can be placed in any number of layers. To see which layers a selected object is in, look at the narrow coloured rectangle next to the layer name in the Layers window. The rectangle will turn from grey to pink for each layer that contains the selected object.

LightInTwoLayers
Figure 9. A light in two layers: "Default" and "Lights"

All newly-created objects will be placed in the Default layer. You can move or copy objects between layers using the options in the 2D view’s context menu.

Create layer…​

Bring up the name entry dialog and create a new layer, exactly as if the New button in the Layers window had been clicked.

Add to layer…​

Copy the selected object into the chosen layer, without removing it from its existing layer(s).

Move to layer…​

Move the selected object into the chosen layer, removing it from all other layers.

Remove from layer…​

Remove the selected object from the chosen layer.

Filtering map elements

While the Layers feature allows maps to be organised into manual groupings of objects, DarkRadiant also provides a mechanism for controlling the visibility of items based on their characteristics. This is controlled via the Filter menu.

Built-in filters

The Filter menu is populated with a number of built-in filter rules which are expected to be useful to mappers. Each filter may be activated independently, and each activated filter will be shown with a tick alongside its name. Filters operate in a "subtractive" sense: if a filter is active, objects matched by that filter will be hidden; the remaining visible objects will be those which are not matched by any active filters.

Tip Active filters are persisted into settings, and are therefore retained between DarkRadiant sessions.

The built-in filters include:

All entities

Hide all entities other than the worldspawn, leaving only brushes and patches visible.

World geometry

The inverse of All entities. Hides brushes and patches while leaving entities visible.

Brushes

Hide only brushes, leaving patches and entities visible.

Patches

Hide only patches, leaving brushes and entities visible.

Caulk

Hide any brush or patch which has the caulk texture applied to at least one surface.

Collision surfaces

Hide the additional collision meshes which are embedded in certain models, while leaving the models themselves visible. This filter is especially useful because collision meshes often obscure parts of the model itself.

Aside from the list of filters, the Filter menu contains three other options:

Activate all filters

Activate every filter in the list. Very unlikely to be useful, because it will probably result in every object in the map becoming invisible.

Deactivate all filters

Turn off all active filters. This one is useful, since you may have manually activated a number of filters and want to turn them all off at once.

Edit filters…​

Display a dialog allowing you to create, edit and manage the list of available filters.

Customising filters

In addition to the filters supplied with the mod distribution, DarkRadiant also allows you to add your own custom filters to the list by choosing the Edit Filters…​ menu option. This displays a dialog containing the list of all available filters, including built-in ones. Use the Add and Delete buttons to add or remove custom filters from the list, and the Edit button to enter a new dialog which allows you to edit the rules of the selected filter.

Built-in filters cannot be removed or edited, but you can choose the View button to open the filter editor in a read-only mode.

FilterEditor
Figure 10. The filter editor dialog

Each filter consists of a number of rules, which are applied in the order shown in the list box. Filters may contain only a single rule ("hide all speaker entities"), or multiple rules ("hide all entities, then show only speaker entities"). You can freely add, remove or reorder rules using the buttons to the right of the rules list.

Each rule has the following components:

Index

An integer representing the rule’s position in the list, numbered from zero.

Type

This controls what the rule is "looking for" when it tries to match objects to hide or show. Currently there are four rule types: entityclass which matches the classname of entities (e.g. "speaker"), object which matches either "brush" or "patch" and is used for controlling the visibility of map geometry, texture which matches the name of an applied texture, and entitykeyvalue which matches the value of a specific property on the entity.

Entity Key

This column is only used for entitykeyvalue rules, in which case it contains the name of the property to match (while the value to match will be contained in the Match column).

Match

This contains the actual value to be matched by the rule. Its interpretation and allowed values will depend on the rule type. For object type rules the value must be "brush" or "patch", whereas with all other rule types the value may be any arbitrary string.

Action

Choose whether this rule will result in matched objects being shown, or hidden. The filter system starts with everything being visible by default, so a filter which does not contain at least one hide rule will have no effect.

The entity list

As a map becomes larger and more complex, keeping track of its contents may become more challenging. To assist with this, DarkRadiant provides an Entity List which functions as an "outline" view of the map, listing all entities and their child brushes and patches (if any).

The entity list can be accessed by choosing the Entity List option from the View menu.

EntityList
Figure 11. The entity list, showing a number of entities in a small test map

The tree structure shown in the entity list corresponds to the structure of the map itself: a single "world" entity which acts as the parent of the brushes and patches in the map, alongside a number of other entities that have been placed by the mapper, some of which may contain their own child brushes or patches.

Clicking on an entity in the list will cause it to be selected in the map. If the Focus camera on selected entity checkbox is enabled, the camera will additionally be moved to view the clicked entity.

By enabling the List visible nodes only checkbox, you can limit the entity list to show only entities which are not currently hidden via filters.

Dark Mod features

The Dark Mod is a considerably more complex game than vanilla Doom 3, and its maps therefore include certain settings and features that would be cumbersome to configure manually by entering property values on entities. DarkRadiant therefore provides a number of Dark Mod specific dialogs which are described in this section.

Note Most Dark Mod features are compiled as separate plugins, and may not be built by default on certain platforms. If these features seem to be missing, contact the distributor of your DarkRadiant binary package for advice, or examine the build options if you are compiling DarkRadiant yourself from source code.

The Difficulty editor

Most Dark Mod maps can be played on one of three possible difficulty settings, typically named "Easy", "Medium" and "Difficult" (although these names can be overridden). The precise effects of each of these difficulty settings are fully under the control of the map author, and might include such effects as spawning or despawning particular enemies, changing enemy health or patrol routes, or modifying the details of objectives.

DarkRadiant provides a Difficulty editor dialog to facilitate one particular class of difficulty-dependent modification: making global changes to entity classes throughout the map. This could be used, for example, to change the health of every instance of a particular enemy, or (as shown in the diagram) removing a particular enemy type’s ability to relight torches.

DifficultyEditor
Figure 12. The Difficulty editor, showing a modified property on a particular entity class

The Difficulty editor shows the names of the available difficulty levels in a dropdown widget, beneath which are the settings for the selected difficulty level. The difficulty names are customisable on a per-map basis — normally these will be the default values of "Easy", "Medium" and "Difficult", but if the current map has customised difficulty names DarkRadiant will adjust the tab names accordingly.

On the left is a tree view showing all of the property overrides for the current difficulty level. Each top-level item is a particular entity class, which contains all of the property changes that are made to this entity class in this difficulty level. In this example, the ai_builder_guard entity has its canLightTorches property set to 0 on the Easy difficulty setting, meaning that all enemies of this particular type will not be able to relight torches.

Adding a setting

To add a new property setting for the current difficulty level, click the Add button. The widgets on the right hand side will become available, allowing you to choose an entity class, a property ("Spawnarg") to change, and the change to make ("Argument"). You can choose a number of mathematical operations for the modification, including a simple value assignment, or an addition or multiplication. After specifying the values, make sure you click the Save button to commit the changes into the list view.

Removing a setting

Select an item in the list view and click the Delete button to remove a particular setting. You can only remove individual assignments from the list; to remove all of the assignments for a particular entity class, you must select and delete each one individually.

Editing the difficulty name

To edit the name of the current difficulty level, click the edit button to the right of the dropdown, and enter a new name in the text box. The modified name will be written into a property on the worldspawn entity and reflected both in game and in DarkRadiant.

Tip For details of more advanced difficulty-dependent changes, such as modifying the behaviour of a single entity (rather than an entire entity class), consult the Dark Mod Wiki.

Game Connection

The Dark Mod includes functionality to dynamically interact with a DarkRadiant session running on the same machine, allowing certain information (such as camera position) to be synchronised both to and from the game, and for certain entity property changes to be pushed to the running game without needing to restart.

These features are accessed in DarkRadiant through the Connection menu and buttons on the camera view toolbar.

Activating the connection

  1. In The Dark Mod, load the map which you are currently editing in DarkRadiant.

  2. Bring down the game console and enter the command

    com_automation 1

    This should result in a status message indicating that the game is listening for connections on a particular network port.

    Automation now listens on port 3879

The game process is now ready to exchange data with DarkRadiant.

Synchronising camera position

You can synchronise the DarkRadiant camera position and the game player position in both directions: editor to game and game to editor. This feature is most easily controlled with the buttons on the camera view toolbar, but it can also be activated from the Connection menu.

CameraSync

Game position follows DarkRadiant camera

Any motion of the DarkRadiant camera will be transmitted in realtime to the game, resulting in the player position moving (in noclip mode) to the same position and view direction.

This is a toggled option which remains active until switched off.

CameraSyncBack

Move camera to current game position

Update the DarkRadiant camera to match the current player position and view direction in game.

This is a single-shot command; there is no mechanism to continuously move the DarkRadiant camera in response to player motion in game.

Command reference

File menu

New map

Prompt to save and close the current map (if necessary), then start working on a new empty map.

Open map…​

Prompt to save and close the current map (if necessary), then display a file browser to choose and load an existing map file from disk.

Import map…​

Display a file browser to choose and load an existing map file from disk, merging the contents with the existing map

Import prefab…​

Display the prefab browser to choose and import a prefab from disk.

Note Importing a map and importing a prefab are functionally identical operations; the only difference is the user interface used for choosing what to import. The prefab browser is designed to offer a user-friendly workflow for browsing, previewing and importing from a library of frequently-used map elements, while Import map may be more useful for merging two or more partially-complete maps.
Save

Save the current map to disk under its existing file name.

Save as…​

Display a file browser to choose a new name for the current map, then save to this new file name in future.

Save copy as…​

Display a file browser to choose a new filename to save this map into, without changing the current map name for future Save operations.

Save selected as Map…​

Choose a file name and save the currently-selected items into a new map file without changing the current map name. Equivalent to Save copy as but it only saves the selected items, not the entire map.

Save selected as prefab…​

Equivalent to Save selected as Map but it saves the selected items into a prefab (*.pfb) file in the standard prefab location.

Save selected as Collision Model…​

Allows a selected map object (typically a brush) to be set as the collision model for a particular ASE or LWO model. After choosing this option, DarkRadiant will display the model chooser dialog, allowing you to choose the particular model that the selected object should be associated with. The selected brush is then saved, and associated with the model so that subsequent insertions of the same model will use the new collision geometry.

Reload Models/Selected Models/Skins/Scripts/Readable Guis/Materials/Defs/Particles

Forces DarkRadiant to re-read the selected category of items from disk, refreshing its internal data structures. This is necessary if you have edited or re-exported some asset which DarkRadiant is using in the current map and you want to see the latest changes.

Game/Project Setup…​

Show the Game Setup dialog for configuring game-specific settings.

Pointfile

Load and show the pointfile for the current map, if there is one. An error dialog will be displayed if there is no current pointfile (which is usually the case if the current map has not leaked during compilation).

Exit

Exit DarkRadiant, prompting to save the current map if necessary.

Edit menu

Undo

Undo the most recent operation.

Redo

Redo the most recently undone operation.

Copy

Copy the selected item(s) to the clipboard.

Paste

Paste the item(s) on the clipboard to their original world location.

Note Objects copied to the clipboard are represented using the same text format which can be found in .map files. This makes it possible to save clipboard content into a file and load it later as an actual map fragment.
Paste to camera

Paste the item(s) on the clipboard to the current camera location, ignoring their original world location.

Duplicate

Make a copy of the currently selected item(s), slightly offset from their original position.

Delete

Remove the currently selected item(s).

Group selection

Combine the selected items into a group.

Ungroup selection

Split the selected group back into individual objects.

Reparent primitives

Make all selected worldspawn brushes or patches into children of the selected func_static (or similar entity). Requires exactly one entity to be selected, along with at least one primitive which is currently a child of the worldspawn.

Reparent primitives to worldspawn

Unparent the selected primitive from a func_static (or similar entity), making it a child of the worldspawn. Before using this command you must first select a single primitive with the TAB key (even if the entity only contains a single primitive), otherwise the whole entity will be selected and the command will silently fail.

Tip To unparent all of an entity’s primitives and convert them back into worldspawn, just right-click in the 2D view and choose Revert to worldspawn.

Configuring DarkRadiant

DarkRadiant offers a large number of configurable options which can be used to tailor its behaviour to your desired workflow. Most of these options can be found either in the Preferences dialog or exposed directly as menu items.

The Preferences dialog

The Preferences dialog can be shown by choosing Preferences…​ from the Edit menu. The dialog contains a number of pages containing groups of logically related options.

Camera settings

The Camera page contains options relating to the movement and behaviour of the 3D camera.

Movement Speed

Use this slider to control how many game units the camera moves forwards or backwards when you use the scroll wheel in the 3D view. It does not affect the speed of rotation or lateral dragging (e.g. with Ctrl) in free look mode, nor does it affect motion with the arrow keys.

Rotation Speed

This controls the speed of angular rotation when dragging the mouse after entering free look mode with right-click. If you have a high DPI mouse and want to be able to direct the camera more precisely, reducing this setting may help.

Freelook mode can be toggled

Disabling this checkbox makes the free look functionality behave more like typical MMO games, where you hold down the right mouse button and drag to move the camera around. Uncheck this option if you hate modal interfaces or find the default toggle behaviour confusing.

Discrete movement (non-freelook mode)

If this is checked, moving the camera with the arrow keys in non-freelook mode will cause discrete jumps in position, rather than smooth motion.

Enable far clip plane

You can completely disable the far clip plane by unchecking this option. This will avoid the need to manage the position of the far clip plane, but may negatively impact rendering performance in large or complex maps.

Invert mouse vertical axis

Enable this option to flip the sense of the vertical camera motion when freelook mode is enabled, so that moving the mouse upwards tilts the camera downwards, and vice versa.

Solid selection boxes

This option controls whether selected brushes are drawn with a dashed outline (option disabled) or a solid line (option enabled). It affects both the 2D and the 3D views.

Show camera toolbar

Uncheck this to completely hide the toolbar at the top of the 3D camera window (which includes the render mode buttons and the far clip plane controls).

Orthoview settings

The Orthoview page contains options controlling the display and behaviour of the 2D views.

View chases mouse cursor during drags

If this is enabled, dragging an object off the edge of a 2D view will cause the 2D view to automatically scroll to keep the dragged object in view. If disabled, the dragged object will reach the edge and stop. You can control the speed of the scrolling with the Maximum Chase Mouse Speed slider.

Update views on camera movement

This option controls whether the camera position indicator in the 2D views is automatically kept in sync with camera movements in the 3D window. If this option is disabled, the 2D view camera indicator may not move until you explicitly click on or interact with a 2D view.

Show crosshairs

Enable this option to display full-window-sized crosshairs tracking the mouse cursor whenever it moves over a 2D window. This may assist with precise selection or object alignment.

Show grid

Control the visibility of grid lines in the 2D views. This does not affect the snapping behaviour, just the visual rendering of the grid.

Show size info

Control the visibility of the text overlays which show the dimensions of a selected object on the X, Y or Z axes. This option is also available in the View → Show menu.

Show entity angle arrow

Hide or show the small arrow which indicates the direction of an entity with an angle spawnarg, such as info_player_start. This affects both the 2D and 3D views.

Show entity names

Enable this to show permanently-visible text names next to each entity in the map. This option is also available as View → Show → Show names.

Show blocks

If enabled, the world space is divided into a horizontal grid of 1024x1024 unit blocks (of infinite height) which are outlined in blue in the 2D views. Each block is assigned a pair of numbers representing its position from the centermost block, which is assigned (0, 0). This might help with "blocking out" a map at the beginning of the design phase. This option is also available in the View → Show menu.

Show coordinates

Toggle the visibility of the coordinate rulers along the edges of the 2D window. Also available in the View → Show menu.

Show axes

Control the visibility of the axis widget displayed at the top-left of each 2D window and at the world origin. Also available in the View → Show menu.

Show window outline

Enable this to draw a rectangular outline around the edge of the 2D window. Depending on the platform and GUI theme this may be almost invisible, but might be useful to improve visibility in certain environments.

Show workzone

The 'workzone' is an imaginary axis-aligned cuboid which encloses the set of currently-selected items (this is what defines the volume of a new light, when a light is created from one or more existing brushes). Enabling this option causes the workzone to be outlined in red in the 2D views. Also available in the View → Show menu.

Translate manipulator always constrained to axis

This option affects the behaviour of the translate manipulator. When the option is disabled, dragging a selected object in translation mode will behave as if the manipulator’s central square is being dragged, and allow motion in two dimensions. If the option is enabled, dragging the selected object will behave as if the closest manipulator arrow is being dragged, and allow motion along only a single axis. Translation in two dimensions will always be possible by clicking on the manipulator’s central square directly, regardless of the state of this option.

Higher selection priority for entities

When using the mouse to click on and select an entity which is in front of, behind or inside a brush, this option controls whether DarkRadiant will prefer to select the entity (enabled) or the brush (disabled).

Multi Monitor settings

The Multi Monitor page contains a single setting, Start DarkRadiant on monitor, which allows you to choose which monitor DarkRadiant will start on if you have several available.

Autosave settings

Enable Autosave

Controls whether the autosave feature is active or disabled.

Autosave Interval

Use this slider to choose how often DarkRadiant will make an autosave. By default, autosaves are made every 5 minutes.

Save Snapshots

If this option is enabled, DarkRadiant will make each autosave into a separate copy of the map file, allowing you to potentially revert changes which were made several autosaves ago. If this option is disabled, there will only ever be a single autosave file, which will protect against DarkRadiant or system crashes but not against long-term erroneous changes.

Snapshot folder

This specifies the name of the folder used to store snapshot autosaves, if the Save Snapshots option is enabled.

Max Snapshot size per map

This allows you to control the amount of disk space used for storing snapshots, by specifying a maximum number of megabytes that will be used for storing the snapshots for a single map. If the disk usage grows above this limit, DarkRadiant will start to delete old snapshots.

Clipper settings

Clipper tool uses caulk texture

If this option is enabled, the clipper tool will texture the newly-created clip face with the texture specified in the Caulk shader name text field. If the option is disabled, the new face will be given the same texture as the rest of the brush.

Grid settings

This page contains a couple of options relating to the appearance and default behaviour of the grid.

Default grid size

Use this combo box to choose the default grid size used in new projects (to change the grid size in the current project, use the options in the Grid main menu).

Major grid style

Choose the rendering style for the major grid lines. Available options are Lines, Dotted Lines, More Dotted Lines, Crosses, Dots, Big Dots, and Squares.

Minor grid style

Choose the rendering style for the minor grid lines. Available options are the same as the Major grid style combo box.

Selection settings

Ignore light volume bounds when calculating default rotation pivot location

This option affects the behaviour of the rotation tool when multiple objects are selected. DarkRadiant will place the rotation widget at the approximate "center of gravity" of the set of selected objects. If this option is enabled, any selected lights will be treated as point entities, with no volume in 3D space regardless of their actual light volumes. If this option is disabled, the entire light volume will be taken into account as if the light were a rectangular brush.

Undo settings

Undo Queue Size

Use this spinbox to control the number of operations which are saved onto DarkRadiant’s internal undo stack. Larger values provide a longer history of undoable operations, at the expense of requiring more memory.

Primitives settings

This page contains two options controlling the default behaviour of applied textures. These values can be set on a per-object basis using the Surface Inspector.

Default texture scale

Set a default scale factor for newly applied textures.

Enable texture lock

Set the default value of the Texture Lock button. See the Surface Inspector section for more details on this feature.

Texture Browser settings

These options control the behaviour of the Textures tab.

Uniform texture thumbnail size

Choose the size in pixels that will be used for texture thumbnails.

Texture scrollbar

Hide or show the scrollbar in the textures tab. If the scrollbar is hidden, scrolling is only possible with the mouse wheel.

Mousewheel increment

This option determines how much the window is scrolled when the mouse wheel is rotated.

Max shadername length

Choose the maximum number of characters that may appear in each texture name. If a texture contains more characters than this, the texture name will be abbreviated with "…​" in the middle.

Map files settings

Number of most recently used files

Choose the number of map files to list in the recent map section at the bottom of the File menu.

Open last map on startup

Enable this option to make DarkRadiant automatically load the most recently-used map every time it starts, rather than starting with an empty map.

Features for game distributors

DarkRadiant is designed to work out of the box with a standard Doom 3 or Dark Mod game installation, however it also offers a few features aimed at developers of the game itself.

Controlling asset visibility

As the development of a game progresses, certain models or textures may become obsolete or deprecated, either because they are no longer needed or because they fall short of the quality standard that is expected of new assets. If these models and textures have already been distributed, removing them from the game installation may be problematic, as maps which depend on them will fail to load correctly.

DarkRadiant offers a mechanism to deal with this by allowing certain assets to be marked as "hidden". A hidden asset will no longer be presented for selection by the user (e.g. on the Media tab or in the Model selector), but will continue to function as normal when it appears in a loaded map.

Creating an assets.lst file

To change the visibility of assets, you need to create a file called assets.lst which resides in the top-level models or materials directories in the mod installation. This file may be inside a PK4 or in an extracted directory tree.

The contents of assets.lst are a simple list of key/value pairs, assigning a visibility value to each named asset. For example:

assets.lst
darkmod/chairs/some_broken_chair.lwo=hidden
darkmod/tables/another_table.ase=hidden

Asset paths listed on the left-hand side are interpreted relative to the directory containing assets.lst (which must be models or materials). The visibility value on the right-hand side must be either hidden or normal; a value of normal is equivalent to not listing the file at all, and results in no change to its visibility.

Note Only files may be listed in an assets.lst, not items in a virtual hierarchy such as the material shader tree. When an MTR file is listed as hidden in the materials directory, all shaders contained within it will be hidden in DarkRadiant. This means that in order to hide specific shaders, you must move these into one or more MTR files which are listed as hidden.
DarkRadiant-2.14.0/include/000077500000000000000000000000001413722237400154125ustar00rootroot00000000000000DarkRadiant-2.14.0/include/Bounded.h000066400000000000000000000005731413722237400171500ustar00rootroot00000000000000#ifndef BOUNDED_H_ #define BOUNDED_H_ #include /* FOWARD DECLS */ class AABB; /** * Interface for bounded objects, which maintain a local AABB. */ class Bounded { public: virtual ~Bounded() {} /** * Return the local AABB for this object. */ virtual const AABB& localAABB() const = 0; }; typedef std::shared_ptr BoundedPtr; #endif /*BOUNDED_H_*/ DarkRadiant-2.14.0/include/GLProgramAttributes.h000066400000000000000000000004711413722237400214660ustar00rootroot00000000000000#ifndef GLPROGRAMATTRIBUTES_H_ #define GLPROGRAMATTRIBUTES_H_ /** * Enumeration for vertex attributes to be bound to a GLProgram, to avoid using * magic numbers. */ enum GLProgramAttributes { ATTR_TEXCOORD = 8, ATTR_TANGENT = 9, ATTR_BITANGENT = 10, ATTR_NORMAL = 11 }; #endif /*GLPROGRAMATTRIBUTES_H_*/ DarkRadiant-2.14.0/include/ModResource.h000066400000000000000000000013001413722237400200040ustar00rootroot00000000000000#ifndef MODRESOURCE_H_ #define MODRESOURCE_H_ #include /** * Interface for objects representing resources which were defined within * either a directory or a PK4 archive belonging to a particular mod. Provides * a single method to retrieve the name of the mod that contains this particular * resource. */ class ModResource { public: /** * Destructor */ virtual ~ModResource() {} /** * Return the name of the mod which owns this resource object. Objects that * are not part of a separate mod are found in the base/ directory, and will * return "base" from this function. */ virtual std::string getModName() const = 0; }; #endif /*MODRESOURCE_H_*/ DarkRadiant-2.14.0/include/Rotatable.h000066400000000000000000000004041413722237400174760ustar00rootroot00000000000000#pragma once #include "math/Quaternion.h" /// Interface for an object which can be rotated class Rotatable { public: virtual ~Rotatable() {} /// Rotate the object by the given Quaternion virtual void rotate(const Quaternion& rotation) = 0; }; DarkRadiant-2.14.0/include/Scalable.h000066400000000000000000000003641413722237400172740ustar00rootroot00000000000000#pragma once #include "math/Vector3.h" /// Interface for an object which can be scaled class Scalable { public: virtual ~Scalable() {} /// Scale the object by the given vector virtual void scale(const Vector3& scaling) = 0; }; DarkRadiant-2.14.0/include/StringSerialisable.h000066400000000000000000000011141413722237400213460ustar00rootroot00000000000000#pragma once #include #include /** * \brief * Interface for an object which can serialise itself to/from a string. */ class StringSerialisable { public: /** * \brief * Destructor */ virtual ~StringSerialisable() {} /** * \brief * Export this object's state to a string. */ virtual std::string exportToString() const = 0; /** * \brief * Import this object's state from a given string. */ virtual void importFromString(const std::string& str) = 0; }; typedef std::shared_ptr StringSerialisablePtr; DarkRadiant-2.14.0/include/Texture.h000066400000000000000000000024121413722237400172220ustar00rootroot00000000000000#pragma once #include #include #include /** * \brief * Basic interface for all GL textures. * * This interface represents a texture which is bound to OpenGL, with an OpenGL * texture number (as returned from glGenTextures()). This may be a 2D, 3D, cube * map or any other kind of texture object supported by OpenGL. */ class Texture { public: /** * \brief * Destructor */ virtual ~Texture() {} /** * \brief * Constant indicating an invalid texture size. */ const static std::size_t INVALID_SIZE = 0; /** * \brief * Return the string name of this texture. */ virtual std::string getName() const = 0; /** * \brief * Return the GL texture identifier for this texture. */ virtual GLuint getGLTexNum() const = 0; /** * \brief * Return the width of this texture in pixels. May return INVALID_SIZE if * this texture does not have a valid size. */ virtual std::size_t getWidth() const = 0; /** * \brief * Return the height of this texture in pixels. May return INVALID_SIZE if * this texture does not have a valid size. */ virtual std::size_t getHeight() const = 0; }; typedef std::shared_ptr TexturePtr; DarkRadiant-2.14.0/include/Translatable.h000066400000000000000000000004151413722237400201770ustar00rootroot00000000000000#pragma once #include "math/Vector3.h" /// Interface for an object which can be translated class Translatable { public: virtual ~Translatable() {} /// Translate this object by the given vector virtual void translate(const Vector3& translation) = 0; }; DarkRadiant-2.14.0/include/VolumeIntersectionValue.h000066400000000000000000000003031413722237400224120ustar00rootroot00000000000000#pragma once /** * \brief * Enumeration of possible intersection results between two volumes. */ enum VolumeIntersectionValue { VOLUME_OUTSIDE, VOLUME_INSIDE, VOLUME_PARTIAL }; DarkRadiant-2.14.0/include/editable.h000066400000000000000000000017541413722237400173430ustar00rootroot00000000000000#pragma once class AABB; #include "inode.h" class Snappable { public: virtual ~Snappable() {} virtual void snapto(float snap) = 0; }; typedef std::shared_ptr SnappablePtr; inline SnappablePtr Node_getSnappable(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } class ComponentEditable { public: virtual ~ComponentEditable() {} virtual const AABB& getSelectedComponentsBounds() const = 0; }; typedef std::shared_ptr ComponentEditablePtr; inline ComponentEditablePtr Node_getComponentEditable(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } class ComponentSnappable { public: virtual ~ComponentSnappable() {} virtual void snapComponents(float snap) = 0; }; typedef std::shared_ptr ComponentSnappablePtr; inline ComponentSnappablePtr Node_getComponentSnappable(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } DarkRadiant-2.14.0/include/i18n.h000066400000000000000000000036711413722237400163510ustar00rootroot00000000000000#pragma once #include #include "imodule.h" #include "iradiant.h" namespace language { class ILocalisationProvider { public: virtual ~ILocalisationProvider() {} typedef std::shared_ptr Ptr; // Returns the localised version of the given string virtual std::string getLocalisedString(const char* stringToLocalise) = 0; }; class ILanguageManager { public: virtual ~ILanguageManager() {} /** * Registers the given provider, which will be used to resolve localised strings. */ virtual void registerProvider(const ILocalisationProvider::Ptr& instance) = 0; /** * Removes references to the localisation provider. */ virtual void clearProvider() = 0; /** * Returns the localised version of the given input string * or the unmodified string if no suitable localisation provider * was found. */ virtual std::string getLocalisedString(const char* stringToLocalise) = 0; }; } // This is the accessor for the global language manager module inline language::ILanguageManager& GlobalLanguageManager() { return GlobalRadiantCore().getLanguageManager(); } #define GETTEXT_PACKAGE "darkradiant" // Redefine the _() macro to return a std::string for convenience #ifndef WXINTL_NO_GETTEXT_MACRO #define WXINTL_NO_GETTEXT_MACRO #endif // Custom translation macros _, N_ and C_ inline std::string _(const char* s) { if (!module::IsGlobalModuleRegistryAvailable()) { return s; // it's still too early for this call, return the unmodified string } if (!module::GlobalModuleRegistry().moduleExists(MODULE_RADIANT_CORE)) { return s; // still too early } return GlobalLanguageManager().getLocalisedString(s); } // Macro used to decorate a string as localizable, such that it is recognised // by the xgettext parser, but without triggering an actual function call // at the place it is used. Can be used to e.g. decorate constants in the code. #define N_(str) str #ifndef C_ #define C_(context,text) _(text) #endif DarkRadiant-2.14.0/include/iaasfile.h000066400000000000000000000116441413722237400173460ustar00rootroot00000000000000#pragma once #include #include "imodule.h" #include #include "math/Plane3.h" #include "math/Vector3.h" #include "math/AABB.h" namespace map { // An AAS type is defined by an entityDef block // Each AAS type has its own file extension struct AasType { std::string entityDefName; std::string fileExtension; }; typedef std::list AasTypeList; /** * Representation of a Area Awareness System file. * Provides read-only access to Area and Portal information. * Use the GlobalAasFileManager() to acquire an instance of * this class. */ class IAasFile { public: virtual std::size_t getNumPlanes() const = 0; virtual const Plane3& getPlane(std::size_t planeNum) const = 0; virtual std::size_t getNumVertices() const = 0; virtual const Vector3& getVertex(std::size_t vertexNum) const = 0; // An edge references two vertices by index struct Edge { int vertexNumber[2]; }; virtual std::size_t getNumEdges() const = 0; virtual const Edge& getEdge(std::size_t index) const = 0; virtual std::size_t getNumEdgeIndexes() const = 0; virtual int getEdgeByIndex(int edgeIdx) const = 0; struct Face { int planeNum; // number of the plane this face is on unsigned short flags; // face flags int numEdges; // number of edges in the boundary of the face int firstEdge; // first edge in the edge index short areas[2]; // area at the front and back of this face }; virtual std::size_t getNumFaces() const = 0; virtual const Face& getFace(int faceIndex) const = 0; virtual std::size_t getNumFaceIndexes() const = 0; virtual int getFaceByIndex(int faceIdx) const = 0; struct Area { int numFaces; // number of faces used for the boundary of the area int firstFace; // first face in the face index used for the boundary of the area AABB bounds; // bounds of the area Vector3 center; // center of the area an AI can move towards unsigned short flags; // several area flags unsigned short contents; // contents of the area short cluster; // cluster the area belongs to, if negative it's a portal short clusterAreaNum; // number of the area in the cluster int travelFlags; // travel flags for traveling through this area }; virtual std::size_t getNumAreas() const = 0; virtual const Area& getArea(int areaNum) const = 0; }; typedef std::shared_ptr IAasFilePtr; /** * A loader class capable of constructing an IAasFile instance from a token stream. */ class IAasFileLoader : public RegisterableModule { public: /** * Get the display name of this AAS file loader, e.g. "Doom 3", "Quake 4", etc. */ virtual const std::string& getAasFormatName() const = 0; /** * Each MapFormat can have a certain game type it is designed for, * a value which conincides with the type attribute in the game tag * found in the .game file, e.g. "doom3" or "quake4". */ virtual const std::string& getGameType() const = 0; /** * greebo: Returns true if this loader is able to parse * the contents of this file. Usually this includes a version * check of the file header. */ virtual bool canLoad(std::istream& stream) const = 0; /** * Load the AAS file contents from the given stream. */ virtual IAasFilePtr loadFromStream(std::istream& stream) = 0; }; typedef std::shared_ptr IAasFileLoaderPtr; // Info structure representing a single AAS file on disk struct AasFileInfo { std::string absolutePath; AasType type; }; class IAasFileManager : public RegisterableModule { public: virtual ~IAasFileManager() {} // Register a loader which is considered by all future AAS file load attempts virtual void registerLoader(const IAasFileLoaderPtr& loader) = 0; // Unregister a previously registered loader instance virtual void unregisterLoader(const IAasFileLoaderPtr& loader) = 0; // Get a loader capable of loading the given stream virtual IAasFileLoaderPtr getLoaderForStream(std::istream& stream) = 0; // Get the list of valid AAS types virtual AasTypeList getAasTypes() = 0; // Returns a specific AAS type. Will throw a std::runtime_error if the // type is not valid. virtual AasType getAasTypeByName(const std::string& typeName) = 0; // Returns a list of AAS files for the given map (absolute) map path virtual std::list getAasFilesForMap(const std::string& mapPath) = 0; }; } // namespace const char* const MODULE_AASFILEMANAGER("ZAasFileManager"); // Application-wide Accessor to the global AAS file manager inline map::IAasFileManager& GlobalAasFileManager() { static module::InstanceReference _reference(MODULE_AASFILEMANAGER); return _reference; } DarkRadiant-2.14.0/include/iarchive.h000066400000000000000000000100641413722237400173560ustar00rootroot00000000000000#pragma once /** * \file iarchive.h * Types relating to the use of ZIP archives (PK4 files) and their contents. * \ingroup vfs */ #include "ModResource.h" #include "imodule.h" #include #include "itextstream.h" #include class InputStream; // Interface providing additional info about a given file // used by the FileInfo structure to load extended info // file like size, containing archive, physical path, etc. class IArchiveFileInfoProvider { public: virtual ~IArchiveFileInfoProvider() {} // Get file size of the file given by the relative path (like "def/func.def") in bytes virtual std::size_t getFileSize(const std::string& relativePath) = 0; // Returns true if this file is an actual file on disk (as opposed to a file in a PAK) virtual bool getIsPhysical(const std::string& relativePath) = 0; // Returns the absolute file system path to the archive the given file is located in virtual std::string getArchivePath(const std::string& relativePath) = 0; }; /** * A file opened in binary mode. * \ingroup vfs */ class ArchiveFile { public: /// \brief destructor virtual ~ArchiveFile() {} /// \brief Returns the size of the file data in bytes. virtual std::size_t size() const = 0; /// \brief Returns the path to this file (relative to the filesystem root) virtual const std::string& getName() const = 0; /// \brief Returns the stream associated with this file. /// Subsequent calls return the same stream. /// The stream may be read forwards until it is exhausted. /// The stream remains valid for the lifetime of the file. virtual InputStream& getInputStream() = 0; }; typedef std::shared_ptr ArchiveFilePtr; /** * A file opened in text mode. * \ingroup vfs */ class ArchiveTextFile : public ModResource { public: /// \brief Returns the path to this file (relative to the filesystem root) virtual const std::string& getName() const = 0; /// \brief Returns the stream associated with this file. /// Subsequent calls return the same stream. /// The stream may be read forwards until it is exhausted. /// The stream remains valid for the lifetime of the file. virtual TextInputStream& getInputStream() = 0; }; typedef std::shared_ptr ArchiveTextFilePtr; /** * Representation of an archive in the virtual filesystem. * This might be a PK4/ZIP file or a regular mod directory. * * \ingroup vfs */ class IArchive : public IArchiveFileInfoProvider { public: typedef std::shared_ptr Ptr; virtual ~IArchive() {} class Visitor { public: virtual ~Visitor() {} // Invoked for each file in an Archive virtual void visitFile(const std::string& name, IArchiveFileInfoProvider& infoProvider) = 0; // Invoked for each directory in an Archive. Return true to skip the directory. virtual bool visitDirectory(const std::string& name, std::size_t depth) = 0; }; /// \brief Returns a new object associated with the file identified by \p name, or 0 if the file cannot be opened. /// Name comparisons are case-insensitive. virtual ArchiveFilePtr openFile(const std::string& name) = 0; /// \brief Returns a new object associated with the file identified by \p name, or 0 if the file cannot be opened. /// Name comparisons are case-insensitive. virtual ArchiveTextFilePtr openTextFile(const std::string& name) = 0; /// Returns true if the file identified by \p name can be opened. /// Name comparisons are case-insensitive. virtual bool containsFile(const std::string& name) = 0; /// \brief Performs a depth-first traversal of the archive tree starting at \p root. /// Traverses the entire tree if \p root is "". /// When a file is encountered, calls \c visitor.file passing the file name. /// When a directory is encountered, calls \c visitor.directory passing the directory name. /// Skips the directory if \c visitor.directory returned true. /// Root comparisons are case-insensitive. /// Names are mixed-case. virtual void traverse(Visitor& visitor, const std::string& root) = 0; }; DarkRadiant-2.14.0/include/iautosaver.h000066400000000000000000000033711413722237400177510ustar00rootroot00000000000000#pragma once #include "imodule.h" namespace map { /** * Public interface to to automatic map save algorithms. * * DarkRadiant can be configured to create map backups on demand, * which can be a simple copy of the current map that is overwritten every time, * or it can create sequential snapshots in a separate folder including size limitations. * * The configuration of the save behaviour is done through registry keys. */ class IAutomaticMapSaver : public RegisterableModule { public: virtual ~IAutomaticMapSaver() {} // Run the checks to see if the map needs to be automatically saved. // If the auto saver is not enabled, nothing happens. // Returns true if the map is ready to be auto-saved, false otherwise. virtual bool runAutosaveCheck() = 0; // Perform an automatic save, unconditionally. This will run the save algorithms // for the currently loaded map, regardless whether it is due for a save or not. // Call the "runAutosaveCheck" method to see if an autosave is overdue. virtual void performAutosave() = 0; }; constexpr const char* const RKEY_AUTOSAVE_SNAPSHOTS_ENABLED = "user/ui/map/autoSaveSnapshots"; constexpr const char* const RKEY_AUTOSAVE_SNAPSHOTS_FOLDER = "user/ui/map/snapshotFolder"; constexpr const char* const RKEY_AUTOSAVE_MAX_SNAPSHOT_FOLDER_SIZE = "user/ui/map/maxSnapshotFolderSize"; constexpr const char* const RKEY_AUTOSAVE_SNAPSHOT_FOLDER_SIZE_HISTORY = "user/ui/map/snapshotFolderSizeHistory"; } constexpr const char* const MODULE_AUTOSAVER("AutomaticMapSaver"); // Application-wide Accessor to the global map auto saver inline map::IAutomaticMapSaver& GlobalAutoSaver() { static module::InstanceReference _reference(MODULE_AUTOSAVER); return _reference; } DarkRadiant-2.14.0/include/ibrush.h000066400000000000000000000252471413722237400170710ustar00rootroot00000000000000#pragma once #include "inode.h" #include "imodule.h" #include "math/Vector2.h" #include "math/Vector3.h" #include "math/Matrix3.h" #include "math/Matrix4.h" #include class Plane3; const std::string RKEY_ENABLE_TEXTURE_LOCK("user/ui/brush/textureLock"); namespace brush { // Helper class hosting brush-related settings class IBrushSettings { public: virtual ~IBrushSettings() {} virtual const Vector3& getVertexColour() const = 0; virtual void setVertexColour(const Vector3& colour) = 0; virtual sigc::signal& signal_settingsChanged() = 0; }; class BrushCreator : public RegisterableModule { public: virtual scene::INodePtr createBrush() = 0; virtual IBrushSettings& getSettings() = 0; }; enum class PrefabType : int { Cuboid = 0, Prism, Cone, Sphere, NumPrefabTypes, }; // Public constants const std::size_t c_brush_maxFaces = 1024; const std::size_t PRISM_MIN_SIDES = 3; const std::size_t PRISM_MAX_SIDES = c_brush_maxFaces - 2; const std::size_t CONE_MIN_SIDES = 3; const std::size_t CONE_MAX_SIDES = 32; const std::size_t SPHERE_MIN_SIDES = 3; const std::size_t SPHERE_MAX_SIDES = 7; } // The structure defining a single corner point of an IWinding struct WindingVertex { Vector3 vertex; // The 3D coordinates of the point Vector2 texcoord; // The UV coordinates Vector3 tangent; // The tangent Vector3 bitangent; // The bitangent Vector3 normal; // The normals std::size_t adjacent; // The index of the adjacent WindingVertex // greebo: This operator is needed to enable scripting support // using boost::python's vector_indexing_suite. bool operator==(const WindingVertex& other) const { return (vertex == other.vertex && texcoord == other.texcoord && tangent == other.tangent && bitangent == other.bitangent && normal == other.normal && adjacent == other.adjacent); } }; // A Winding consists of several connected WindingVertex objects, // each of which holding information about a single corner point. typedef std::vector IWinding; /** * greebo: The texture definition structure containing the scale, * rotation and shift values of an applied texture. * At some places this is referred to as "fake" texture coordinates. * This is not what is actually saved to the .map file, but it makes * texture manipulations in the Surface Inspector much more human-readable. */ struct ShiftScaleRotation { double shift[2]; double rotate; double scale[2]; ShiftScaleRotation() { shift[0] = shift[1] = 0; rotate = 0; scale[0] = scale[1] = 1; } }; class IBrush; // Interface for a face plane class IFace { public: // Destructor virtual ~IFace() {} // Returns a reference to the brush containing this face virtual IBrush& getBrush() = 0; // Submits the current state to the UndoSystem, to make further actions undo-able virtual void undoSave() = 0; // Returns true if the texture of this face is not filtered out // This doesn't take into account whether the owning brush is visible or not virtual bool isVisible() const = 0; // Shader accessors virtual const std::string& getShader() const = 0; virtual void setShader(const std::string& name) = 0; // Shifts the texture by the given s,t amount in texture space virtual void shiftTexdef(float s, float t) = 0; // Convenience wrapper to shift the assigned texture by the given amount of pixels // the passed values are scaled accordingly and passed on to shiftTexdef() virtual void shiftTexdefByPixels(float s, float t) = 0; // Scales the tex def by the given factors in texture space virtual void scaleTexdef(float s, float t) = 0; // Rotates the texture by the given angle virtual void rotateTexdef(float angle) = 0; // Returns the amount of texture pixels per game unit shown on this face // This is based on the image returned by the material, usually the editor image virtual Vector2 getTexelScale() const = 0; // Returns the texture aspect ratio width/height virtual float getTextureAspectRatio() const = 0; // Fits the texture on this face virtual void fitTexture(float s_repeat, float t_repeat) = 0; // Flips the texture by the given flipAxis (0 == x-axis, 1 == y-axis) virtual void flipTexture(unsigned int flipAxis) = 0; // This translates the texture as much towards the origin in texture space as possible without changing the world appearance. virtual void normaliseTexture() = 0; enum class AlignEdge { Top, Bottom, Left, Right, }; // If possible, aligns the assigned texture at the given anchor edge virtual void alignTexture(AlignEdge alignType) = 0; // Reverts any transform that has been applied since the last time freezeTransform() was called virtual void revertTransform() = 0; // Promotes the current transformed state to the new base state virtual void freezeTransform() = 0; // Get access to the actual Winding object virtual IWinding& getWinding() = 0; virtual const IWinding& getWinding() const = 0; virtual const Plane3& getPlane3() const = 0; /** * The matrix used to project world coordinates to U/V space, after the winding vertices * have been transformed to this face's axis base system. * The components of this matrix correspond to the matrix values written to the idTech4 * brushDef3 face definition (with holding the translation part): * e.g. ( plane ) ( ( xx yx zx ) ( yx yy zy ) ) "textures/path/to/material" 0 0 0 */ virtual Matrix3 getProjectionMatrix() const = 0; virtual void setProjectionMatrix(const Matrix3& projection) = 0; // Constructs the texture projection matrix from the given (world) vertex and texture coords. // Three vertices and their UV coordinates are enough to construct the texdef. virtual void setTexDefFromPoints(const Vector3 points[3], const Vector2 uvs[3]) = 0; /** * Calculates and returns the texture definition as shift/scale/rotate. * This is not what is actually saved to the .map file, but it makes * texture manipulations in the Surface Inspector much more human-readable. */ virtual ShiftScaleRotation getShiftScaleRotation() const = 0; virtual void setShiftScaleRotation(const ShiftScaleRotation& scr) = 0; // Transforms this face plane with the given transformation matrix virtual void transform(const Matrix4& transformation) = 0; // Emitted from this IFace's destructor, as last sign of life virtual sigc::signal& signal_faceDestroyed() = 0; }; // Plane classification info used by splitting and CSG algorithms struct BrushSplitType { std::size_t counts[3]; BrushSplitType() { counts[0] = 0; counts[1] = 0; counts[2] = 0; } BrushSplitType& operator+=(const BrushSplitType& other) { counts[0] += other.counts[0]; counts[1] += other.counts[1]; counts[2] += other.counts[2]; return *this; } }; // Brush Interface class IBrush { public: virtual ~IBrush() {} // Returns the number of faces for this brush virtual std::size_t getNumFaces() const = 0; // Get a reference to the face by index in [0..getNumFaces). virtual IFace& getFace(std::size_t index) = 0; // Const variant of the above virtual const IFace& getFace(std::size_t index) const = 0; // Add a new face to this brush, using the given plane object, returns a reference to the new face virtual IFace& addFace(const Plane3& plane) = 0; // Add a new face to this brush, using the given plane, projection matrix and material name virtual IFace& addFace(const Plane3& plane, const Matrix3& textureProjection, const std::string& material) = 0; // Removes all faces from this brush virtual void clear() = 0; // Returns true when this brush has no faces virtual bool empty() const = 0; // Returns true if any face of the brush contributes to the final B-Rep. virtual bool hasContributingFaces() const = 0; // Removes faces that do not contribute to the brush. // This is useful for cleaning up after CSG operations on the brush. // Note: removal of empty faces is not performed during direct brush manipulations, // because it would make a manipulation irreversible if it created an empty face. virtual void removeEmptyFaces() = 0; // Sets the shader of all faces to the given name virtual void setShader(const std::string& newShader) = 0; // Returns TRUE if any of the faces has the given shader virtual bool hasShader(const std::string& name) = 0; // Returns TRUE if any of the brush's faces has a visible material, FALSE if all faces are effectively hidden virtual bool hasVisibleMaterial() const = 0; /** * greebo: This is used by the filter system (for example) to trigger * an update of the cached visibility flags. This enables a brush * to quickly cull its hidden faces without issuing lots of internal calls. */ virtual void updateFaceVisibility() = 0; // Saves the current state to the undo stack. // Call this before manipulating the brush to make your action undo-able. virtual void undoSave() = 0; enum DetailFlag { Structural = 0, Detail = 1 << 27, // 134217728 }; /** * Q3-compatibility feature, get the value of the detail/structural flag */ virtual DetailFlag getDetailFlag() const = 0; /** * Q3-compatibility feature, set the detail/structural flag */ virtual void setDetailFlag(DetailFlag newValue) = 0; // Classify this brush against the given plane, used by clipper and CSG algorithms virtual BrushSplitType classifyPlane(const Plane3& plane) const = 0; // Method used internally to recalculate the brush windings virtual void evaluateBRep() const = 0; }; // Forward-declare the Brush object, only accessible from main binary class Brush; class IBrushNode { public: virtual ~IBrushNode() {} /** greebo: Retrieves the contained Brush from the BrushNode */ virtual Brush& getBrush() = 0; // Returns the IBrush interface virtual IBrush& getIBrush() = 0; }; typedef std::shared_ptr IBrushNodePtr; inline bool Node_isBrush(const scene::INodePtr& node) { return node->getNodeType() == scene::INode::Type::Brush; //return std::dynamic_pointer_cast(node) != NULL; } // Casts the node onto a BrushNode and returns the Brush pointer inline Brush* Node_getBrush(const scene::INodePtr& node) { IBrushNodePtr brushNode = std::dynamic_pointer_cast(node); if (brushNode != NULL) { return &brushNode->getBrush(); } return NULL; } // Casts the node onto a BrushNode and returns the IBrush pointer inline IBrush* Node_getIBrush(const scene::INodePtr& node) { IBrushNodePtr brushNode = std::dynamic_pointer_cast(node); if (brushNode != NULL) { return &brushNode->getIBrush(); } return NULL; } const char* const MODULE_BRUSHCREATOR("Doom3BrushCreator"); inline brush::BrushCreator& GlobalBrushCreator() { static module::InstanceReference _reference(MODULE_BRUSHCREATOR); return _reference; } DarkRadiant-2.14.0/include/icameraview.h000066400000000000000000000065161413722237400200670ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "iinteractiveview.h" #include "irenderview.h" templateclass BasicVector3; typedef BasicVector3 Vector3; class Matrix4; namespace camera { enum { CAMERA_PITCH = 0, // up / down CAMERA_YAW = 1, // left / right CAMERA_ROLL = 2, // fall over }; // Abstract class used when handling mouse events // see also: class IOrthoView in iorthoview.h class ICameraView : public virtual IInteractiveView { public: typedef std::shared_ptr Ptr; virtual ~ICameraView() {} // Sets the device width and height, updates the projection virtual void setDeviceDimensions(int width, int height) = 0; // Move the camera's origin virtual const Vector3& getCameraOrigin() const = 0; virtual void setCameraOrigin(const Vector3& newOrigin) = 0; virtual const Vector3& getCameraAngles() const = 0; virtual void setCameraAngles(const Vector3& newAngles) = 0; // Combined setter for position and angles - triggers only one callback to potential observers virtual void setOriginAndAngles(const Vector3& newOrigin, const Vector3& newAngles) = 0; // Returns the vector pointing to the "right" virtual const Vector3& getRightVector() const = 0; // Returns the vector pointing "up" virtual const Vector3& getUpVector() const = 0; // Returns the vector pointing "forward" virtual const Vector3& getForwardVector() const = 0; virtual const Matrix4& getModelView() const = 0; virtual const Matrix4& getProjection() const = 0; // Cubic clipping virtual float getFarClipPlaneDistance() const = 0; virtual void setFarClipPlaneDistance(float distance) = 0; virtual bool getFarClipPlaneEnabled() const = 0; virtual void setFarClipPlaneEnabled(bool enabled) = 0; }; class IFreeMoveView : public virtual IInteractiveView { public: virtual ~IFreeMoveView() {} // Freemove mode virtual void enableFreeMove() = 0; virtual void disableFreeMove() = 0; virtual bool freeMoveEnabled() const = 0; }; class ICameraViewManager : public RegisterableModule { public: virtual ~ICameraViewManager() {} // Create a new camera instance. The ICameraViewManager is keeping a reference to this // object for broadcasting the focusCamera() calls, so be sure to notify the manager // if this camera is no longer in use by invoking destroyCamera(). // The requestRedraw takes a bool indicating whether the redraw should be queued (false) // or a redraw should be forced (true) virtual ICameraView::Ptr createCamera(render::IRenderView& view, const std::function& requestRedraw) = 0; // Releases this camera instance, clearing any internal references to it virtual void destroyCamera(const ICameraView::Ptr& camera) = 0; // Sets the position and angles of all active cameras to the given values virtual void focusAllCameras(const Vector3& position, const Vector3& angles) = 0; // A reference to the currently active view. Will throw a std::runtime_error if no camera is present virtual ICameraView& getActiveView() = 0; // Signal emitted when any camera position or angles changed virtual sigc::signal& signal_cameraChanged() = 0; }; } const char* const MODULE_CAMERA_MANAGER("CameraManager"); // Module accessor inline camera::ICameraViewManager& GlobalCameraManager() { static module::InstanceReference _reference(MODULE_CAMERA_MANAGER); return _reference; } DarkRadiant-2.14.0/include/iclipboard.h000066400000000000000000000020221413722237400176670ustar00rootroot00000000000000#pragma once #include #include "imodule.h" namespace radiant { /** * Interface to DarkRadiant's clipboard which is able to * store and retrieve a string from and to the system clipboard. * Access it through the GlobalClipboard() function. * * This module might not be present in all configurations * so its advisable to check for its presence first. */ class IClipboard : public RegisterableModule { public: virtual ~IClipboard() {} /// Return the contents of the clipboard as a string virtual std::string getString() = 0; /// Copy the given string to the system clipboard virtual void setString(const std::string& str) = 0; // A signal that is emitted when the contents of the system clipboard changes virtual sigc::signal& signal_clipboardContentChanged() = 0; }; } const char* const MODULE_CLIPBOARD("Clipboard"); inline radiant::IClipboard& GlobalClipboard() { static module::InstanceReference _reference(MODULE_CLIPBOARD); return _reference; } DarkRadiant-2.14.0/include/iclipper.h000066400000000000000000000041551413722237400173770ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "iorthoview.h" #include "math/Vector3.h" // The possible split modes enum EBrushSplit { eFront, eBack, eFrontAndBack, }; enum PlaneClassification { ePlaneFront = 0, ePlaneBack = 1, ePlaneOn = 2, }; class ClipPoint; const char* const MODULE_CLIPPER("Clipper"); const char* const RKEY_CLIPPER_CAULK_SHADER("user/ui/clipper/caulkTexture"); /* greebo: This is the interface the clipper module has to provide. */ class IClipper : public RegisterableModule { public: // Gets called if the clip mode is toggled on/off virtual void onClipMode(bool enabled) = 0; // Returns true if the clip mode is enabled virtual bool clipMode() const = 0; // Methods to clip the selected brush or to split it (keeping both parts) virtual void clip() = 0; virtual void splitClip() = 0; // Inverts the clip plane "direction" to determine which part of the brush is kept after clipping virtual void flipClip() = 0; // True when new faces should get caulked virtual bool useCaulkForNewFaces() const = 0; // Returns the name of the caulk shader to be used for clip-created planes virtual const std::string& getCaulkShader() const = 0; // Return or set the view type of the xy view (needed for the projections). virtual EViewType getViewType() const = 0; virtual void setViewType(EViewType viewType) = 0; // Returns the pointer to the currently moved clip point virtual ClipPoint* getMovingClip() = 0; virtual void setMovingClip(ClipPoint* clipPoint) = 0; // Retrieves the reference to the coordinates of the currently "selected" clip point virtual Vector3& getMovingClipCoords() = 0; virtual ClipPoint* find(const Vector3& point, EViewType viewtype, float scale) = 0; // Adds the given point as new clip point. virtual void newClipPoint(const Vector3& point) = 0; // Draws the clip points into the XYView virtual void draw(float scale) = 0; // Updates the clip plane information virtual void update() = 0; }; // The accessor for the clipper module inline IClipper& GlobalClipper() { static module::InstanceReference _reference(MODULE_CLIPPER); return _reference; } DarkRadiant-2.14.0/include/icolourscheme.h000066400000000000000000000060461413722237400204320ustar00rootroot00000000000000#pragma once #include "imodule.h" #include #include "math/Vector3.h" namespace colours { /** * Registry key set when light volumes should be rendered in a single colour * set by the colourscheme, rather than the colour contained in their _color * key. */ constexpr const char* RKEY_OVERRIDE_LIGHTCOL = "user/ui/colour/overrideLightColour"; class IColourItem { public: virtual ~IColourItem() {} // Const and non-const colour accessors virtual const Vector3& getColour() const = 0; virtual Vector3& getColour() = 0; }; /// Interface for a single colour scheme class IColourScheme { public: virtual ~IColourScheme() {} // Iterate over all colours in this scheme virtual void foreachColour(const std::function& functor) = 0; virtual void foreachColour(const std::function& functor) const = 0; // Returns the requested colour object virtual IColourItem& getColour(const std::string& colourName) = 0; // returns the name of this colour scheme virtual const std::string& getName() const = 0; // returns true if the scheme is read-only virtual bool isReadOnly() const = 0; }; /// Module providing access to current and available colour schemes class IColourSchemeManager : public RegisterableModule { public: virtual ~IColourSchemeManager() {} // Visit each known colour scheme with the given functor virtual void foreachScheme(const std::function& functor) = 0; // Get the named scheme virtual IColourScheme& getColourScheme(const std::string& schemeName) = 0; // Checks if the specified scheme already exists virtual bool schemeExists(const std::string& name) = 0; virtual void setActive(const std::string& name) = 0; /// Get a reference to the currently active colour scheme virtual IColourScheme& getActiveScheme() = 0; // greebo: Returns the named colour, returns <0,0,0> if not found virtual Vector3 getColour(const std::string& colourName) = 0; virtual void deleteScheme(const std::string& name) = 0; virtual void copyScheme(const std::string& fromName, const std::string& toName) = 0; // Loads/Saves all the schemes from/to the registry virtual void loadColourSchemes() = 0; virtual void saveColourSchemes() = 0; // Reverts all changes to the current objects and re-load them from the registry virtual void restoreColourSchemes() = 0; // Explicitly store the entity class overrides in the EclassColourManager // This is done by restore/saveColourSchemes automatically and doesn't need to be // called by client code. This is used to let the colour scheme editor force an // update of the eclasses in the current scene to allow for a better preview virtual void emitEclassOverrides() = 0; }; } const char* const MODULE_COLOURSCHEME_MANAGER("ColourSchemeManager"); inline colours::IColourSchemeManager& GlobalColourSchemeManager() { static module::InstanceReference _reference(MODULE_COLOURSCHEME_MANAGER); return _reference; } DarkRadiant-2.14.0/include/icommandsystem.h000066400000000000000000000200761413722237400206240ustar00rootroot00000000000000#pragma once #include #include #include "math/Vector2.h" #include "math/Vector3.h" #include "imodule.h" #include "string/convert.h" namespace cmd { // Use these to define argument types enum ArgumentTypeFlags { ARGTYPE_VOID = 0, ARGTYPE_STRING = 1 << 0, ARGTYPE_INT = 1 << 1, ARGTYPE_DOUBLE = 1 << 2, ARGTYPE_VECTOR3 = 1 << 3, ARGTYPE_VECTOR2 = 1 << 4, // future types go here ARGTYPE_OPTIONAL = 1 << 16, }; // One command argument, provides several getter methods class Argument { std::string _strValue; double _doubleValue; int _intValue; Vector3 _vector3Value; Vector2 _vector2Value; // The type flags std::size_t _type; public: Argument() : _doubleValue(0), _intValue(0), _vector3Value(0,0,0), _vector2Value(0,0), _type(ARGTYPE_VOID) {} // String => Argument constructor Argument(const std::string& str) : _strValue(str), _doubleValue(string::convert(str)), _intValue(string::convert(str)), _vector3Value(string::convert(str)), _vector2Value(Vector2(str)), _type(ARGTYPE_STRING) { tryNumberConversion(); tryVectorConversion(); } // Double => Argument constructor Argument(const double d) : _strValue(string::to_string(d)), _doubleValue(d), _intValue(static_cast(d)), _vector3Value(d,d,d), _vector2Value(d,d), _type(ARGTYPE_DOUBLE) { // Enable INT flag if double value is rounded if (lrint(_doubleValue) == _intValue) { _type |= ARGTYPE_INT; } } // Int => Argument constructor Argument(const int i) : _strValue(string::to_string(i)), _doubleValue(static_cast(i)), _intValue(i), _vector3Value(i,i,i), _vector2Value(i,i), _type(ARGTYPE_INT|ARGTYPE_DOUBLE) // INT can be used as DOUBLE too {} // Vector3 => Argument constructor Argument(const Vector3& v) : _strValue(string::to_string(v[0]) + " " + string::to_string(v[1]) + " " + string::to_string(v[2])), _doubleValue(v.getLength()), _intValue(static_cast(v.getLength())), _vector3Value(v), _vector2Value(v[0], v[1]), _type(ARGTYPE_VECTOR3) {} // Vector2 => Argument constructor Argument(const Vector2& v) : _strValue(string::to_string(v[0]) + " " + string::to_string(v[1]) + " " + string::to_string(v[2])), _doubleValue(v.getLength()), _intValue(static_cast(v.getLength())), _vector3Value(v[0], v[1], 0), _vector2Value(v), _type(ARGTYPE_VECTOR2) {} // Copy Constructor Argument(const Argument& other) : _strValue(other._strValue), _doubleValue(other._doubleValue), _intValue(other._intValue), _vector3Value(other._vector3Value), _vector2Value(other._vector2Value), _type(other._type) {} std::size_t getType() const { return _type; } std::string getString() const { return _strValue; } bool getBoolean() const { return getInt() != 0; } int getInt() const { return _intValue; } double getDouble() const { return _doubleValue; } Vector3 getVector3() const { return _vector3Value; } Vector2 getVector2() const { return _vector2Value; } private: void tryNumberConversion() { // Try to cast the string value to numbers try { _intValue = std::stoi(_strValue); // cast succeeded _type |= ARGTYPE_INT; } catch (std::logic_error&) {} try { _doubleValue = std::stod(_strValue); // cast succeeded _type |= ARGTYPE_DOUBLE; } catch (std::invalid_argument&) {} } void tryVectorConversion() { // Use a stringstream to parse the string std::stringstream strm(_strValue); strm << std::skipws; // Try converting the first two values strm >> _vector2Value.x(); strm >> _vector2Value.y(); if (!strm.fail()) { _type |= ARGTYPE_VECTOR2; // Try to parse the third value strm >> _vector3Value.z(); if (!strm.fail()) { // Third value successfully parsed _type |= ARGTYPE_VECTOR3; // Copy the two values from the parsed Vector2 _vector3Value.x() = _vector2Value.x(); _vector3Value.y() = _vector2Value.y(); } } } }; typedef std::vector ArgumentList; /** * greebo: A command target must take an ArgumentList argument, like this: * * void doSomething(const ArgumentList& args); * * This can be both a free function and a member function. */ typedef std::function Function; // A command signature consists just of arguments, return type is always void typedef std::vector Signature; /** * greebo: Auto-completion information returned by the CommandSystem * when the user is entering a partial command. */ struct AutoCompletionInfo { // The command prefix this info is referring to std::string prefix; // The candidaes, alphabetically ordered, case-insensitively typedef std::vector Candidates; Candidates candidates; }; class ICommandSystem : public RegisterableModule { public: /** * Visit each command/bind using the given lambda. The functor is going to be called * with the command name as argument. */ virtual void foreachCommand(const std::function& functor) = 0; /** * greebo: Declares a new command with the given signature. */ virtual void addCommand(const std::string& name, Function func, const Signature& signature = Signature()) = 0; // Returns true if the named command exists virtual bool commandExists(const std::string& name) = 0; /** * Remove a named command. */ virtual void removeCommand(const std::string& name) = 0; /** * greebo: Define a new statement, which consists of a name and a * string to execute. * * Consider this as some sort of macro. * * @statementName: The name of the statement, e.g. "exportASE" * @string: The string to execute. * @saveStatementToRegistry: when TRUE (default) this statement/bind * is saved to the registry at program shutdown. Pass FALSE if you * don't want to let this statement persist between sessions. */ virtual void addStatement(const std::string& statementName, const std::string& string, bool saveStatementToRegistry = true) = 0; /** * Visit each statement (bind) using the given lambda. The functor is going to be called * with the statement name as argument. */ virtual void foreachStatement(const std::function& functor, bool customStatementsOnly = false) = 0; /** * Returns the signature for the named command or bind. Statements * always have an empty signature. */ virtual Signature getSignature(const std::string& name) = 0; /** * greebo: Executes the given string as if the user had typed it * in the command console. The passed string can be a sequence of * statements separated by semicolon ';' characters. Each statement * can have zero or more arguments, separated by spaces. * * It is possible to pass string arguments by using * double- or single-quote characters. * e.g. "This; string; will be; treated as a whole". * * The last command needs not to be delimited by a semicolon. * * Example: nudgeLeft; nudgeRight -1 0 0; write "Bla! Test" */ virtual void execute(const std::string& input) = 0; /** * Execute the named command with the given arguments. */ virtual void executeCommand(const std::string& name) = 0; virtual void executeCommand(const std::string& name, const Argument& arg1) = 0; virtual void executeCommand(const std::string& name, const Argument& arg1, const Argument& arg2) = 0; virtual void executeCommand(const std::string& name, const Argument& arg1, const Argument& arg2, const Argument& arg3) = 0; // For more than 3 arguments, use this method to pass a vector of arguments virtual void executeCommand(const std::string& name, const ArgumentList& args) = 0; /** * greebo: Returns autocompletion info for the given prefix. */ virtual AutoCompletionInfo getAutoCompletionInfo(const std::string& prefix) = 0; }; typedef std::shared_ptr ICommandSystemPtr; } // namespace cmd const char* const MODULE_COMMANDSYSTEM("CommandSystem"); // This is the accessor for the commandsystem inline cmd::ICommandSystem& GlobalCommandSystem() { static module::InstanceReference _reference(MODULE_COMMANDSYSTEM); return _reference; } DarkRadiant-2.14.0/include/icomparablenode.h000066400000000000000000000014061413722237400207100ustar00rootroot00000000000000#pragma once #include "inode.h" #include namespace scene { /** * Prototype of a comparable scene node, providing hash information * for comparison to another node. Nodes of the same type can be compared against each other. */ class IComparableNode : public virtual INode { public: virtual ~IComparableNode() {} // Returns the fingerprint (checksum) of this node, to allow for quick // matching against other nodes of the same type. Fingerprints of different // types are not comparable, be sure to check the node type first. virtual std::string getFingerprint() = 0; }; // The number of digits that are considered when hashing floating point values in fingerprinting constexpr std::size_t SignificantFingerprintDoubleDigits = 6; } DarkRadiant-2.14.0/include/icounter.h000066400000000000000000000017431413722237400174200ustar00rootroot00000000000000#pragma once #include #include "imodule.h" class ICounter { public: /** Destructor */ virtual ~ICounter() {} /** greebo: Decrements/increments the counter. */ virtual void increment() = 0; virtual void decrement() = 0; /** greebo: Returns the current count. */ virtual std::size_t get() const = 0; }; // Known counters enum CounterType { counterBrushes, counterPatches, counterEntities, }; const char* const MODULE_COUNTER("Counters"); /** greebo: This abstract class defines the interface to the core application. * Use this to access methods from the main codebase in radiant/ */ class ICounterManager : public RegisterableModule { public: // Returns the Counter object of the given type virtual ICounter& getCounter(CounterType counter) = 0; virtual sigc::signal& signal_countersChanged() = 0; }; inline ICounterManager& GlobalCounters() { static module::InstanceReference _reference(MODULE_COUNTER); return _reference; } DarkRadiant-2.14.0/include/icurve.h000066400000000000000000000020661413722237400170640ustar00rootroot00000000000000#ifndef ICURVE_H_ #define ICURVE_H_ #include "inode.h" class CurveNode { public: /** destructor */ virtual ~CurveNode() {} /** greebo: Returns true if the curve has 0 control points. */ virtual bool hasEmptyCurve() = 0; /** greebo: Appends a control point at the end of the chain. */ virtual void appendControlPoints(unsigned int numPoints) = 0; /** greebo: As the name states, this removes the selected * control points from the curve. */ virtual void removeSelectedControlPoints() = 0; /** greebo: This inserts a control point BEFORE each * selected control point of the curve. * Naturally, this doesn't work if the first vertex * is selected. */ virtual void insertControlPointsAtSelected() = 0; /** greebo: Converts the type of the curve from CatmullRom * to NURBS and vice versa. */ virtual void convertCurveType() = 0; }; typedef std::shared_ptr CurveNodePtr; inline CurveNodePtr Node_getCurve(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } #endif /*ICURVE_H_*/ DarkRadiant-2.14.0/include/idatastream.h000066400000000000000000000046261413722237400200710ustar00rootroot00000000000000/* Copyright (C) 2001-2006, William Joseph. All Rights Reserved. This file is part of GtkRadiant. GtkRadiant 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. GtkRadiant 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 GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #if !defined(INCLUDED_IDATASTREAM_H) #define INCLUDED_IDATASTREAM_H #include class StreamBase { public: virtual ~StreamBase() {} typedef std::size_t size_type; typedef unsigned char byte_type; }; /// \brief A read-only byte-stream. class InputStream : public StreamBase { public: /// \brief Attempts to read the next \p length bytes from the stream to \p buffer. /// Returns the number of bytes actually stored in \p buffer. virtual size_type read(byte_type* buffer, size_type length) = 0; }; /// \brief A write-only byte-stream. class OutputStream : public StreamBase { public: /// \brief Attempts to write \p length bytes to the stream from \p buffer. /// Returns the number of bytes actually read from \p buffer. virtual size_type write(const byte_type* buffer, size_type length) = 0; }; class SeekableStream { public: typedef int offset_type; typedef std::size_t position_type; enum seekdir { beg, cur, end, }; virtual ~SeekableStream() {} /// \brief Sets the current \p position of the stream relative to the start. virtual position_type seek(position_type position) = 0; /// \brief Sets the current \p position of the stream relative to either the start, end or current position. virtual position_type seek(offset_type offset, seekdir direction) = 0; /// \brief Returns the current position of the stream. virtual position_type tell() const = 0; }; /// \brief A seekable read-only byte-stream. class SeekableInputStream : public InputStream, public SeekableStream { }; /// \brief A seekable write-only byte-stream. class SeekableOutputStream : public OutputStream, public SeekableStream { }; #endif DarkRadiant-2.14.0/include/idecltypes.h000066400000000000000000000003061413722237400177270ustar00rootroot00000000000000#pragma once namespace decl { // Enumeration of declaration types supported by DarkRadiant enum class Type { None, Material, EntityDef, SoundShader, Model, Particle, }; } DarkRadiant-2.14.0/include/ieclass.h000066400000000000000000000263041413722237400172130ustar00rootroot00000000000000/* Copyright (C) 1999-2006 Id Software, Inc. and contributors. For a list of contributors, see the accompanying CONTRIBUTORS file. This file is part of GtkRadiant. GtkRadiant 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. GtkRadiant 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 GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /** * \defgroup eclass Entity class manager * \file ieclass.h * \brief Entity Class definition loader API. * \ingroup eclass */ #pragma once #include "ModResource.h" #include "imodule.h" #include "math/Vector3.h" #include #include #include #include #include /* FORWARD DECLS */ class Shader; typedef std::shared_ptr ShaderPtr; class AABB; /** * Data structure representing a single attribute on an entity class. * * \ingroup eclass */ class EntityClassAttribute { private: // Attribute type std::string _type; // Attribute name std::string _name; // Value std::string _value; // User-friendly description std::string _desc; public: /** * The key type (string, bool etc.). */ const std::string& getType() const { return _type; } void setType(const std::string& type) { _type = type; } /// The attribute key name, e.g. "model", "editor_displayFolder" etc const std::string& getName() const { return _name; } /// Get attribute value const std::string& getValue() const { return _value; } /// Set attribute value void setValue(const std::string& value) { _value = value; } /// The help text associated with the key (in the DEF file). const std::string& getDescription() const { return _desc; } void setDescription(const std::string& desc) { _desc = desc; } /// Construct an EntityClassAttribute EntityClassAttribute(const std::string& type_, const std::string& name_, const std::string& value_, const std::string& description_ = "") : _type(type_), _name(name_), _value(value_), _desc(description_) {} }; /** * IEntityClass shared pointer. */ class IEntityClass; typedef std::shared_ptr IEntityClassPtr; typedef std::shared_ptr IEntityClassConstPtr; /** * \brief Entity class interface. * * An entity class represents a single type of entity that can be created by * the EntityCreator. Entity classes are parsed from .DEF files during startup. * * Entity class attribute names are compared case-insensitively, as in the * Entity class. * * \ingroup eclass */ class IEntityClass : public ModResource { public: virtual ~IEntityClass() {} /// Signal emitted when entity class contents are changed or reloaded virtual sigc::signal& changedSignal() = 0; /// Get the name of this entity class virtual std::string getName() const = 0; /// Get the parent entity class or NULL if there is no parent virtual const IEntityClass* getParent() const = 0; /// Query whether this entity class represents a light. virtual bool isLight() const = 0; /* ENTITY CLASS SIZE */ /// Query whether this entity has a fixed size. virtual bool isFixedSize() const = 0; /** * Return an AABB representing the declared size of this entity. This is * only valid for fixed size entities. * * @returns * AABB enclosing the "editor_mins" and "editor_maxs" points defined in the * entityDef. */ virtual AABB getBounds() const = 0; /* ENTITY CLASS COLOURS */ /// Return the display colour of this entity class virtual const Vector3& getColour() const = 0; // Overrides the colour defined in the .def files virtual void setColour(const Vector3& colour) = 0; /// Get the shader used for rendering this entity class in wireframe mode. virtual const std::string& getWireShader() const = 0; /// Get the shader used for rendering this entity class in filled mode. virtual const std::string& getFillShader() const = 0; /* ENTITY CLASS ATTRIBUTES */ /** * Return a single named EntityClassAttribute from this EntityClass. * * \param name * The name of the EntityClassAttribute to find, interpreted case-insensitively. * * \param includeInherited * true if attributes inherited from parent entity classes should be * considered, false otherwise. * * \return * A reference to the named EntityClassAttribute. If the named attribute is * not found, an empty EntityClassAttribute is returned. */ virtual EntityClassAttribute& getAttribute(const std::string& name, bool includeInherited = true) = 0; /// Get a const EntityClassAttribute reference by name virtual const EntityClassAttribute& getAttribute(const std::string& name, bool includeInherited = true) const = 0; // Returns the attribute type string for the given name. // This method will walk up the inheritance hierarchy until it encounters a type definition. // If no type is found, an empty string will be returned. virtual const std::string& getAttributeType(const std::string& name) const = 0; // Returns the attribute description string for the given name. // This method will walk up the inheritance hierarchy until it encounters a non-empty description. virtual const std::string& getAttributeDescription(const std::string& name) const = 0; /** * Function that will be invoked by forEachAttribute. * * The function will be passed each EntityClassAttribute in turn, along * with a bool indicating if this attribute is inherited from a parent * entity class. */ using AttributeVisitor = std::function; /** * Enumerate the EntityClassAttibutes in turn, including all inherited * attributes. * * \param visitor * Function that will be invoked for each EntityClassAttibute. * * \param editorKeys * true if editor keys (those which start with "editor_") should be passed * to the visitor, false if they should be skipped. */ virtual void forEachAttribute(AttributeVisitor visitor, bool editorKeys = false) const = 0; /* MODEL AND SKIN */ /** Retrieve the model path for this entity. * * @returns * The VFS model path, or the empty string if there is no model. */ virtual const std::string& getModelPath() const = 0; /// Get the model skin, or the empty string if there is no skin. virtual const std::string& getSkin() const = 0; /** * Returns true if this entity is of type or inherits from the * given entity class name. className is treated case-sensitively. */ virtual bool isOfType(const std::string& className) = 0; // Returns the mod-relative path to the file this DEF was declared in virtual std::string getDefFileName() = 0; }; /** * Structure ontains the information of a model {} block as defined in a * Doom3 .def file. * * \ingroup eclass */ class IModelDef : public ModResource { public: bool resolved; std::string name; std::string mesh; std::string skin; std::string parent; typedef std::map Anims; Anims anims; std::string modName; // The mod-relative path to the file this DEF was declared in std::string defFilename; IModelDef() : resolved(false), modName("base") {} std::string getModName() const { return modName; } }; typedef std::shared_ptr IModelDefPtr; /** * EntityClass visitor interface. * * \ingroup eclass */ class EntityClassVisitor { public: virtual ~EntityClassVisitor() {} virtual void visit(const IEntityClassPtr& eclass) = 0; }; /** * ModelDef visitor interface. * * \ingroup eclass */ class ModelDefVisitor { public: virtual ~ModelDefVisitor() {} virtual void visit(const IModelDefPtr& modelDef) = 0; }; const char* const MODULE_ECLASSMANAGER("EntityClassManager"); /** * EntityClassManager interface. The entity class manager is responsible for * maintaining a list of available entity classes which the EntityCreator can * insert into a map. * * \ingroup eclass */ class IEntityClassManager : public RegisterableModule { public: /// Signal emitted when starting to parse DEFs virtual sigc::signal defsLoadingSignal() const = 0; /// Signal emitted when all DEFs have been loaded (after module initialisation) virtual sigc::signal defsLoadedSignal() const = 0; /// Signal emitted when all DEFs are reloaded virtual sigc::signal defsReloadedSignal() const = 0; /** * Return the IEntityClass corresponding to the given name, creating it if * necessary. If it is created, the has_brushes parameter will be used to * determine whether the new entity class should be brush-based or not. * * @deprecated * Use findClass() instead. */ virtual IEntityClassPtr findOrInsert(const std::string& name, bool has_brushes) = 0; /** * Lookup an entity class by name. If the class is not found, a null pointer * is returned. * * @param name * Name of the entity class to look up. */ virtual IEntityClassPtr findClass(const std::string& name) = 0; /** * Iterate over all entity defs using the given visitor. */ virtual void forEachEntityClass(EntityClassVisitor& visitor) = 0; virtual void realise() = 0; virtual void unrealise() = 0; /** * greebo: This reloads the entityDefs and modelDefs from all files. Does not * change the scenegraph, only the contents of the EClass objects are * re-parsed. All IEntityClassPtrs remain valid, no entityDefs are removed. * * Note: This is NOT the same as unrealise + realise */ virtual void reloadDefs() = 0; /** * greebo: Finds the model def with the given name. Might return NULL if not found. */ virtual IModelDefPtr findModel(const std::string& name) = 0; /** * Iterate over each ModelDef using the given visitor class. */ virtual void forEachModelDef(ModelDefVisitor& visitor) = 0; /** * Iterate over each ModelDef using the given function object. */ virtual void forEachModelDef(const std::function& functor) = 0; }; /** * Return the global EntityClassManager to the application. * * \ingroup eclass */ inline IEntityClassManager& GlobalEntityClassManager() { static module::InstanceReference _reference(MODULE_ECLASSMANAGER); return _reference; } DarkRadiant-2.14.0/include/ieclasscolours.h000066400000000000000000000042401413722237400206150ustar00rootroot00000000000000#pragma once #include #include #include "imodule.h" #include "ieclass.h" #include "math/Vector3.h" namespace eclass { /** * Manages the entity class colour overrides that are applied * to certain eclasses as defined in the currently active * colour scheme. */ class IColourManager : public RegisterableModule { public: virtual ~IColourManager() {} // Register an override for the given entity class, such that the wire/fill shader // colours of the named entity class are using the given colour instead of the one // defined in the entityDef block. // Adding an override for an entity class will replace any existing overrides. // The colour is given in RGB values with each component in the interval [0..1]. virtual void addOverrideColour(const std::string& eclass, const Vector3& colour) = 0; /** * \brief Applies a possible colour override to the given entity class. * * If an override was found, the entity class's colour will be changed with * setColour(). * * \return true if an override was found, false otherwise. */ virtual bool applyColours(IEntityClass& eclass) = 0; // Visit each override definition with the given functor virtual void foreachOverrideColour(const std::function& functor) = 0; // Removes the override colour for the given entity class virtual void removeOverrideColour(const std::string& eclass) = 0; // Removes all registered overrides virtual void clearOverrideColours() = 0; // Signal invoked when an override of a specific eclass is added, changed or removed // function signature: void(const std::string& eclass, bool hasBeenRemoved) virtual sigc::signal& sig_overrideColourChanged() = 0; }; } const char* const MODULE_ECLASS_COLOUR_MANAGER("EclassColourManager"); /** * Return the global IEClassColourManager to the application. * \ingroup eclass */ inline eclass::IColourManager& GlobalEclassColourManager() { static module::InstanceReference _reference(MODULE_ECLASS_COLOUR_MANAGER); return _reference; } DarkRadiant-2.14.0/include/ieditstopwatch.h000066400000000000000000000031361413722237400206210ustar00rootroot00000000000000#pragma once #include "imodule.h" #include namespace map { /** * Stopwatch to measure the time spent editing a particular map. * The time is persisted to the .darkradiant/.mapx file and keeps running * as long as the application is in focus. * * The class will maintain its own internal timer class, but will broadcast * a query message (type is IMessage::ApplicationIsActiveQuery) over the * MessageBus such that the UI module can react and prevent the timer * from increasing when the application is not in focus or blocked * in some other way. */ class IMapEditStopwatch : public RegisterableModule { public: virtual ~IMapEditStopwatch() {} // Starts the stopwatch, the map edit timer will start ticking (again) // This does not reset the timings virtual void start() = 0; // Stops the stopwatch, the map edit timer will not be increased anymore // This does not reset the timings virtual void stop() = 0; // Gets the total number of seconds the map has been edited virtual unsigned long getTotalSecondsEdited() = 0; // Sets the total number of seconds the map has been edited so far // This is used when loading maps from disk, to restore the timer to its previous state virtual void setTotalSecondsEdited(unsigned long newValue) = 0; // Signal emitted when the timer value changes virtual sigc::signal& sig_TimerChanged() = 0; }; } const char* const MODULE_EDITING_STOPWATCH("EditingStopwatch"); inline map::IMapEditStopwatch& GlobalMapEditStopwatch() { static module::InstanceReference _reference(MODULE_EDITING_STOPWATCH); return _reference; } DarkRadiant-2.14.0/include/ientity.h000066400000000000000000000373761413722237400172700ustar00rootroot00000000000000#pragma once #include "inode.h" #include "ipath.h" #include "imodule.h" #include "irender.h" #include "inameobserver.h" #include "iscenegraph.h" #include "itransformnode.h" #include #include "string/predicate.h" class IEntityClass; typedef std::shared_ptr IEntityClassPtr; typedef std::shared_ptr IEntityClassConstPtr; // Observes a single entity key value and gets notified on change class KeyObserver { public: virtual ~KeyObserver() {} /** * This event gets called when the observed keyvalue changes. * The new value is passed as argument, which can be an empty string. */ virtual void onKeyValueChanged(const std::string& newValue) = 0; }; class EntityKeyValue : public NameObserver { public: virtual ~EntityKeyValue() {} /** greebo: Retrieves the actual value of this key */ virtual const std::string& get() const = 0; /** greebo: Sets the value of this key */ virtual void assign(const std::string& other) = 0; /** greebo: Attaches/detaches a callback to get notified about * the key change. */ virtual void attach(KeyObserver& observer) = 0; virtual void detach(KeyObserver& observer) = 0; }; typedef std::shared_ptr EntityKeyValuePtr; /** * Interface for a map entity. The Entity is the main building block of a * map, and the uppermost layer in the scenegraph under the root node. Each * entity contains a arbitrary dictionary of strings ("properties" or * "spawnargs") containing information about this entity which is used by the * game engine to modify its behaviour, and may additionally contain child * primitives (brushes and patches) depending on its type. * * At the minimum, each Entity must contain three properties: "name" which * contains a map-unique string identifier, "classname" which identifies the * entity class to the game, and "origin" which stores the location of the * entity in 3-dimensional world space. * * A valid Id Tech 4 map must contain at least one entity: the * "worldspawn" which is the parent of all map geometry primitives. * * greebo: Note that keys are treated case-insensitively in Doom 3, so * the Entity class will return the same result for "MYKeY" as for "mykey". */ class Entity { public: // A container with key => value pairs typedef std::vector< std::pair > KeyValuePairs; /** * \brief * Abstract base class for entity observers. * * An entity observer receives notifications when keyvalues are inserted or * deleted on the entity it is observing. */ class Observer { public: virtual ~Observer() {} /** * \brief * Notification that a new key value has been inserted on the entity. */ virtual void onKeyInsert(const std::string& key, EntityKeyValue& value) { } /** * \brief * Notification that a key value has changed on the entity. */ virtual void onKeyChange(const std::string& key, const std::string& val) { } /** * \brief * Notification that a key value has been removed from the entity. */ virtual void onKeyErase(const std::string& key, EntityKeyValue& value) { } }; // Function typedef to visit actual EntityKeyValue objects, not just the string values typedef std::function EntityKeyValueVisitFunctor; virtual ~Entity() {} /** * Return the entity class object for this entity. */ virtual IEntityClassPtr getEntityClass() const = 0; /// Functor to receive keys and values as strings using KeyValueVisitFunc = std::function< void(const std::string&, const std::string&) >; /** * \brief Enumerate all keys and values on this entity, optionally including * inherited spawnargs. * * \param func * Functor to receive each key and its associated value. * * \param includeInherited * true if the functor should be invoked for each inherited spawnarg (from * the entity class), false if only explicit spawnargs on this particular * entity should be visited. */ virtual void forEachKeyValue(KeyValueVisitFunc func, bool includeInherited = false) const = 0; // Similar to above, visiting the EntityKeyValue objects itself, not just the string value. virtual void forEachEntityKeyValue(const EntityKeyValueVisitFunctor& visitor) = 0; /** Set a key value on this entity. Setting the value to "" will * remove the key. * * @param key * The key to set. * * @param value * Value to give the key, or the empty string to remove the key. */ virtual void setKeyValue(const std::string& key, const std::string& value) = 0; /* Retrieve a key value from the entity. * * @param key * The key to retrieve. * * @returns * The current value for this key, or the empty string if it does not * exist. */ virtual std::string getKeyValue(const std::string& key) const = 0; /** * greebo: Checks whether the given key is inherited or not. * * @returns: TRUE if the value is inherited, * FALSE when it is not or when the key doesn't exist at all. */ virtual bool isInherited(const std::string& key) const = 0; /** * \brief Return the list of keyvalues matching the given prefix. * * This method performs a search for all spawnargs whose key matches the * given prefix, with a suffix consisting of zero or more arbitrary * characters. For example, if "target" were specified as the prefix, the * list would include "target", "target0", "target127" etc. * * This operation may not have high performance, due to the need to scan * for matching names, therefore should not be used in performance-critical * code. * * @param prefix * The prefix to search for, interpreted case-insensitively. * * @return * A list of KeyValue pairs matching the provided prefix. This list will be * empty if there were no matches. */ KeyValuePairs getKeyValuePairs(const std::string& prefix) const { KeyValuePairs list; forEachKeyValue([&](const std::string& k, const std::string& v) { if (string::istarts_with(k, prefix)) list.push_back(std::make_pair(k, v)); }); return list; } /** greebo: Returns true if the entity is a model. For Doom3, this is * usually true when the classname == "func_static" and * the non-empty spawnarg "model" != "name". */ virtual bool isModel() const = 0; /** * Returns true if this entity is the worldspawn, which can be game-specific, * but is usually true if this entity's classname equals "worldspawn" */ virtual bool isWorldspawn() const = 0; virtual bool isContainer() const = 0; /** * \brief * Attach an Entity::Observer to this Entity. */ virtual void attachObserver(Observer* observer) = 0; /** * \brief * Detach an Entity::Observer from this Entity. */ virtual void detachObserver(Observer* observer) = 0; /** * Returns true if this entity is of type or inherits from the * given entity class name. className is treated case-sensitively. */ virtual bool isOfType(const std::string& className) = 0; /* ENTITY ATTACHMENTS */ /// Details of an attached entity struct Attachment { /// Entity class of the attached entity std::string eclass; /// Vector offset where the attached entity should appear Vector3 offset; /// Optional model joint to use as origin std::string joint; }; /// A functor which can receive Attachment objects using AttachmentFunc = std::function; /** * \brief Iterate over attached entities, if any. * * Each entity can define one or more attached entities, which should * appear at specific offsets relative to the parent entity. Such attached * entities are for visualisation only, and should not be saved into the * map as genuine map entities. * * \param func * Functor to receive attachment information. */ virtual void forEachAttachment(AttachmentFunc func) const = 0; }; /** * \brief Interface for a node which represents an entity. * * As well as providing access to the entity data with getEntity(), every * IEntityNode can clone itself and apply a transformation matrix to its * children (which might be brushes, patches or other entities). */ class IEntityNode : public IRenderEntity, public virtual scene::INode, public scene::Cloneable, public IMatrixTransform { public: virtual ~IEntityNode() {} /// Get a modifiable reference to the contained Entity virtual Entity& getEntity() = 0; /** * greebo: Tells the entity to reload the child model. This usually * includes removal of the child model node and triggering * a "skin changed" event. */ virtual void refreshModel() = 0; }; typedef std::shared_ptr IEntityNodePtr; inline Entity* Node_getEntity(const scene::INodePtr& node) { IEntityNodePtr entityNode = std::dynamic_pointer_cast(node); if (entityNode != NULL) { return &(entityNode->getEntity()); } return NULL; } inline bool Node_isEntity(const scene::INodePtr& node) { //assert(!((std::dynamic_pointer_cast(node) != nullptr) ^ (node->getNodeType() == scene::INode::Type::Entity))); return node->getNodeType() == scene::INode::Type::Entity; } // Represents a set of selected entities class IEntitySelection { public: virtual ~IEntitySelection() {} // True if there's no selected entity available virtual bool empty() const = 0; // Returns the number of selected entities virtual std::size_t size() const = 0; // Iterates over each selected entity, invoking the given functor virtual void foreachEntity(const std::function& functor) = 0; // Returns the key value shared by all entities in this set, or an empty string // if there is no such value. virtual std::string getSharedKeyValue(const std::string& key, bool includeInherited) = 0; }; /** * greebo: This is an abstract representation of a target. * In Doom3 maps, a Target can be any entity node, that's * why this object encapsulates a reference to an actual * scene::INode. * * Note: Such a Target object can be empty. That's the case for * entities referring to non-existing entities in their * "target" spawnarg. * * All ITargetableObjects are owned by the TargetManager class. */ class ITargetableObject { public: virtual ~ITargetableObject() {} // Returns the scene node behind this target. If the named target // cannot be resolved in the current scene, an empty pointer is returned. virtual const scene::INode* getNode() const = 0; // Use this method to check whether the node can be resolved virtual bool isEmpty() const = 0; }; typedef std::shared_ptr ITargetableObjectPtr; /** * greebo: The TargetManager keeps track of all ITargetableObjects * in the current scene/map. A TargetManager instance is owned * by the RootNode. TargetManager instances can be acquired through * the EntityCreator interface. * * Clients acquire a named ITargetableObjectPtr by calling getTarget(). This * always succeeds - if the named ITargetableObject is not found, * a new, empty one is created. * * ITargetableObject object (can be empty) * ________ * / \ * Entity | | * TargetKey ----->>| -------->> holds scene::INodePtr (==NULL, if empty) * | | * \________/ */ class ITargetManager { public: /** * Returns the Target with the given name. * This never returns NULL, an ITargetableObject is created if it doesn't exist yet. */ virtual ITargetableObjectPtr getTarget(const std::string name) = 0; /** * greebo: Associates the named Target with the given scene::INode. * The Target will be created if it doesn't exist yet. */ virtual void associateTarget(const std::string& name, const scene::INode& node) = 0; /** * greebo: Disassociates the Target from the given name. The node * must also be passed to allow the manager to check the request. * Otherwise it would be possible for cloned nodes to dissociate * the target from their source node. */ virtual void clearTarget(const std::string& name, const scene::INode& node) = 0; }; typedef std::shared_ptr ITargetManagerPtr; enum class LightEditVertexType : std::size_t { StartEndDeselected, StartEndSelected, Inactive, Deselected, Selected, NumberOfVertexTypes, }; const char* const RKEY_SHOW_ENTITY_NAMES("user/ui/xyview/showEntityNames"); const char* const RKEY_SHOW_ALL_SPEAKER_RADII = "user/ui/showAllSpeakerRadii"; const char* const RKEY_SHOW_ALL_LIGHT_RADII = "user/ui/showAllLightRadii"; const char* const RKEY_DRAG_RESIZE_SYMMETRICALLY = "user/ui/dragResizeEntitiesSymmetrically"; const char* const RKEY_ALWAYS_SHOW_LIGHT_VERTICES = "user/ui/alwaysShowLightVertices"; const char* const RKEY_FREE_OBJECT_ROTATION = "user/ui/rotateObjectsIndependently"; const char* const RKEY_SHOW_ENTITY_ANGLES = "user/ui/xyview/showEntityAngles"; /** * Global entity settings affecting appearance, render options, etc. */ class IEntitySettings { public: virtual ~IEntitySettings() {} virtual const Vector3& getLightVertexColour(LightEditVertexType type) const = 0; virtual void setLightVertexColour(LightEditVertexType type, const Vector3& value) = 0; virtual bool getRenderEntityNames() const = 0; virtual void setRenderEntityNames(bool value) = 0; virtual bool getShowAllSpeakerRadii() const = 0; virtual void setShowAllSpeakerRadii(bool value) = 0; virtual bool getShowAllLightRadii() const = 0; virtual void setShowAllLightRadii(bool value) = 0; virtual bool getDragResizeEntitiesSymmetrically() const = 0; virtual void setDragResizeEntitiesSymmetrically(bool value) = 0; virtual bool getAlwaysShowLightVertices() const = 0; virtual void setAlwaysShowLightVertices(bool value) = 0; virtual bool getFreeObjectRotation() const = 0; virtual void setFreeObjectRotation(bool value) = 0; virtual bool getShowEntityAngles() const = 0; virtual void setShowEntityAngles(bool value) = 0; virtual sigc::signal& signal_settingsChanged() = 0; }; const char* const MODULE_ENTITY("EntityModule"); /** * \brief * Interface for the entity module. */ class IEntityModule : public RegisterableModule { public: virtual ~IEntityModule() {} /// Create an entity node with the given entity class. virtual IEntityNodePtr createEntity(const IEntityClassPtr& eclass) = 0; // Constructs a new targetmanager instance (used by root nodes) virtual ITargetManagerPtr createTargetManager() = 0; // Access to the settings manager virtual IEntitySettings& getSettings() = 0; /** * Create an instance of the given entity at the given position, and return * the Node containing the new entity. * * @returns: the scene::IEntityNodePtr referring to the new entity. * @throws: cmd::ExecutionFailure if anything goes wrong or the selection is not suitable. */ virtual IEntityNodePtr createEntityFromSelection(const std::string& name, const Vector3& origin) = 0; }; inline IEntityModule& GlobalEntityModule() { static module::InstanceReference _reference(MODULE_ENTITY); return _reference; } DarkRadiant-2.14.0/include/ifavourites.h000066400000000000000000000023541413722237400201270ustar00rootroot00000000000000#pragma once #include #include #include "imodule.h" #include "idecltypes.h" namespace decl { class IFavouritesManager : public RegisterableModule { public: virtual ~IFavouritesManager() {} // Adds the given declaration (as identified by the given path) to // the set of favourites virtual void addFavourite(decl::Type type, const std::string& path) = 0; // Removes the given declaration from the favourites set virtual void removeFavourite(decl::Type type, const std::string& path) = 0; // Returns true if the given declaration is listed as favourite virtual bool isFavourite(decl::Type type, const std::string& path) = 0; // Returns the whole set of favourites for the given declaration type virtual std::set getFavourites(decl::Type type) = 0; // Returns the changed signal for the given type - will be fired when the set changes virtual sigc::signal& getSignalForType(decl::Type type) = 0; }; } const char* const MODULE_FAVOURITES_MANAGER("FavouritesManager"); inline decl::IFavouritesManager& GlobalFavouritesManager() { static module::InstanceReference _reference(MODULE_FAVOURITES_MANAGER); return _reference; } DarkRadiant-2.14.0/include/ifilesystem.h000066400000000000000000000215041413722237400201220ustar00rootroot00000000000000#pragma once /** * \defgroup vfs Virtual filesystem * \file ifilesystem.h * Interface types for the VFS module. */ #include #include #include #include #include #include #include "imodule.h" #include "iarchive.h" namespace vfs { // Extension of std::list to check for existing paths before inserting new ones class SearchPaths : public std::list { public: bool insertIfNotExists(const std::string& path) { if (std::find(begin(), end(), path) != end()) { return false; } push_back(path); return true; } }; /// Visibility of an asset in the mod installation enum class Visibility { /// Standard visibility, shown in all relevant areas NORMAL, /// Hidden from selectors, but rendered as normal in the map itself HIDDEN }; inline std::ostream& operator<< (std::ostream& s, const Visibility& v) { if (v == Visibility::HIDDEN) return s << "Visibility::HIDDEN"; else if (v == Visibility::NORMAL) return s << "Visibility::NORMAL"; else return s << "Visibility(invalid)"; } /// Metadata about a file in the virtual filesystem class FileInfo { private: // Info provider to load additional info on demand, used by e.g. getSize() IArchiveFileInfoProvider* _infoProvider; public: FileInfo() : FileInfo(std::string(), std::string(), Visibility::HIDDEN) {} FileInfo(const std::string& topDir_, const std::string& name_, Visibility visibility_) : _infoProvider(nullptr), topDir(topDir_), name(name_), visibility(visibility_) {} FileInfo(const std::string& topDir_, const std::string& name_, Visibility visibility_, IArchiveFileInfoProvider& infoProvider) : FileInfo(topDir_, name_, visibility_) { _infoProvider = &infoProvider; } FileInfo(const FileInfo& other) = default; FileInfo& operator=(const FileInfo& other) = default; /// Top-level directory (if any), e.g. "def" or "models" std::string topDir; /// Name of the file, including intermediate directories under the topDir std::string name; /// Visibility of the file Visibility visibility = Visibility::NORMAL; bool isEmpty() const { return name.empty(); } /// Return the full mod-relative path, including the containing directory std::string fullPath() const { if (topDir.empty()) return name; else return topDir + (topDir.back() == '/' ? "" : "/") + name; } // See IArchiveFileInfoProvider::getFileSize std::size_t getSize() const { return _infoProvider ? _infoProvider->getFileSize(fullPath()) : 0; } // See IArchiveFileInfoProvider::getIsPhysicalFile bool getIsPhysicalFile() const { return _infoProvider ? _infoProvider->getIsPhysical(fullPath()) : false; } // See IArchiveFileInfoProvider::getArchivePath std::string getArchivePath() const { return _infoProvider ? _infoProvider->getArchivePath(fullPath()) : ""; } /// Equality comparison with another FileInfo bool operator== (const FileInfo& rhs) const { return topDir == rhs.topDir && name == rhs.name && visibility == rhs.visibility; } }; /** * Main interface for the virtual filesystem. * * The virtual filesystem provides a unified view of the contents of Doom 3's * base and mod subdirectories, including the contents of PK4 files. Assets can * be retrieved using a single unique path, without needing to know whereabouts * in the physical filesystem the asset is located. * * \ingroup vfs */ class VirtualFileSystem : public RegisterableModule { public: virtual ~VirtualFileSystem() {} // Functor taking the filename and visibility as argument. The filename is // relative to the base path passed to the GlobalFileSystem().foreach*() // method. typedef std::function VisitorFunc; /** * Interface for VFS observers. * * A VFS observer is automatically notified of events relating to the * VFS, including startup and shutdown. */ class Observer { public: virtual ~Observer() {} /** * Notification of VFS initialisation. * * This method is invoked for all VFS observers when the VFS is * initialised. An empty default implementation is provided. */ virtual void onFileSystemInitialise() {} /** * Notification of VFS shutdown. * * This method is invoked for all VFS observers when the VFS is shut * down. An empty default implementation is provided. */ virtual void onFileSystemShutdown() {} }; typedef std::set ExtensionSet; // Initialises the filesystem using the given search order. virtual void initialise(const SearchPaths& vfsSearchPaths, const ExtensionSet& allowedArchiveExtensions) = 0; // Returns true if the filesystem has already been initialised virtual bool isInitialised() const = 0; /// \brief Shuts down the filesystem. virtual void shutdown() = 0; // Returns the extension set this VFS instance has been initialised with virtual const ExtensionSet& getArchiveExtensions() const = 0; // greebo: Adds/removes observers to/from the VFS // Observers should also check isInitialised() after adding themselves // since the VFS might have been initialised already. Calling addObserver() // won't call onFileSystemInitialise() if that's the case. virtual void addObserver(Observer& observer) = 0; virtual void removeObserver(Observer& observer) = 0; // Returns the number of files in the VFS matching the given filename virtual int getFileCount(const std::string& filename) = 0; /// \brief Returns the file identified by \p filename opened in binary mode, or 0 if not found. // greebo: Note: expects the filename to be normalised (forward slashes, trailing slash). virtual ArchiveFilePtr openFile(const std::string& filename) = 0; /// \brief Returns the file identified by \p filename opened in binary mode, or 0 if not found. // This is a variant of openFile taking an absolute path as argument. virtual ArchiveFilePtr openFileInAbsolutePath(const std::string& filename) = 0; /// \brief Returns the file identified by \p filename opened in text mode, or 0 if not found. virtual ArchiveTextFilePtr openTextFile(const std::string& filename) = 0; /// \brief Returns the file identified by \p filename opened in text mode, or NULL if not found. /// This is a variant of openTextFile taking an absolute path as argument. virtual ArchiveTextFilePtr openTextFileInAbsolutePath(const std::string& filename) = 0; // Opens an independent archive located in the given physical path. // (This archive can be located somewhere outside the current VFS hierarchy.) // Loading this archive won't have any effect on the VFS setup, it is opened stand-alone. virtual IArchive::Ptr openArchiveInAbsolutePath(const std::string& pathToArchive) = 0; /// \brief Calls the visitor function for each file under \p basedir matching \p extension. /// Use "*" as \p extension to match all file extensions. virtual void forEachFile(const std::string& basedir, const std::string& extension, const VisitorFunc& visitorFunc, std::size_t depth = 1) = 0; // Similar to forEachFile, this routine traverses an absolute path // searching for files matching a certain extension and invoking // the given visitor functor on each occurrence. virtual void forEachFileInAbsolutePath(const std::string& path, const std::string& extension, const VisitorFunc& visitorFunc, std::size_t depth = 1) = 0; // Similar to forEachFile, this routine traverses an archive in the given path // searching for files matching a certain extension and invoking // the given visitor functor on each occurrence. virtual void forEachFileInArchive(const std::string& absoluteArchivePath, const std::string& extension, const VisitorFunc& visitorFunc, std::size_t depth = 1) = 0; /// \brief Returns the absolute filename for a relative \p name, or "" if not found. virtual std::string findFile(const std::string& name) = 0; /// \brief Returns the filesystem root for an absolute \p name, or "" if not found. /// This can be used to convert an absolute name to a relative name. virtual std::string findRoot(const std::string& name) = 0; // Returns the list of registered VFS paths, ordered by search priority virtual const SearchPaths& getVfsSearchPaths() = 0; // Gets the file info structure for the given VFS file. // The info structure will be empty if the file was not located in the current VFS tree virtual vfs::FileInfo getFileInfo(const std::string& vfsRelativePath) = 0; }; } const char* const MODULE_VIRTUALFILESYSTEM("VirtualFileSystem"); inline vfs::VirtualFileSystem& GlobalFileSystem() { static module::InstanceReference _reference(MODULE_VIRTUALFILESYSTEM); return _reference; } DarkRadiant-2.14.0/include/ifiletypes.h000066400000000000000000000060141413722237400177410ustar00rootroot00000000000000#pragma once #include #include #include "imodule.h" /** * Simple structure to store a file pattern (e.g. "*.map") * along with its name (e.g. "Map files") and extension. */ struct FileTypePattern { // The user-friendly name ("Doom 3 Map") std::string name; // The extension in lowercase ("map") std::string extension; // The mask pattern ("*.map") std::string pattern; // Optional icon string, referring to an image in the bitmaps folder std::string icon; // Constructor with optional initialisation parameters FileTypePattern(const std::string& name_ = "", const std::string& extension_ = "", const std::string& pattern_ = "", const std::string& icon_ = "") : name(name_), extension(extension_), pattern(pattern_), icon(icon_) {} }; typedef std::list FileTypePatterns; const char* const MODULE_FILETYPES = "FileTypes"; /** * Interface for the FileType registry module. This module retains a list of * FileTypePattern objects along with their associated module names. */ class IFileTypeRegistry : public RegisterableModule { public: /** * greebo: Registers an extension (e.g. "map") for a certain file type ("prefab"). * Common file types are "map", "prefab" and "model", each of them can have one * or more extensions associated in a certain order ("prefab" => "pfb", "map", "reg", * or "map" => "map", "reg", "pfb"). The order is important e.g. for the file * filters in the Map Open dialog. * * The pattern argument is a structure containing the lowercase extensions as well * as the display name and the filter pattern used in the file chooser dialogs. * * If an extension is already associated with the given filetype, it is ignored. * New extensions are added to the end of the list. * * @param fileType: the file type which an extension should be associated to. * @param pattern: the extension as well as the display name and a pattern ("*.map") */ virtual void registerPattern(const std::string& fileType, const FileTypePattern& pattern) = 0; /** * Retrieve a list of patterns for the given file type (e.g. "prefab" or "map"). * * @returns: a list of FileTypePatterns containing extension, display name, etc. */ virtual FileTypePatterns getPatternsForType(const std::string& fileType) = 0; /** * Tries to find an icon file for the given extension. If not empty, * the returned string refers to a filename in the bitmaps/ folder. */ virtual std::string getIconForExtension(const std::string& extension) = 0; }; namespace filetype { // Some well-known file type constants const char* const TYPE_MAP = "map"; const char* const TYPE_MAP_EXPORT = "mapexport"; const char* const TYPE_PREFAB = "prefab"; const char* const TYPE_REGION = "region"; const char* const TYPE_MODEL_EXPORT = "modelexport"; const char* const TYPE_PAK = "pak"; } inline IFileTypeRegistry& GlobalFiletypes() { static module::InstanceReference _reference(MODULE_FILETYPES); return _reference; } DarkRadiant-2.14.0/include/ifilter.h000066400000000000000000000136151413722237400172270ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "inode.h" #include #include #include #include /** * This structure defines a simple filtercriterion as used by the Filtersystem */ class FilterRule { public: enum Type { TYPE_TEXTURE, TYPE_ENTITYCLASS, TYPE_OBJECT, TYPE_ENTITYKEYVALUE, }; // The rule type Type type; // The entity key, only applies for type "entitykeyvalue" std::string entityKey; // the match expression regex std::string match; // true for action="show", false for action="hide" bool show; private: // Private Constructor, use the named constructors below FilterRule(const Type type_, const std::string& match_, bool show_) : type(type_), match(match_), show(show_) {} // Alternative private constructor for the entityKeyValue type FilterRule(const Type type_, const std::string& entityKey_, const std::string& match_, bool show_) : type(type_), entityKey(entityKey_), match(match_), show(show_) {} public: // Named constructors // Regular constructor for the non-entitykeyvalue types static FilterRule Create(const Type type, const std::string& match, bool show) { assert(type != TYPE_ENTITYKEYVALUE); return FilterRule(type, match, show); } // Constructor for the entity key value type static FilterRule CreateEntityKeyValueRule(const std::string& key, const std::string& match, bool show) { return FilterRule(TYPE_ENTITYKEYVALUE, key, match, show); } }; typedef std::vector FilterRules; const char* const MODULE_FILTERSYSTEM = "FilterSystem"; // Forward declaration class Entity; namespace filters { const char* const SELECT_OBJECTS_BY_FILTER_CMD = "SelectObjectsByFilter"; const char* const DESELECT_OBJECTS_BY_FILTER_CMD = "DeselectObjectsByFilter"; /** * \brief * Interface for the FilterSystem * * The filter system provides a mechanism by which certain objects or materials * can be hidden from rendered views. */ class IFilterSystem : public RegisterableModule { public: // Signal emitted when the state of filters has changed, // filters have been added or removed, or when rules have been altered virtual sigc::signal filterConfigChangedSignal() const = 0; // Signal emitted when filters are added, removed or renamed virtual sigc::signal filterCollectionChangedSignal() const = 0; /** * greebo: Updates all the "Filtered" status of all Instances * in the scenegraph based on the current filter settings. */ virtual void update() = 0; /** * greebo: Lets the filtersystem update the specified subgraph only, * which includes the given node and all children. */ virtual void updateSubgraph(const scene::INodePtr& root) = 0; /** * Visit the available filters, passing each filter's text name to the visitor. * * @param visitor * Function object called with the filter name as argument. */ virtual void forEachFilter(const std::function& func) = 0; /** Set the state of the named filter. * * @param filter * The filter to toggle. * * @param state * true if the filter should be active, false otherwise. */ virtual void setFilterState(const std::string& filter, bool state) = 0; /** greebo: Returns the state of the given filter. * * @returns: true or false, depending on the filter state. */ virtual bool getFilterState(const std::string& filter) = 0; /** * Activates or deactivates all known filters. */ virtual void setAllFilterStates(bool state) = 0; /** greebo: Returns the event name of the given filter. This is needed * to create the toggle event to menus/etc. */ virtual std::string getFilterEventName(const std::string& filter) = 0; /** Test if a given item should be visible or not, based on the currently- * active filters. * * @param item * The filter type to query * * @param name * String name of the item to query. * * @returns * true if the item is visible, false otherwise. */ virtual bool isVisible(const FilterRule::Type type, const std::string& name) = 0; /** * Test if a given entity should be visible or not, based on the currently active filters. * * @param type * The filter type to query * * @param entity * The Entity to test * * @returns * true if the entity is visible, false otherwise. */ virtual bool isEntityVisible(const FilterRule::Type type, const Entity& entity) = 0; // ===== API for Filter management and editing ===== /** * greebo: Returns TRUE if the filter is read-only and can't be deleted. */ virtual bool filterIsReadOnly(const std::string& filter) = 0; /** * greebo: Adds a new filter to the system with the given ruleset. The new filter * is not set to read-only. * * @returns: TRUE on success, FALSE if the filter name already exists. */ virtual bool addFilter(const std::string& filterName, const FilterRules& ruleSet) = 0; /** * greebo: Removes the filter, returns TRUE on success. */ virtual bool removeFilter(const std::string& filter) = 0; /** * greebo: Renames the specified filter. This also takes care of renaming the corresponding command in the * EventManager class. * * @returns: TRUE on success, FALSE if the filter hasn't been found or is read-only. */ virtual bool renameFilter(const std::string& oldFilterName, const std::string& newFilterName) = 0; /** * greebo: Returns the ruleset of this filter, order is important. */ virtual FilterRules getRuleSet(const std::string& filter) = 0; /** * greebo: Applies the given criteria set to the named filter, replacing the existing set. * This applies to non-read-only filters only. * * @returns: TRUE on success, FALSE if filter not found or read-only. */ virtual bool setFilterRules(const std::string& filter, const FilterRules& ruleSet) = 0; }; } inline filters::IFilterSystem& GlobalFilterSystem() { static module::InstanceReference _reference(MODULE_FILTERSYSTEM); return _reference; } DarkRadiant-2.14.0/include/ifonts.h000066400000000000000000000066511413722237400170750ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "irenderable.h" #include class Material; typedef std::shared_ptr MaterialPtr; namespace fonts { namespace q3font { // Default values of Quake 3 sourcecode. Don't change! const std::size_t GLYPH_COUNT_PER_FONT = 256; } // namespace // Container-class for Glyphs (== single font characters). class IGlyphInfo { public: int height; // number of scan lines int top; // top of glyph in buffer int bottom; // bottom of glyph in buffer int pitch; // width for copying int xSkip; // x adjustment int imageWidth; // width of actual image int imageHeight; // height of actual image float s; // x offset in image where glyph starts float t; // y offset in image where glyph starts float s2; float t2; std::string texture; // the texture name without extension, e.g. carleton_1_24 // The shader this glyph is associated with // this is NULL until the font is actually used ShaderPtr shader; }; typedef std::shared_ptr IGlyphInfoPtr; // Each D3 font has three resolutions enum Resolution { Resolution12, Resolution24, Resolution48, NumResolutions }; inline std::ostream& operator<< (std::ostream& os, Resolution res) { switch (res) { case Resolution12: os << "12"; break; case Resolution24: os << "24"; break; case Resolution48: os << "48"; break; default: assert(false); os << "Unrecognised"; break; } return os; } // Each font resolution has its own set of glyphs class IGlyphSet { public: virtual ~IGlyphSet() {} // 12, 24, 48 virtual Resolution getResolution() const = 0; // each set has 256 glyphs (q3font::GLYPH_COUNT_PER_FONT) virtual IGlyphInfoPtr getGlyph(std::size_t glyphIndex) const = 0; // Gets the scale for calculating the render font size virtual float getGlyphScale() const = 0; // Gets the maximum width of a glyph in this set virtual std::size_t getMaxGlyphWidth() const = 0; // Gets the maximum height of a glyph in this set virtual std::size_t getMaxGlyphHeight() const = 0; // Ensures that each glyph has a valid Shader virtual void realiseShaders() = 0; }; typedef std::shared_ptr IGlyphSetPtr; /** * Holds information about one specific font. * A font consists of three resolutions. */ class IFontInfo { public: virtual ~IFontInfo() {} // The name of the font, e.g. "carleton" virtual const std::string& getName() const = 0; // The language of this font virtual const std::string& getLanguage() const = 0; // Returns the glyphset for the specified resolution virtual IGlyphSetPtr getGlyphSet(Resolution resolution) = 0; }; typedef std::shared_ptr IFontInfoPtr; /** * greebo: Use the FontManager to load a specific font. The returned FontInfo structure * contains all the necessary info about the glyphs, as found in the font's DAT file. */ class IFontManager : public RegisterableModule { public: // Returns the info structure of a specific font (current language), // returns NULL if no font info is available yet virtual IFontInfoPtr findFontInfo(const std::string& name) = 0; }; } const char* const MODULE_FONTMANAGER("FontManager"); inline fonts::IFontManager& GlobalFontManager() { static module::InstanceReference _reference(MODULE_FONTMANAGER); return _reference; } DarkRadiant-2.14.0/include/igame.h000066400000000000000000000076661413722237400166640ustar00rootroot00000000000000#pragma once #include "xmlutil/Node.h" #include "imodule.h" #include #include // String identifier for the game manager module const char* const MODULE_GAMEMANAGER("GameManager"); const char* const RKEY_GAME_TYPE = "user/game/type"; const char* const RKEY_FS_GAME = "user/game/fs_game"; const char* const RKEY_FS_GAME_BASE = "user/game/fs_game_base"; const char* const RKEY_ENGINE_PATH = "user/paths/enginePath"; const char* const RKEY_MOD_PATH = "user/paths/modPath"; const char* const RKEY_MOD_BASE_PATH = "user/paths/modBasePath"; namespace game { /** * \brief * Interface for an object representing a single game type. */ class IGame { public: /** * \brief * Destructor */ virtual ~IGame() {} /** * \brief * Get a string key value from the game file. * * \param key * Name of the key to retrieve. If this key does not exist, a warning is * emitted and the empty string is returned. */ virtual std::string getKeyValue(const std::string& key) const = 0; /** * \brief * Search an XPath relative to the this game node. * * \param xpath * The relative XPath under the game node, including the initial * forward-slash(es). */ virtual xml::NodeList getLocalXPath(const std::string& path) const = 0; }; typedef std::shared_ptr IGamePtr; /** * Represents the game configuration as specified by the user * in the Game Settings dialog, comprising Game name, * engine path, mod path, etc. */ struct GameConfiguration { // The name of the current game, e.g. "Doom 3" std::string gameType; // The engine path (pointing to the game executable) std::string enginePath; // The "userengine" path (where the fs_game is stored) // this is ~/.doom3/ in linux, and / in Win32 std::string modBasePath; // The "mod mod" path (where the fs_game_base is stored) // this is ~/.doom3/ in linux, and / in Win32 std::string modPath; }; /** * \brief * Interface for the game management module. */ class IGameManager : public RegisterableModule { public: // Returns the user's local engine path, on POSIX systems this might // point to the folder in the home directory, e.g. ~/.doom3/ if it exists. // If no engine directory is found in the home directory, the regular // engine path is returned, e.g. /usr/local/doom3 or c:\games\doom3 virtual std::string getUserEnginePath() = 0; /** * greebo: Gets the mod path (e.g. ~/.doom3/gathers/). * Returns the mod base path if the mod path itself is empty. */ virtual const std::string& getModPath() const = 0; /** * greebo: Returns the mod base path (e.g. ~/.doom3/darkmod/), * can be an empty string if fs_game_base is not set. */ virtual const std::string& getModBasePath() const = 0; /** greebo: Returns the current Game (shared_ptr). */ virtual IGamePtr currentGame() = 0; // A sorted list of engine paths (queried by the VFS) typedef std::list PathList; // Returns the list of ordered engine paths, which should // be initialised by the Virtual Filesystem (in this exact order) virtual const PathList& getVFSSearchPaths() const = 0; typedef std::vector GameList; virtual const GameList& getSortedGameList() = 0; // Returns the absolute path where maps are going to be saved to virtual const std::string& getMapPath() = 0; // Returns the absolute path where prefabs are going to be saved to virtual const std::string& getPrefabPath() = 0; // Activates the given mod configuration // Stores the given config, initialises VFS and constructs a few secondary paths virtual void applyConfig(const GameConfiguration& config) = 0; }; typedef std::shared_ptr IGameManagerPtr; } // namespace game // This is the accessor for the game manager inline game::IGameManager& GlobalGameManager() { static module::InstanceReference _reference(MODULE_GAMEMANAGER); return _reference; } DarkRadiant-2.14.0/include/igl.h000066400000000000000000000050641413722237400163430ustar00rootroot00000000000000#pragma once #include #include #include #include "imodule.h" namespace gl { // Base type of any object representing a GL context class IGLContext { public: typedef std::shared_ptr Ptr; virtual ~IGLContext() {} }; // Interface of the module holding the shared GL context // of this application. When the shared GL context has been // created or destroyed, the corresponding events are fired. class ISharedGLContextHolder : public RegisterableModule { public: virtual ~ISharedGLContextHolder() {} // Get the shared context object (might be empty) virtual const IGLContext::Ptr& getSharedContext() = 0; // Set the shared context object. Invoking this method // while a shared context is already registered will cause an // exception to be thrown virtual void setSharedContext(const IGLContext::Ptr& context) = 0; // Fired right after the shared context instance has been registered virtual sigc::signal& signal_sharedContextCreated() = 0; // Fired when the shared context instance has been destroyed virtual sigc::signal& signal_sharedContextDestroyed() = 0; }; } const char* const MODULE_GL_CONTEXT_PROVIDER("GLContextProvider"); const char* const MODULE_SHARED_GL_CONTEXT("SharedGLContextHolder"); inline gl::ISharedGLContextHolder& GlobalOpenGLContext() { static module::InstanceReference _reference(MODULE_SHARED_GL_CONTEXT); return _reference; } const char* const MODULE_OPENGL("OpenGL"); class IGLFont { public: using Ptr = std::shared_ptr; enum class Style { Sans, // free sans Mono, // free mono }; virtual ~IGLFont() {} // Returns the line spacing of this font virtual float getLineHeight() const = 0; /// \brief Renders \p string at the current raster-position of the current context. virtual void drawString(const std::string& string) = 0; }; class OpenGLBinding : public RegisterableModule { public: virtual ~OpenGLBinding() {} // Acquires a shared reference to the font of the given style and size virtual IGLFont::Ptr getFont(IGLFont::Style style, std::size_t size) = 0; // Deprecated virtual int getFontHeight() = 0; // Deprecated /// \brief Renders \p string at the current raster-position of the current context. virtual void drawString(const std::string& string) const = 0; }; inline OpenGLBinding& GlobalOpenGL() { static module::InstanceReference _reference(MODULE_OPENGL); return _reference; } DarkRadiant-2.14.0/include/iglprogram.h000066400000000000000000000040631413722237400177310ustar00rootroot00000000000000#pragma once #include "math/Vector3.h" #include "math/Matrix4.h" #include "render/Colour4.h" /** * Representation of a GL vertex/fragment program. */ class GLProgram { public: /** * Destructor */ virtual ~GLProgram() {} /** * Create this program using glGenProgramsARB and siblings. This needs the * OpenGL system to be initialised so cannot happen in the constructor. */ virtual void create() = 0; /** * Destroy this program using GL calls. */ virtual void destroy() = 0; /** * Bind this program as the currently-operative shader. */ virtual void enable() = 0; /** * Unbind this program from OpenGL. */ virtual void disable() = 0; /// Data structure containing rendering parameters struct Params { /// Light origin in world space Vector3 lightOrigin; /// Light colour Colour4 lightColour; /// Transformation from world space into light space Matrix4 world2Light; /// True if this is an ambient light, false for a directional light bool isAmbientLight = false; /// Whether vertex colours should be inverted bool invertVertexColour = false; Params(const Vector3& lightOrigin_, const Colour4& lightColour_, const Matrix4& world2Light_) : lightOrigin(lightOrigin_), lightColour(lightColour_), world2Light(world2Light_) { } }; /** * \brief Apply render parameters used by this program to OpenGL. * * This method is invoked shortly before the renderable geometry is * submitted for rendering; the GLProgram must apply to the GL state any * parameters it uses. * * \param viewer * Location of the viewer in object space. * * \param localToWorld * Local to world transformation matrix. * * \param lightParms * Params structure containing lighting information. * */ virtual void applyRenderParams(const Vector3& viewer, const Matrix4& localToWorld, const Params& lightParms) { } }; DarkRadiant-2.14.0/include/iglrender.h000066400000000000000000000137601413722237400175450ustar00rootroot00000000000000#pragma once #include "igl.h" #include "imodule.h" #include "ishaders.h" #include "ishaderlayer.h" #include "math/Vector4.h" #include // Full declaration in iglprogram.h class GLProgram; /** * \brief * Data structure encapsulating various parameters of the OpenGL state machine, * as well as parameters used internally by Radiant. * * The OpenGLState class is used to keep track of OpenGL state parameters used * by the renderer, in order to avoid using slow glGet() calls or repeatedly * changing states to the same value. Each shader pass keeps an OpenGLState * member which stores the state values it wishes to use, and these values are * selectively applied to a single "current" OpenGLState object maintained by * the render system. */ class OpenGLState { public: /// Enum of possible sort positions enum SortPosition { SORT_FIRST = -64, SORT_ZFILL = 0, // used by depth buffer fill passes SORT_INTERACTION = 2, // used by the DBS pass SORT_FULLBRIGHT = 1025, // used by non-translucent editor passes SORT_TRANSLUCENT = 1026, // used by blend-type editor passes SORT_OVERLAY_FIRST = 1028, // used by decals SORT_OVERLAY_SECOND = 1029, // used by merge actions SORT_OVERLAY_THIRD = 1030, // used by merge actions SORT_OVERLAY_ONE_BEFORE_LAST = 2046, // used by merge actions SORT_OVERLAY_LAST = 2047, SORT_HIGHLIGHT = 2048, // used by the (red) selection system overlay SORT_POINT_FIRST = 2049, // used by POINT renderers SORT_POINT_LAST = 3071, SORT_GUI0 = 3072, // used by selection system controls, pivots (visible) SORT_GUI1 = 3073, // used by selection system controls, pivots (obscured) SORT_LAST = 4096, }; private: // The 4 colour components, only for use in OpenGLStates that do not have // any shader stages attached, otherwise pull the colour from there. Colour4 _colour; // Colour inversion flag bool _invertColour; // Set of RENDER_XXX flags unsigned _renderFlags; // GL depth function GLenum _glDepthFunc; // Sort position SortPosition _sortPos; std::string _name; public: const std::string& getName() const { return _name; } void setName(const std::string& name) { _name = name; } /// Return the glColor for this state const Colour4& getColour() const { assert(_colour.isValid()); return _colour; } /// Set the glColor for this state, from a Vector4 void setColour(const Colour4& col) { assert(col.isValid()); _colour = col; } /// Set the glColor for this state, from individual components void setColour(float r, float g, float b, float a) { setColour(Colour4(r, g, b, a)); } /// Set this state to invert colour values void setColourInverted(bool inverted) { _invertColour = inverted; } /// Test whether this state is inverting colour values bool isColourInverted() const { return _invertColour; } /// \name Render flag operations ///@{ /// Set all render flags for this state void setRenderFlags(unsigned newFlags) { _renderFlags = newFlags; } /// Set a single render flag on this state void setRenderFlag(unsigned flag) { setRenderFlags(_renderFlags | flag); } /// Clear a single render flag on this state void clearRenderFlag(unsigned flag) { setRenderFlags(_renderFlags & ~flag); } /// Test the value of a single render flag bool testRenderFlag(unsigned flag) const { return (_renderFlags & flag) > 0; } /// Return the render flags for this state unsigned getRenderFlags() const { return _renderFlags; } ///@} /// Return the depth function GLenum getDepthFunc() const { return _glDepthFunc; } /// Set the depth function void setDepthFunc(GLenum func) { _glDepthFunc = func; } /// Return the sort position SortPosition getSortPosition() const { return _sortPos; } /// Set the sort position void setSortPosition(SortPosition pos) { _sortPos = pos; } /** * \brief * Polygon offset. */ float polygonOffset; /** * \brief * GL texture numbers to be bound to texture units. * * \{ */ GLint texture0; GLint texture1; GLint texture2; GLint texture3; GLint texture4; /** * \} */ /** * Each open GL State refers to one or more shader stages, * which hold the actual values of many parameters, some of them * time-dependent or depending on entity parameters. */ IShaderLayer::Ptr stage0; IShaderLayer::Ptr stage1; IShaderLayer::Ptr stage2; IShaderLayer::Ptr stage3; IShaderLayer::Ptr stage4; /** * \brief * Source blend mode. */ GLenum m_blend_src; /** * \brief * Destination blend mode */ GLenum m_blend_dst; // Alpha test function GLenum alphaFunc; // Alpha test threshold GLfloat alphaThreshold; GLfloat m_linewidth; GLfloat m_pointsize; GLint m_linestipple_factor; GLushort m_linestipple_pattern; /** * \brief * GL program or shader object. */ GLProgram* glProgram; /** * \brief * The cube-map texgen mode for rendering. */ IShaderLayer::CubeMapMode cubeMapMode; /// Default constructor OpenGLState() : _colour(Colour4::WHITE()), _invertColour(false), _renderFlags(0), _glDepthFunc(GL_LESS), _sortPos(SORT_FIRST), polygonOffset(0.0f), texture0(0), texture1(0), texture2(0), texture3(0), texture4(0), m_blend_src(GL_SRC_ALPHA), m_blend_dst(GL_ONE_MINUS_SRC_ALPHA), alphaFunc(GL_ALWAYS), alphaThreshold(0), m_linewidth(1), m_pointsize(1), m_linestipple_factor(1), m_linestipple_pattern(0xAAAA), glProgram(NULL), cubeMapMode(IShaderLayer::CUBE_MAP_NONE) { } }; DarkRadiant-2.14.0/include/igrid.h000066400000000000000000000043731413722237400166700ustar00rootroot00000000000000#pragma once /* greebo: The interface of the grid system * * Use these methods to set/get the grid size of the xyviews */ #include #include "imodule.h" #include enum GridSize { GRID_0125 = -3, GRID_025 = -2, GRID_05 = -1, GRID_1 = 0, GRID_2 = 1, GRID_4 = 2, GRID_8 = 3, GRID_16 = 4, GRID_32 = 5, GRID_64 = 6, GRID_128 = 7, GRID_256 = 8, }; namespace grid { inline const char* getStringForSize(GridSize size) { switch (size) { case GRID_0125: return "0.125"; case GRID_025: return "0.25"; case GRID_05: return "0.5"; case GRID_1: return "1"; case GRID_2: return "2"; case GRID_4: return "4"; case GRID_8: return "8"; case GRID_16: return "16"; case GRID_32: return "32"; case GRID_64: return "64"; case GRID_128: return "128"; case GRID_256: return "256"; default: throw new std::logic_error("Grid size not handled in switch!"); }; } // The space the grid is dividing. Regular map editing is using the // World grid, while the Texture Tool is working in UV space. enum class Space { World, Texture, }; } // grid renderings enum GridLook { GRIDLOOK_LINES, GRIDLOOK_DOTLINES, GRIDLOOK_MOREDOTLINES, GRIDLOOK_CROSSES, GRIDLOOK_DOTS, GRIDLOOK_BIGDOTS, GRIDLOOK_SQUARES, }; constexpr const char* const MODULE_GRID("Grid"); class IGridManager : public RegisterableModule { public: virtual ~IGridManager() {} virtual void setGridSize(GridSize gridSize) = 0; // Returns the grid spacing in units of the given space virtual float getGridSize(grid::Space = grid::Space::World) const = 0; // Returns the grid power of the currently active grid size virtual int getGridPower(grid::Space = grid::Space::World) const = 0; // Returns the base number the exponent is applied to (e.g. 2) virtual int getGridBase(grid::Space = grid::Space::World) const = 0; virtual void gridDown() = 0; virtual void gridUp() = 0; virtual GridLook getMajorLook() const = 0; virtual GridLook getMinorLook() const = 0; /// Signal emitted when the grid is changed virtual sigc::signal signal_gridChanged() const = 0; }; // This is the accessor for the grid module inline IGridManager& GlobalGrid() { static module::InstanceReference _reference(MODULE_GRID); return _reference; } DarkRadiant-2.14.0/include/igroupnode.h000066400000000000000000000015321413722237400177370ustar00rootroot00000000000000#pragma once #include "inode.h" namespace scene { /** greebo: This is used to identify group entities right before * and after map save/load. * * It provides methods to add/substract the origin to/from * their child primitives. */ class GroupNode { public: virtual ~GroupNode() {} /** greebo: This is called right before saving * to move the child brushes of the Doom3Group * according to its origin. */ virtual void addOriginToChildren() = 0; virtual void removeOriginFromChildren() = 0; }; typedef std::shared_ptr GroupNodePtr; } // namespace scene /** greebo: Cast a node onto a GroupNode pointer * * @returns: an empty pointer on failure, the pointer to the class otherwise. */ inline scene::GroupNodePtr Node_getGroupNode(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } DarkRadiant-2.14.0/include/igui.h000066400000000000000000000241541413722237400165260ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include "imodule.h" #include "math/Vector4.h" #include "string/convert.h" #include "ishaders.h" namespace gui { class IGui; class IRenderableText { public: virtual ~IRenderableText() {} // Submits the openGL calls virtual void render() = 0; // Re-construct this structure, called when the text in the owning windowDef has been changed virtual void recompile() = 0; }; // An expression as encountered in the GUI code // Evaluates to an instance of a certain type (bool, string, etc.) template class IGuiExpression { public: // Shared ptr typedef typedef std::shared_ptr> Ptr; virtual ~IGuiExpression() {} // Evaluate this expression to retrieve the result virtual ValueType evaluate() = 0; // Value changed signal virtual sigc::signal& signal_valueChanged() = 0; }; // An expression representing a constant value template class ConstantExpression : public IGuiExpression { private: ValueType _value; sigc::signal _sigValueChanged; public: ConstantExpression(const ValueType& value) : _value(value) {} virtual ValueType evaluate() override { return _value; } // Provide a value changed signal, though it's never invoked sigc::signal& signal_valueChanged() override { return _sigValueChanged; } template static std::shared_ptr> Create(const OtherType& value) { return std::make_shared>(value); } }; // Represents a variable or property of a GuiWindowDef // e.g. "text", "notime", "forecolor" or a user-defined variable class IWindowVariable { private: sigc::signal _changedSignal; public: virtual ~IWindowVariable() {} // value-changed signal, to get notified when this value changes sigc::signal& signal_variableChanged() { return _changedSignal; } // To be implemented by subclasses virtual void setValueFromString(const std::string& stringVal) = 0; }; // Represents a GUI property carrying a certain type // e.g. "text" (std::string), "rect" (Vector4), "textscale" (float), ... template class WindowVariable : public IWindowVariable { protected: // Types used by this window variable typedef IGuiExpression ExpressionType; typedef std::shared_ptr ExpressionTypePtr; // The expression which can be evaluated ExpressionTypePtr _expression; sigc::connection _exprChangedSignal; public: typedef std::shared_ptr> Ptr; // smart ptr typedef operator ValueType() const { return getValue(); } virtual ValueType getValue() const { return _expression ? _expression->evaluate() : ValueType(); } // Assigns a new Expression to this variable. The expression needs // to match the ValueType of this variable virtual void setValue(const ExpressionTypePtr& newExpr) { if (_expression == newExpr) return; // Disconnect from any previously subscribed signals _exprChangedSignal.disconnect(); _expression = newExpr; signal_variableChanged().emit(); // Subscribe to this new expression's changed signal if (_expression) { _expression->signal_valueChanged().connect([this]() { signal_variableChanged().emit(); }); } } // Assigns a constant value to this variable virtual void setValue(const ValueType& constantValue) { // Disconnect from any previously subscribed signals _exprChangedSignal.disconnect(); _expression = ConstantExpression::Create(constantValue); signal_variableChanged().emit(); // Since this is a constant expression, we don't need to subscribe to any signal } // Implement the required string->ValueType conversion by means of string::convert<> virtual void setValueFromString(const std::string& stringVal) override { ValueType converted = string::convert(stringVal); setValue(converted); } }; class IGuiWindowDef; typedef std::shared_ptr IGuiWindowDefPtr; class IGuiWindowDef { public: // Public properties // The name of this windowDef std::string name; // Window size (x,y,width,height) WindowVariable rect; // Visible or hidden WindowVariable visible; // The body text of this window WindowVariable text; // Whether this gui is full screen (use on desktop window) WindowVariable menugui; WindowVariable forecolor; WindowVariable hovercolor; WindowVariable backcolor; WindowVariable bordercolor; WindowVariable bordersize; WindowVariable matcolor; WindowVariable rotate; // background shader name WindowVariable background; // background shader (NULL until realised) MaterialPtr backgroundShader; // The name of the font WindowVariable font; // The scale for rendering the font WindowVariable textscale; // The text alignment (left, right, center) WindowVariable textalign; // Text offsets WindowVariable textalignx; WindowVariable textaligny; // Force a specific aspect ratio WindowVariable forceaspectwidth; WindowVariable forceaspectheight; // No mouse events for this window WindowVariable noevents; // Whether this window forces text to wrap at their borders WindowVariable noclip; // Whether time is running for this windowDef WindowVariable notime; // Don't display the cursor WindowVariable nocursor; // Don't wrap words at rectangle borders WindowVariable nowrap; // The window time (0..infinity) std::size_t time; // Each window can define its own set of named variables, // which can be of type float or Vector4 typedef std::shared_ptr IWindowVariablePtr; typedef std::map NamedVariables; NamedVariables variables; // All child windowDefs of this window typedef std::vector ChildWindows; ChildWindows children; public: virtual ~IGuiWindowDef() {} // Returns the owning GUI virtual IGui& getGui() const = 0; virtual void addWindow(const IGuiWindowDefPtr& window) = 0; // Recursively looks for a named child windowDef // Returns NULL if not found virtual IGuiWindowDefPtr findWindowDef(const std::string& name) = 0; // Get the renderable text object containing the OpenGLRenderables virtual IRenderableText& getRenderableText() = 0; /** * greebo: This is some sort of "think" method, giving this windowDef * a chance to handle timed events. * * @updateChildren: recursively updates child windowDef if true */ virtual void update(const std::size_t timeStep, bool updateChildren = true) = 0; // Initialises the time of this windowDef and all children virtual void initTime(const std::size_t time, bool updateChildren = true) = 0; // Prepares renderable objects, to be called by the parent Gui only virtual void pepareRendering(bool prepareChildren = true) = 0; // Returns a reference to the named variable, or throws a std::invalid_argument exception virtual IWindowVariable& findVariableByName(const std::string& name) = 0; }; /** * greebo: This class represents a single D3 GUI. It holds all * the windowDefs and the source code behind. */ class IGui { public: virtual ~IGui() {} virtual const IGuiWindowDefPtr& getDesktop() const = 0; virtual void setDesktop(const IGuiWindowDefPtr& newDesktop) = 0; // Sets the given state variable (gui:: = ) virtual void setStateString(const std::string& key, const std::string& value) = 0; // Retrieve a changed signal for the given key, which is invoked // whenever setStateString() is called virtual sigc::signal& getChangedSignalForState(const std::string& key) = 0; // Returns the state string "gui::" or an empty string if non-existent virtual std::string getStateString(const std::string& key) = 0; // Sets up the time of the entire GUI (all windowDefs) virtual void initTime(const std::size_t time) = 0; // "Think" routine, advances all active windowDefs (where notime == false) virtual void update(const std::size_t timestep) = 0; // Returns a reference to the named windowDef, returns NULL if not found virtual IGuiWindowDefPtr findWindowDef(const std::string& name) = 0; // Called by the GuiRenderer to re-compile text VBOs, etc. virtual void pepareRendering() = 0; }; typedef std::shared_ptr IGuiPtr; enum GuiType { NOT_LOADED_YET, // no attempt to load the GUI has been made UNDETERMINED, // not checked yet for type ONE_SIDED_READABLE, // 1-sided TWO_SIDED_READABLE, // 2-sided NO_READABLE, // not a readable IMPORT_FAILURE, // failed to load FILE_NOT_FOUND, // file doesn't exist }; /** * greebo: Interface managing the idTech4 GUI files, * keeping track of all the loaded GUIs, * parsing the .gui files on demand. */ class IGuiManager : public RegisterableModule { public: typedef std::vector StringList; // A visitor class used to traverse all known GUIs by path class Visitor { public: virtual ~Visitor() {} virtual void visit(const std::string& guiPath, const GuiType& guiType) = 0; }; public: virtual ~IGuiManager() {} // Gets a GUI from the given VFS path, parsing it on demand // Returns NULL if the GUI couldn't be found or loaded. virtual IGuiPtr getGui(const std::string& guiPath) = 0; // Returns the number of known GUIs (or GUI paths) virtual std::size_t getNumGuis() = 0; // Traverse all known GUIs using the given Visitor virtual void foreachGui(Visitor& visitor) = 0; // Returns the GUI appearance type for the given GUI path virtual GuiType getGuiType(const std::string& guiPath) = 0; // Reload the gui virtual void reloadGui(const std::string& guiPath) = 0; // Returns the _errorList for use in a GUI. virtual const StringList& getErrorList() = 0; // Clears out the GUIs and reloads them virtual void reloadGuis() = 0; }; } const char* const MODULE_GUIMANAGER("GuiManager"); // Application-wide Accessor to the global GUI manager inline gui::IGuiManager& GlobalGuiManager() { static module::InstanceReference _reference(MODULE_GUIMANAGER); return _reference; } DarkRadiant-2.14.0/include/iimage.h000066400000000000000000000075021413722237400170220ustar00rootroot00000000000000#pragma once #include "igl.h" #include "imodule.h" typedef unsigned char byte; class Texture; typedef std::shared_ptr TexturePtr; /** * \brief Interface for an object (typically an image) which can produce a bound * OpenGL texture wrapped in a Texture object. */ class BindableTexture { public: virtual ~BindableTexture() {} /** * Enumeration of possible roles for a texture, which might be used to * choose an appropriate OpenGL format (e.g. RGB for colour images, RG for * normal maps etc). */ enum class Role { /// A regular colour texture requiring RGB channels COLOUR, /// A normal map which requires only R & G channels NORMAL_MAP }; /** * \brief Bind this texture to OpenGL. * * This method invokes the necessary GL calls to bind and upload the * object's texture. It returns a Texture object representing the texture in * GL. * * \param name * Optional name to give the texture at bind time. This would usually be the * name of the image map, e.g. "textures/blah/bleh". * * \param role * Optional role to suggest an internal OpenGL format for the bound texture. * The implementing object may (but is not required to) use this information * to help choose a suitable format when binding the texture. In particular, * compressed images loaded from DDS files already have a specific format * which cannot be changed at bind time. */ virtual TexturePtr bindTexture(const std::string& name = "", Role role = Role::COLOUR) const = 0; }; typedef std::shared_ptr BindableTexturePtr; /// Representation of a 2D image texture in an unspecified format class Image : public BindableTexture { public: /// Return the start of the pixel data for this image virtual uint8_t* getPixels() const = 0; /// Return number of resolution levels (mipmaps) virtual std::size_t getLevels() const = 0; /// Return the width of the specified level in pixels virtual std::size_t getWidth(std::size_t level = 0) const = 0; /// Return the height of the specified level in pixels virtual std::size_t getHeight(std::size_t level = 0) const = 0; /** * \brief Test whether this image is precompressed. * * Precompressed images cannot be used as input for image manipulation * operations in shaders, due to quality loss. Note that not all DDS images * are necessarily compressed (although uncompressed DDS images are rarely * used in TDM). */ virtual bool isPrecompressed() const { return false; } /// Return the OpenGL format for this image virtual GLenum getGLFormat() const = 0; }; typedef std::shared_ptr ImagePtr; class ArchiveFile; /// Module responsible for loading images from VFS or disk filesystem class IImageLoader : public RegisterableModule { public: /** * \brief * Load an image from a VFS path. * * Images loaded from the VFS are not specified with an extension. Various * extensions (and optional VFS directory prefixes) will be attempted in an * order specified by the .game file. For example, requesting * "textures/blah/bleh" might result in an attempt to load * "textures/blah/bleh.tga" followed by "dds/textures/blah/bleh.dds" if the * tga version cannot be found. */ virtual ImagePtr imageFromVFS(const std::string& vfsPath) const = 0; /** * \brief * Load an image from a filesystem path. */ virtual ImagePtr imageFromFile(const std::string& filename) const = 0; }; const char* const MODULE_IMAGELOADER("ImageLoader"); inline const IImageLoader& GlobalImageLoader() { static module::InstanceReference _reference(MODULE_IMAGELOADER); return _reference; } DarkRadiant-2.14.0/include/iinteractiveview.h000066400000000000000000000016701413722237400211500ustar00rootroot00000000000000#pragma once #include "iselectiontest.h" #include "ivolumetest.h" #include "math/Vector2.h" /** * Base class of the interactive views used in DarkRadiant: * OrthoView (XYView), Camera (3D View), Texture Tool (UV editor) */ class IInteractiveView { public: virtual ~IInteractiveView() {} /** * Creates a new SelectionTest instance for the given position, measured in * device coordinates in the range [-1..+1] */ virtual SelectionTestPtr createSelectionTestForPoint(const Vector2& point) = 0; // Returns the device dimensions in pixels virtual int getDeviceWidth() const = 0; virtual int getDeviceHeight() const = 0; /** * Returns the VolumeTest instance associated with this view. */ virtual const VolumeTest& getVolumeTest() const = 0; // Schedules a repaint of this view virtual void queueDraw() = 0; // Paints the view immediately virtual void forceRedraw() = 0; }; DarkRadiant-2.14.0/include/ikeyvaluestore.h000066400000000000000000000026571413722237400206500ustar00rootroot00000000000000#pragma once #include #include /** * Interface for an object supporting storage of string-valued * properties which can be accessed by a key. * The key is treated case-sensitively. * It's not possible to store empty strings in the store. */ class IKeyValueStore { public: virtual ~IKeyValueStore() {} /** * Retrieves a property value from the store. This will return an empty string * if the property doesn't exist. */ virtual std::string getProperty(const std::string& key) const = 0; /** * Store a value in the map root's property store. DarkRadiant will persist * these values in the Info file when saving and restore them on loading. * Other map formats without info file are free to use that information * when exporting map data. * Setting a key to an empty string is equivalent to removing it from the store. */ virtual void setProperty(const std::string& key, const std::string& value) = 0; /** * Removes a property from the value store, if it exists. This is equivalent * to setting a property value to an empty string. */ virtual void removeProperty(const std::string& key) = 0; /** * Iterates over the property store, hitting the visitor with each value pair. */ virtual void foreachProperty(const std::function& visitor) const = 0; /** * Removes all properties from this store */ virtual void clearProperties() = 0; }; DarkRadiant-2.14.0/include/ilayer.h000066400000000000000000000144601413722237400170550ustar00rootroot00000000000000#pragma once #include #include #include #include "imodule.h" #include namespace scene { class INode; typedef std::shared_ptr INodePtr; // A list of named layers typedef std::set LayerList; /** * greebo: Interface of a Layered object. */ class Layered { public: // Destructor virtual ~Layered() {} /** * Add this object to the layer with the given ID. */ virtual void addToLayer(int layerId) = 0; /** * Moves this object to the layer. After this operation,the item is member * of this layer only, all other layer memberships are erased. */ virtual void moveToLayer(int layerId) = 0; /** * Remove this object from the layer with the given ID. */ virtual void removeFromLayer(int layerId) = 0; /** * Return the set of layers to which this object is assigned. */ virtual const LayerList& getLayers() const = 0; /** * greebo: This assigns the given node to the given set of layers. Any previous * assignments of the node will be overwritten by this routine. * Note: The newLayers list must not be empty, otherwise the call will be ignored. */ virtual void assignToLayers(const LayerList& newLayers) = 0; }; class ILayerManager { public: typedef std::shared_ptr Ptr; virtual ~ILayerManager() {} /** * greebo: Creates a new layer with the given name. * * @returns: the ID of the layer of -1 if the layer could not * be created (e.g. due to a name conflict). */ virtual int createLayer(const std::string& name) = 0; /** * greebo: Overload: Creates a new layer with the given name and the given ID. * * @returns: the ID of the layer of -1 if the layer could not * be created (e.g. due to a name/ID conflict). */ virtual int createLayer(const std::string& name, int layerID) = 0; /** * greebo: Deletes the named layer. All nodes are removed * from this layer before deletion. */ virtual void deleteLayer(const std::string& name) = 0; /** * greebo: Resets the layer system into its ground state. Deletes all * layers except for layer #0 which is renamed to "Default". */ virtual void reset() = 0; typedef std::function LayerVisitFunc; /** * Functor is called using id and name as arguments */ virtual void foreachLayer(const LayerVisitFunc& visitor) = 0; /** * greebo: Returns the ID of the named layer, or -1 if name doesn't exist */ virtual int getLayerID(const std::string& name) const = 0; /** * greebo: Returns the name of the layer with the given ID or "" if it doesn't exist */ virtual std::string getLayerName(int layerID) const = 0; /** * Returns TRUE if the given layer exists, FALSE otherwise. */ virtual bool layerExists(int layerID) const = 0; /** * greebo: Renames the given layer. Returns TRUE on success, FALSE if the name is * already in use. */ virtual bool renameLayer(int layerID, const std::string& newLayerName) = 0; /** * greebo: Returns the ID of the first visible layer or 0 (default layer) if none is visible. */ virtual int getFirstVisibleLayer() const = 0; /** * Returns the ID of the layer that is currently signed as active (will return the default layer * if no other layer is active). Note that the returned layer is not necessarily visible. */ virtual int getActiveLayer() const = 0; /** * Declare the given layer as active. Nothing will happen if the given layer ID is not existent. * This method doesn't change the visibility of the given layer. */ virtual void setActiveLayer(int layerID) = 0; /** * greebo: Queries the visibility of the given layer. */ virtual bool layerIsVisible(const std::string& layerName) = 0; virtual bool layerIsVisible(int layerID) = 0; /** * greebo: Sets the visibility of the given layer. */ virtual void setLayerVisibility(const std::string& layerName, bool visible) = 0; virtual void setLayerVisibility(int layerID, bool visible) = 0; /** * greebo: Traverses the selection and adds each node to the given layer. */ virtual void addSelectionToLayer(const std::string& layerName) = 0; virtual void addSelectionToLayer(int layerID) = 0; /** * greebo: Moves all selected nodes to the given layer. This implicitly * removes the nodes from all other layers. */ virtual void moveSelectionToLayer(const std::string& layerName) = 0; virtual void moveSelectionToLayer(int layerID) = 0; /** * greebo: Removes the selected nodes from the given layers. */ virtual void removeSelectionFromLayer(const std::string& layerName) = 0; virtual void removeSelectionFromLayer(int layerID) = 0; /** * greebo: Updates the visibility of the given node based on the * current layer visibility settings. * * @returns: TRUE if the node was set to "visible", FALSE if the * current layer settings resulted to "invisible" and the * node was therefore hidden. */ virtual bool updateNodeVisibility(const scene::INodePtr& node) = 0; /** * greebo: Sets the selection status of the entire layer. * * @layerID: the ID of the layer to be selected/deselected. * @selected: TRUE if the layer should be selected, FALSE if the members * should be de-selected. */ virtual void setSelected(int layerID, bool selected) = 0; /** * A signal for client code to get notified about layer creation, * renamings and removal. */ virtual sigc::signal signal_layersChanged() = 0; /** * Fired whenever visibility of a layer has been changed. */ virtual sigc::signal signal_layerVisibilityChanged() = 0; /** * Public signal to get notified about layer membership changes, * e.g. when a node has been added to a layer, or moved to a new one. * Since scene::INodes can be added or removed from layers directly, * without the LayerSystem knowing about this, it is sometimes the * responsibility of that algorithm code to emit this signal itself. */ virtual sigc::signal signal_nodeMembershipChanged() = 0; }; class ILayerModule : public RegisterableModule { public: virtual ~ILayerModule() {} virtual ILayerManager::Ptr createLayerManager() = 0; }; } // namespace scene const char* const MODULE_LAYERS("LayerModule"); inline scene::ILayerModule& GlobalLayerModule() { static module::InstanceReference _reference(MODULE_LAYERS); return _reference; } DarkRadiant-2.14.0/include/ilightnode.h000066400000000000000000000013111413722237400177050ustar00rootroot00000000000000#pragma once #include #include "inode.h" #include "math/AABB.h" /** * LightNodes derive from this class. * It's mainly used to determine the selectable part * of the light, which is usually the small "diamond" in * the center. */ class ILightNode { public: virtual ~ILightNode() {} /// Return the RendererLight instance for this light node virtual const RendererLight& getRendererLight() const = 0; /// Get the AABB of the Light "Diamond" representation. virtual AABB getSelectAABB() const = 0; }; typedef std::shared_ptr ILightNodePtr; inline ILightNodePtr Node_getLightNode(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } DarkRadiant-2.14.0/include/ilogwriter.h000066400000000000000000000040551413722237400177560ustar00rootroot00000000000000#pragma once #include #include namespace applog { enum class LogLevel { Verbose = 0, Standard, Warning, Error, }; constexpr LogLevel AllLogLevels[] = { LogLevel::Verbose, LogLevel::Standard, LogLevel::Warning, LogLevel::Error }; /** * greebo: A LogDevice is a class which is able to take log output. * * Examples of LogDevices are the Console and the DarkRadiant logfile. * Note: Use the LogWriter::attach() method to register a class for logging. */ class ILogDevice { public: virtual ~ILogDevice() {} /** * greebo: This method gets called by the ILogWriter with * a log string as argument. */ virtual void writeLog(const std::string& outputStr, LogLevel level) = 0; /** * If this device is a console, it will be filled with the log output * that has been collected before it has been attached. * This is supposed to make it easier to inspect the startup phase opening * the console viewer in the UI. */ virtual bool isConsole() const { return false; } }; /** * Central logging hub, dispatching any incoming log messages * to all attached ILogDevices. * * Also offers the stream references to set up the rMessage/rWarning streams * in every module. */ class ILogWriter { public: virtual ~ILogWriter() {} /** * greebo: Writes the given buffer p with the given length to the * various output devices (i.e. Console and Log file). */ virtual void write(const char* p, std::size_t length, LogLevel level) = 0; /** * Returns the stream reference for the given log level. These are used * to initialise the global rMessage/rWarning streams used by the application. */ virtual std::ostream& getLogStream(LogLevel level) = 0; /** * Returns the synchronization object for writing to the streams. */ virtual std::mutex& getStreamLock() = 0; /** * greebo: Use these methods to attach/detach a log device from the * writer class. After attaching a device, all log output * will be written to it. */ virtual void attach(ILogDevice* device) = 0; virtual void detach(ILogDevice* device) = 0; }; } DarkRadiant-2.14.0/include/imanipulator.h000066400000000000000000000076251413722237400203010ustar00rootroot00000000000000#pragma once #include #include #include "imodule.h" #include "irenderview.h" template class BasicVector2; typedef BasicVector2 Vector2; class Matrix4; class VolumeTest; class SelectionTest; class RenderableCollector; namespace selection { struct WorkZone; /** * A Manipulator is an object which contains one or more * ManipulatorComponents, each of which can be manipulated by the user. For * example, the rotation Manipulator draws several circles which cause rotations * around specific axes. */ class IManipulator { public: using Ptr = std::shared_ptr; // Manipulator type enum, user-defined manipulators should return "Custom" enum Type { Drag, Translate, Rotate, Scale, Clip, ModelScale, Custom }; enum class Context { Scene, // manipulate regular map elements TextureTool, // manipualte UV coordinates }; /** * Part of a Manipulator which can be operated upon by the user. * * \see Manipulator */ class Component { public: virtual ~Component() {} /** * Called when the user successfully activates this component. The calling code provides * information about the view we're operating in, the starting device coords and the * location of the current selection pivot. */ virtual void beginTransformation(const Matrix4& pivot2world, const VolumeTest& view, const Vector2& devicePoint) = 0; struct Constraint { enum Flags { Unconstrained = 0, // no keyboard modifier held Type1 = 1 << 0, // usually: shift held down Grid = 1 << 1, // usually: ctrl NOT held down Type3 = 1 << 2, // usually: alt held down }; }; /** * Called during mouse movement, the component is asked to calculate the deltas and distances * it needs to perform the translation/rotation/scale/whatever the operator does on the selected objects. * The pivot2world transform relates to the original pivot location at the time the transformation started. * If the constrained flags are not 0, they indicate the user is holding down a key during movement, * usually the SHIFT or CTRL key. It's up to the component to decide how to handle the constraint. */ virtual void transform(const Matrix4& pivot2world, const VolumeTest& view, const Vector2& devicePoint, unsigned int flags) = 0; }; virtual ~IManipulator() {} // ID and Type management virtual std::size_t getId() const = 0; virtual void setId(std::size_t id) = 0; virtual Type getType() const = 0; /** * Get the currently-active ManipulatorComponent. This is determined by the * most recent selection test. */ virtual Component* getActiveComponent() = 0; virtual void testSelect(SelectionTest& test, const Matrix4& pivot2world) {} virtual void setSelected(bool select) = 0; virtual bool isSelected() const = 0; }; /** * A Scene Manipulator is a renderable object that can submit renderable components * to a RenderableCollector to show in the XY and Camera views. */ class ISceneManipulator : public IManipulator { public: using Ptr = std::shared_ptr; virtual ~ISceneManipulator() {} // Renders the manipulator's visual representation to the scene virtual void render(RenderableCollector& collector, const VolumeTest& volume) = 0; // Manipulators should indicate whether component editing is supported or not virtual bool supportsComponentManipulation() const = 0; }; /** * A Texture Tool Manipulator is a 2D-renderable object that does the rendering itself * without taking the path of a RenderableCollector. */ class ITextureToolManipulator : public IManipulator { public: using Ptr = std::shared_ptr; virtual ~ITextureToolManipulator() {} // Renders the manipulator's visual representation to the scene (absolute UV coordinates) virtual void renderComponents(const render::IRenderView& view, const Matrix4& pivot2World) = 0; }; } DarkRadiant-2.14.0/include/imap.h000066400000000000000000000204511413722237400165130ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "inode.h" #include "imapexporter.h" #include "imapformat.h" #include "imapmerge.h" #include "ikeyvaluestore.h" #include #include // Registry setting for suppressing the map load progress dialog const char* const RKEY_MAP_SUPPRESS_LOAD_STATUS_DIALOG = "user/ui/map/suppressMapLoadDialog"; // Whether to load the most recently used map on app startup const char* const RKEY_LOAD_LAST_MAP = "user/ui/map/loadLastMap"; const char* const LOAD_PREFAB_AT_CMD = "LoadPrefabAt"; // Namespace forward declaration class INamespace; typedef std::shared_ptr INamespacePtr; // see imapfilechangetracker.h class IMapFileChangeTracker; // see ientity.h class ITargetManager; // see ilayer.h class ILayerManager; // see iundo.h class IUndoSystem; namespace selection { class ISelectionSetManager; class ISelectionGroupManager; } namespace scene { /** * greebo: A root node is the top level element of a map. * It also owns the namespace of the corresponding map. */ class IMapRootNode : public virtual INode, public virtual IKeyValueStore { public: virtual ~IMapRootNode() {} virtual void setName(const std::string& name) = 0; /** * greebo: Returns the namespace of this root. */ virtual const INamespacePtr& getNamespace() = 0; /** * Access the selection group manager of this hierarchy. */ virtual selection::ISelectionGroupManager& getSelectionGroupManager() = 0; /** * Gives access to the selectionset manager in this scene. */ virtual selection::ISelectionSetManager& getSelectionSetManager() = 0; /** * Returns the target manager keeping track of all * the named targets in the map. */ virtual ITargetManager& getTargetManager() = 0; /** * The map root node is holding an implementation of the change tracker * interface, to keep track of whether the map resource on disk is * up to date or not. */ virtual IMapFileChangeTracker& getUndoChangeTracker() = 0; /** * Provides methods to create and assign layers in this map. */ virtual ILayerManager& getLayerManager() = 0; // The UndoSystem of this map virtual IUndoSystem& getUndoSystem() = 0; }; typedef std::shared_ptr IMapRootNodePtr; } // namespace scene /** * greebo: This is the global interface to the currently * active map file. */ class IMap : public RegisterableModule { public: enum MapEvent { MapLoading, // emitted just before a map is starting to be loaded MapLoaded, // emitted when the current map is done loading MapUnloading, // emitted just before a map is unloaded from memory MapUnloaded, // emitted after a map has been unloaded MapSaving, // emitted before a map is about to be saved (changes are possible) MapSaved, // emitted right after a map has been saved MapMergeOperationStarted, // emitted after a merge operation has been started MapMergeOperationAborted, // emitted after a merge operation has been aborted MapMergeOperationFinished, // emitted after a merge operation has been finished }; typedef sigc::signal MapEventSignal; /// Returns the signal that is emitted on various events virtual MapEventSignal signal_mapEvent() const = 0; enum class EditMode { Normal, Merge, }; // The currently active edit mode virtual EditMode getEditMode() = 0; // Change the edit mode to the specified value virtual void setEditMode(EditMode mode) = 0; // Signal fired when the map edit mode has been changed virtual sigc::signal& signal_editModeChanged() = 0; /** * Returns the worldspawn node of this map. The worldspawn * node is NOT created if it doesn't exist yet, so this * might return an empty pointer. */ virtual const scene::INodePtr& getWorldspawn() = 0; /** * This retrieves the worldspawn node of this map. * If no worldspawn can be found, this creates one. * Use this instead of getWorldSpawn() if your code needs * a worldspawn to work with. */ virtual const scene::INodePtr& findOrInsertWorldspawn() = 0; /** * Returns the root node of this map or NULL if this is an empty map. */ virtual scene::IMapRootNodePtr getRoot() = 0; /** * Returns the name of the map. */ virtual std::string getMapName() const = 0; // Returns true if this map is still unnamed (never saved yet) virtual bool isUnnamed() const = 0; /** * Signal fired when the name of this map is changing. */ virtual sigc::signal& signal_mapNameChanged() = 0; // Returns true if the map has unsaved changes. virtual bool isModified() const = 0; // Sets the modified status of this map virtual void setModified(bool modifiedFlag) = 0; /** * Signal fired when the modified status of this map has changed. */ virtual sigc::signal& signal_modifiedChanged() = 0; // Signal emitted when an operation affecting the map has been undone virtual sigc::signal& signal_postUndo() = 0; // Signal emitted when an operation affecting the map has been redone virtual sigc::signal& signal_postRedo() = 0; // Accessor to the undo system of the main scene. // Throws std::runtime_error if no map resource has been loaded. virtual IUndoSystem& getUndoSystem() = 0; // Caution: this is upposed to be called on startup, since it doesn't ask the user // whether to save the current map. Use the "NewMap" command for regular purposes. virtual void createNewMap() = 0; // Create a MapExporter instance which can be used to export a scene, // including the necessary preparation, info-file handling, etc. // This is mainly a service method for external code, like the gameconnection. virtual map::IMapExporter::Ptr createMapExporter(map::IMapWriter& writer, const scene::IMapRootNodePtr& root, std::ostream& mapStream) = 0; // Exports the current selection to the given output stream, using the map's format virtual void exportSelected(std::ostream& out) = 0; // Exports the current selection to the given output stream, using the given map format virtual void exportSelected(std::ostream& out, const map::MapFormatPtr& format) = 0; // Starts a merge operation which imports differences from the given sourceMap into this one // Will throw exceptions when the given map cannot be found, or this map doesn't have a root virtual void startMergeOperation(const std::string& sourceMap) = 0; // Starts a merge operation which imports the changes made to the source map into this one // baseMap defines the path to a map that both the source map and this map started from, // which makes the merge process more precise and enables conflict detection. // Will throw exceptions when the given map cannot be found, or this map doesn't have a root virtual void startMergeOperation(const std::string& sourceMap, const std::string& baseMap) = 0; // When called in EditMode::Merge, this will apply the currently active set of actions virtual void finishMergeOperation() = 0; // Can be called when in EditMode::Merge, will abort the current merge process virtual void abortMergeOperation() = 0; // Returns the currently active merge operation (or an empty reference if no merge is ongoing) virtual scene::merge::IMergeOperation::Ptr getActiveMergeOperation() = 0; /* POINTFILE MANAGEMENT */ /// Functor to receive pointfile paths using PointfileFunctor = std::function; /// Enumerate pointfiles associated with the current map virtual void forEachPointfile(PointfileFunctor func) const = 0; /** * \brief Show the point trace contained in the specified file. * * \param filePath * Filesystem path of the file to parse for point coordinates, or an empty * path to hide any current point trace. * * \exception std::runtime_error * Thrown if filePath is not empty but the file is inaccessible. */ virtual void showPointFile(const fs::path& filePath) = 0; /// Return true if a point trace is currently visible virtual bool isPointTraceVisible() const = 0; }; typedef std::shared_ptr IMapPtr; const char* const MODULE_MAP("Map"); // Application-wide Accessor to the currently active map inline IMap& GlobalMapModule() { static module::InstanceReference _reference(MODULE_MAP); return _reference; } DarkRadiant-2.14.0/include/imapexporter.h000066400000000000000000000015401413722237400203020ustar00rootroot00000000000000#pragma once #include #include "inode.h" #include "imapformat.h" namespace map { /** * Exporter class used to serialise a map to an output stream. * Use the given exportMap() method to write a scene to the * attached stream. For scene traversal the given functor * is used to allow for custom filtering of the scene nodes. * * Use GlobalMapModule().createMapExporter() to acquire an * instance of IMapExporter. * * Note: This is a scoped object by design, which will prepare * the scene during construction and clean it up on destruction. */ class IMapExporter { public: using Ptr = std::shared_ptr; virtual ~IMapExporter() {} // Export the scene below the given root node using the given traversal function virtual void exportMap(const scene::INodePtr& root, const GraphTraversalFunc& traverse) = 0; }; } DarkRadiant-2.14.0/include/imapfilechangetracker.h000066400000000000000000000022041413722237400220710ustar00rootroot00000000000000#pragma once #include "inode.h" #include /** * The file change tracker monitors the changes made to a single map with the help * of the root node's undo system. It fires the given callback function whenever * the change count is increased or decreased (this is happening on change, undo and redo). * It also provides methods for the client code to check whether the current point * in the map's undo history corresponds to a saved state or not - this allows to keep * the map's modified flag up to date. */ class IMapFileChangeTracker { public: virtual ~IMapFileChangeTracker() {} // The change count we're currently at. This represents a position in the map's undo history. virtual std::size_t getCurrentChangeCount() const = 0; // Marks the current change count as the one that got saved virtual void setSavedChangeCount() = 0; // Returns true if the current undo history position corresponds to the most recently saved state virtual bool isAtSavedPosition() const = 0; // Emitted as soon as the current change count is modified virtual sigc::signal& signal_changed() = 0; }; DarkRadiant-2.14.0/include/imapformat.h000066400000000000000000000217361413722237400177330ustar00rootroot00000000000000#pragma once #include "imodule.h" namespace scene { class NodeVisitor; class INode; typedef std::shared_ptr INodePtr; class IMapRootNode; typedef std::shared_ptr IMapRootNodePtr; } namespace parser { class DefTokeniser; } class IPatchNode; typedef std::shared_ptr IPatchNodePtr; class IBrushNode; typedef std::shared_ptr IBrushNodePtr; class IEntityNode; typedef std::shared_ptr IEntityNodePtr; /** Callback function to control how the Walker traverses the scene graph. This function * will be provided to the map export module by the Radiant map code. */ typedef std::function GraphTraversalFunc; namespace map { /** * A Primitive parser is able to create a primitive (brush, patch) from a given token stream. * The initial token, e.g. "brushDef3" is already parsed when the stream is passed to the * parse method. * * Such a class should not change its "state" during the parse() calls - the map parser * is calling the same instance of this PrimitiveParser over and over, one call for each * primitive, so when returning from the parse() method the class should be ready * to process the next primitive. */ class PrimitiveParser { public: virtual ~PrimitiveParser() {} /** * Returns the primitive keyword of this parser, e.g. "brushDef3". When the Map parser * encounters this keyword, the stream is passed along to the parse() method to create * a scene node from it. */ virtual const std::string& getKeyword() const = 0; /** * Creates and returns a primitive node according to the encountered token. */ virtual scene::INodePtr parse(parser::DefTokeniser& tok) const = 0; }; typedef std::shared_ptr PrimitiveParserPtr; /** * An abstract map writer class used to write any map elements * as string to the given output stream. * * The IMapWriter interface defines beginWrite/endWrite pairs for * each scene element (Entity, primitives and the Map itself). * These are called by the map saving algorithm when traversing * the scene depth-first. The usual call order will look like this: * * beginWriteMap * beginWriteEntity * beginWriteBrush * endWriteBrush * beginWritePatch * endWritePatch * .... * endWriteEntity * ... * endWriteMap * * Failure Handling: when the IMapWriter implementation encounters * errors during write (e.g. a visited node is not exportable) a * IMapWriter::FailureException will be thrown. The calling code * is designed to catch this exception. */ class IMapWriter { public: // The generic exception type which is thrown by the IMapWriter methods class FailureException : public std::runtime_error { public: FailureException(const std::string& what) : std::runtime_error(what) {} }; // Destructor virtual ~IMapWriter() {} /** * This is called before writing any nodes, to give an opportunity * to write a map header and version info. */ virtual void beginWriteMap(const scene::IMapRootNodePtr& root, std::ostream& stream) = 0; /** * Called after all nodes have been visited. Note that this method * should NOT attempt to close the given stream. */ virtual void endWriteMap(const scene::IMapRootNodePtr& root, std::ostream& stream) = 0; // Entity export methods virtual void beginWriteEntity(const IEntityNodePtr& entity, std::ostream& stream) = 0; virtual void endWriteEntity(const IEntityNodePtr& entity, std::ostream& stream) = 0; // Brush export methods virtual void beginWriteBrush(const IBrushNodePtr& brush, std::ostream& stream) = 0; virtual void endWriteBrush(const IBrushNodePtr& brush, std::ostream& stream) = 0; // Patch export methods virtual void beginWritePatch(const IPatchNodePtr& patch, std::ostream& stream) = 0; virtual void endWritePatch(const IPatchNodePtr& patch, std::ostream& stream) = 0; }; typedef std::shared_ptr IMapWriterPtr; /** * An abstract map reader class used to parse map elements * from the given input (string) stream. The map reader instance * is usually associated with an MapImportFilter class where the * parsed elements are sent to. */ class IMapReader { public: // The generic exception type which is thrown by a map reader class FailureException : public std::runtime_error { public: FailureException(const std::string& what) : std::runtime_error(what) {} }; /** * Read the contents of the given stream and send them through the given MapImportFilter. * Whether the nodes are actually added to the map or not is something the * ImportFilter can decide. * * throws: FailureException on any error. */ virtual void readFromStream(std::istream& stream) = 0; }; class IMapImportFilter { public: /** * Returns a reference to the root node. */ virtual const scene::IMapRootNodePtr& getRootNode() const = 0; /** * Send an entity node to the import filter. In idTech4 maps all entities * are immediate children of the root node in the scene, so this is where * they usually end up after being added (unless they're filtered out). * * @returns: true if the entity got added, false otherwise. */ virtual bool addEntity(const scene::INodePtr& entity) = 0; /** * Add an primitive node to the given entity. * * @returns: true if the primitive got added, false otherwise. */ virtual bool addPrimitiveToEntity(const scene::INodePtr& primitive, const scene::INodePtr& entity) = 0; }; typedef std::shared_ptr IMapReaderPtr; /** * Map Format interface. Each map format is able to traverse the scene graph and write * the contents into a mapfile, or to load a mapfile and populate a scene graph. */ class MapFormat : public RegisterableModule { public: virtual ~MapFormat() {} /** * Get the display name of this map format, e.g. "Doom 3", "Quake 4", etc. */ virtual const std::string& getMapFormatName() const = 0; /** * Each MapFormat can have a certain game type it is designed for, * a value which conincides with the type attribute in the game tag * found in the .game file, e.g. "doom3" or "quake4". */ virtual const std::string& getGameType() const = 0; /** * Instantiate a new map reader, using the given ImportFilter * which will be fed with nodes during the import. */ virtual IMapReaderPtr getMapReader(IMapImportFilter& filter) const = 0; /** * Acquire a map writer instance, for exporting nodes to a stream. */ virtual IMapWriterPtr getMapWriter() const = 0; /** * Returns true if this map format allows the .darkradiant file * to be saved along the actual .map file. Some exporter modules * might want to disable that (i.e. the prefab exporter) */ virtual bool allowInfoFileCreation() const = 0; /** * greebo: Returns true if this map format is able to load * the contents of this file. Usually this includes a version * check of the file header. */ virtual bool canLoad(std::istream& stream) const = 0; }; typedef std::shared_ptr MapFormatPtr; /** * greebo: This is the global map format manager. Use this class to * register any parsers. */ class IMapFormatManager : public RegisterableModule { public: /** * Each MapFormat module should register itself here on startup. */ virtual void registerMapFormat(const std::string& extension, const MapFormatPtr& mapFormat) = 0; /** * Proper MapFormat modules should unregister themselves at shutdown. This includes * removal from all mapped extensions if the format was registered multiple times. */ virtual void unregisterMapFormat(const MapFormatPtr& mapFormat) = 0; /** * Tries to look up the default map format for the given map format name. */ virtual MapFormatPtr getMapFormatByName(const std::string& mapFormatName) = 0; /** * Tries to look up the default map format for the given game type (e.g. "doom3") * associated with the given file extension. */ virtual MapFormatPtr getMapFormatForGameType(const std::string& gameType, const std::string& extension) = 0; /** * Returns the list of all registered map formats. */ virtual std::set getAllMapFormats() = 0; /** * Returns the list of registered map formats matching the given extension. */ virtual std::set getMapFormatList(const std::string& extension) = 0; /** * A matching map format is returned, based on the given filename's extension * and the currently active game type. * An empty pointer is returned if no format can be found. */ virtual MapFormatPtr getMapFormatForFilename(const std::string& filename) = 0; }; typedef std::shared_ptr IMapFormatManagerPtr; // Portable Map Format Name is used across module boundaries const char* const PORTABLE_MAP_FORMAT_NAME("Portable"); } // namespace map const char* const MODULE_MAPFORMATMANAGER("MapFormatManager"); // Application-wide Accessor to the global map format manager inline map::IMapFormatManager& GlobalMapFormatManager() { static module::InstanceReference _reference(MODULE_MAPFORMATMANAGER); return _reference; } DarkRadiant-2.14.0/include/imapinfofile.h000066400000000000000000000122571413722237400202340ustar00rootroot00000000000000#pragma once #include #include #include "imodule.h" #include "imap.h" #include namespace parser { class DefTokeniser; } namespace scene { class INode; typedef std::shared_ptr INodePtr; } namespace map { typedef std::pair NodeIndexPair; typedef std::map NodeIndexMap; /** * An info file module is allowed to write text-based information * to the auxiliary .darkradiant file that is written alongside to the * game-compatible .map file. Things like layer or selection set/group * information can be stored persistently between mapping sessions this way. * * The module should write its information in named blocks, like * * MyModuleInfo * { * // arbitrary parseable info here * } * * Later, when the info file is parsed after map load, the module will be asked * to parse the blocks it's responsible for, and apply its information to the map. */ class IMapInfoFileModule { public: virtual ~IMapInfoFileModule() {} // Info File Saving / Exporting // The name of this info file module, mainly for internal book-keeping virtual std::string getName() = 0; /** * Called before any node is written to the .map file. Use this * to prepare the internal structures for exporting. */ virtual void onInfoFileSaveStart() = 0; /** * Called before starting the actual node traversal, * the info file exporter gets a chance to look at the map root. */ virtual void onBeginSaveMap(const scene::IMapRootNodePtr& root) = 0; /** * Called during map export traversal when a single * primitive is about to be written to the .map file. * Assemble information about the primitive and save it * internally, until the writeBlocks() method is called. */ virtual void onSavePrimitive(const scene::INodePtr& node, std::size_t entityNum, std::size_t primitiveNum) = 0; /** * Called during map export traversal when a single * entity is about to be written to the .map file. * Assemble information about the entity and save it * internally, until the writeBlocks() method is called. */ virtual void onSaveEntity(const scene::INodePtr& node, std::size_t entityNum) = 0; /** * Called after node traversal. */ virtual void onFinishSaveMap(const scene::IMapRootNodePtr& root) = 0; /** * Final export function, write the assembled data to the * info file stream. This method should include the block file name * and the opening and closing braces in its write operation. */ virtual void writeBlocks(std::ostream& stream) = 0; /** * Called before the info file stream is closed, time for cleanup. */ virtual void onInfoFileSaveFinished() = 0; // Info File Loading / Parsing /** * Called before the info file is loaded, so take tihs opportunity to * clear internal structures that are going to be filled during the parse process. */ virtual void onInfoFileLoadStart() = 0; /** * The info file parser will ask this module when a named block is encountered. * A module which returns true on a block will sign up for parsing the block * and a subsequent call to parseBlock() is imminent. */ virtual bool canParseBlock(const std::string& blockName) = 0; /** * Parse a block as found in the info file. The block name as passed to this method * needs to be registered in the IMapInfoFileManager class before. * * Regarding the state of the tokeniser: the block name will already have been parsed * by the time this method is called, so expect the opening brace { as first token. */ virtual void parseBlock(const std::string& blockName, parser::DefTokeniser& tok) = 0; /** * Invoked by the map parsing code when the info file has been fully loaded, * so modules should now apply the loaded information to the map. * The info file is always loaded after the actual .map file, so this method * can assume that the scene graph is already in place. * For convenience, a NodeMap is passed to this method, mapping * the entity/primitive number combination to scene::INodes. */ virtual void applyInfoToScene(const scene::IMapRootNodePtr& root, const NodeIndexMap& nodeMap) = 0; /** * Post-parsing cleanup routine, called after applyInfoToScene(). */ virtual void onInfoFileLoadFinished() = 0; }; typedef std::shared_ptr IMapInfoFileModulePtr; class IMapInfoFileManager : public RegisterableModule { public: virtual ~IMapInfoFileManager() {} /** * Add an info file module to the global list. The module will be considered * during info file export/import. */ virtual void registerInfoFileModule(const IMapInfoFileModulePtr& module) = 0; /** * Unregister a previouly registered info file module. */ virtual void unregisterInfoFileModule(const IMapInfoFileModulePtr& module) = 0; /** * Call the functor for each registered module. */ virtual void foreachModule(const std::function& functor) = 0; }; } const char* const MODULE_MAPINFOFILEMANAGER("MapInfoFileManager"); // Application-wide Accessor to the global map info file manager inline map::IMapInfoFileManager& GlobalMapInfoFileManager() { static module::InstanceReference _reference(MODULE_MAPINFOFILEMANAGER); return _reference; } DarkRadiant-2.14.0/include/imapmerge.h000066400000000000000000000141551413722237400175370ustar00rootroot00000000000000#pragma once #include #include #include #include "inode.h" namespace scene { namespace merge { enum class ActionType { NoAction, AddEntity, RemoveEntity, AddKeyValue, RemoveKeyValue, ChangeKeyValue, AddChildNode, RemoveChildNode, ConflictResolution, }; enum class ConflictType { // Not a conflict NoConflict, // Entity has been removed in target, source tries to modify it ModificationOfRemovedEntity, // Entity has been modified in target, source tries to remove it RemovalOfModifiedEntity, // Key Value has been removed in targed, source tries to change it ModificationOfRemovedKeyValue, // Key Value has been modified in targed, source tries to remove it RemovalOfModifiedKeyValue, // Both sides try to set the same key to a different value SettingKeyToDifferentValue, }; enum class ResolutionType { Unresolved, RejectSourceChange, ApplySourceChange, }; /** * Represents a merge action, i.e. one single step of a merge operation. * Only active actions will be processed when the merge run starts. */ class IMergeAction { public: virtual ~IMergeAction() {} using Ptr = std::shared_ptr; // The type performed by this action virtual ActionType getType() const = 0; // Activate this action, it will be executed during the merge virtual void activate() = 0; // Deactivate this action, it will NOT be executed during the merge virtual void deactivate() = 0; // Returns the active state of this action virtual bool isActive() const = 0; // Applies all changes defined by this action (if it is active, // deactivated action will not take any effect). // It's the caller's responsibility to set up any Undo operations. // Implementations are allowed to throw std::runtime_errors on failure. virtual void applyChanges() = 0; // Returns the node this action is affecting when applied // This is used to identify the scene node and display it appropriately virtual scene::INodePtr getAffectedNode() = 0; }; class IEntityKeyValueMergeAction : public virtual IMergeAction { public: virtual ~IEntityKeyValueMergeAction() {} using Ptr = std::shared_ptr; // Gets the key name affected by this action virtual const std::string& getKey() const = 0; // Gets the value that is going to be set by this action virtual const std::string& getValue() const = 0; // The action is usually applying its value as soon as it is inserted into // the scene for preview. It remembers the original entity key value, // use tis method to retrieve it. virtual const std::string& getUnchangedValue() const = 0; }; class IConflictResolutionAction : public virtual IMergeAction { public: virtual ~IConflictResolutionAction() {} using Ptr = std::shared_ptr; // The exact conflict type of this node virtual ConflictType getConflictType() const = 0; // Gets the value that is going to be set by this action virtual const IMergeAction::Ptr& getSourceAction() const = 0; // The action that happened in the target (can be empty) virtual const IMergeAction::Ptr& getTargetAction() const = 0; // The source entity node causing the conflict virtual const INodePtr& getConflictingSourceEntity() const = 0; // The affected entity node in the target map virtual const INodePtr& getConflictingTargetEntity() const = 0; // Whether this action has been resolved at all, and what has been chosen virtual ResolutionType getResolution() const = 0; // Resolve this action by either accepting or rejecting the source change virtual void setResolution(ResolutionType resolution) = 0; }; // A MergeOperation groups one or more merge actions // together in order to apply a set of changes from source => target class IMergeOperation { public: using Ptr = std::shared_ptr; virtual ~IMergeOperation() {} // Returns the name/path of the source scene (or a string resembling it) virtual std::string getSourcePath() = 0; // Returns the name/path of the base scene (or a string resembling it) // Will return an empty string if there is no base scene defined virtual std::string getBasePath() = 0; // Executes all active actions defined in this operation virtual void applyActions() = 0; // Whether this operation has any actions to perform virtual bool hasActions() = 0; // Adds a new action to this operation virtual void addAction(const IMergeAction::Ptr& action) = 0; // Invokes the given functor for each action in this operation virtual void foreachAction(const std::function& visitor) = 0; // Enables or disable merging of selection groups virtual void setMergeSelectionGroups(bool enabled) = 0; // Enables or disable merging of layers virtual void setMergeLayers(bool enabled) = 0; // Signal which is emitted when an action is added to this operation virtual sigc::signal& sig_ActionAdded() = 0; }; } /** * Special scene node type representing a change conducted by a merge action, * i.e. addition, removal or changing a node in the scene. */ class IMergeActionNode : public virtual scene::INode { public: virtual ~IMergeActionNode() {} // Return the action type represented by this node virtual merge::ActionType getActionType() const = 0; // Return the node this action is affecting virtual scene::INodePtr getAffectedNode() = 0; // The number of merge actions associated to this node. // This can be 0 if the node has been cleared out after completing a merge operation virtual std::size_t getMergeActionCount() = 0; // Returns true if this node has one or more active actions. // If all associated actions have been deactivated, this returns false. virtual bool hasActiveActions() = 0; // Iterate over all actions of this node virtual void foreachMergeAction(const std::function& functor) = 0; }; } DarkRadiant-2.14.0/include/imapresource.h000066400000000000000000000100721413722237400202610ustar00rootroot00000000000000#pragma once #include "inode.h" #include "imodule.h" #include "itextstream.h" #include "imap.h" #include namespace map { class MapFormat; typedef std::shared_ptr MapFormatPtr; } class IMapResource { public: virtual ~IMapResource() {} // Renames this map resource to the new path virtual void rename(const std::string& fullPath) = 0; /** * Attempts to load the resource from disk. Returns true * on success, in which case the getRootNode() method can be * used to acquire a reference to the parsed map. * Will throw an OperationException on failure. */ virtual bool load() = 0; // Exception type thrown by the the MapResource implementation class OperationException : public std::runtime_error { private: bool _cancelled; public: OperationException(const std::string& msg) : OperationException(msg, false) {} OperationException(const std::string& msg, bool cancelled) : runtime_error(msg), _cancelled(cancelled) { if (!_cancelled) { rError() << "MapResource operation failed: " << msg << std::endl; } } // Returns true if the operation has been cancelled by the user bool operationCancelled() const { return _cancelled; } }; /** * Returns true if this resource refers to a read-only location. * This returns true for archived resources (loaded from PAK files), * but might be returning true for other resource types too (e.g. when * this process is lacking write access to the resource). */ virtual bool isReadOnly() = 0; /** * Save this resource * * It's possible to pass a mapformat to be used for saving. If the map * format argument is omitted, the format corresponding to the current * game type is used. * * Throws an OperationException if anything prevented the save from * completion (user cancellation, I/O errors) */ virtual void save(const map::MapFormatPtr& mapFormat = map::MapFormatPtr()) = 0; virtual const scene::IMapRootNodePtr& getRootNode() = 0; // Sets the root node of this resource. The use case is to create a resource // around an existing map root for e.g. saving a read-only resource to a new path virtual void setRootNode(const scene::IMapRootNodePtr& root) = 0; virtual void clear() = 0; // Check if the target file on disk has been modified since it was last saved virtual bool fileOnDiskHasBeenModifiedSinceLastSave() = 0; // A signal that is emitted as soon as the map modified status changes due // to a regular edit, undo or redo. The bool value corresponds to the new modification state. virtual sigc::signal& signal_modifiedStatusChanged() = 0; }; typedef std::shared_ptr IMapResourcePtr; const char* const MODULE_MAPRESOURCEMANAGER("MapResourceManager"); class IMapResourceManager : public RegisterableModule { public: /** * Create a named map resource from VFS or from a physical path. */ virtual IMapResourcePtr createFromPath(const std::string& path) = 0; /** * Create a named map resource that is contained within a PAK archive * outside the VFS. * archivePath is the absolute path to the archive file, e.g. "/home/greebo/outpost.pk4" * filePathWithinArchive is the relative path within the archive, e.g. "maps/outpost.map" */ virtual IMapResourcePtr createFromArchiveFile(const std::string& archivePath, const std::string& filePathWithinArchive) = 0; // Signal emitted when a MapExport is starting / is finished typedef sigc::signal ExportEvent; // Event sent out right before a scene is sent to the exporter virtual ExportEvent& signal_onResourceExporting() = 0; // Event sent out right after a scene is sent to the exporter virtual ExportEvent& signal_onResourceExported() = 0; }; inline IMapResourceManager& GlobalMapResourceManager() { static module::InstanceReference _reference(MODULE_MAPRESOURCEMANAGER); return _reference; } DarkRadiant-2.14.0/include/imd5anim.h000066400000000000000000000044261413722237400172740ustar00rootroot00000000000000#pragma once #include "imodule.h" #include #include "math/Vector3.h" #include "math/Quaternion.h" namespace md5 { struct Joint { // The ID of this joint int id; // the name of this bone std::string name; // ID of parent bone (-1 == no parent) int parentId; // The 6 possible components that might be modified by a key enum AnimComponent { X = 1 << 0, Y = 1 << 1, Z = 1 << 2, YAW = 1 << 3, PITCH = 1 << 4, ROLL = 1 << 5, INVALID_COMPONENT = 1 << 6 }; // A bit mask explaining which components we're animating std::size_t animComponents; std::size_t firstKey; // The child joint IDs std::vector children; }; /** * Base class for an MD5 animation as used in Doom 3. */ class IMD5Anim { public: // Information used by the base frame struct Key { Vector3 origin; Quaternion orientation; }; // Each frame has a series of float values, applied to one or more animated components (x, y, z, yaw, pitch, roll) typedef std::vector FrameKeys; /** * Get the number of joints in this animation. */ virtual std::size_t getNumJoints() const = 0; /** * Retrieve a certain joint by index, bounds are [0..getNumJoints()) */ virtual const Joint& getJoint(std::size_t index) const = 0; /** * Returns the baseframe info for the given joint number. */ virtual const Key& getBaseFrameKey(std::size_t jointNum) const = 0; /** * Returns the frame rate this anim should be played. */ virtual int getFrameRate() const = 0; /** * Returns the number of frames in this animation. */ virtual std::size_t getNumFrames() const = 0; /** * Returns the float values of the given frame index. */ virtual const FrameKeys& getFrameKeys(std::size_t index) const = 0; }; typedef std::shared_ptr IMD5AnimPtr; class IAnimationCache : public RegisterableModule { public: /** * Returns the MD5 animation for the given VFS path, or NULL if * the file does not exist or the anim was found to be invalid. */ virtual IMD5AnimPtr getAnim(const std::string& vfsPath) = 0; }; const char* const MODULE_ANIMATIONCACHE("MD5AnimationCache"); } // namespace inline md5::IAnimationCache& GlobalAnimationCache() { static module::InstanceReference _reference(md5::MODULE_ANIMATIONCACHE); return _reference; } DarkRadiant-2.14.0/include/imd5model.h000066400000000000000000000012151413722237400174410ustar00rootroot00000000000000#pragma once #include #include "imd5anim.h" namespace md5 { /** * Interface for a MD5 model object. This can be used * to control the animation applied to the MD5. */ class IMD5Model { public: /** * Set the animation to play on this model. * Pass a NULL animation to clear any anim. */ virtual void setAnim(const IMD5AnimPtr& anim) = 0; /** * Returns the currently applied animation. */ virtual const IMD5AnimPtr& getAnim() const = 0; /** * Update the mesh using the given animation playback time. */ virtual void updateAnim(std::size_t time) = 0; }; typedef std::shared_ptr IMD5ModelPtr; } // namespace DarkRadiant-2.14.0/include/imessagebus.h000066400000000000000000000063741413722237400201040ustar00rootroot00000000000000#pragma once #include #include namespace radiant { class IMessage { private: bool _handled; protected: IMessage() : _handled(false) {} public: virtual ~IMessage() {} // Returns a unique ID of this message, see IMessage::Type enum // for well-known types virtual std::size_t getId() const = 0; // Returns true if this message has been handled bool isHandled() const { return _handled; } void setHandled(bool handled) { _handled = handled; } public: // Pre-defined message type IDs. // Plugin code can define their own IDs in the range of 1000+ enum Type : std::size_t { ApplicationShutdownRequest, AutomaticMapSaveRequest, CommandExecutionFailed, GameConfigNeeded, LongRunningOperation, MapFileOperation, MapOperationFinished, FileSelectionRequest, Notification, TextureChanged, ApplicationIsActiveQuery, FileOverwriteConfirmation, FileSaveConfirmation, UnselectSelectionRequest, ManipulatorModeToggleRequest, ComponentSelectionModeToggleRequest, GridSnapRequest, UserDefinedMessagesGoHigherThanThis = 999, }; }; /** * General-purpose handler used to send and process message to registered listeners. * Client code can send arbitrary message objects as long as they are deriving from * IMessage. * Listeners need to subscribe to each message type they're interested in. * To receive the message, client code needs to add a listener, which can either * listen for a specific type of messages or all of them. */ class IMessageBus { public: virtual ~IMessageBus() {} typedef std::function Listener; /** * Registers a listener that is only called when the give message type * is sent across the wire. Use the returned ID to unsubscribe the listener. */ virtual std::size_t addListener(std::size_t messageType, const Listener& listener) = 0; /** * Unsubscribe the given listener. */ virtual void removeListener(std::size_t listenerId) = 0; /** * Send the given message to the given channel. The channel ID refers to * a given message type and must have been acquired using getChannelId() beforehand. */ virtual void sendMessage(IMessage& message) = 0; }; /** * Small adaptor to allow for less client setup code * when only listening for a certain IMessage subtype */ template class TypeListener : private std::function { public: TypeListener(void (*specialisedFunc)(T&)) : std::function(specialisedFunc) { static_assert(std::is_base_of::value, "Listener must accept IMessage types"); } TypeListener(const std::function& specialisedFunc) : std::function(specialisedFunc) { static_assert(std::is_base_of::value, "Listener must accept IMessage types"); } // Fulfills the Listener function signature void operator()(IMessage& message) { // Perform a type cast and dispatch to our base class' call operator std::function::operator()(static_cast(message)); } }; } DarkRadiant-2.14.0/include/imodel.h000066400000000000000000000175641413722237400170510ustar00rootroot00000000000000#pragma once #include "Bounded.h" #include "irender.h" #include "inode.h" #include "imodule.h" #include "imodelsurface.h" #include #include "math/Vector3.h" /* Forward decls */ class AABB; class ModelSkin; class Matrix4; namespace model { typedef std::vector StringList; /** * \brief * Interface for static models. * * This interface provides functions for obtaining information about a LWO or * ASE model, such as its bounding box or poly count. The interface also * inherits from OpenGLRenderable to allow model instances to be used for * rendering. */ class IModel : public OpenGLRenderable, public Bounded { public: /** * greebo: The filename (without path) of this model. */ virtual std::string getFilename() const = 0; /** * greebo: Returns the VFS path which can be used to load * this model from the modelcache. */ virtual std::string getModelPath() const = 0; /** Apply the given skin to this model. * * @param skin * The ModelSkin instance to apply to this model. */ virtual void applySkin(const ModelSkin& skin) = 0; /** Return the number of material surfaces on this model. Each material * surface consists of a set of polygons sharing the same material. */ virtual int getSurfaceCount() const = 0; /** Return the number of vertices in this model, equal to the sum of the * vertex count from each surface. */ virtual int getVertexCount() const = 0; /** Return the number of triangles in this model, equal to the sum of the * triangle count from each surface. */ virtual int getPolyCount() const = 0; /** * \brief * Return a vector of strings listing the active materials used in this * model, after any skin remaps. * * The list is owned by the model instance. */ virtual const StringList& getActiveMaterials() const = 0; /** * \brief * Return the surface with the given index * * Retrieves the interface of a specific surface, to get access to the * surface's polygons and vertices. * * \param surfaceNum * The surface index, must be in [0..getSurfaceCount()) */ virtual const IModelSurface& getSurface(unsigned surfaceNum) const = 0; }; // Smart pointer typedefs typedef std::shared_ptr IModelPtr; typedef std::weak_ptr IModelWeakPtr; /** * greebo: Each node in the scene that represents "just" a model, * derives from this class. Use a cast on this class to * identify model nodes in the scene. */ class ModelNode { public: virtual ~ModelNode() {} // Returns the contained IModel virtual const IModel& getIModel() const = 0; // Returns the contained IModel virtual IModel& getIModel() = 0; // Returns true if this model's scale has been modified // and needs to be written to file virtual bool hasModifiedScale() = 0; // Returns the current scale of this model virtual Vector3 getModelScale() = 0; }; typedef std::shared_ptr ModelNodePtr; class IModelExporter; typedef std::shared_ptr IModelExporterPtr; /** * Exporter Interface for models (meshes). */ class IModelExporter { public: virtual ~IModelExporter() {} // Virtual constructor idiom. Use this method to generate a new // instance of the implementing subclass. This way the model format manager // can create a fresh instance of this exporter on demand. virtual IModelExporterPtr clone() = 0; // The display name for referencing this exporter in the GUI virtual const std::string& getDisplayName() const = 0; // Returns the uppercase file extension this exporter is suitable for virtual const std::string& getExtension() const = 0; // Adds the given Surface to the exporter's queue // The given transform is applied to the surface before the vertices are added to the queue. // Note: Scaling components of the matrix are not treated separately here. virtual void addSurface(const IModelSurface& surface, const Matrix4& localToWorld) = 0; // Adds the given set of polygons to the named surface // The given transform is applied to the surface before the vertices are added to the queue. // Note: Scaling components of the matrix are not treated separately here. // Note 2: Polygons are expected to have their vertices defined counter-clockwise virtual void addPolygons(const std::string& materialName, const std::vector& polys, const Matrix4& localToWorld) = 0; // Export to the given file in the given path (which must be absolute). // If writing to multiple files (like .obj+.mtl), the implementation // may deduct the alternative file paths from this one. // Note: the user will already have confirmed to overwrite any existing // file with that path, but hasn't explicitly confirmed overwriting // secondary or tertiary output files. // Throws std::runtime_error in case of failures. virtual void exportToPath(const std::string& outputPath, const std::string& filename) = 0; }; /** * Importer interface for models. An importer must be able * to load a model (node) from the VFS and from an absolute path. * The importer instance shouldn't maintain an internal state, * such that the same instance can be used to load several models, * from different client code. */ class IModelImporter { public: // Returns the uppercase file extension this exporter is suitable for virtual const std::string& getExtension() const = 0; /** * greebo: Returns a newly created model node for the given model name. * * @modelName: This is usually the value of the "model" spawnarg of entities. * * @returns: the newly created modelnode (can be NULL if the model was not found). */ virtual scene::INodePtr loadModel(const std::string& modelName) = 0; /** * Load a model from the given (maybe be VFS or absolute), and return the IModel subclass for it. * * @returns: the IModelPtr containing the renderable model or * an empty IModelPtr if the model loader could not load the file. */ virtual model::IModelPtr loadModelFromPath(const std::string& path) = 0; }; typedef std::shared_ptr IModelImporterPtr; class IModelFormatManager : public RegisterableModule { public: virtual ~IModelFormatManager() {} // Register/unregister an importer class virtual void registerImporter(const IModelImporterPtr& importer) = 0; virtual void unregisterImporter(const IModelImporterPtr& importer) = 0; // Find an importer for the given extension, returns the NullModelLoader if nothing found // Passing in an empty extension will return the NullModelLoader as well virtual IModelImporterPtr getImporter(const std::string& extension) = 0; // Register/unregister an exporter class virtual void registerExporter(const IModelExporterPtr& exporter) = 0; virtual void unregisterExporter(const IModelExporterPtr& exporter) = 0; // Find an exporter for the given extension, returns empty if nothing found virtual IModelExporterPtr getExporter(const std::string& extension) = 0; // Calls the functor with each registered model importer as argument virtual void foreachImporter(const std::function& functor) = 0; // Calls the functor with each registered model exporter as argument virtual void foreachExporter(const std::function& functor) = 0; }; } // namespace model // Utility methods inline bool Node_isModel(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node) != nullptr; } inline model::ModelNodePtr Node_getModel(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } // Contains the default format used for exporting scaled models const char* const RKEY_DEFAULT_MODEL_EXPORT_FORMAT = "user/ui/map/defaultScaledModelExportFormat"; const char* const MODULE_MODELFORMATMANAGER("ModelFormatManager"); inline model::IModelFormatManager& GlobalModelFormatManager() { static module::InstanceReference _reference(MODULE_MODELFORMATMANAGER); return _reference; } DarkRadiant-2.14.0/include/imodelcache.h000066400000000000000000000035301413722237400200210ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "imodel.h" #include "inode.h" #include namespace model { /** Modelcache interface. */ class IModelCache : public RegisterableModule { public: /** * greebo: This method returns the readily fabricated scene::Node * containing the suitable model node. The modelPath is analysed * and the correct ModelLoader is invoked to create the node. * * @returns: a valid scene::INodePtr, which is never NULL. If the model * could not be loaded, the fallback "NullModel" is returned. */ virtual scene::INodePtr getModelNode(const std::string& modelPath) = 0; /** * greebo: Get the IModel object for the given VFS path. The request is cached, * so calling this with the same path twice will return the same * IModelPtr to save memory. * * This method is primarily used by the ModelLoaders to acquire their model data. */ virtual IModelPtr getModel(const std::string& modelPath) = 0; // Loads a model from the static resources in DarkRadiant's runtime data/resources folder virtual scene::INodePtr getModelNodeForStaticResource(const std::string& resourcePath) = 0; // This reloads all models in the map virtual void refreshModels(bool blockScreenUpdates = true) = 0; // This reloads all selected models in the map virtual void refreshSelectedModels(bool blockScreenUpdates = true) = 0; // Clears a specific model from the cache virtual void removeModel(const std::string& modelPath) = 0; // Clears the modelcache virtual void clear() = 0; /// Signal emitted after models are reloaded virtual sigc::signal signal_modelsReloaded() = 0; }; } // namespace model const char* const MODULE_MODELCACHE("ModelCache"); inline model::IModelCache& GlobalModelCache() { static module::InstanceReference _reference(MODULE_MODELCACHE); return _reference; } DarkRadiant-2.14.0/include/imodelsurface.h000066400000000000000000000034531413722237400204120ustar00rootroot00000000000000#pragma once // Math/Vertex classes #include "render/ArbitraryMeshVertex.h" namespace model { // A Polygon (Triangle) which is part of a model surface struct ModelPolygon { ArbitraryMeshVertex a; ArbitraryMeshVertex b; ArbitraryMeshVertex c; }; // Abstract definition of a model surface class IModelSurface { public: // Returns the number of vertices of this surface virtual int getNumVertices() const = 0; // Returns the number of tris of this surface virtual int getNumTriangles() const = 0; // Get a specific vertex of this surface virtual const ArbitraryMeshVertex& getVertex(int vertexNum) const = 0; /** * greebo: Returns a specific polygon from this model surface. * Don't expect this to be fast as things are returned by value. * This is merely to provide read access to the model polygons * for scripts and plugins. */ virtual ModelPolygon getPolygon(int polygonNum) const = 0; /** * Get the name of the default material for this surface, i.e. * the name of the material without any skin applied. */ virtual const std::string& getDefaultMaterial() const = 0; /** * Return the name of the currently assigned material, * respecting the applied skin. */ virtual const std::string& getActiveMaterial() const = 0; }; /** * Model surface supporting direct access to its vertex and index arrays * which define the polygons. Model surfaces in DarkRadiant are loaded by * the PicoModel library which generates clockwise polygon windings. */ class IIndexedModelSurface : public IModelSurface { public: // Const access to the vertices used in this surface. virtual const std::vector& getVertexArray() const = 0; // Const access to the index array connecting the vertices. virtual const std::vector& getIndexArray() const = 0; }; } // namespace DarkRadiant-2.14.0/include/imodule.h000066400000000000000000000404271413722237400172300ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include #include #include "itextstream.h" #include "ilogwriter.h" /** * \defgroup module Module system */ /** * greebo: Compatibility level: a number inlined into all the modules and returned * by their RegisterableModule::getCompatibilityLevel() method. * * This number should be changed each time the set of module/plugin files (.so/.dll/.dylib) * is modified, especially when files are going to be removed from a DarkRadiant release. * The number will be checked by the ModuleRegistry against the internally stored one * to detect outdated binaries and reject their registration. * * As long as no external module/plugin files are removed this number is safe to stay * as it is. Keep this number compatible to std::size_t, i.e. unsigned. */ #define MODULE_COMPATIBILITY_LEVEL 20211014 // A function taking an error title and an error message string, invoked in debug builds // for things like ASSERT_MESSAGE and ERROR_MESSAGE typedef std::function ErrorHandlingFunction; // This method holds a function pointer which can do some error display (like popups) // Each module binary has its own copy of this, it's initialised in performDefaultInitialisation() inline ErrorHandlingFunction& GlobalErrorHandler() { static ErrorHandlingFunction _func; return _func; } /** * Provider for various information that may be required by modules during * initialisation. * * \ingroup module */ class IApplicationContext { public: /** * \brief * Argument list type. */ typedef std::vector ArgumentList; /** * Destructor */ virtual ~IApplicationContext() {} /// Return the path to the installed application virtual std::string getApplicationPath() const = 0; /** * Return the application library paths, each of these is searched * for any libraries containing modules and/or plugins. * * On Windows this is most likely the same as the application path. On * Linux it might be a hard-coded path like /usr/lib/darkradiant, or a * relocatable relative path like ../lib */ virtual std::vector getLibraryPaths() const = 0; /** * Return the toplevel path contaning runtime data files, such as the GL * programs or UI descriptor files. On Windows this is the same as the * application path, on Linux it is determined at compile-time but probably * something like /usr/share/darkradiant. */ virtual std::string getRuntimeDataPath() const = 0; /// Return the directory containing user settings (user.xml and friends) virtual std::string getSettingsPath() const = 0; /// Return the directory for temporary output files, such as logs virtual std::string getCacheDataPath() const = 0; /// Return the directory containing UI bitmaps virtual std::string getBitmapsPath() const = 0; /// Return the path to HTML documentation files virtual std::string getHTMLPath() const = 0; /** * \brief * Return the list of command line arguments. */ virtual const ArgumentList& getCmdLineArgs() const = 0; /** * Retrieve a function pointer which can handle assertions and runtime errors */ virtual const ErrorHandlingFunction& getErrorHandlingFunction() const = 0; }; /** * Set of strings for module dependencies. */ typedef std::set StringSet; /** * Interface class for modules. Each RegisterableModule can return its name and * its set of dependencies. * * Note that this interface does NOT concern itself with the type (interface) * of each individual module; it is up to the GlobalBlah() accessor function * associated with each module to perform the required downcast to the known * type. * * All RegisterableModules implement sigc::trackable, since they will often want * to connect themselves to another module's signal(s). * * \ingroup module */ class RegisterableModule: public sigc::trackable { private: const std::size_t _compatibilityLevel; public: RegisterableModule() : _compatibilityLevel(MODULE_COMPATIBILITY_LEVEL) {} // Modules are not copyable RegisterableModule(const RegisterableModule& other) = delete; RegisterableModule& operator=(const RegisterableModule& other) = delete; /** * Destructor */ virtual ~RegisterableModule() {} /** * Return the name of this module. This must be globally unique across all * modules; the modulesystem will throw a logic_error if two modules attempt * to register themselves with the same name. */ virtual const std::string& getName() const = 0; /** * Return the set of dependencies for this module. The return value is a * set of strings, each containing the unique name (as returned by * getName()) of a module which must be initialised before this one. */ virtual const StringSet& getDependencies() const = 0; /** * Instruct this module to initialise itself. A RegisterableModule must NOT * invoke any calls to other modules in its constructor, since at the point * of construction the other modules will not have been initialised. Once * all of the dependencies are processed by the ModuleRegistry, each module * will have its initialiseModule() method called at the appropriate point. * * The ModuleRegistry guarantees that any modules named in the set of * dependencies returned by getDependencies() will be initialised and ready * for use at the time this method is invoked. Attempting to access a module * which was NOT listed as a dependency is undefined. * * @param ctx * The ApplicationContext of the running Radiant application. */ virtual void initialiseModule(const IApplicationContext& ctx) = 0; /** * Optional shutdown routine. Allows the module to de-register itself, * shutdown windows, save stuff into the Registry and so on. * * All the modules are getting called one by one, all other modules * are available until the last shutdownModule() call was invoked. */ virtual void shutdownModule() { // Empty default implementation } // Internally queried by the ModuleRegistry. To protect against leftover // binaries containing outdated moudles from being loaded and registered // the compatibility level is compared with the one in the ModuleRegistry. // Old modules with mismatching numbers will be rejected. // Function is intentionally non-virtual and inlined. std::size_t getCompatibilityLevel() const { return _compatibilityLevel; } }; /** * Shared pointer typdef. */ typedef std::shared_ptr RegisterableModulePtr; /** * Interface for the module registry. This is the owner and manager of all * RegisterableModules defined in DLLs and the main binary. * * For obvious reasons, the ModuleRegistry itself is not a module, but a static * object owned by the core binary and returned through a globally-accessible * method. * * \ingroup module */ class IModuleRegistry { public: virtual ~IModuleRegistry() {} /** * Register a RegisterableModule. The name and dependencies are retrieved * through the appropriate RegisterableModule interface methods. * * This method does not cause the RegisterableModule to be initialised. */ virtual void registerModule(const RegisterableModulePtr& module) = 0; /** * Initialise all of the modules previously registered with * registerModule() in the order required by their dependencies. This method * is invoked once, at application startup, with any subsequent attempts * to invoke this method throwing a logic_error. */ virtual void loadAndInitialiseModules() = 0; /** * All the RegisterableModule::shutdownModule() routines are getting * called one by one. No modules are actually destroyed during the * iteration is ongoing, so each module is guaranteed to exist. * * After the last shutdownModule() call has been invoked, the modules * can be safely unloaded/destroyed. */ virtual void shutdownModules() = 0; /** * Retrieve the module associated with the provided unique name. If the * named module is not found, an empty RegisterableModulePtr is returned * (this allows modules to be optional). * * Note that the return value of this function is RegisterableModulePtr, * which in itself is useless to application code. It is up to the accessor * functions defined in each module interface (e.g. GlobalEntityCreator()) * to downcast the pointer to the appropriate type. */ virtual RegisterableModulePtr getModule(const std::string& name) const = 0; /** * Returns TRUE if the named module exists in the records. */ virtual bool moduleExists(const std::string& name) const = 0; /** * This retrieves a reference to the information structure ApplicationContext, * which holds the AppPath, SettingsPath and references to the application * streams. The latter can be used by modules to initialise their * rMessage/globalErrorStreams(). */ virtual const IApplicationContext& getApplicationContext() const = 0; /** * Callable during the module registration phase, this method attempts * to locate the default application log writer instance. It is usually * hosted in the IRadiant implementation, which is where this method * will attempt to look for. If the core module happens to be unavailable * at the time this method is called, a std::runtime_error will be thrown. */ virtual applog::ILogWriter& getApplicationLogWriter() = 0; /** * Invoked when all modules have been initialised. */ virtual sigc::signal& signal_allModulesInitialised() = 0; /** * Progress function called during module loading and intialisation. * The string value will carry a message about what is currently in progress. * The float value passed to the signal indicates the overall progress and * will be in the range [0.0f..1.0f]. */ typedef sigc::signal ProgressSignal; virtual ProgressSignal& signal_moduleInitialisationProgress() = 0; /** * Invoked right before all modules are going to uninitialised, at the * beginning of the radiant shutdown phase. * This is a fire-once signal which removes all subscribers after firing. */ virtual sigc::signal& signal_modulesUninitialising() = 0; /** * Invoked when all modules have been shut down (i.e. after shutdownModule()). * This is a fire-once signal which removes all subscribers after firing. */ virtual sigc::signal& signal_allModulesUninitialised() = 0; /** * Invoked right before the module binaries will be unloaded, which will * trigger the destruction of any static instances in them. */ virtual sigc::signal& signal_modulesUnloading() = 0; // The compatibility level this Registry instance was compiled against. // Old module registrations will be rejected by the registry anyway, // on top of that they can actively query this number from the registry // to check whether they are being loaded into an incompatible binary. virtual std::size_t getCompatibilityLevel() const = 0; }; namespace module { /** * \namespace module * Types and functions implementing the module registry system. * * \ingroup module */ /** * greebo: A module-wide accessible container holding a registry reference. * The reference it holds has to be initialised in the RegisterModule() * routine of each .so/.dll binary. * Use GlobalModuleRegistry() to access the instance. */ class RegistryReference { IModuleRegistry* _registry; public: RegistryReference() : _registry(nullptr) {} inline void setRegistry(IModuleRegistry& registry) { _registry = ®istry; } inline IModuleRegistry& getRegistry() const { assert(_registry); // must not be empty return *_registry; } inline bool isEmpty() const { return _registry == nullptr; } static RegistryReference& Instance() { static RegistryReference _registryRef; return _registryRef; } }; /** * Global accessor method for the ModuleRegistry. */ inline IModuleRegistry& GlobalModuleRegistry() { return RegistryReference::Instance().getRegistry(); } // Returns true if we have a registry instance known to this binary inline bool IsGlobalModuleRegistryAvailable() { return !RegistryReference::Instance().isEmpty(); } // Reference container to hold the cached module references. // It automatically invalidates its reference as soon as the IModuleRegistry // un-initialises the registered modules. template class InstanceReference { private: const char* const _moduleName; ModuleType* _instancePtr; public: InstanceReference(const char* const moduleName) : _moduleName(moduleName), _instancePtr(nullptr) { acquireReference(); } // Cast-operator used to access the module reference inline operator ModuleType&() { // Check if we have an instance or if it is outdated if (_instancePtr == nullptr) { acquireReference(); } return *_instancePtr; } private: void acquireReference() { auto& registry = GlobalModuleRegistry(); _instancePtr = std::dynamic_pointer_cast(registry.getModule(_moduleName)).get(); registry.signal_allModulesUninitialised().connect([this] { _instancePtr = nullptr; }); } }; // Exception thrown if the module being loaded is incompatible with the main binary class ModuleCompatibilityException : public std::runtime_error { public: ModuleCompatibilityException(const std::string& msg) : std::runtime_error(msg) {} }; // greebo: This should be called once by each module at load time to initialise // the OutputStreamHolders inline void initialiseStreams(applog::ILogWriter& logWriter) { GlobalOutputStream().setStream(logWriter.getLogStream(applog::LogLevel::Standard)); GlobalWarningStream().setStream(logWriter.getLogStream(applog::LogLevel::Warning)); GlobalErrorStream().setStream(logWriter.getLogStream(applog::LogLevel::Error)); #ifndef NDEBUG GlobalDebugStream().setStream(logWriter.getLogStream(applog::LogLevel::Verbose)); #endif // Set up the mutex for thread-safe logging GlobalOutputStream().setLock(logWriter.getStreamLock()); GlobalWarningStream().setLock(logWriter.getStreamLock()); GlobalErrorStream().setLock(logWriter.getStreamLock()); GlobalDebugStream().setLock(logWriter.getStreamLock()); } // Should be called when shutting down the application to be sure that no dangling // references remain in the output stream holders inline void shutdownStreams() { GlobalOutputStream().reset(); GlobalWarningStream().reset(); GlobalErrorStream().reset(); #ifndef NDEBUG GlobalDebugStream().reset(); #endif } // Helper method initialising a few references and checking a module's // compatibility level with the one reported by the ModuleRegistry inline void performDefaultInitialisation(IModuleRegistry& registry) { if (registry.getCompatibilityLevel() != MODULE_COMPATIBILITY_LEVEL) { throw ModuleCompatibilityException("Compatibility level mismatch"); } // Initialise the streams using the central application log writer instance initialiseStreams(registry.getApplicationLogWriter()); // Remember the reference to the ModuleRegistry RegistryReference::Instance().setRegistry(registry); // Set up the assertion handler GlobalErrorHandler() = registry.getApplicationContext().getErrorHandlingFunction(); } } // Platform-specific definition which needs to be defined both // in the plugins and the main binary. #if defined(WIN32) #if defined(_MSC_VER) // In VC++ we use this to export symbols instead of using .def files // Note: don't use __stdcall since this is adding stack bytes to the function name #define DARKRADIANT_DLLEXPORT __declspec(dllexport) #else #define DARKRADIANT_DLLEXPORT #endif #elif defined(__APPLE__) #define DARKRADIANT_DLLEXPORT __attribute__((visibility("default"))) #else #define DARKRADIANT_DLLEXPORT __attribute__((visibility("default"))) #endif DarkRadiant-2.14.0/include/imousetool.h000066400000000000000000000117601413722237400177670ustar00rootroot00000000000000#pragma once #include #include #include #include "imousetoolevent.h" class RenderSystem; class RenderableCollector; class VolumeTest; namespace ui { /** * A Tool class represents an operator which can be "used" * in DarkRadiant's Ortho- and Camera views by using the mouse. */ class MouseTool { public: typedef MouseToolEvent Event; enum class Result { Ignored, // event does not apply for this tool Activated, // event handled, tool is now active Continued, // event handled, tool continues to be active Finished, // event handled, tool no longer active }; // Returns the name of this operation. This name is only used // internally and should be unique. virtual const std::string& getName() = 0; // The display name, which is also used in the status bar virtual const std::string& getDisplayName() = 0; virtual Result onMouseDown(Event& ev) = 0; virtual Result onMouseMove(Event& ev) = 0; virtual Result onMouseUp(Event& ev) = 0; // During an active operation the user may hit ESC, // in which case the onCancel event will be fired. // This should not be ignored by the tool, which should // seek to shut down any ongoing operation safely, unless it actually // wants to pass the key through and stay active (e.g. FreeMoveTool). // Classes returning Finished to this call will have the tool cleared. virtual Result onCancel(IInteractiveView&) { // Default behaviour is to remove this tool once ESC is encountered return Result::Finished; } // A tool using pointer mode Capture might want to get notified // when the mouse capture of the window has been lost due to // the user alt-tabbing out of the app or something else. // Any tools using PointerMode::Capture must watch out for this event. virtual void onMouseCaptureLost(IInteractiveView& view) {} // Some tools might want to receive mouseMove events even when they // are not active, to send feedback to the user before the buttons // are pressed. The Clipper tool uses this to change the mouse cursor // to a crosshair when moved over a manipulatable clip point. virtual bool alwaysReceivesMoveEvents() { return false; } // By default, when the user is dragging the mouse to the borders of // the view, the viewport will be moved along. For some tools this might // not be desirable, in which case they need to override this method to // return false. virtual bool allowChaseMouse() { return true; } // A tool can request special mouse capture modes during its active phase // All flags can be combined, use Normal to indicate that no capturing is needed. struct PointerMode { enum Flags { Normal = 0, // no capturing, absolute coordinates are sent to onMouseMove, pointer will be shown Capture = 1, // capture mouse (tools should implement onMouseCaptureLost), see also MotionDeltas Freeze = 2, // pointer will be frozen and kept at the same position Hidden = 4, // pointer will be hidden MotionDeltas = 8, // onMouseMove will receive delta values relative to the capture position }; }; // Some tools might want to capture the pointer after onMouseDown // Override this method to return "Capture" instead of "Normal". virtual unsigned int getPointerMode() { return PointerMode::Normal; } // Bitmask determining which view are refreshed in which way // after each click and mouse pointer movement event struct RefreshMode { enum Flags { NoRefresh = 0, // don't refresh anything Queue = 1 << 0, // queue a redraw (will be painted as soon as the app is idle) Force = 1 << 1, // force a redraw ActiveView = 1 << 2, // refresh the active view only (the one the mouse tool has been activated on) AllViews = 1 << 3, // refresh all available views }; }; virtual unsigned int getRefreshMode() { // By default, force a refresh of the view the tool is active on return RefreshMode::Force | RefreshMode::ActiveView; } // Optional render routine that is invoked after the scene // has been drawn on the interactive window. The projection // and modelview matrix have already been set up for // overlay rendering (glOrtho). virtual void renderOverlay() {} // For in-scene rendering of active mousetools they need implement this method. // Any needed shaders should be acquired on-demand from the attached rendersystem. // Renderable objects need to be submitted to the given RenderableCollector. virtual void render(RenderSystem& renderSystem, RenderableCollector& collector, const VolumeTest& volume) {} }; typedef std::shared_ptr MouseToolPtr; } // namespace DarkRadiant-2.14.0/include/imousetoolevent.h000066400000000000000000000035421413722237400210300ustar00rootroot00000000000000#pragma once #include "icameraview.h" #include "iorthoview.h" #include "math/Vector2.h" namespace ui { // Base class for a generic event to be handled by the MouseTool implementation class MouseToolEvent { private: // The device position, normalised within [-1..+1] Vector2 _devicePosition; // The device delta for tools using a frozen mouse pointer Vector2 _deviceDelta; IInteractiveView& _view; public: MouseToolEvent(IInteractiveView& view, const Vector2& devicePosition) : _devicePosition(devicePosition), _deviceDelta(0, 0), _view(view) {} MouseToolEvent(IInteractiveView& view, const Vector2& devicePosition, const Vector2& delta) : _devicePosition(devicePosition), _deviceDelta(delta), _view(view) {} virtual ~MouseToolEvent() {} // Returns the mouse position in normalised device coordinates (x,y in [-1..+1]) const Vector2& getDevicePosition() const { return _devicePosition; } // Used by MouseMove events, this contains the delta // in device coordinates since the last mousemove event const Vector2& getDeviceDelta() const { return _deviceDelta; } IInteractiveView& getInteractiveView() { return _view; } }; class OrthoViewMouseToolEvent : public MouseToolEvent { private: IOrthoViewBase& _orthoView; public: OrthoViewMouseToolEvent(IOrthoViewBase& view, const Vector2& devicePosition) : MouseToolEvent(view, devicePosition), _orthoView(view) {} OrthoViewMouseToolEvent(IOrthoViewBase& view, const Vector2& devicePosition, const Vector2& delta) : MouseToolEvent(view, devicePosition, delta), _orthoView(view) {} virtual ~OrthoViewMouseToolEvent() {} IOrthoViewBase& getOrthoView() { return _orthoView; } }; } // namespace DarkRadiant-2.14.0/include/imousetoolmanager.h000066400000000000000000000101731413722237400213170ustar00rootroot00000000000000#pragma once #include "imousetool.h" #include "imodule.h" #include #include #include namespace ui { // A list of mousetools class MouseToolStack : public std::list { public: // Tries to handle the given event, returning the first tool that responded positively MouseToolPtr handleMouseDownEvent(MouseTool::Event& mouseEvent) { for (const_iterator i = begin(); i != end(); ++i) { // Ask each tool to handle the event MouseTool::Result result = (*i)->onMouseDown(mouseEvent); if (result != MouseTool::Result::Ignored && result != MouseTool::Result::Finished) { // This tool is now activated return *i; } } return MouseToolPtr(); } }; // A set of MouseTools, use the GlobalMouseToolManager() to get access class IMouseToolGroup { public: virtual ~IMouseToolGroup() {} // MouseTools categories enum class Type { OrthoView = 0, CameraView = 1, TextureTool = 2, }; // Returns the type of this group virtual Type getType() = 0; // Returns the display name of this group virtual std::string getDisplayName() = 0; // Add a MouseTool to the given group virtual void registerMouseTool(const MouseToolPtr& tool) = 0; // Removes the given mousetool from all categories. virtual void unregisterMouseTool(const MouseToolPtr& tool) = 0; // Returns the named mouse tool (case sensitive) or NULL if not found. virtual MouseToolPtr getMouseToolByName(const std::string& name) = 0; // Visit each mouse tool with the given function object virtual void foreachMouseTool(const std::function& func) = 0; // Returns the set of mapped tools for this mouse event. The unsigned int is a bitmap // using the same flags as used in wxutil::MouseButton virtual MouseToolStack getMappedTools(unsigned int state) = 0; // Returns the mapping for the given mousetool virtual unsigned int getMappingForTool(const MouseToolPtr& tool) = 0; // Map a tool to a defined mouse state (as used in wxutil::MouseButton) // It's possible to map the same tool to multiple mouse states virtual void addToolMapping(unsigned int state, const MouseToolPtr& tool) = 0; // Iterate over each tool mapping virtual void foreachMapping(const std::function& func) = 0; // Removes all mappings for all tools virtual void clearToolMappings() = 0; // Removes all mappings for the given tool virtual void clearToolMapping(MouseToolPtr& tool) = 0; }; typedef std::shared_ptr IMouseToolGroupPtr; /** * An interface to an object which is able to hold one or more mousetool * groups. * * Clients of IMouseToolManager are GlobalXYWnd and GlobalCamera, for instance. */ class IMouseToolManager : public RegisterableModule { public: virtual ~IMouseToolManager() {} // Get the group defined by the given enum. This always succeeds, if the group // is not existing yet, a new one will be created internally. virtual IMouseToolGroup& getGroup(IMouseToolGroup::Type group) = 0; // Iterate over each group using the given visitor function virtual void foreachGroup(const std::function& functor) = 0; // Returns matching MouseTools for the given event and group type. To convert a wxMouseEvent to // the unsigned int mouseState, use wxutil::MouseButton virtual MouseToolStack getMouseToolsForEvent(IMouseToolGroup::Type group, unsigned int mouseState) = 0; // Prints the list of possible mouse actions to the statusbar virtual void updateStatusbar(unsigned int mouseState) = 0; // Reverts all mappings to the defaults as defined in the stock input.xml virtual void resetBindingsToDefault() = 0; }; } // namespace const char* const MODULE_MOUSETOOLMANAGER = "MouseToolManager"; inline ui::IMouseToolManager& GlobalMouseToolManager() { static module::InstanceReference _reference(MODULE_MOUSETOOLMANAGER); return _reference; } DarkRadiant-2.14.0/include/imru.h000066400000000000000000000021271413722237400165410ustar00rootroot00000000000000#pragma once #include "imodule.h" #include namespace map { const char* const LOAD_MRU_MAP_CMD = "LoadMRUMap"; const char* const LOAD_MRU_STATEMENT_FORMAT = "MRUOpen{0:d}"; class IMRUManager : public RegisterableModule { public: virtual ~IMRUManager() {} typedef std::function ItemFunctor; virtual std::size_t getMaxNumberOfItems() const = 0; // Visits each item, ordered by the 0-based index virtual void foreachItem(const ItemFunctor& functor) = 0; // Inserts the given map filename at the top of the list // Duplicates are relocated, the number of list items is constrained virtual void insert(const std::string& fileName) = 0; // Returns the filename of the last opened map, or "" if there doesn't exist one virtual std::string getLastMapName() = 0; virtual sigc::signal& signal_MapListChanged() = 0; }; } const char* const MODULE_MRU_MANAGER = "MRUManager"; inline map::IMRUManager& GlobalMRU() { static module::InstanceReference _reference(MODULE_MRU_MANAGER); return _reference; } DarkRadiant-2.14.0/include/inameobserver.h000066400000000000000000000012001413722237400204150ustar00rootroot00000000000000#ifndef _NAME_OBSERVER_H_ #define _NAME_OBSERVER_H_ #include #include /** * greebo: A NameObserver is observing one name in a map Namespace. * * It provides "event methods" which get called by the Namespace on * any name changes. */ class NameObserver { public: virtual ~NameObserver() {} /** * greebo: This is the "change" event, which gets issued by the Namespace. * The old name as well as the new name is passed along. */ virtual void onNameChange(const std::string& oldName, const std::string& newName) = 0; }; typedef std::shared_ptr NameObserverPtr; #endif /* _NAME_OBSERVER_H_ */ DarkRadiant-2.14.0/include/inamespace.h000066400000000000000000000133001413722237400176650ustar00rootroot00000000000000#pragma once #include #include "inode.h" #include "imodule.h" // Forward declaration (is declared in inameobserver.h) class NameObserver; /** * greebo: The Namespace is the managing class which keeps track * of all the names in the map. It gets notified on name changes * and broadcasts this event to all registered NameObservers. * * Additionally, it provides algorithms to merge elements from * another namespace into this one, preserving all links between * Namespaced objects. */ class INamespace { public: virtual ~INamespace() {} /** * greebo: Call this to put the given scene::Node and all its * children into this Namespace. This will search for Namespaced * items and tell them to add their relevant "names" to this space. */ virtual void connect(const scene::INodePtr& root) = 0; /** * greebo: The counter-part of the connect() method above. This will * remove the given node and all its children from this namespace. */ virtual void disconnect(const scene::INodePtr& root) = 0; /** * greebo: Returns true if the given name already exists in this namespace. */ virtual bool nameExists(const std::string& name) = 0; /** * greebo: Inserts the given name into this namespace. The name * must not exist yet, it won't get inserted otherwise. * * @returns: TRUE if the insertion was successful, FALSE if the name already exists. */ virtual bool insert(const std::string& name) = 0; /** * greebo: Removes the given name from this namespace. The name * is available again afterwards. * * @returns: TRUE if the removal was successful, FALSE if the name did not exist. */ virtual bool erase(const std::string& name) = 0; /** * \brief * Add a new name to the namespace, ensuring that it is unique by adding or * changing a numeric prefix if necessary. * * \return * The actual name that was inserted, unique in this namespace. */ virtual std::string addUniqueName(const std::string& originalName) = 0; /** * greebo: Registers/de-registers a Observer. The Observer will get notified * as soon as the name changes. */ virtual void addNameObserver(const std::string& name, NameObserver& observer) = 0; virtual void removeNameObserver(const std::string& name, NameObserver& observer) = 0; /** * greebo: Tells the namespace to notify the nameobservers about a name change. * This usually gets called by the entity itself, whose name has been altered. */ virtual void nameChanged(const std::string& oldName, const std::string& newName) = 0; /** * \brief * Prepares the given scene graph for import into this namespace by ensuring * that none of its names conflict with those in this namespace. * * The nodes below should have been added to a different namespace * prior to this call, so that links are preserved during name changes. * * After this call, the imported nodes are renamed to fit into this * namespace and can be safely connected to this Namespace. This method does * \em not actually import the given scene graph's names into this * namespace. */ virtual void ensureNoConflicts(const scene::INodePtr& foreignRoot) = 0; /** * Specialised variant of the above ensureNoConflicts(foreignRoot): * Prepares only the given list of nodes (that are member of the foreign root) such that * their names don't conflict with any name in this namespace. * * Every Namespaced node will get a new unique name assigned, but only if it's * actually colliding with a local name, otherwise it will remain unchanged. */ virtual void ensureNoConflicts(const scene::INodePtr& foreignRoot, const std::set& foreignNodes) = 0; }; typedef std::shared_ptr INamespacePtr; /** * greebo: A Namespaced object is the primary communication * partner for the Namespace. This object provides methods * to connect/disconnect items from a map Namespace. * * Note: the standard implementation in D3 maps is * the NamespaceManager class in the entity module. * * Note: I chose to use raw INamespace* pointers in the interface * to allow the Namespace calling these functions without maintaining * weak_ptrs to itself. This can of course be changed in the * future, but I didn't want to bother with "self" weak_ptrs right now. */ class Namespaced { public: /** * Destructor */ virtual ~Namespaced() {} /** * Returns the name of this object. */ virtual std::string getName() const = 0; // Gets/sets the namespace of this named object virtual void setNamespace(INamespace* space) = 0; virtual INamespace* getNamespace() const = 0; /** * Tells the Namespaced object to register all relevant * names with the associated Namespace. */ virtual void attachNames() = 0; // Counter-part of the registerNames() method above. virtual void detachNames() = 0; /** * Tells the object to change its name. Invoked by the * INamespace class itself during import. */ virtual void changeName(const std::string& newName) = 0; virtual void connectNameObservers() = 0; virtual void disconnectNameObservers() = 0; }; typedef std::shared_ptr NamespacedPtr; inline NamespacedPtr Node_getNamespaced(scene::INodePtr node) { return std::dynamic_pointer_cast(node); } /** * greebo: Use the namespace factory to create new Namespace objects. */ class INamespaceFactory : public RegisterableModule { public: /** * Creates and returns a new Namespace. */ virtual INamespacePtr createNamespace() = 0; }; const char* const MODULE_NAMESPACE_FACTORY("NamespaceFactory"); // Factory accessor inline INamespaceFactory& GlobalNamespaceFactory() { static module::InstanceReference _reference(MODULE_NAMESPACE_FACTORY); return _reference; } DarkRadiant-2.14.0/include/inode.h000066400000000000000000000170671413722237400166740ustar00rootroot00000000000000#pragma once #include "Bounded.h" #include "ilayer.h" #include "irenderable.h" #include #include #include class AABB; class Matrix4; class IRenderEntity; typedef std::shared_ptr IRenderEntityPtr; namespace scene { /** * Interface for objects which can be filtered by the FilterSystem. */ class Filterable { public: /** * Destructor */ virtual ~Filterable() {} /** * Return the filtered state of this object. Returns true if the object is * hidden due to filtering, and false if it is visible. * * It is up to the object's implementation to determine what criteria are * used for filtering (texture, entityclass etc), however these criteria * MUST be controlled by the filter system, and cannot include other * arbitrary criteria such as the time of day or available memory. * * Note that this is not the primary function to discard objects during * rendering or selection test. Use INode::visible() instead, which includes * the current "filtered" setting. */ virtual bool isFiltered() const = 0; // Set the filtered status of this object virtual void setFiltered(bool filtered) = 0; }; class INode; typedef std::shared_ptr INodePtr; typedef std::weak_ptr INodeWeakPtr; class IMapRootNode; typedef std::shared_ptr IMapRootNodePtr; class Graph; typedef std::shared_ptr GraphPtr; class NodeVisitor { public: /** * Destructor */ virtual ~NodeVisitor() {} /** * greebo: Gets called before the children are traversed. * Return TRUE to traverse the children, FALSE to prevent this. */ virtual bool pre(const INodePtr& node) = 0; /** * greebo: Optional post-traverse call, gets invoked after the children * of this node have been traversed. */ virtual void post(const INodePtr& node) {} }; /** * \brief Main interface for a Node, a basic element of the scenegraph. * * All nodes share a certain set of functionality, such as being placed in * layers, being able to render themselves, and being able to hold and * transform a list of child nodes. */ class INode : public Layered, public Filterable, public Bounded, public Renderable { public: enum class Type { Unknown = 0, MapRoot, Entity, Brush, Patch, Model, Particle, EntityConnection, MergeAction, }; public: virtual ~INode() {} /// Get the user-friendly string name of this node. virtual std::string name() const = 0; // Returns the type of this node virtual Type getNodeType() const = 0; /** * Set the scenegraph this node is belonging to. This is usually * set by the scenegraph itself during insertion. */ virtual void setSceneGraph(const GraphPtr& sceneGraph) = 0; /** greebo: Returns true, if the node is the root element * of the scenegraph. */ virtual bool isRoot() const = 0; /** greebo: Sets the "isRoot" flag of this node. */ virtual void setIsRoot(bool isRoot) = 0; // Searching this node's ancestry, this returns the toplevel/root node virtual IMapRootNodePtr getRootNode() = 0; /** greebo: State bit accessor methods. This enables/disables * the bit of the state flag (e.g. hidden, excluded) */ virtual void enable(unsigned int state) = 0; virtual void disable(unsigned int state) = 0; // Returns true if the given state bit mask is set, false otherwise virtual bool checkStateFlag(unsigned int state) const = 0; // Returns true if this node supports the given state flag virtual bool supportsStateFlag(unsigned int state) const = 0; /** greebo: Returns true, if the node is not hidden by * exclusion, filtering or anything else. */ virtual bool visible() const = 0; /** greebo: Returns true, if the node is excluded (eExcluded flag set) */ virtual bool excluded() const = 0; // Set the "forced visible" flag, which overrides the ordinary filtered/excluded state // This is used to force the rendering of nodes that are selected but would otherwise // be hidden due to the filtered/layered state. virtual void setForcedVisibility(bool forceVisible, bool includeChildren) = 0; // Child node handling // Adds a new child node (is appended at the end of the list of existing children) virtual void addChildNode(const INodePtr& node) = 0; // Adds a new child node (is inserted at the front of any existing children) // Useful in special scenarios like when adding a world spawn node. virtual void addChildNodeToFront(const INodePtr& node) = 0; virtual void removeChildNode(const INodePtr& node) = 0; virtual bool hasChildNodes() const = 0; /** * greebo: Traverses this node and all child nodes (recursively) * using the given visitor. * * Note: replaces the legacy Node_traverseSubgraph() method. */ virtual void traverse(NodeVisitor& visitor) = 0; /** * greebo: Traverses all child nodes (recursively) using the given visitor. * Note: this will NOT visit the current node. */ virtual void traverseChildren(NodeVisitor& visitor) const = 0; /** * Traversal function which can be used to hit all nodes in a * graph or collection. If the functor returns false traversal stops. */ typedef std::function VisitorFunc; /** * Call the given functor for each child node, depth first * This is a simpler alternative to the usual traverse() method * which provides pre() and post() methods and more control about * which nodes to traverse and. This forEachNode() routine simply * hits every child node including their children. * * @returns: true if the functor returned false on any of the * visited nodes. The return type is used to pass the stop signal * up the stack during traversal. */ virtual bool foreachNode(const VisitorFunc& functor) const = 0; /** * Returns a shared_ptr to itself. */ virtual scene::INodePtr getSelf() = 0; // Set the parent of this node, is called on insertion in a traversable virtual void setParent(const INodePtr& parent) = 0; virtual scene::INodePtr getParent() const = 0; /** * greebo: Gets called after the node has been inserted into the scene. */ virtual void onInsertIntoScene(IMapRootNode& root) = 0; /** * greebo: This gets called by the SceneGraph before the Node is actually * removed from the scene. This gives the node the opportunity to * change its "selected" status or anything else. */ virtual void onRemoveFromScene(IMapRootNode& root) = 0; /** * Returns true if this node is in the scene */ virtual bool inScene() const = 0; // Get/Set the render entity this node is attached to virtual IRenderEntity* getRenderEntity() const = 0; virtual void setRenderEntity(IRenderEntity* entity) = 0; // Call this if the node gets changed in any way or gets inserted somewhere. virtual void boundsChanged() = 0; // Call this on transform change virtual void transformChanged() = 0; // Returns the bounds in world coordinates virtual const AABB& worldAABB() const = 0; /** * \brief Return the transformation from local to world coordinates * * This represents the final transformation from this node's own coordinate * space into world space, including any transformations inherited from * parent nodes. */ virtual const Matrix4& localToWorld() const = 0; // Undo/Redo events - some nodes need to do extra legwork after undo or redo // This is called by the TraversableNodeSet after a undo/redo operation // not by the UndoSystem itself, at least not yet. virtual void onPostUndo() {} virtual void onPostRedo() {} // Called during recursive transform changed, but only by INodes themselves virtual void transformChangedLocal() = 0; }; } // namespace scene DarkRadiant-2.14.0/include/iorthoview.h000066400000000000000000000064221413722237400177660ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "iinteractiveview.h" template class BasicVector3; typedef BasicVector3 Vector3; const char* const RKEY_HIGHER_ENTITY_PRIORITY = "user/ui/xyview/higherEntitySelectionPriority"; // Possible types of the orthogonal view window enum EViewType { YZ = 0, XZ = 1, XY = 2 }; namespace ui { // Common interface used by all orthographic/2D views, i.e. XY/YZ/XZ and Texture Tool class IOrthoViewBase : public IInteractiveView { public: virtual ~IOrthoViewBase() {} virtual int getWidth() const = 0; virtual int getHeight() const = 0; // Scrolls the view by the specified amount of screen pixels virtual void scrollByPixels(int x, int y) = 0; // Increase / decrease zoom factor virtual void zoomIn() = 0; virtual void zoomOut() = 0; }; class IOrthoView : public IOrthoViewBase { public: virtual ~IOrthoView() {} // The cursor types available on orthoviews enum class CursorType { Pointer, Crosshair, Default = Pointer, }; virtual const Vector3& getOrigin() const = 0; virtual void setOrigin(const Vector3& origin) = 0; // Returns the scale factor of this view virtual float getScale() const = 0; // Snaps the given Vector to the XY view's grid // Note that one component of the given vector stays untouched. virtual void snapToGrid(Vector3& point) = 0; // Returns the projection type (XY, XZ, YZ) of this view virtual EViewType getViewType() const = 0; // Sets the mouse cursor type of this view virtual void setCursorType(CursorType type) = 0; }; class IXWndManager : public RegisterableModule { public: // Passes a draw call to each allocated view, set force to true // to redraw immediately instead of queueing the draw. virtual void updateAllViews(bool force = false) = 0; // Free all allocated views virtual void destroyViews() = 0; // Sets the origin of all available views virtual void setOrigin(const Vector3& origin) = 0; // Returns the origin of the currently active ortho view // Will throw std::runtime_error if no view is found virtual Vector3 getActiveViewOrigin() = 0; // Returns a reference to the currently active view // Will throw std::runtime_error if no view is found virtual IOrthoView& getActiveView() = 0; // Return the first view matching the given viewType // Will throw std::runtime_error if no view is found virtual IOrthoView& getViewByType(EViewType viewType) = 0; // Sets the scale of all available views virtual void setScale(float scale) = 0; // Positions all available views virtual void positionAllViews(const Vector3& origin) = 0; // Positions the active views virtual void positionActiveView(const Vector3& origin) = 0; // Returns the view type of the currently active view virtual EViewType getActiveViewType() const = 0; // Sets the viewtype of the active view virtual void setActiveViewType(EViewType viewType) = 0; }; } // namespace const char* const MODULE_ORTHOVIEWMANAGER = "OrthoviewManager"; // This is the accessor for the xy window manager module inline ui::IXWndManager& GlobalXYWndManager() { static module::InstanceReference _reference(MODULE_ORTHOVIEWMANAGER); return _reference; } DarkRadiant-2.14.0/include/iparticlenode.h000066400000000000000000000012171413722237400204060ustar00rootroot00000000000000#pragma once #include "inode.h" #include namespace particles { class IRenderableParticle; typedef std::shared_ptr IRenderableParticlePtr; /// Interface for a Node containing a particle system class IParticleNode: public virtual scene::INode { public: // Get the reference to the render particle this node is containing virtual IRenderableParticlePtr getParticle() const = 0; }; typedef std::shared_ptr IParticleNodePtr; /// Test if a node is a particle node inline bool isParticleNode(const scene::INodePtr& node) { return (dynamic_cast(node.get()) != NULL); } } // namespace DarkRadiant-2.14.0/include/iparticles.h000066400000000000000000000170161413722237400177270ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "irenderable.h" #include #include class RenderSystem; class Matrix4; template class BasicVector3; typedef BasicVector3 Vector3; class AABB; namespace scene { class INode; typedef std::shared_ptr INodePtr; } /// Classes related to storage and rendering of particle systems namespace particles { // see iparticlestage.h for definition class IStageDef; // see iparticlenode.h for definition class IParticleNode; typedef std::shared_ptr IParticleNodePtr; /** * \brief * Definition of a particle system. * * Each particle system is made up of one or more particle stages, information * about which is provided via the IStageDef interface. */ class IParticleDef { public: /** * Destructor */ virtual ~IParticleDef() {} /// Get the name of the particle system. virtual const std::string& getName() const = 0; /** * Get the name of the .prt file this particle is defined in. * Might return an empty string if this particle def has not been saved yet. */ virtual const std::string& getFilename() const = 0; virtual void setFilename(const std::string& filename) = 0; /** * Set/get the depth hack flag */ virtual float getDepthHack() const = 0; virtual void setDepthHack(float value) = 0; /// Returns the number of stages for this particle system. virtual std::size_t getNumStages() const = 0; /// Get a const stage definition from the particle definition virtual const IStageDef& getStage(std::size_t stageNum) const = 0; /// Get a stage definition from the particle definition virtual IStageDef& getStage(std::size_t stageNum) = 0; /** * Add a new stage to this particle, returns the index of the new stage. */ virtual std::size_t addParticleStage() = 0; /** * Removes the stage with the given index. */ virtual void removeParticleStage(std::size_t index) = 0; /** * Swaps the location of the two given particle stages. After this step the * particle stage at will be at and vice versa. * If one of the indices is out of bounds (or both indices are equal) nothing will happen. */ virtual void swapParticleStages(std::size_t index, std::size_t index2) = 0; /// Signal emitted when some aspect of the particle def has changed virtual sigc::signal signal_changed() const = 0; // Comparison operators - particle defs are considered equal if all properties (except the name!), // number of stages and stage contents are the equal virtual bool operator==(const IParticleDef& other) const = 0; virtual bool operator!=(const IParticleDef& other) const = 0; // Copies all properties from the other particle, overwriting this one // Note: Name, filename and observers are not copied virtual void copyFrom(const IParticleDef& other) = 0; }; typedef std::shared_ptr IParticleDefPtr; /** * A renderable particle, which is capable of compiling the * particle system into actual geometry usable for the backend rendersystem. * * As it derives from Renderable, this object can be added to a RenderableCollector * during the front-end render phase. */ class IRenderableParticle : public Renderable { public: /** * Update the particle geometry using the given rendersystem. * The rendersystem is needed for acquiring the shaders and * the current render time. * * @viewRotation: the matrix to orient themselves to the viewer. */ virtual void update(const Matrix4& viewRotation) = 0; /** * Get the particle definition used by this renderable. */ virtual const IParticleDefPtr& getParticleDef() const = 0; /** * Set the particle definition. You'll need to call update() after * setting a new particle def. */ virtual void setParticleDef(const IParticleDefPtr& def) = 0; /** * greebo: Particles have a main direction, usually defined by the * emitter's rotation. For a stand-alone particle (without emitter) * this direction defaults to <0,0,1>, but can be overridden here. */ virtual void setMainDirection(const Vector3& direction) = 0; /** * Set the colour needed by the particle system when the setting * "use entity colour" is activated. */ virtual void setEntityColour(const Vector3& colour) = 0; /** * Returns the bounding box taken by the entirety of quads in this particle. * Make sure to call this after the update() method, as getAABB() will * calculate and return the bounds at the time passed to update(). */ virtual const AABB& getBounds() = 0; }; typedef std::shared_ptr IRenderableParticlePtr; /** * Callback for evaluation particle defs. */ typedef std::function< void (const IParticleDef&) > ParticleDefVisitor; /* CONSTANTS */ namespace { const char* PARTICLES_DIR = "particles/"; const char* PARTICLES_EXT = "prt"; } /// Inteface for the particles manager class IParticlesManager : public RegisterableModule { public: /// Signal emitted when particle definitions are reloaded virtual sigc::signal signal_particlesReloaded() const = 0; /// Enumerate each particle def. virtual void forEachParticleDef(const ParticleDefVisitor&) = 0; /// Return the definition object for the given named particle system virtual IParticleDefPtr getDefByName(const std::string& name) = 0; // Finds or creates the particle def with the given name, always returns non-NULL virtual IParticleDefPtr findOrInsertParticleDef(const std::string& name) = 0; // Removes the named particle definition from the storage virtual void removeParticleDef(const std::string& name) = 0; /** * Create a renderable particle, which is capable of compiling the * particle system into actual geometry usable for the backend rendersystem. * * @returns: the renderable particle instance or NULL if the named particle was not found. */ virtual IRenderableParticlePtr getRenderableParticle(const std::string& name) = 0; /// Create and return a particle node for the named particle system virtual IParticleNodePtr createParticleNode(const std::string& name) = 0; /** * Writes the named particle declaration to the file it is associated with, * replacing any existing declaration with the same name in that file. * Any other particle declarations that happen to be declared in the same file * will be preserved. * * If the associated file is stored in a PK4, a copy is written to the current * fs_game ("mod") folder and that file is used for the save operation. * No other particle declaration will be removed from the copied file. * * Note: this method does not check if the named particle system is already * defined in a different file. * * throws a std::runtime_error on any failure. */ virtual void saveParticleDef(const std::string& particle) = 0; /** * \brief * Force the particles manager to reload all particle definitions from the * .prt files. * * Any existing references to IParticleDefs will remain valid, but their * contents might change. Anything sensitive to these changes (like the * renderable particles) should connect to the particles reloaded signal. * * If particle defs are removed from the .prt files, the corresponding * IParticleDef instance will remain in memory, but will be empty after * reload. */ virtual void reloadParticleDefs() = 0; }; } // namespace const char* const MODULE_PARTICLESMANAGER = "ParticlesManager"; // Accessor inline particles::IParticlesManager& GlobalParticlesManager() { static module::InstanceReference _reference(MODULE_PARTICLESMANAGER); return _reference; } DarkRadiant-2.14.0/include/iparticlestage.h000066400000000000000000000227321413722237400205710ustar00rootroot00000000000000#pragma once #include template class BasicVector3; typedef BasicVector3 Vector3; template class BasicVector4; typedef BasicVector4 Vector4; namespace particles { /** * greebo: A particle parameter represents a bounded member value * of a particle stage (e.g. speed or size). * * Use the evaluate() method to retrieve a particular value. * * It is modeled after the idParticleParam class in the D3 SDK. */ class IParticleParameter { public: // Get the lower bound of this parameter virtual float getFrom() const = 0; // Get the upper bound of this parameter virtual float getTo() const = 0; // Set the lower bound of this parameter virtual void setFrom(float value) = 0; // Set the upper bound of this parameter virtual void setTo(float value) = 0; // Return a specific value. Fraction == 0 returns the lower bound value. virtual float evaluate(float fraction) const = 0; // Returns the integrated value at the point . virtual float integrate(float fraction) const = 0; // Comparison operators - particle parameters are considered equal // if both from and to are equal virtual bool operator==(const IParticleParameter& other) const = 0; virtual bool operator!=(const IParticleParameter& other) const = 0; }; /** * \brief * Definition of a single particle stage. * * Each stage consists of a set of particles with the same properties (texture, * acceleration etc). * * Most of the member descriptions are directly taken from the D3 SDK. */ class IStageDef { public: // Particle orientation enum OrientationType { ORIENTATION_VIEW, ORIENTATION_AIMED, // angle and aspect are disregarded ORIENTATION_X, ORIENTATION_Y, ORIENTATION_Z }; // Particle distribution enum DistributionType { DISTRIBUTION_RECT, // ( sizeX sizeY sizeZ ) DISTRIBUTION_CYLINDER, // ( sizeX sizeY sizeZ ) DISTRIBUTION_SPHERE // ( sizeX sizeY sizeZ ringFraction ) // a ringFraction of zero allows the entire sphere, 0.9 would only // allow the outer 10% of the sphere }; // Particle direction enum DirectionType { DIRECTION_CONE, // parm0 is the solid cone angle DIRECTION_OUTWARD // direction is relative to offset from origin, parm0 is an upward bias }; enum CustomPathType { PATH_STANDARD, PATH_HELIX, // ( sizeX sizeY sizeZ radialSpeed climbSpeed ) PATH_FLIES, PATH_ORBIT, PATH_DRIP }; public: /// Get the shader name. virtual const std::string& getMaterialName() const = 0; /// Set the shader name. virtual void setMaterialName(const std::string& material) = 0; /// Get the particle count. virtual int getCount() const = 0; /// Set the particle count. virtual void setCount(int count) = 0; /** * Get the duration in seconds. */ virtual float getDuration() const = 0; /** * Set the duration in seconds, updates cyclemsec. */ virtual void setDuration(float duration) = 0; /** * Returns ( duration + deadTime ) in msec. */ virtual int getCycleMsec() const = 0; /** * Get the cycles value. */ virtual float getCycles() const = 0; /** * Set the cycles value. */ virtual void setCycles(float cycles) = 0; /** * Get the bunching value [0..1] */ virtual float getBunching() const = 0; /** * Set the bunching value [0..1] */ virtual void setBunching(float value) = 0; /** * Get the time offset in seconds */ virtual float getTimeOffset() const = 0; /** * Set the time offset in seconds */ virtual void setTimeOffset(float value) = 0; /** * Get the dead time in seconds */ virtual float getDeadTime() const = 0; /** * Set the dead time in seconds, updates cyclemsec. */ virtual void setDeadTime(float value) = 0; /** * Get the particle render colour. */ virtual const Vector4& getColour() const = 0; /** * Set the particle render colour. */ virtual void setColour(const Vector4& colour) = 0; /** * Get the particle render colour. */ virtual const Vector4& getFadeColour() const = 0; /** * Set the particle render colour. */ virtual void setFadeColour(const Vector4& colour) = 0; /** * Get the fade in fraction [0..1] */ virtual float getFadeInFraction() const = 0; /** * Set the fade in fraction [0..1] */ virtual void setFadeInFraction(float fraction) = 0; /** * Get the fade out fraction [0..1] */ virtual float getFadeOutFraction() const = 0; /** * Set the fade out fraction [0..1] */ virtual void setFadeOutFraction(float fraction) = 0; /** * Get the fade index fraction [0..1] */ virtual float getFadeIndexFraction() const = 0; /** * Set the fade index fraction [0..1] */ virtual void setFadeIndexFraction(float fraction) = 0; /** * Get the animation frames. */ virtual int getAnimationFrames() const = 0; /** * Set the animation frames. */ virtual void setAnimationFrames(int animationFrames) = 0; /** * Get the animation rate. */ virtual float getAnimationRate() const = 0; /** * Set the animation frames. */ virtual void setAnimationRate(float animationRate) = 0; /** * Get the initial angle. */ virtual float getInitialAngle() const = 0; /** * Set the initial angle. */ virtual void setInitialAngle(float angle) = 0; /** * Get the bounds expansion value. */ virtual float getBoundsExpansion() const = 0; /** * Set the bounds expansion value. */ virtual void setBoundsExpansion(float value) = 0; /** * Get the random distribution flag. */ virtual bool getRandomDistribution() const = 0; /** * Set the random distribution flag. */ virtual void setRandomDistribution(bool value) = 0; /** * Get the "use entity colour" flag. */ virtual bool getUseEntityColour() const = 0; /** * Set the "use entity colour" flag. */ virtual void setUseEntityColour(bool value) = 0; /** * Get the gravity factor. */ virtual float getGravity() const = 0; /** * Set the gravity factor. */ virtual void setGravity(float value) = 0; /** * Get the "apply gravity in world space" flag. */ virtual bool getWorldGravityFlag() const = 0; /** * Get the "apply gravity in world space" flag. */ virtual void setWorldGravityFlag(bool value) = 0; /** * Get the offset vector. */ virtual const Vector3& getOffset() const = 0; /** * Set the offset vector. */ virtual void setOffset(const Vector3& value) = 0; /** * Get the orientation type. */ virtual OrientationType getOrientationType() const = 0; /** * Set the orientation type. */ virtual void setOrientationType(OrientationType value) = 0; /** * Get the orientation parameter with the given index [0..3] */ virtual float getOrientationParm(int parmNum) const = 0; /* * Set the orientation parameter with the given index [0..3]. */ virtual void setOrientationParm(int parmNum, float value) = 0; /** * Get the distribution type. */ virtual DistributionType getDistributionType() const = 0; /** * Set the distribution type. */ virtual void setDistributionType(DistributionType value) = 0; /** * Get the distribution parameter with the given index [0..3] */ virtual float getDistributionParm(int parmNum) const = 0; /* * Set the distribution parameter with the given index [0..3]. */ virtual void setDistributionParm(int parmNum, float value) = 0; /** * Get the direction type. */ virtual DirectionType getDirectionType() const = 0; /** * Set the direction type. */ virtual void setDirectionType(DirectionType value) = 0; /** * Get the direction parameter with the given index [0..3] */ virtual float getDirectionParm(int parmNum) const = 0; /* * Set the direction parameter with the given index [0..3]. */ virtual void setDirectionParm(int parmNum, float value) = 0; /** * Get the custom path type. */ virtual CustomPathType getCustomPathType() const = 0; /** * Set the custom path type. */ virtual void setCustomPathType(CustomPathType value) = 0; /** * Get the custom path parameter with the given index [0..7] */ virtual float getCustomPathParm(int parmNum) const = 0; /* * Set the custom path parameter with the given index [0..7]. */ virtual void setCustomPathParm(int parmNum, float value) = 0; /** * Get the particle size */ virtual const IParticleParameter& getSize() const = 0; virtual IParticleParameter& getSize() = 0; /** * Get the aspect ratio. */ virtual const IParticleParameter& getAspect() const = 0; virtual IParticleParameter& getAspect() = 0; /** * Get the particle speed. */ virtual const IParticleParameter& getSpeed() const = 0; virtual IParticleParameter& getSpeed() = 0; /** * Get the particle rotation speed. */ virtual const IParticleParameter& getRotationSpeed() const = 0; virtual IParticleParameter& getRotationSpeed() = 0; // Comparison operators - particle stages are considered equal // if all properties are equal virtual bool operator==(const IStageDef& other) const = 0; virtual bool operator!=(const IStageDef& other) const = 0; /** * Copy operator, copies all properties from the other stage into this one. */ virtual void copyFrom(const IStageDef& other) = 0; /** * Returns the stage visibility. This flag is used in the Particle Editor context only, * it is not saved to the .prt file therefore it has no effect within the Doom 3 engine. */ virtual bool isVisible() const = 0; /** * Sets the stage visibility. This flag is used in the Particle Editor context only, * it is not saved to the .prt file therefore it has no effect within the Doom 3 engine. */ virtual void setVisible(bool visible) = 0; }; } // namespace DarkRadiant-2.14.0/include/ipatch.h000066400000000000000000000224631413722237400170420ustar00rootroot00000000000000#pragma once #include "imodule.h" #include #include "inode.h" #include "math/Vector2.h" #include "math/Vector3.h" #include "render/VertexNT.h" // This is thrown by the internal patch routines class GenericPatchException : public std::runtime_error { public: // Constructor GenericPatchException(const std::string& what): std::runtime_error(what) {} }; /* greebo: A PatchControl consists of a vertex and a set of texture coordinates. * Multiple PatchControls form a PatchControlArray or (together with width and height) a PatchControlMatrix. */ struct PatchControl { Vector3 vertex; // The coordinates of the control point Vector2 texcoord; // The texture coordinates of this point }; /** * A structure representing the fully tesselated patch * Can be acquired through the IPatch interface for * exporting the geometry to an external app. */ struct PatchMesh { std::size_t width; // width of this mesh std::size_t height; // height of this mesh /// Geometry with normals and texture coordinates std::vector vertices; }; struct PatchRenderIndices { // The indices, arranged in the way it's expected by GL_QUAD_STRIPS // The number of indices is (lenStrips*numStrips) std::vector indices; // Strip index layout std::size_t numStrips; std::size_t lenStrips; }; typedef BasicVector2 Subdivisions; // The abstract base class for a Doom3-compatible patch class IPatch { public: // An observer can attach itself to a specific patch instance. // to get notified about changes. class Observer { public: /** * Is called when the dimensions and/or the * values of one or more control points get altered. */ virtual void onPatchControlPointsChanged() = 0; /** * Is called when the patch shader is changed. */ virtual void onPatchTextureChanged() = 0; /** * Is called by the Patch destructor. After this call * the observer is automatically detached. */ virtual void onPatchDestruction() = 0; }; virtual void attachObserver(Observer* observer) = 0; virtual void detachObserver(Observer* observer) = 0; virtual ~IPatch() {} // Resizes the patch to the given dimensions virtual void setDims(std::size_t width, std::size_t height) = 0; // Get the patch dimensions virtual std::size_t getWidth() const = 0; virtual std::size_t getHeight() const = 0; // Return a defined patch control vertex at , virtual PatchControl& ctrlAt(std::size_t row, std::size_t col) = 0; virtual const PatchControl& ctrlAt(std::size_t row, std::size_t col) const = 0; // Returns a copy of the fully tesselated patch geometry (slow!) virtual PatchMesh getTesselatedPatchMesh() const = 0; // Returns a copy of the render indices which can be passed to GL_QUAD_STRIPS (slow) virtual PatchRenderIndices getRenderIndices() const = 0; /** * greebo: Inserts two columns before and after the column with index . * Throws an GenericPatchException if an error occurs. */ virtual void insertColumns(std::size_t colIndex) = 0; /** * greebo: Inserts two rows before and after the row with index . * Throws an GenericPatchException if an error occurs. */ virtual void insertRows(std::size_t rowIndex) = 0; /** * greebo: Removes columns or rows right before and after the col/row * with the given index, reducing the according dimension by 2. */ virtual void removePoints(bool columns, std::size_t index) = 0; /** * greebo: Appends two rows or columns at the beginning or the end. */ virtual void appendPoints(bool columns, bool beginning) = 0; // Updates the patch tesselation matrix, call this everytime you're done with your PatchControl changes virtual void controlPointsChanged() = 0; // Check if the patch has invalid control points or width/height are zero virtual bool isValid() const = 0; // Check whether all control vertices are in the same 3D spot (with minimal tolerance) virtual bool isDegenerate() const = 0; // Shader handling virtual const std::string& getShader() const = 0; virtual void setShader(const std::string& name) = 0; // greebo: returns true if the patch's shader is visible, false otherwise virtual bool hasVisibleMaterial() const = 0; // Returns the texture aspect ratio width/height virtual float getTextureAspectRatio() const = 0; /** * greebo: Sets/gets whether this patch is a patchDef3 (fixed tesselation) */ virtual bool subdivisionsFixed() const = 0; /** greebo: Returns the x,y subdivision values (for tesselation) */ virtual const Subdivisions& getSubdivisions() const = 0; /** greebo: Sets the subdivision of this patch * * @isFixed: TRUE, if this patch should be a patchDef3 (fixed tesselation) * @divisions: a two-component vector containing the desired subdivisions */ virtual void setFixedSubdivisions(bool isFixed, const Subdivisions& divisions) = 0; virtual void undoSave() = 0; // This translates the texture as much towards the origin in texture space as possible // without changing its appearance. virtual void normaliseTexture() = 0; // Flips the control point matrix such that the patch is facing the opposite direction virtual void invertMatrix() = 0; /** * greebo: This algorithm will transpose the patch matrix * such that the actual control vertex contents remain the same * but their indices in the patch matrix change. * Rows become columns and vice versa. */ virtual void transposeMatrix() = 0; // Tries to rearrange the row vertices to be spaced out more evenly virtual void redisperseRows() = 0; // Tries to rearrange the column vertices to be spaced out more evenly virtual void redisperseColumns() = 0; // Insert or remove columns or rows at the beginning or at the end virtual void insertRemove(bool insert, bool column, bool first) = 0; virtual void translateTexture(float s, float t) = 0; // Rotates the texture of the patch by the given angle (in degrees) virtual void rotateTexture(float angle) = 0; // Scales the patch texture by the given factors (pass 1.05 for a +0.05 scale) virtual void scaleTexture(float s, float t) = 0; virtual void fitTexture(float repeatS, float repeatT) = 0; // Flips the texture by the given flipAxis (0 == x-axis, 1 == y-axis) virtual void flipTexture(int axis) = 0; // Applies the "natural" scale to this patch virtual void scaleTextureNaturally() = 0; enum class AlignEdge { Top, Bottom, Left, Right, }; // Alligns the assigned texture at the given edge (if possible) virtual void alignTexture(AlignEdge type) = 0; // Reverts any transform that has been applied since the last time freezeTransform() was called virtual void revertTransform() = 0; // Returns the transformable control point (not the one returned by ctrlAt) - this one is // part of the "transformed" working set of the patch which will either be saved on freezeTransform() // or discarded on revertTransform(). virtual PatchControl& getTransformedCtrlAt(std::size_t row, std::size_t col) = 0; // Promotes the current transformed state to the new base state virtual void freezeTransform() = 0; // Updates the patch tesselation based on the transformed set of control vertices // Setting force to true will update the tesselation even if controlPointsChanged() // hasn't been called in the meantime. virtual void updateTesselation(bool force = false) = 0; }; namespace patch { // The cap types for a patch enum class CapType { Nocap, // "None" was already #defined somewhere Bevel, EndCap, InvertedBevel, InvertedEndCap, Cylinder, }; enum class PatchEditVertexType : std::size_t { Corners, Inside, NumberOfVertexTypes, }; class IPatchSettings { public: virtual ~IPatchSettings() {} virtual const Vector3& getVertexColour(PatchEditVertexType type) const = 0; virtual void setVertexColour(PatchEditVertexType type, const Vector3& value) = 0; virtual sigc::signal& signal_settingsChanged() = 0; }; enum class PatchDefType { Def2, Def3, }; /** * Patch management module interface. */ class IPatchModule : public RegisterableModule { public: virtual ~IPatchModule() {} // Create a patch and return the sceneNode virtual scene::INodePtr createPatch(PatchDefType type) = 0; virtual IPatchSettings& getSettings() = 0; }; } class Patch; class IPatchNode { public: virtual ~IPatchNode() {} /** * greebo: Retrieves the actual patch from a PatchNode, only works from within the main module. */ virtual Patch& getPatchInternal() = 0; // Get access to the patch interface virtual IPatch& getPatch() = 0; }; typedef std::shared_ptr IPatchNodePtr; inline bool Node_isPatch(const scene::INodePtr& node) { return node->getNodeType() == scene::INode::Type::Patch; //return std::dynamic_pointer_cast(node) != NULL; } inline IPatch* Node_getIPatch(const scene::INodePtr& node) { auto patchNode = std::dynamic_pointer_cast(node); if (patchNode) { return &patchNode->getPatch(); } return nullptr; } // Casts a node onto a patch inline Patch* Node_getPatch(const scene::INodePtr& node) { auto patchNode = std::dynamic_pointer_cast(node); if (patchNode) { return &patchNode->getPatchInternal(); } return nullptr; } const char* const MODULE_PATCH = "PatchModule"; inline patch::IPatchModule& GlobalPatchModule() { static module::InstanceReference _reference(MODULE_PATCH); return _reference; } DarkRadiant-2.14.0/include/ipath.h000066400000000000000000000036521413722237400166760ustar00rootroot00000000000000#ifndef IPATH_H_ #define IPATH_H_ #include "inode.h" #include namespace scene { /** greebo: This is the base structure used as unique to scenegraph elements. * * It extends the functionality of std::vector to mimick * the interface of a std::stack (push(), top(), pop()) and * provides an additional parent() method that allows * to retrieve the element right below the top() element. * * The parent() method is a convenience method helping to insert * scenegraph elements at the right place without complicated * popping() and pushing(). * * Note: Normally, deriving from STL containers is not a good idea, due to * the non-virtual destructors (all data members in the subclasses * wouldn't get destroyed). In this case it is ok to derive from * std::vector, because no additional data members are introduced. */ class Path : public std::vector { public: // Default constructor Path() {} // Constructor taking an initial element. // The stack is starting with one top element. Path(const INodePtr& initialElement) { push(initialElement); } // Destructor virtual ~Path() {} // Accessor method to retrieve the last element inserted. INodePtr& top() { return back(); } // Accessor method to retrieve the last element inserted. const INodePtr& top() const { return back(); } // Accessor method to retrieve the element below the last inserted. INodePtr& parent() { return *(std::vector::end()-2); } // Accessor method to retrieve the element below the last inserted. const INodePtr& parent() const { return *(std::vector::end()-2); } // Add an element to the stack, this becomes the top() element void push(const INodePtr& newElement) { push_back(newElement); } // Remove the topmost element, the size of the stack is reduced by 1. void pop() { pop_back(); } }; // class Path } // namespace scene #endif /*IPATH_H_*/ DarkRadiant-2.14.0/include/ipreferencesystem.h000066400000000000000000000134561413722237400213300ustar00rootroot00000000000000#pragma once #include #include "imodule.h" // A list containing possible values for a combo box widgets typedef std::list ComboBoxValueList; // Common interface of all preference items (labels, combo boxes, etc.) // All of them can carry a title and a registry key class IPreferenceItemBase { public: virtual ~IPreferenceItemBase() {} typedef std::shared_ptr Ptr; virtual const std::string& getLabel() const = 0; virtual const std::string& getRegistryKey() const = 0; virtual void setRegistryKey(const std::string& key) = 0; }; class IPreferenceLabel : public virtual IPreferenceItemBase { public: virtual ~IPreferenceLabel() {} }; class IPreferenceEntry : public virtual IPreferenceItemBase { public: virtual ~IPreferenceEntry() {} }; class IPreferenceCheckbox : public virtual IPreferenceItemBase { public: virtual ~IPreferenceCheckbox() {} }; class IPreferenceCombobox : public virtual IPreferenceItemBase { public: virtual ~IPreferenceCombobox() {} virtual const ComboBoxValueList& getValues() const = 0; virtual bool storeValueNotIndex() const = 0; }; class IPreferencePathEntry : public virtual IPreferenceItemBase { public: virtual ~IPreferencePathEntry() {} virtual bool browseDirectories() const = 0; }; class IPreferenceSpinner : public virtual IPreferenceItemBase { public: virtual ~IPreferenceSpinner() {} virtual double getLower() = 0; virtual double getUpper() = 0; virtual int getFraction() = 0; }; class IPreferenceSlider : public virtual IPreferenceItemBase { public: virtual ~IPreferenceSlider() {} virtual double getLower() = 0; virtual double getUpper() = 0; virtual double getStepIncrement() = 0; virtual double getPageIncrement() = 0; virtual int getFactor() = 0; }; /* greebo: This is the interface the preference page has to provide for adding * elements to the dialog page. */ class IPreferencePage { public: // destructor virtual ~IPreferencePage() {} // Returns the title as displayed on top of the page's area virtual const std::string& getTitle() const = 0; /** * greebo: Allows to set a custom title of this page. The default title * upon construction is "guessed" by adding a " Settings" to * the page name, "Settings/Patch" gets assigned * a "Patch Settings" as default title. * Use this method to change this to fit your needs. */ virtual void setTitle(const std::string& title) = 0; // greebo: Returns the name (caption) of this Page (e.g. "Settings") virtual const std::string& getName() const = 0; // The preference path leading to this page virtual const std::string& getPath() const = 0; // Returns TRUE if this page doesn't hold any items virtual bool isEmpty() const = 0; virtual void foreachItem(const std::function& functor) const = 0; // greebo: Use this to add a checkbox to the preference dialog that is connected to a registry value virtual void appendCheckBox(const std::string& label, const std::string& registryKey) = 0; // greebo: This adds a horizontal slider and connects it to the given registryKey. virtual void appendSlider(const std::string& name, const std::string& registryKey, double lower, double upper, double step_increment, double page_increment) = 0; /** * \brief * Add a drop-down combo box to the preference page. * * \param name * The name to be displayed next to the combo box. * * \param registryKey * The registry key which stores the value of the combo box. * * \param valueList * List of strings containing the values that should be displayed in the * combo box. * * \param storeValueNotIndex * If true, store the selected text in the registry key. If false, store the * numeric index of the selected item in the registry key. The default is * false. */ virtual void appendCombo(const std::string& name, const std::string& registryKey, const ComboBoxValueList& valueList, bool storeValueNotIndex = false) = 0; /* greebo: Appends an entry field with as caption which is connected to the given registryKey */ virtual void appendEntry(const std::string& name, const std::string& registryKey) = 0; /* greebo: Appends an entry field with spinner buttons which retrieves its value from the given * RegistryKey. The lower and upper values have to be passed as well. */ virtual void appendSpinner(const std::string& name, const std::string& registryKey, double lower, double upper, int fraction) = 0; // greebo: Adds a PathEntry to choose files or directories (depending on the given boolean) virtual void appendPathEntry(const std::string& name, const std::string& registryKey, bool browseDirectories) = 0; // Appends a static label (to add some text to the preference page) virtual void appendLabel(const std::string& caption) = 0; }; const char* const MODULE_PREFERENCESYSTEM("PreferenceSystem"); class IPreferenceSystem : public RegisterableModule { public: /** * greebo: Retrieves the page for the given path. If the page * doesn't exist yet, it will be created at the given path, for example: * * "Settings/Patch Settings" * (spaces are ok, slashes are treated as delimiters, don't use them in the page name) * * Use the page interface to add widgets and connect them to registry keys. * @path: The path to lookup/create * @returns: the IPreferencePage reference. */ virtual IPreferencePage& getPage(const std::string& path) = 0; /** * Visit each page, covering the whole tree */ virtual void foreachPage(const std::function& functor) = 0; }; inline IPreferenceSystem& GlobalPreferenceSystem() { static module::InstanceReference _reference(MODULE_PREFERENCESYSTEM); return _reference; } DarkRadiant-2.14.0/include/iradiant.h000066400000000000000000000037161413722237400173650ustar00rootroot00000000000000#pragma once #include "imodule.h" #include #include const char* const MODULE_RADIANT_CORE("RadiantCore"); namespace applog { class ILogWriter; } namespace language { class ILanguageManager; } // see "i18n.h" namespace radiant { class IMessageBus; // see imessagebus.h /** * Main application host, offering access to the Module Registry * and the logging infrastructure. * * As it implements the RegisterableModule interface, an instance * can be acquired through the GlobalModuleRegistry at runtime. * Module Registration doesn't need to be performed explicitly, * the IRadiant module will register itself. */ class IRadiant : public RegisterableModule { public: typedef std::shared_ptr Ptr; /** * Central logging class of the module. Use this to * attach your own ILogDevices to receive logging output. */ virtual applog::ILogWriter& getLogWriter() = 0; /** * Returns the central module registry instance. */ virtual IModuleRegistry& getModuleRegistry() = 0; /** * Get a reference to the central message handler. */ virtual IMessageBus& getMessageBus() = 0; /** * Get a reference to the Language Manager instance * used to resolve localised string resources. */ virtual language::ILanguageManager& getLanguageManager() = 0; /** * Loads and initialises all modules, starting up the * application. Might throw a StartupFailure exception * on unrecoverable errors. */ virtual void startup() = 0; virtual ~IRadiant() {} // Exception thrown during Radiant startup class StartupFailure : public std::runtime_error { public: StartupFailure(const std::string& msg) : runtime_error(msg) {} }; }; } inline radiant::IRadiant& GlobalRadiantCore() { static module::InstanceReference _reference(MODULE_RADIANT_CORE); return _reference; } DarkRadiant-2.14.0/include/iregion.h000066400000000000000000000012221413722237400172140ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "math/AABB.h" namespace map { class IRegionManager : public RegisterableModule { public: virtual ~IRegionManager() {} /** ' greebo: Stores the corners coordinates of the currently active * region into the given , vectors. * If regioning is inactive, the maximum possible bounds are returned. */ virtual AABB getRegionBounds() = 0; }; } // namespace const char* const MODULE_REGION_MANAGER = "RegionManager"; inline map::IRegionManager& GlobalRegionManager() { static module::InstanceReference _reference(MODULE_REGION_MANAGER); return _reference; } DarkRadiant-2.14.0/include/iregistry.h000066400000000000000000000066401413722237400176120ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "xmlutil/Document.h" #include "xmlutil/Node.h" #include #include namespace { const char* const RKEY_SKIP_REGISTRY_SAVE = "user/skipRegistrySaveOnShutdown"; } /** * \addtogroup registry XML Registry */ // String identifier for the registry module const char* const MODULE_XMLREGISTRY("XMLRegistry"); /** * Abstract base class for the registry module. * * \ingroup registry */ class Registry : public RegisterableModule { public: enum Tree { treeStandard, treeUser }; // Sets a variable in the XMLRegistry or retrieves one virtual void set(const std::string& key, const std::string& value) = 0; virtual std::string get(const std::string& key) = 0; // Checks whether a key exists in the registry virtual bool keyExists(const std::string& key) = 0; /** * Import an XML file into the registry, without a version check. If the * file cannot be imported for any reason, a std::runtime_error exception * will be thrown. * * @param importFilePath * Full pathname of the file to import. * * @param parentKey * The path to the node within the current registry under which the * imported nodes should be added. * * @param tree: the tree the file should be imported to (e.g. eDefault) */ virtual void import(const std::string& importFilePath, const std::string& parentKey, Tree tree) = 0; // Dumps the whole XML content to std::out for debugging purposes virtual void dump() const = 0; // Exports the data which has been modified during this session // to XML files in the user's settings path virtual void saveToDisk() = 0; // Saves the specified node and all its children into the file virtual void exportToFile(const std::string& key, const std::string& filename = "-") = 0; // Retrieves the nodelist corresponding for the specified XPath (wraps to xml::Document) virtual xml::NodeList findXPath(const std::string& path) = 0; // Creates an empty key virtual xml::Node createKey(const std::string& key) = 0; // Creates a new node named as children of with the name attribute set to // The newly created node is returned after creation virtual xml::Node createKeyWithName(const std::string& path, const std::string& key, const std::string& name) = 0; /** * greebo: Sets the named attribute of the given node specified by . * * @path: The XPath to the node. * @attrName: The name of the attribute. * @attrValue: The string value of the attribute. */ virtual void setAttribute(const std::string& path, const std::string& attrName, const std::string& attrValue) = 0; /** * greebo: Loads the value of the given attribute at the given path. * * @path: The XPath to the node. * @attrName: The name of the attribute. * * @returns: the string value of the attribute. */ virtual std::string getAttribute(const std::string& path, const std::string& attrName) = 0; // Deletes an entire subtree from the registry virtual void deleteXPath(const std::string& path) = 0; /// Return a signal which will be emitted when a given key changes virtual sigc::signal signalForKey(const std::string& key) const = 0; }; typedef std::shared_ptr RegistryPtr; // This is the accessor for the registry inline Registry& GlobalRegistry() { static module::InstanceReference _reference(MODULE_XMLREGISTRY); return _reference; } DarkRadiant-2.14.0/include/irender.h000066400000000000000000000432611413722237400172210ustar00rootroot00000000000000#pragma once #include "imodule.h" #include #include "math/Vector3.h" #include "math/AABB.h" #include "ishaderlayer.h" #include /** * \file * Interfaces for the back-end renderer. */ /** * \name Global render flags * * These flags control which capabilities of the renderer are used throughout * the render process. They have a four stage lifecycle: * * 1. The flags are initially SET in the Shader implementation, describing the * features that the particular Shader would like to use for rendering its * renderables. For example, a shader pass performing a blend will set * RENDER_BLEND as one of its flags. * * 2. The flags are MASKED by another set of flags provided to a * RenderableCollector before it traverses the scene graph, in order to control * which shader-specified flags can actually be used for that render pass. For * example, the XYRenderer renders in wireframe mode only, so it does not enable * RENDER_FILL in its mask, while the CamRenderer does. * * 3. The flags may be used to set or change OpenGL state in the shader pass * implementation. For example, if RENDER_BLEND is set, then glEnable(GL_BLEND) * will be called before the associated shader's renderables are rendered. Some * flags map directly to glEnable parameters, while others (such as * RENDER_PROGRAM) specify more complex changes. Some flags do not enable any GL * features at all. * * 4. The flags are passed as a parameter to the OpenGLRenderable::render() * method, allowing individual objects to modify their behaviour accordingly. * For example, objects may decide whether or not to submit colour information * to OpenGL based on the value of the RENDER_VERTEX_COLOUR flag. */ ///@{ const unsigned RENDER_DEFAULT = 0; const unsigned RENDER_LINESTIPPLE = 1 << 0; // glEnable(GL_LINE_STIPPLE) const unsigned RENDER_POLYGONSTIPPLE = 1 << 2; // glEnable(GL_POLYGON_STIPPLE) const unsigned RENDER_ALPHATEST = 1 << 4; // glEnable(GL_ALPHA_TEST) const unsigned RENDER_DEPTHTEST = 1 << 5; // glEnable(GL_DEPTH_TEST) const unsigned RENDER_DEPTHWRITE = 1 << 6; // glDepthMask(GL_TRUE) /// Colour buffer writing disabled with glColorMask const unsigned RENDER_MASKCOLOUR = 1 << 7; const unsigned RENDER_CULLFACE = 1 << 8; // glglEnable(GL_CULL_FACE) const unsigned RENDER_SCALED = 1 << 9; // glEnable(GL_NORMALIZE) const unsigned RENDER_SMOOTH = 1 << 10; // glShadeModel const unsigned RENDER_LIGHTING = 1 << 11; // glEnable(GL_LIGHTING) const unsigned RENDER_BLEND = 1 << 12; // glEnable(GL_BLEND) const unsigned RENDER_OFFSETLINE = 1 << 13; // glEnable(GL_POLYGON_OFFSET_LINE) /// Objects will be rendered as filled polygons (not wireframe). const unsigned RENDER_FILL = 1 << 14; /** * If enabled, mesh objects (geometry that does not consist only of GL_POINTS) * should submit vertex colour information. If disabled, mesh objects must not * change glColor during rendering. * * Does not affect GL state. */ const unsigned RENDER_VERTEX_COLOUR = 1 << 15; /** * If enabled, point geometry may submit colours for each point. If disabled, * point geometry must not change colour during rendering. * * Does not affect GL state. */ const unsigned RENDER_POINT_COLOUR = 1 << 16; /// GL_TEXTURE_2D will be enabled during rendering. const unsigned RENDER_TEXTURE_2D = 1 << 17; /** * Cube map rendering (in camera space) is enabled. The renderer will enable * GL_TEXTURE_CUBE_MAP, and set up the texture matrix such that the viewer * location is the origin. Objects should submit their vertex coordinates as * texture coordinates, which will result in the correct cube map alignment. */ const unsigned RENDER_TEXTURE_CUBEMAP = 1 << 18; /** * Normal map information will be used during rendering. If enabled, objects * should submit normal/tangent/bitangent vertex attributes to enable normal * mapping. Also used by shader passes to signal that they care about lighting * (and need to be provided with a list of incident lights along with * renderable objects). */ const unsigned RENDER_BUMP = 1 << 19; /// A vertex and fragment shader program will be used during rendering. const unsigned RENDER_PROGRAM = 1 << 20; const unsigned RENDER_OVERRIDE = 1 << 21; typedef unsigned RenderStateFlags; ///@} class AABB; class Matrix4; template class BasicVector3; typedef BasicVector3 Vector3; class Shader; typedef std::shared_ptr ShaderPtr; /** * A RenderEntity represents a map entity as seen by the renderer. * It provides up to 12 numbered parameters to the renderer: * parm0, parm1 ... parm11. * * A few of the entity parms are hardwired to things like render colour * as defined through the entity's _color keyvalue, some are set through * scripting, spawmargs or gameplay code. */ class IRenderEntity { public: /** * Get the value of this entity's shader parm with the given index. */ virtual float getShaderParm(int parmNum) const = 0; /** * Entities can specify directions, which are used for particle emission for instance. */ virtual const Vector3& getDirection() const = 0; /** * Returns the wireframe shader for this entity - child primitives need this for rendering. */ virtual const ShaderPtr& getWireShader() const = 0; }; typedef std::shared_ptr IRenderEntityPtr; typedef std::weak_ptr IRenderEntityWeakPtr; /** * \brief Interface for a light source in the renderer. */ class RendererLight { public: virtual ~RendererLight() {} /** * \brief Return the render entity associated with this light * * The IRenderEntity is used to evaluate possible shader expressions in the * shader returned by getShader(). The light object itself may be its own * render entity (so getLightEntity() can just return *this). */ virtual const IRenderEntity& getLightEntity() const = 0; /// Return the shader for this light virtual const ShaderPtr& getShader() const = 0; /** * \brief Return the world-space to light-texture-space transformation matrix. * * The light texture space is a box, with coordinates [0..1] on each * dimension, representing the texture (UV) coordinates of the light falloff * textures that will be applied to rendered fragments within the light * volume. * * The matrix returned by this method transforms coordinates in world space * into coordinates in light-texture space. */ virtual Matrix4 getLightTextureTransformation() const = 0; /** * \brief Return the AABB of the illuminated volume. * * This AABB represents the boundaries of the volume which are illuminated * by this light. Anything outside of this volume does not need to be * considered for shading by this light. * * Note that for omni lights, dragging the light center point outside of * the light volume does not expand the lightAABB() value, because the * light center only affects the direction of the light rays, not the size * of the illuminated volume. */ virtual AABB lightAABB() const = 0; /** * \brief Return the light origin in world space. * * The light origin is the point from which the light rays are considered to * be projected, i.e. the direction from which bump maps will be illuminated * and shadows (if they existed) would be cast. * * For an omindirectional light, this origin is determined from the * "light_center" keyvalue in combination with the bounding box itself, * whereas for a projected light it is always equal to the tip of the * pyramid (the same as worldOrigin()). */ virtual Vector3 getLightOrigin() const = 0; }; typedef std::shared_ptr RendererLightPtr; /// Debug stream insertion for RendererLight inline std::ostream& operator<< (std::ostream& os, const RendererLight& l) { return os << "RendererLight(origin=" << math::pp(l.getLightOrigin()) << ", lightAABB=" << l.lightAABB() << ")"; } /** * \brief Interface for an object which can test its intersection with a * RendererLight. * * Objects which implement this interface define a intersectsLight() function * which determines whether the given light intersects the object. */ class LitObject { public: virtual ~LitObject() {} /// Test if the given light intersects the LitObject virtual bool intersectsLight(const RendererLight& light) const = 0; }; typedef std::shared_ptr LitObjectPtr; class Renderable; typedef std::function RenderableCallback; typedef std::function RendererLightCallback; /** * \brief * Simple container of light sources * * This is a storage class used to represent all light sources which fall upon * a particular object. It is passed to the RenderSystem at render time to * provide the list of lights which intersect the Renderable being submitted. */ class LightSources { public: /// Invoke a callback on all contained lights. virtual void forEachLight(const RendererLightCallback& callback) const = 0; }; /// Debug stream insertion for LightSources inline std::ostream& operator<< (std::ostream& s, const LightSources& ls) { s << "LightSources("; // Insert comma-separated list of RendererLights bool addComma = false; ls.forEachLight( [&](const RendererLight& l) { if (addComma) s << ", "; s << l; addComma = true; } ); return s << ")"; } /// Debug stream insertion for possibly null LightSources pointer inline std::ostream& operator<< (std::ostream& s, const LightSources* ls) { if (ls) return s << *ls; else return s << "[no lightsources]"; } const int c_attr_TexCoord0 = 1; const int c_attr_Tangent = 3; const int c_attr_Binormal = 4; /** * \brief * Data object passed to the backend OpenGLRenderable::render() method * containing information about the render pass which may be of use to * renderable objects, including the render flags and various * matrices/coordinates. */ class RenderInfo { // Render flags RenderStateFlags _flags; // Viewer location in 3D space Vector3 _viewerLocation; // Cube map mode IShaderLayer::CubeMapMode _cubeMapMode; public: /// Default constructor RenderInfo(RenderStateFlags flags = RENDER_DEFAULT, const Vector3& viewer = Vector3(0, 0, 0), IShaderLayer::CubeMapMode cubeMode = IShaderLayer::CUBE_MAP_NONE) : _flags(flags), _viewerLocation(viewer), _cubeMapMode(cubeMode) { } /// Check if a flag is set bool checkFlag(unsigned flag) const { return (_flags & flag) != 0; } /// Get the entire flag bitfield. RenderStateFlags getFlags() const { return _flags; } /// Get the viewer location. const Vector3& getViewerLocation() const { return _viewerLocation; } /// Get the cube map mode. IShaderLayer::CubeMapMode getCubeMapMode() const { return _cubeMapMode; } }; /** * \brief * Interface for objects which can render themselves in OpenGL. * * This interface is used by the render backend, after renderable objects have * first been submitted using the Renderable interface. The backend render() * function should contain the OpenGL calls necessary to submit vertex, normal * and texture-coordinate data. * * No GL state changes should occur in render(), other than those specifically * allowed by the render flags. */ class OpenGLRenderable { public: virtual ~OpenGLRenderable() {} /** * \brief * Submit OpenGL render calls. */ virtual void render(const RenderInfo& info) const = 0; }; class Matrix4; class Texture; #include "math/Vector3.h" class Material; typedef std::shared_ptr MaterialPtr; /** * A Shader represents a single material which can be rendered in OpenGL, which * may correspond to an actual material (Material), a raw colour or a special * GL shader. * * Importantly, a Shader also maintains its own list of OpenGLRenderable objects * which use it -- the actual rendering is performed by traversing a list of * Shaders and rendering the geometry attached to each one. */ class Shader { public: // Observer interface to get notified on (un-)realisation class Observer { public: virtual void onShaderRealised() = 0; virtual void onShaderUnrealised() = 0; }; virtual ~Shader() {} /// Return the name used to construct this shader virtual std::string getName() const = 0; /** * \brief * Attach a renderable object to this Shader, which will be rendered using * this Shader when the render backend is activated. * * \param renderable * The OpenGLRenderable object to add. * * \param modelview * The modelview transform for this object. * * \param lights * Optional LightSources containing all of the lights which illuminate this * object. * * \param entity * Optional IRenderEntity exposing entity-related render parameters. */ virtual void addRenderable(const OpenGLRenderable& renderable, const Matrix4& modelview, const LightSources* lights = nullptr, const IRenderEntity* entity = nullptr) = 0; /** * \brief * Control the visibility of this shader. * * A shader that is not visible will perform no rendering and ignore any * renderables submitted to it with addRenderable(). */ virtual void setVisible(bool visible) = 0; /// Query if this shader is visible virtual bool isVisible() const = 0; virtual void incrementUsed() = 0; virtual void decrementUsed() = 0; // Attach/detach an observer to this shader object. // In case the shader is already realised when attachObserver() is called, // the observer's onShaderRealised() method is immediately invoked. // The analogous holds for detachObserver(): if the shader is realised, // the observer's onShaderUnrealised() method is invoked before unregistering it. virtual void attachObserver(Observer& observer) = 0; virtual void detachObserver(Observer& observer) = 0; virtual bool isRealised() = 0; /** * \brief Retrieve the Material that was used to construct this shader (if * any). * * \return * An Material subclass with information about the shader definition */ virtual const MaterialPtr& getMaterial() const = 0; virtual unsigned int getFlags() const = 0; }; /** * Shared pointer typedef for Shader. */ typedef std::shared_ptr ShaderPtr; const char* const MODULE_RENDERSYSTEM("ShaderCache"); /** * \brief * The main interface for the backend renderer. */ class RenderSystem : public RegisterableModule { public: /** * \brief * Capture the given shader, increasing its reference count and * returning a pointer to the Shader object. * * The object must be freed after use by calling release(). * * @param name * The name of the shader to capture. * * @returns * Shader* object corresponding to the given material shader name. */ virtual ShaderPtr capture(const std::string& name) = 0; /** * \brief * Main render method. * * This method traverses all of the OpenGLRenderable objects that have been * submitted to Shader instances, and invokes their render() method to draw * their geometry. * * \param globalFlagsMask * The mask of render flags which are permitted during this render pass. Any * render flag which is 0 in this mask will not be enabled during rendering, * even if the particular shader requests it. * * \param modelview * The modelview transformation matrix to apply before rendering. * * \param projection * The view projection matrix to apply before rendering. * * \param viewer * Location of the viewer in world space. */ virtual void render(RenderStateFlags globalFlagsMask, const Matrix4& modelview, const Matrix4& projection, const Vector3& viewer) = 0; virtual void realise() = 0; virtual void unrealise() = 0; /** * Get the current render time in milliseconds. */ virtual std::size_t getTime() const = 0; /** * Set the render time in milliseconds. */ virtual void setTime(std::size_t milliSeconds) = 0; /* SHADER PROGRAMS */ /// Available GL programs used for backend rendering. enum ShaderProgram { /// No shader program (normal GL fixed-function pipeline) SHADER_PROGRAM_NONE, /// Lighting interaction shader SHADER_PROGRAM_INTERACTION }; /// Get the current shader program in use. virtual ShaderProgram getCurrentShaderProgram() const = 0; /// Set the shader program to use. virtual void setShaderProgram(ShaderProgram prog) = 0; virtual void attachRenderable(const Renderable& renderable) = 0; virtual void detachRenderable(const Renderable& renderable) = 0; virtual void forEachRenderable(const RenderableCallback& callback) const = 0; // Initialises the OpenGL extensions virtual void extensionsInitialised() = 0; // Returns true if openGL supports ARB or GLSL lighting virtual bool shaderProgramsAvailable() const = 0; // Sets the flag whether shader programs are available. virtual void setShaderProgramsAvailable(bool available) = 0; // Subscription to get notified as soon as the openGL extensions have been initialised virtual sigc::signal signal_extensionsInitialised() = 0; }; typedef std::shared_ptr RenderSystemPtr; typedef std::weak_ptr RenderSystemWeakPtr; /** * \brief * Global accessor method for the RenderSystem instance. */ inline RenderSystem& GlobalRenderSystem() { static module::InstanceReference _reference(MODULE_RENDERSYSTEM); return _reference; } DarkRadiant-2.14.0/include/irenderable.h000066400000000000000000000134531413722237400200450ustar00rootroot00000000000000#pragma once #include class Shader; typedef std::shared_ptr ShaderPtr; class RenderSystem; typedef std::shared_ptr RenderSystemPtr; class OpenGLRenderable; class LightSources; class Matrix4; class IRenderEntity; class RendererLight; class LitObject; /** * \brief Class which accepts OpenGLRenderable objects during the first pass of * rendering. * * Each Renderable in the scenegraph is passed a reference to a * RenderableCollector, to which the Renderable submits its OpenGLRenderable(s) * for later rendering. A single Renderable may submit more than one * OpenGLRenderable, with different options each time -- for instance a * Renderable model class may submit each of its material surfaces separately * with different shaders. */ class RenderableCollector { public: virtual ~RenderableCollector() {} /** * \brief Submit a renderable object. * * This method allows renderable geometry to be submitted under the control * of a LitObject which will determine whether and how the renderable is * illuminated by scene lights. Each objected submitted with this method * will be considered for lighting by the lights which are submitted to the * same RenderableCollector using addLight(). * * Objects may be submitted without a LitObject if they are not affected by * scene lights. * * \param shader * The Shader object this Renderable will be attached to. * * \param renderable * The renderable object to submit. * * \param localToWorld * The local to world transform that should be applied to this object when * it is rendered. * * \param entity * Optional IRenderEntity exposing parameters which affect the rendering of * this Renderable. * * \param litObject * Optional LitObject determining lighting interactions for this * renderable. This may or may not be the same actual object as the * OpenGLRenderable, depending on how the object class hierarchy is set up. * If a single LitObject contains multiple renderables, a separate call to * this method must be made for each renderable (with the same litObject * parameter). */ virtual void addRenderable(Shader& shader, const OpenGLRenderable& renderable, const Matrix4& localToWorld, const LitObject* litObject = nullptr, const IRenderEntity* entity = nullptr) = 0; /** * \brief Submit a light source for the render operation. * * This is the entry point for lights into the render front-end. Each light * in the scene graph must be submitted through this method in order to * provide light for the final render. If the render is in wireframe mode, * light sources can still be submitted but they will not have any effect. */ virtual void addLight(const RendererLight& light) = 0; /** * \brief Determine if this RenderableCollector can accept renderables for * full materials rendering, or just wireframe rendering. * * \return * true if full materials are supported, false if only wireframe rendering * is supported. */ virtual bool supportsFullMaterials() const = 0; struct Highlight { enum Flags { NoHighlight = 0, Faces = 1 << 0, /// Highlight faces of subsequently-submitted objects, if supported Primitives = 1 << 1, /// Highlight primitives of subsequently-submitted objects, if supported GroupMember = 1 << 2, /// Highlight as member of group, if supported MergeAction = 1 << 3, /// Highlight as merge action (combined with the flags below) MergeActionAdd = 1 << 4, /// Highlight as merge action that is adding something MergeActionRemove = 1 << 5, /// Highlight as merge action that is removing something MergeActionChange = 1 << 6, /// Highlight as merge action that is changing something MergeActionConflict = 1 << 7, /// Highlight as merge action conflict }; }; virtual void setHighlightFlag(Highlight::Flags flags, bool enabled) = 0; }; class VolumeTest; /** * \brief * Main interface for Renderable scene objects. * * All objects which wish to be rendered need to implement this interface. * During the scenegraph traversal for rendering, each Renderable object is * passed a RenderableCollector object which it can use to submit its geometry * and state parameters. */ class Renderable { public: /// Destroy the Renderable virtual ~Renderable() {} /** * Sets the rendersystem this renderable is attached to. This is necessary * for this object to request Materials/Shaders for rendering. */ virtual void setRenderSystem(const RenderSystemPtr& renderSystem) = 0; /// Submit renderable geometry when rendering in Solid mode. virtual void renderSolid(RenderableCollector& collector, const VolumeTest& volume) const = 0; /// Submit renderable geometry when rendering in Wireframe mode. virtual void renderWireframe(RenderableCollector& collector, const VolumeTest& volume) const = 0; virtual void renderComponents(RenderableCollector&, const VolumeTest&) const { } virtual void viewChanged() const { } struct Highlight { enum Flags { NoHighlight = 0, Selected = 1 << 0, GroupMember = 1 << 1, }; }; /** * Returns information about whether the renderer should highlight this node and how. */ virtual std::size_t getHighlightFlags() = 0; }; typedef std::shared_ptr RenderablePtr; DarkRadiant-2.14.0/include/irendersystemfactory.h000066400000000000000000000016001413722237400220450ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "irender.h" class RenderSystem; typedef std::shared_ptr RenderSystemPtr; namespace render { /** * greebo: The rendersystem factory can be used to generate * new instances of DarkRadiant's backend renderer. * * The backend renderer provides access to named Shader objects * which can be filled with OpenGLRenderable objects. */ class IRenderSystemFactory : public RegisterableModule { public: /** * Instantiates a new rendersystem. */ virtual RenderSystemPtr createRenderSystem() = 0; }; } // namespace const char* const MODULE_RENDERSYSTEMFACTORY = "RenderSystemFactory"; // Global accessor to the rendersystem factory module inline render::IRenderSystemFactory& GlobalRenderSystemFactory() { static module::InstanceReference _reference(MODULE_RENDERSYSTEMFACTORY); return _reference; } DarkRadiant-2.14.0/include/irenderview.h000066400000000000000000000011151413722237400201040ustar00rootroot00000000000000#pragma once #include "ivolumetest.h" #include #include class Frustum; namespace render { // Interface used by camera views, extending the VolumeTest base // by some accessors needed to set up and run an openGL render pass. class IRenderView : public VolumeTest { public: virtual ~IRenderView() {} virtual void construct(const Matrix4& projection, const Matrix4& modelview, std::size_t width, std::size_t height) = 0; virtual Vector3 getViewer() const = 0; virtual const Frustum& getFrustum() const = 0; virtual std::string getCullStats() const = 0; }; } DarkRadiant-2.14.0/include/iscenegraph.h000066400000000000000000000105021413722237400200510ustar00rootroot00000000000000#pragma once #include #include "imodule.h" #include "inode.h" #include "ipath.h" #include "imap.h" #include /** * \defgroup scenegraph Scenegraph * * \namespace scene * \ingroup scenegraph * Interfaces and types relating to the scene-graph. */ // String identifier for the registry module const char* const MODULE_SCENEGRAPH("SceneGraph"); class VolumeTest; namespace scene { class ISpacePartitionSystem; typedef std::shared_ptr ISpacePartitionSystemPtr; /** * A scene-graph - a Directed Acyclic Graph (DAG). * * Each node may refer to zero or more 'child' nodes (directed). * A node may never have itself as one of its ancestors (acyclic). */ class Graph { public: /* greebo: Derive from this class to get notified on scene changes */ class Observer { public: // destructor virtual ~Observer() {} // Gets called when anything in the scenegraph changes virtual void onSceneGraphChange() {} // Gets called when a new is inserted into the scenegraph virtual void onSceneNodeInsert(const INodePtr& node) {} // Gets called when is removed from the scenegraph virtual void onSceneNodeErase(const INodePtr& node) {} }; // Returns the root-node of the graph. virtual const IMapRootNodePtr& root() const = 0; // Sets the root-node of the graph to be 'newRoot'. virtual void setRoot(const IMapRootNodePtr& newRoot) = 0; // greebo: Adds a node to the scenegraph virtual void insert(const scene::INodePtr& node) = 0; // Removes a node from the scenegraph virtual void erase(const scene::INodePtr& node) = 0; /// \brief Invokes all scene-changed callbacks. Called when any part of the scene changes the way it will appear when the scene is rendered. /// \todo Move to a separate class. virtual void sceneChanged() = 0; /// \brief Add a \p callback to be invoked when the scene changes. /// \todo Move to a separate class. virtual void addSceneObserver(Observer* observer) = 0; // greebo: Remove the scene observer from the list virtual void removeSceneObserver(Observer* observer) = 0; /// Accessor for the signal emitted when bounds are changed virtual sigc::signal signal_boundsChanged() const = 0; /// \brief Invokes all bounds-changed callbacks. Called when the bounds of any instance in the scene change. /// \todo Move to a separate class. virtual void boundsChanged() = 0; // A specific node has changed its bounds virtual void nodeBoundsChanged(const scene::INodePtr& node) = 0; // A walker class to be used in "foreachNodeInVolume" class Walker { public: virtual ~Walker() {} // Called for each visited node, returns TRUE if traversal should continue virtual bool visit(const INodePtr& node) = 0; }; // Visit each scene node in the given volume using the given walker class, even hidden ones virtual void foreachNodeInVolume(const VolumeTest& volume, Walker& walker) = 0; // Same as above, but culls any hidden nodes virtual void foreachVisibleNodeInVolume(const VolumeTest& volume, Walker& walker) = 0; // Call the functor on each scene node in the entire scenegraph, including hidden ones virtual void foreachNode(const INode::VisitorFunc& functor) = 0; // Call the functor on each scene node in the entire scenegraph, excluding hidden ones virtual void foreachVisibleNode(const INode::VisitorFunc& functor) = 0; // Call the functor on each scene node in the given volume, even hidden ones virtual void foreachNodeInVolume(const VolumeTest& volume, const INode::VisitorFunc& functor) = 0; // Same as above, but culls any hidden nodes virtual void foreachVisibleNodeInVolume(const VolumeTest& volume, const INode::VisitorFunc& functor) = 0; // Returns the associated spacepartition virtual ISpacePartitionSystemPtr getSpacePartition() = 0; }; typedef std::shared_ptr GraphPtr; typedef std::weak_ptr GraphWeakPtr; class Cloneable { public: /// \brief destructor virtual ~Cloneable() {} /// \brief Returns a copy of itself. virtual scene::INodePtr clone() const = 0; }; typedef std::shared_ptr CloneablePtr; } // namespace // Accessor to the singleton scenegraph, used for the main map inline scene::Graph& GlobalSceneGraph() { static module::InstanceReference _reference(MODULE_SCENEGRAPH); return _reference; } inline void SceneChangeNotify() { GlobalSceneGraph().sceneChanged(); } DarkRadiant-2.14.0/include/iscenegraphfactory.h000066400000000000000000000016141413722237400214450ustar00rootroot00000000000000#pragma once #include "iscenegraph.h" namespace scene { /** * greebo: The scenegraph factory can be used to generate * new instances of DarkRadiant's main scene manager. * * A Scenegraph consists of [0..N] scene::INodes, forming * an acyclic graph. There is one main scenegraph in DarkRadiant * accessible through GlobalSceneGraph(), but it's possible to have * more than this one, used for preview scenes for example. */ class ISceneGraphFactory : public RegisterableModule { public: /** * Instantiates a new scenegraph. */ virtual GraphPtr createSceneGraph() = 0; }; } // namespace const char* const MODULE_SCENEGRAPHFACTORY = "SceneGraphFactory"; // Global accessor to the rendersystem factory module inline scene::ISceneGraphFactory& GlobalSceneGraphFactory() { static module::InstanceReference _reference(MODULE_SCENEGRAPHFACTORY); return _reference; } DarkRadiant-2.14.0/include/iscript.h000066400000000000000000000044111413722237400172400ustar00rootroot00000000000000#pragma once #include "imodule.h" #include namespace script { struct ExecutionResult { // The output of the script std::string output; // whether an error occurred bool errorOccurred; }; typedef std::shared_ptr ExecutionResultPtr; // Declared in iscriptinterface.h class IScriptInterface; typedef std::shared_ptr IScriptInterfacePtr; // Represents a named, executable .py script file class IScriptCommand { public: virtual ~IScriptCommand() {} virtual const std::string& getName() const = 0; virtual const std::string& getFilename() const = 0; virtual const std::string& getDisplayName() const = 0; }; /** * DarkRadiant's Scripting System, based on pybind11. It's possible * to expose additional interfaces by using the addInterface() method. */ class IScriptingSystem : public RegisterableModule { public: /** * greebo: Add a named interface to the scripting system. The interface object * must provide a "registerInterface" method which will declare the names * and objects to the given namespace. */ virtual void addInterface(const std::string& name, const IScriptInterfacePtr& iface) = 0; /** * greebo: Executes the given python script file. The filename is specified relatively * to the scripts/ folder. */ virtual void executeScriptFile(const std::string& filename) = 0; /** * greebo: Interprets the given string as python script. * * @returns: the result object. */ virtual script::ExecutionResultPtr executeString(const std::string& scriptString) = 0; /** * Iterate over all available script commands, invoking the given functor. */ virtual void foreachScriptCommand(const std::function& functor) = 0; /** * Signal fired when the available set of scripts has been reloaded */ virtual sigc::signal& signal_onScriptsReloaded() = 0; }; typedef std::shared_ptr IScriptingSystemPtr; } // namespace script // String identifier for the script module const char* const MODULE_SCRIPTING_SYSTEM("ScriptingSystem"); // This is the accessor for the scripting system inline script::IScriptingSystem& GlobalScriptingSystem() { static module::InstanceReference _reference(MODULE_SCRIPTING_SYSTEM); return _reference; } DarkRadiant-2.14.0/include/iscriptinterface.h000066400000000000000000000011161413722237400211200ustar00rootroot00000000000000#pragma once #include #include #include #include namespace py = pybind11; namespace script { class IScriptInterface { public: using Ptr = std::shared_ptr; virtual ~IScriptInterface() {} /** * This method is called by the Scripting System to let this class * add its objects to the Python context. */ virtual void registerInterface(py::module& scope, py::dict& globals) = 0; }; using NamedInterface = std::pair; using NamedInterfaces = std::vector; } DarkRadiant-2.14.0/include/iselectable.h000066400000000000000000000021311413722237400200340ustar00rootroot00000000000000#pragma once #include /** * greebo: A Selectable is everything that can be highlighted * by the user in the scene (e.g. by interaction with the mouse). */ class ISelectable { public: // destructor virtual ~ISelectable() {} // Set the selection status of this object virtual void setSelected(bool select) = 0; // Check the selection status of this object (TRUE == selected) virtual bool isSelected() const = 0; }; typedef std::shared_ptr ISelectablePtr; namespace scene { class INode; typedef std::shared_ptr INodePtr; } inline ISelectablePtr Node_getSelectable(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } inline void Node_setSelected(const scene::INodePtr& node, bool selected) { ISelectablePtr selectable = Node_getSelectable(node); if (selectable) { selectable->setSelected(selected); } } inline bool Node_isSelected(const scene::INodePtr& node) { ISelectablePtr selectable = Node_getSelectable(node); if (selectable) { return selectable->isSelected(); } return false; } DarkRadiant-2.14.0/include/iselection.h000066400000000000000000000173111413722237400177240ustar00rootroot00000000000000#pragma once #include #include "imodule.h" #include "ivolumetest.h" #include #include #include "imanipulator.h" class RenderableCollector; class ISelectable; class SelectionTest; namespace scene { class INode; typedef std::shared_ptr INodePtr; } template class BasicVector2; typedef BasicVector2 Vector2; template class BasicVector3; typedef BasicVector3 Vector3; template class BasicVector4; typedef BasicVector4 Vector4; class Matrix4; class Quaternion; typedef sigc::signal SelectionChangedSignal; typedef sigc::slot SelectionChangedSlot; class SelectionInfo; class Face; class IFace; class Brush; class IPatch; namespace selection { struct WorkZone; // The possible modes when in "component manipulation mode" // Used by the SelectionSystem as well as the Texture Tool enum class ComponentSelectionMode { Default, Vertex, Edge, Face, }; } namespace selection { class SelectionSystem : public RegisterableModule { public: enum EModifier { eManipulator, // greebo: This is the standard case (drag, click without modifiers) eToggle, // This is for Shift-Clicks to toggle the selection of an instance eReplace, // This is active if the mouse is moved to a NEW location and Alt-Shift is held eCycle, // This is active if the mouse STAYS at the same position and Alt-Shift is held }; enum EMode { eEntity, ePrimitive, eGroupPart, eComponent, eMergeAction, }; /** greebo: An SelectionSystem::Observer gets notified * as soon as the selection is changed. */ class Observer { public: virtual ~Observer() {} /** greebo: This gets called upon selection change. * * @instance: The instance that got affected (this may also be the parent brush of a FaceInstance). * @isComponent: is TRUE if the changed selectable is a component (like a FaceInstance, VertexInstance). */ virtual void selectionChanged(const scene::INodePtr& node, bool isComponent) = 0; }; virtual void addObserver(Observer* observer) = 0; virtual void removeObserver(Observer* observer) = 0; // Returns the ID of the registered manipulator virtual std::size_t registerManipulator(const ISceneManipulator::Ptr& manipulator) = 0; virtual void unregisterManipulator(const ISceneManipulator::Ptr& manipulator) = 0; virtual IManipulator::Type getActiveManipulatorType() = 0; // Returns the currently active Manipulator, which is always non-null virtual const ISceneManipulator::Ptr& getActiveManipulator() = 0; virtual void setActiveManipulator(std::size_t manipulatorId) = 0; virtual void setActiveManipulator(IManipulator::Type manipulatorType) = 0; virtual sigc::signal& signal_activeManipulatorChanged() = 0; virtual const SelectionInfo& getSelectionInfo() = 0; virtual void SetMode(EMode mode) = 0; virtual EMode Mode() const = 0; virtual void SetComponentMode(ComponentSelectionMode mode) = 0; virtual ComponentSelectionMode ComponentMode() const = 0; virtual sigc::signal& signal_selectionModeChanged() = 0; virtual sigc::signal& signal_componentModeChanged() = 0; virtual std::size_t countSelected() const = 0; virtual std::size_t countSelectedComponents() const = 0; virtual void onSelectedChanged(const scene::INodePtr& node, const ISelectable& selectable) = 0; virtual void onComponentSelection(const scene::INodePtr& node, const ISelectable& selectable) = 0; virtual scene::INodePtr ultimateSelected() = 0; virtual scene::INodePtr penultimateSelected() = 0; /** * \brief * Set the selection status of all objects in the scene. * * \param selected * true to select all objects, false to deselect all objects. */ virtual void setSelectedAll(bool selected) = 0; virtual void setSelectedAllComponents(bool selected) = 0; /** * @brief Visitor interface for the selection system. * * This defines the Visitor interface which is used in the foreachSelected() * and foreachSelectedComponent() visit methods. */ class Visitor { public: virtual ~Visitor() {} /// Called by the selection system for each visited node. virtual void visit(const scene::INodePtr& node) const = 0; }; /// Use the provided Visitor object to enumerate each selected node. void foreachSelected(const Visitor& visitor) { foreachSelected([&visitor](const scene::INodePtr& p) { visitor.visit(p); }); } /** * @brief * Use the provided Visitor object to enumerate each selected component. */ virtual void foreachSelectedComponent(const Visitor& visitor) = 0; /// Call the given functor to enumerate each selected node. virtual void foreachSelected(const std::function& functor) = 0; /** * @brief * Use the provided functor to enumerate each selected component. */ virtual void foreachSelectedComponent(const std::function& functor) = 0; /** * Call the given functor for each selected brush. Selected group nodes like func_statics * are traversed recursively, invoking the functor for each visible brush in question. */ virtual void foreachBrush(const std::function& functor) = 0; /** * Call the given functor for each selected face. Selected group nodes like func_statics * are traversed recursively, invoking the functor for each visible face in question. * Singly selected faces (those which have been selected in component mode) are * considered as well by this method. */ virtual void foreachFace(const std::function& functor) = 0; /** * Call the given functor for each selected patch. Selected group nodes like func_statics * are traversed recursively, invoking the functor for each visible patch in question. */ virtual void foreachPatch(const std::function& functor) = 0; // Returns the number of currently selected faces virtual std::size_t getSelectedFaceCount() = 0; // Returns the reference to the singly selected face // Calling this will cause an cmd::ExecutionFailure if getSelectedFaceCount() != 1 virtual IFace& getSingleSelectedFace() = 0; /// Signal emitted when the selection is changed virtual SelectionChangedSignal signal_selectionChanged() const = 0; virtual const Matrix4& getPivot2World() = 0; virtual void pivotChanged() = 0; // Feedback events invoked by the ManipulationMouseTool virtual void onManipulationStart() = 0; virtual void onManipulationChanged() = 0; virtual void onManipulationEnd() = 0; virtual void onManipulationCancelled() = 0; virtual void selectPoint(SelectionTest& test, EModifier modifier, bool face) = 0; virtual void selectArea(SelectionTest& test, EModifier modifier, bool face) = 0; /** * Returns the current "work zone", which is defined by the * currently selected elements. Each time a scene node is selected, * the workzone is adjusted to surround the current selection. * Deselecting nodes doesn't change the workzone. * * The result is used to determine the "third" component of operations * performed in the 2D views, like placing an entity. * * Note: the struct is defined in selectionlib.h. */ virtual const WorkZone& getWorkZone() = 0; // Returns the center point of the current selection virtual Vector3 getCurrentSelectionCenter() = 0; }; } constexpr const char* const MODULE_SELECTIONSYSTEM("SelectionSystem"); inline selection::SelectionSystem& GlobalSelectionSystem() { static module::InstanceReference _reference(MODULE_SELECTIONSYSTEM); return _reference; } DarkRadiant-2.14.0/include/iselectiongroup.h000066400000000000000000000110171413722237400207760ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "iselectable.h" #include // GroupSelectables are regular selectables which can be part of // one or more SelectionGroups. class IGroupSelectable : public ISelectable { public: typedef std::vector GroupIds; virtual ~IGroupSelectable() {} // Adds this item to the group specified by its ID virtual void addToGroup(std::size_t groupId) = 0; // Removes this item from the group specified by its ID virtual void removeFromGroup(std::size_t groupId) = 0; // Returns true if this node is member of any group virtual bool isGroupMember() = 0; // Returns the group this node has been added to last // This represents the currently "active" group ID // Will throw an exception if this node is not a member of any group virtual std::size_t getMostRecentGroupId() = 0; // Returns all group assignments of this node // The most recently added group is at the back of the list virtual const GroupIds& getGroupIds() const = 0; // Special overload to control whether this selectable should propagate // the status change to the group it belongs to. virtual void setSelected(bool select, bool changeGroupStatus) = 0; }; namespace selection { // Represents a SelectionGroup which can contain 0 or more IGroupSelectable nodes. class ISelectionGroup { public: virtual ~ISelectionGroup() {} // Returns the ID of this group virtual std::size_t getId() const = 0; // Gets the name of this group virtual const std::string& getName() const = 0; // Sets the name of this group virtual void setName(const std::string& name) = 0; // Adds the given node to this group. The node should be a IGroupSelectable // which will be checked internally. If the node is not matching, nothing happens. virtual void addNode(const scene::INodePtr& node) = 0; // Remvoes the given node from this group. The node should be a IGroupSelectable // which will be checked internally. If the node is not matching, nothing happens. // The group will not be removed if this was the last member node virtual void removeNode(const scene::INodePtr& node) = 0; // Returns the number of nodes in this group virtual std::size_t size() const = 0; // Sets the selection status of all the nodes in this group virtual void setSelected(bool selected) = 0; // Calls the given functor for each node in this group. // The functor should not change the membership of this group, this will likely lead // to internal iterator corruption. virtual void foreachNode(const std::function& functor) = 0; }; typedef std::shared_ptr ISelectionGroupPtr; class ISelectionGroupManager { public: typedef std::shared_ptr Ptr; virtual ~ISelectionGroupManager() {} // Creates a new selection group. The group is stored within the SelectionGroupManager // so the returned shared_ptr can safely be let go by the client code. // In the pathological case of being run out of IDs this will throw a std::runtime_error virtual ISelectionGroupPtr createSelectionGroup() = 0; // Special overload used to create a group with a specific ID. Only intended to be used // by map loading modules to reconstruct persisted group data after parsing. virtual ISelectionGroupPtr createSelectionGroup(std::size_t id) = 0; // Tries to get a selection group by ID. Returns an empty ptr if the ID doesn't exist virtual ISelectionGroupPtr getSelectionGroup(std::size_t id) = 0; // Unline getSelectionGroup() this will create the group if it doesn't exist virtual ISelectionGroupPtr findOrCreateSelectionGroup(std::size_t id) = 0; // Sets the selection status of all members of the given group virtual void setGroupSelected(std::size_t id, bool selected) = 0; // Deletes all selection groups virtual void deleteAllSelectionGroups() = 0; // Deletes the group with the given ID. All nodes will be removed from this group as well. virtual void deleteSelectionGroup(std::size_t id) = 0; // Visit each group with the given functor virtual void foreachSelectionGroup(const std::function& func) = 0; }; class ISelectionGroupModule : public RegisterableModule { public: virtual ~ISelectionGroupModule() {} virtual ISelectionGroupManager::Ptr createSelectionGroupManager() = 0; }; } // namespace const char* const MODULE_SELECTIONGROUPMODULE = "SelectionGroupModule"; inline selection::ISelectionGroupModule& GlobalSelectionGroupModule() { static module::InstanceReference _reference(MODULE_SELECTIONGROUPMODULE); return _reference; } DarkRadiant-2.14.0/include/iselectionset.h000066400000000000000000000054441413722237400204440ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "inode.h" #include #include namespace selection { class ISelectionSet { public: // The name of this set virtual const std::string& getName() = 0; // Checks whether this set is empty virtual bool empty() = 0; // Selects all member nodes of this set virtual void select() = 0; // De-selects all member nodes of this set virtual void deselect() = 0; // Removes all members, leaving this set as empty virtual void clear() = 0; // Clears this set and loads the currently selected nodes in the // scene as new members into this set. virtual void assignFromCurrentScene() = 0; // Adds the given node to this set virtual void addNode(const scene::INodePtr& node) = 0; // Returns the nodes contained in this selection set. virtual std::set getNodes() = 0; }; typedef std::shared_ptr ISelectionSetPtr; class ISelectionSetManager { public: typedef std::shared_ptr Ptr; virtual ~ISelectionSetManager() {} /** * Signal emitted when the list of selection sets has been changed, by * deletion or addition. */ virtual sigc::signal signal_selectionSetsChanged() const = 0; class Visitor { public: virtual ~Visitor() {} virtual void visit(const ISelectionSetPtr& set) = 0; }; /** * greebo: Traverses the list of selection sets using * the given visitor class. */ virtual void foreachSelectionSet(Visitor& visitor) = 0; typedef std::function VisitorFunc; /** * greebo: Traverses the list of selection sets using the given functor. */ virtual void foreachSelectionSet(const VisitorFunc& functor) = 0; /** * greebo: Creates a new selection set with the given name. * If a selection with that name is already registered, the existing * one is returned. */ virtual ISelectionSetPtr createSelectionSet(const std::string& name) = 0; /** * Removes the named selection set. If the named set is * not existing, nothing happens. */ virtual void deleteSelectionSet(const std::string& name) = 0; /** * Deletes all sets. */ virtual void deleteAllSelectionSets() = 0; /** * Finds the named selection set. * * @returns the found selection set or NULL if the set is not existent. */ virtual ISelectionSetPtr findSelectionSet(const std::string& name) = 0; }; class ISelectionSetModule : public RegisterableModule { public: virtual ~ISelectionSetModule() {} virtual ISelectionSetManager::Ptr createSelectionSetManager() = 0; }; } // namespace const char* const MODULE_SELECTIONSETS = "SelectionSetModule"; inline selection::ISelectionSetModule& GlobalSelectionSetModule() { static module::InstanceReference _reference(MODULE_SELECTIONSETS); return _reference; } DarkRadiant-2.14.0/include/iselectiontest.h000066400000000000000000000173441413722237400206320ustar00rootroot00000000000000#pragma once #include #include "math/FloatTools.h" #include "inode.h" #include "iselection.h" #include #include class SelectionIntersection { private: float _depth; float _distance; public: SelectionIntersection() : _depth(1), _distance(2) {} SelectionIntersection(float depth, float distance) : _depth(depth), _distance(distance) {} bool operator<(const SelectionIntersection& other) const { if (_distance != other._distance) { return _distance < other._distance; } if (_depth != other._depth) { return _depth < other._depth; } return false; } bool equalEpsilon(const SelectionIntersection& other, float distanceEpsilon, float depthEpsilon) const { return float_equal_epsilon(_distance, other._distance, distanceEpsilon) && float_equal_epsilon(_depth, other._depth, depthEpsilon); } float depth() const { return _depth; } bool isValid() const { return depth() < 1; } // returns true if self is closer than other bool isCloserThan(const SelectionIntersection& other) const { return *this < other; } // assigns other to *this if other is closer than *this void assignIfCloser(const SelectionIntersection& other) { if (other.isCloserThan(*this)) { *this = other; } } }; /** * greebo: A helper class allowing to traverse a sequence of Vector3 * objects in memory. The Vector3 objects can have a certain distance * (stride) which is passed to the constructor. Incrementing the contained * iterator object moves from one Vector3 to the next in memory. */ class VertexPointer { typedef const unsigned char* byte_pointer; public: typedef const Vector3* vector_pointer; typedef const Vector3& vector_reference; class iterator { public: iterator() {} iterator(byte_pointer vertices, std::size_t stride) : m_iter(vertices), m_stride(stride) {} bool operator==(const iterator& other) const { return m_iter == other.m_iter; } bool operator!=(const iterator& other) const { return !operator==(other); } iterator operator+(std::size_t i) { return iterator(m_iter + i * m_stride, m_stride); } iterator operator+=(std::size_t i) { m_iter += i * m_stride; return *this; } iterator& operator++() { m_iter += m_stride; return *this; } iterator operator++(int) { iterator tmp = *this; m_iter += m_stride; return tmp; } vector_reference operator*() const { return *reinterpret_cast(m_iter); } private: byte_pointer m_iter; std::size_t m_stride; }; VertexPointer(vector_pointer vertices, std::size_t stride) : m_vertices(reinterpret_cast(vertices)), m_stride(stride) {} iterator begin() const { return iterator(m_vertices, m_stride); } vector_reference operator[](std::size_t i) const { return *reinterpret_cast(m_vertices + m_stride*i); } private: // The address of the first Vector3 object byte_pointer m_vertices; // The distance (in bytes) to the next object in memory std::size_t m_stride; }; class IndexPointer { public: typedef unsigned int index_type; typedef const index_type* pointer; class iterator { public: iterator(pointer iter) : m_iter(iter) {} bool operator==(const iterator& other) const { return m_iter == other.m_iter; } bool operator!=(const iterator& other) const { return !operator==(other); } iterator operator+(std::size_t i) { return m_iter + i; } iterator operator+=(std::size_t i) { return m_iter += i; } iterator operator++() { return ++m_iter; } iterator operator++(int) { return m_iter++; } const index_type& operator*() const { return *m_iter; } private: void increment() { ++m_iter; } pointer m_iter; }; IndexPointer(pointer indices, std::size_t count) : m_indices(indices), m_finish(indices + count) {} iterator begin() const { return m_indices; } iterator end() const { return m_finish; } private: pointer m_indices; pointer m_finish; }; template class BasicVector3; typedef BasicVector3 Vector3; class Matrix4; class VolumeTest; class SelectionTest { public: virtual ~SelectionTest() {} virtual void BeginMesh(const Matrix4& localToWorld, bool twoSided = false) = 0; virtual const VolumeTest& getVolume() const = 0; virtual const Vector3& getNear() const = 0; virtual const Vector3& getFar() const = 0; virtual void TestPoint(const Vector3& point, SelectionIntersection& best) = 0; virtual void TestPolygon(const VertexPointer& vertices, std::size_t count, SelectionIntersection& best) = 0; virtual void TestLineStrip(const VertexPointer& vertices, std::size_t count, SelectionIntersection& best) = 0; virtual void TestLines(const VertexPointer& vertices, std::size_t count, SelectionIntersection& best) = 0; virtual void TestTriangles(const VertexPointer& vertices, const IndexPointer& indices, SelectionIntersection& best) = 0; virtual void TestQuads(const VertexPointer& vertices, const IndexPointer& indices, SelectionIntersection& best) = 0; virtual void TestQuadStrip(const VertexPointer& vertices, const IndexPointer& indices, SelectionIntersection& best) = 0; }; typedef std::shared_ptr SelectionTestPtr; class Selector { public: virtual ~Selector() {} virtual void pushSelectable(ISelectable& selectable) = 0; virtual void popSelectable() = 0; virtual void addIntersection(const SelectionIntersection& intersection) = 0; }; inline void Selector_add(Selector& selector, ISelectable& selectable) { selector.pushSelectable(selectable); selector.addIntersection(SelectionIntersection(0, 0)); selector.popSelectable(); } inline void Selector_add(Selector& selector, ISelectable& selectable, const SelectionIntersection& intersection) { selector.pushSelectable(selectable); selector.addIntersection(intersection); selector.popSelectable(); } class VolumeTest; class SelectionTestable { public: virtual ~SelectionTestable() {} virtual void testSelect(Selector& selector, SelectionTest& test) = 0; }; typedef std::shared_ptr SelectionTestablePtr; inline SelectionTestablePtr Node_getSelectionTestable(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } class ComponentSelectionTestable { public: virtual ~ComponentSelectionTestable() {} virtual bool isSelectedComponents() const = 0; virtual void setSelectedComponents(bool select, selection::ComponentSelectionMode mode) = 0; virtual void invertSelectedComponents(selection::ComponentSelectionMode mode) = 0; virtual void testSelectComponents(Selector& selector, SelectionTest& test, selection::ComponentSelectionMode mode) = 0; }; typedef std::shared_ptr ComponentSelectionTestablePtr; inline ComponentSelectionTestablePtr Node_getComponentSelectionTestable(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } class Plane3; typedef std::function PlaneCallback; class SelectedPlanes { public: virtual ~SelectedPlanes() {} virtual bool contains(const Plane3& plane) const = 0; }; class PlaneSelectable { public: virtual ~PlaneSelectable() {} virtual void selectPlanes(Selector& selector, SelectionTest& test, const PlaneCallback& selectedPlaneCallback) = 0; virtual void selectReversedPlanes(Selector& selector, const SelectedPlanes& selectedPlanes) = 0; }; typedef std::shared_ptr PlaneSelectablePtr; inline PlaneSelectablePtr Node_getPlaneSelectable(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } DarkRadiant-2.14.0/include/ishaderclipboard.h000066400000000000000000000045051413722237400210660ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "iselectiontest.h" namespace selection { enum class PasteMode { // Shader is projected using the texdef matrix in the source Projected, // If a patch is hit, the algorithm will take the surface // topology of the patch into account, to avoid distortions. Natural, }; /** * Public interface of the shader clipboard which is able * to pick/copy/paste shaders from and to Texturable objects. */ class IShaderClipboard : public RegisterableModule { public: virtual ~IShaderClipboard() {} virtual void clear() = 0; // Returns the material name of the object in the clipboard (or an empty string) virtual std::string getShaderName() = 0; enum class SourceType { Empty, Face, Patch, Shader, }; // Returns the type of element in the shaderclipboard's source slot virtual SourceType getSourceType() const = 0; // Sets the content of the shaderclipboard to the given material virtual void setSourceShader(const std::string& shader) = 0; virtual void pickFromSelectionTest(SelectionTest& test) = 0; /** * Pastes the shader from the source in the clipboard to the object * located by the given selection test. * * @pasteToAllFaces: if a brush is hit, the source shader will be pasted * to all its faces, not just the one hit by the selection test. * * Might throw a cmd::ExecutionFailure. */ virtual void pasteShader(SelectionTest& test, PasteMode mode, bool pasteToAllFaces) = 0; /** * Will attempt to apply the texture coordinates of the source patch to the * target patch located by the given SelectionTest. * Will throw a cmd::ExecutionFailure if the source or target objects are not matching up. */ virtual void pasteTextureCoords(SelectionTest& test) = 0; /** * Applies the material only to the object hit by the given selection test. * Will leave the rest of the surface properties unchanged, if possible. */ virtual void pasteMaterialName(SelectionTest& test) = 0; /** * Is emitted when the shader source changes. */ virtual sigc::signal& signal_sourceChanged() = 0; }; } // namespace const char* const MODULE_SHADERCLIPBOARD("ShaderClipboard"); inline selection::IShaderClipboard& GlobalShaderClipboard() { static module::InstanceReference _reference(MODULE_SHADERCLIPBOARD); return _reference; } DarkRadiant-2.14.0/include/ishaderexpression.h000066400000000000000000000076411413722237400213320ustar00rootroot00000000000000#pragma once #include #include "iimage.h" class IRenderEntity; namespace shaders { // Material registers, used to store shader expression results // The first two slots are always reserved for the constants 0 and 1, see enum ReservedRegisters typedef std::vector Registers; // The indices to the constants in the registers array enum ReservedRegisters { REG_ZERO = 0, REG_ONE = 1, NUM_RESERVED_REGISTERS, }; /** * A shader expression is something found in a Doom 3 material declaration, * where things like shader parameters, time and constants can be combined * by mathematical operators and table-lookups. A shader expression can be * a constant number in its simplest form, or a complex formula like this: * * vertexParm 0 0.1 * sintable[time * 0.3], 0.15 * sintable[time * 0.15] * * The above makes vertex parameter 0 a time-dependent value which is evaluated * each frame during rendering. * * A shader expression can be evaluated which results in a single floating point * value. In actual materials the shader expression is linked to a material register * where the value is written to after evaluation. */ class IShaderExpression { public: using Ptr = std::shared_ptr; /** * Retrieve the floating point value of this expression. DEPRECATED */ virtual float getValue(std::size_t time) = 0; /** * Retrieve the floating point value of this expression. */ virtual float getValue(std::size_t time, const IRenderEntity& entity) = 0; /** * Evaluates the value of this expression, writing any results * into the linked material register. DEPRECATED */ virtual float evaluate(std::size_t time) = 0; /** * Evaluates the value of this expression, writing any results * into the linked material register. */ virtual float evaluate(std::size_t time, const IRenderEntity& entity) = 0; /** * Link the expression to the given Registers vector. * Calling evaluate() will cause the result to be saved into the register. * * @returns: the register position the result will be written to. */ virtual std::size_t linkToRegister(Registers& registers) = 0; // Link this expression to the given Registers vector, using the specified index // instead of allocating a new register virtual void linkToSpecificRegister(Registers& registers, std::size_t index) = 0; // True if this expression is linked to a register virtual bool isLinked() const = 0; // Returns any previously used register position (for possible re-use) virtual std::size_t unlinkFromRegisters() = 0; // Returns the string this expression has been parsed from virtual std::string getExpressionString() = 0; // Clone this expression and all possible sub-expressions // The cloned expression will not be linked to any register virtual IShaderExpression::Ptr clone() const = 0; }; // Interface of a material expression used to specify a map image // It can either represent a texture path to a file on disk or // a generated texture like "makeIntensity(lights/intensitymap)" class IMapExpression { public: using Ptr = std::shared_ptr; virtual ~IMapExpression() {} /** * \brief * Return whether this map expression creates a cube map. * * \return * true if this map expression creates a cube map, false if it is a single * image. */ virtual bool isCubeMap() const = 0; /** * Returns the string as parsed from the material source */ virtual std::string getExpressionString() = 0; }; class IVideoMapExpression : public IMapExpression { public: virtual ~IVideoMapExpression() {} // Whether the cinematic is looping virtual bool isLooping() const = 0; }; class ISoundMapExpression : public IMapExpression { public: virtual ~ISoundMapExpression() {} // Whether the sound map should use the waveform display mode virtual bool isWaveform() const = 0; }; } // namespace DarkRadiant-2.14.0/include/ishaderlayer.h000066400000000000000000000337621413722237400202520ustar00rootroot00000000000000#pragma once #include "Texture.h" #include "ishaderexpression.h" #include #include #include #include "math/Vector2.h" #include "math/Vector4.h" #include "math/Matrix4.h" #include "render/Colour4.h" class IRenderEntity; // Texture repeat types enum ClampType { CLAMP_REPEAT = 1 << 0, // default = no clamping CLAMP_NOREPEAT = 1 << 1, // "clamp" CLAMP_ZEROCLAMP = 1 << 2, // "zeroclamp" CLAMP_ALPHAZEROCLAMP = 1 << 3, // "alphazeroclamp" }; /** * \brief Representation of a GL blend function. * * A GL blend function consists of two GLenums representing the operations that * should be performed on the source and destination pixel colours respectively, * before the two results are added together into a final pixel colour. */ class BlendFunc { public: // Source pixel function GLenum src; // Destination pixel function GLenum dest; // Constructor BlendFunc(GLenum s, GLenum d) : src(s), dest(d) { } }; /** * \brief A single layer of a material shader. * * Each shader layer contains an image texture, a blend mode (e.g. add, * modulate) and various other data. */ class IShaderLayer { public: using Ptr = std::shared_ptr; /// Enumeration of layer types. enum Type { DIFFUSE, BUMP, SPECULAR, BLEND }; // Stage flags enum Flags { FLAG_IGNORE_ALPHATEST = 1 << 0, FLAG_FILTER_NEAREST = 1 << 1, FLAG_FILTER_LINEAR = 1 << 2, FLAG_HIGHQUALITY = 1 << 3, // "uncompressed" FLAG_FORCE_HIGHQUALITY = 1 << 4, FLAG_NO_PICMIP = 1 << 5, FLAG_MASK_RED = 1 << 6, FLAG_MASK_GREEN = 1 << 7, FLAG_MASK_BLUE = 1 << 8, FLAG_MASK_ALPHA = 1 << 9, FLAG_MASK_DEPTH = 1 << 10, FLAG_IGNORE_DEPTH = 1 << 11, // use depthfunc always }; enum TexGenType { TEXGEN_NORMAL = 1 << 0, TEXGEN_REFLECT = 1 << 1, TEXGEN_SKYBOX = 1 << 2, TEXGEN_WOBBLESKY = 1 << 3, TEXGEN_SCREEN = 1 << 4, // screen aligned, for mirrorRenders and screen space temporaries }; enum ParseFlags { PF_HasTexGenKeyword = 1 << 1, // texgen has been specified PF_HasNoclampKeyword = 1 << 2, // noclamp has been specified PF_HasColoredKeyword = 1 << 3, // colored has been specified }; // Expression slot selector struct Expression { enum Slot { AlphaTest = 0, Condition, TexGenParam1, TexGenParam2, TexGenParam3, ColourRed, ColourGreen, ColourBlue, ColourAlpha, TextureMatrixRow0Col0, TextureMatrixRow0Col1, TextureMatrixRow0Col2, TextureMatrixRow1Col0, TextureMatrixRow1Col1, TextureMatrixRow1Col2, NumExpressionSlots }; }; // The various texture transformations enum class TransformType { Translate, Scale, CenterScale, Shear, Rotate, }; // A texture transformation consists of a type and two arguments at most struct Transformation { TransformType type; shaders::IShaderExpression::Ptr expression1; shaders::IShaderExpression::Ptr expression2; }; /** * \brief * Destructor */ virtual ~IShaderLayer() {} /// Return the layer type. virtual Type getType() const = 0; /** * \brief * Return the Texture object corresponding to this layer (may be NULL). */ virtual TexturePtr getTexture() const = 0; /** * Evaluate all shader expressions used in this stage. Call this once (each frame) * before requesting things like getAlphaTest(), getColour() or isVisible() */ virtual void evaluateExpressions(std::size_t time) = 0; /** * Like evaluateExpressions(time), but with an additional renderentity as argument * to give this stage the ability to resolve parm0..parm11 values. */ virtual void evaluateExpressions(std::size_t time, const IRenderEntity& entity) = 0; // Returns the requested expression virtual shaders::IShaderExpression::Ptr getExpression(Expression::Slot slot) = 0; /** * The flags set on this stage. */ virtual int getStageFlags() const = 0; /** * Each stage can have its own clamp type, overriding the per-material one. */ virtual ClampType getClampType() const = 0; /** * Returns the texgen type: normal, reflect, skybox, etc. * Use getTexGenParam(i) to retrieve the wobblesky parameters [0..2] */ virtual TexGenType getTexGenType() const = 0; /** * TexGen type wobblesky has 3 parameters, get them here, with index in [0..2] */ virtual float getTexGenParam(std::size_t index) const = 0; // The expressions used to calculate the tex gen params. Index in [0..2] virtual shaders::IShaderExpression::Ptr getTexGenExpression(std::size_t index) const = 0; /** * \brief * Return the GL blend function for this layer. * * Only layers of type BLEND use a BlendFunc. Layers of type DIFFUSE, BUMP * and SPECULAR do not use blend functions. */ virtual BlendFunc getBlendFunc() const = 0; // Get the blend string as defined in the material def, e.g. "add" or "gl_one, gl_zero" virtual const std::pair& getBlendFuncStrings() const = 0; /** * \brief * Multiplicative layer colour (set with "red 0.6", "green 0.2" etc) */ virtual Colour4 getColour() const = 0; // An enum used to select which colour components are affected by an operation enum ColourComponentSelector { COMP_RED, // red only COMP_GREEN, // green only COMP_BLUE, // blue only COMP_ALPHA, // alpha only COMP_RGB, // red, green and blue COMP_RGBA, // all: red, greeb, blue, alpha }; // Returns the expression to calculate the RGBA vertex colour values virtual const shaders::IShaderExpression::Ptr& getColourExpression(ColourComponentSelector component) const = 0; /** * \brief * Vertex colour blend mode enumeration. */ enum VertexColourMode { VERTEX_COLOUR_NONE, // no vertex colours VERTEX_COLOUR_MULTIPLY, // "vertexColor" VERTEX_COLOUR_INVERSE_MULTIPLY // "inverseVertexColor" }; /** * \brief * Get the vertex colour mode for this layer. */ virtual VertexColourMode getVertexColourMode() const = 0; enum class MapType { Map, // regular map CubeMap, // corresponds to CUBE_MAP_OBJECT CameraCubeMap, // corresponds to CUBE_MAP_CAMERA VideoMap, SoundMap, MirrorRenderMap, RemoteRenderMap, }; // Get the map type used by this stage virtual MapType getMapType() const = 0; /** * \brief * Enumeration of cube map modes for this layer. */ enum CubeMapMode { CUBE_MAP_NONE, CUBE_MAP_CAMERA, // cube map in camera space ("cameraCubeMap") CUBE_MAP_OBJECT // cube map in object space ("cubeMap") }; /** * \brief * Get the cube map mode for this layer. */ virtual CubeMapMode getCubeMapMode() const = 0; /** * Returns the dimensions specifying the map size for * stages using the "mirrorRenderMap", "remoteRenderMap" keywords. */ virtual const Vector2& getRenderMapSize() const = 0; // Adds a transformation at the end of the list of existing transforms in this stage virtual void appendTransformation(const Transformation& transform) = 0; // The list of transformations defined in this stage, in the order they appear in the declaration virtual const std::vector& getTransformations() = 0; // Returns the current texture matrix virtual Matrix4 getTextureTransform() = 0; // Returns true if this layer has an alphatest expression defined virtual bool hasAlphaTest() const = 0; /** * \brief * Get the alpha test value for this layer. * * \return * The alpha test value, within (0..1] if it is set. If no alpha test * value is set, 0 will be returned. */ virtual float getAlphaTest() const = 0; // Returns the expression used to calculate the alpha test value virtual const shaders::IShaderExpression::Ptr& getAlphaTestExpression() const = 0; /** * Whether this stage is active. Unconditional stages always return true, * conditional ones return the result of the most recent condition expression evaluation. */ virtual bool isVisible() const = 0; // Stages can be enabled/disabled programmatically (used when editing materials) // This returns true if the stage is enabled virtual bool isEnabled() const = 0; // Returns the if-expression used to evaluate this stage's visibility, or null if none defined virtual const shaders::IShaderExpression::Ptr& getConditionExpression() const = 0; /** * Returns the name of this stage's vertex program. */ virtual const std::string& getVertexProgram()const = 0; /** * Returns the name of this stage's fragment program. */ virtual const std::string& getFragmentProgram() const = 0; // The number of defined vertex parameters virtual int getNumVertexParms() const = 0; /** * Returns the 4 parameter values for the vertexParm index . */ virtual Vector4 getVertexParmValue(int parm) const = 0; // A vertex parm has an index and 4 expressions at most struct VertexParm { VertexParm() : index(-1) // a negative index indicates this parm has not been defined in the stage {} int index; shaders::IShaderExpression::Ptr expressions[4]; }; // Returns the vertex parameter with the given index [0..3] virtual const VertexParm& getVertexParm(int index) const = 0; /** * Returns the number of fragment maps in this stage. */ virtual std::size_t getNumFragmentMaps() const = 0; struct FragmentMap { FragmentMap() : index(-1) {} int index; std::vector options; shaders::IMapExpression::Ptr map; }; virtual const FragmentMap& getFragmentMap(int index) const = 0; /** * Returns the fragment map image with the given index. */ virtual TexturePtr getFragmentMapTexture(int index) const = 0; /** * Stage-specific polygon offset, overriding the "global" one defined on the material. */ virtual float getPrivatePolygonOffset() const = 0; // If this stage is referring to a single image file, this will return // the VFS path to it with the file extension removed. // If this layer doesn't refer to a single image file, an empty string is returned virtual std::string getMapImageFilename() const = 0; // The map expression used to generate/define the texture of this stage virtual shaders::IMapExpression::Ptr getMapExpression() const = 0; // Parser information, to reconstruct the use of certain keywords virtual int getParseFlags() const = 0; }; /** * \brief * Vector of IShaderLayer pointers. */ typedef std::vector IShaderLayerVector; // Interface extension to IShaderLayer, offering editing functions class IEditableShaderLayer : public IShaderLayer { public: using Ptr = std::shared_ptr; virtual ~IEditableShaderLayer() {} // Enable/disable this stage - a disabled stage will return false to isVisible() virtual void setEnabled(bool enabled) = 0; // Set the given stage flag(s) virtual void setStageFlag(IShaderLayer::Flags flag) = 0; // Clears the given stage flag(s) virtual void clearStageFlag(IShaderLayer::Flags flag) = 0; // Set the map type to use by this stage (map, cameraCubeMap, etc.) virtual void setMapType(MapType mapType) = 0; // Set the blend func from the given pair of strings virtual void setBlendFuncStrings(const std::pair& pair) = 0; // Set the alpha test expression from the given string virtual void setAlphaTestExpressionFromString(const std::string& expression) = 0; // Update the "map" expression of this stage virtual void setMapExpressionFromString(const std::string& expression) = 0; // Adds a empty transformation to this layer, returning its new index virtual std::size_t addTransformation(TransformType type, const std::string& expression1, const std::string& expression2) = 0; // Removes the indexed transformation virtual void removeTransformation(std::size_t index) = 0; // Set the type and expressions of the indexed transformation. The transformation index must not be // out of bounds, use appendTransformation() to add new ones virtual void updateTransformation(std::size_t index, TransformType type, const std::string& expression1, const std::string& expression2) = 0; // Set the colour expression from the given string virtual void setColourExpressionFromString(ColourComponentSelector component, const std::string& expression) = 0; // Set the stage condition expression virtual void setConditionExpressionFromString(const std::string& expression) = 0; // Sets the texgen type of this stage virtual void setTexGenType(TexGenType type) = 0; // Set the texgen expression (used for wobblesky) virtual void setTexGenExpressionFromString(std::size_t index, const std::string& expression) = 0; // Set the vertex colour mode of this stage virtual void setVertexColourMode(VertexColourMode mode) = 0; // Set the clamp type of this stage virtual void setClampType(ClampType clampType) = 0; // Sets the privatePolygonOffset value of this stage virtual void setPrivatePolygonOffset(double offset) = 0; // Sets width and height of the mirrorRenderMap/remoteRenderMap images virtual void setRenderMapSize(const Vector2& size) = 0; // For stages with map type SoundMap, this is used to set the waveform flag virtual void setSoundMapWaveForm(bool waveForm) = 0; // For stages with map type VideoMap, this is used to update the properties virtual void setVideoMapProperties(const std::string& filePath, bool looping) = 0; }; DarkRadiant-2.14.0/include/ishaders.h000066400000000000000000000530471413722237400173760ustar00rootroot00000000000000#pragma once #include "iimage.h" #include "imodule.h" #include "ifilesystem.h" #include #include "math/Vector3.h" #include "math/Vector4.h" #include #include #include "Texture.h" #include "ishaderlayer.h" #include "ishaderexpression.h" class Image; /** * \brief Interface for a material shader. * * A material shader consists of global parameters, an editor image, and zero * or more shader layers (including diffusemap, bumpmap and specularmap * textures which are handled specially). * * Most material shaders are defined in .mtr files within the mod asset tree, * but there are also internal materials generated for Radiant-specific * internal OpenGL shaders, such as those used to render wireframes. */ class Material { public: enum CullType { CULL_BACK, // default backside culling, for materials without special flags CULL_FRONT, // "backSided" CULL_NONE, // "twoSided" }; // Global material flags enum Flags { FLAG_NOSHADOWS = 1 << 0, // noShadows FLAG_NOSELFSHADOW = 1 << 1, // noSelfShadow FLAG_FORCESHADOWS = 1 << 2, // forceShadows FLAG_NOOVERLAYS = 1 << 3, // noOverlays FLAG_FORCEOVERLAYS = 1 << 4, // forceOverlays FLAG_TRANSLUCENT = 1 << 5, // translucent FLAG_FORCEOPAQUE = 1 << 6, // forceOpaque FLAG_NOFOG = 1 << 7, // noFog FLAG_NOPORTALFOG = 1 << 8, // noPortalFog FLAG_UNSMOOTHEDTANGENTS = 1 << 9, // unsmoothedTangents FLAG_MIRROR = 1 << 10, // mirror FLAG_POLYGONOFFSET = 1 << 11, // has polygonOffset FLAG_ISLIGHTGEMSURF = 1 << 12, // is used by the TDM lightgem FLAG_HAS_SORT_DEFINED = 1 << 13, // whether a sort value has been defined }; // Parser flags, used to give some hints to the material editor GUI // about what the material sources looked like enum ParseFlags { PF_HasSortDefined = 1 << 0, // has a "sort" keyword in its definition PF_HasAmbientRimColour = 1 << 1, // has an "ambientRimColor" keyword in its definition PF_HasSpectrum = 1 << 2, // has a "spectrum" keyword in its definition PF_HasDecalInfo = 1 << 3, // has a "decalinfo" keyword in its definition PF_HasDecalMacro = 1 << 4, // has a "DECAL_MACRO" keyword in its definition PF_HasTwoSidedDecalMacro = 1 << 5, // has a "TWOSIDED_DECAL_MACRO" keyword in its definition PF_HasParticleMacro = 1 << 6, // has a "PARTICLE_MACRO" keyword in its definition PF_HasGlassMacro = 1 << 7, // has a "GLASS_MACRO" keyword in its definition }; // Surface Flags enum SurfaceFlags { SURF_SOLID = 1 << 0, SURF_OPAQUE = 1 << 1, SURF_WATER = 1 << 2, SURF_PLAYERCLIP = 1 << 3, SURF_MONSTERCLIP = 1 << 4, SURF_MOVEABLECLIP = 1 << 5, SURF_IKCLIP = 1 << 6, SURF_BLOOD = 1 << 7, SURF_TRIGGER = 1 << 8, SURF_AASSOLID = 1 << 9, SURF_AASOBSTACLE = 1 << 10, SURF_FLASHLIGHT_TRIGGER = 1 << 11, SURF_NONSOLID = 1 << 12, SURF_NULLNORMAL = 1 << 13, SURF_AREAPORTAL = 1 << 14, SURF_NOCARVE = 1 << 15, SURF_DISCRETE = 1 << 16, SURF_NOFRAGMENT = 1 << 17, SURF_SLICK = 1 << 18, SURF_COLLISION = 1 << 19, SURF_NOIMPACT = 1 << 20, SURF_NODAMAGE = 1 << 21, SURF_LADDER = 1 << 22, SURF_NOSTEPS = 1 << 23, SURF_GUISURF = 1 << 24, // has guisurf in its material def SURF_ENTITYGUI = 1 << 25, // guisurf entity SURF_ENTITYGUI2 = 1 << 26, // guisurf entity2 SURF_ENTITYGUI3 = 1 << 27, // guisurf entity3 }; // Surface Type (plastic, stone, etc.) enum SurfaceType { SURFTYPE_DEFAULT, SURFTYPE_METAL, SURFTYPE_STONE, SURFTYPE_FLESH, SURFTYPE_WOOD, SURFTYPE_CARDBOARD, SURFTYPE_LIQUID, SURFTYPE_GLASS, SURFTYPE_PLASTIC, SURFTYPE_RICOCHET, SURFTYPE_AASOBSTACLE, SURFTYPE_10, SURFTYPE_11, SURFTYPE_12, SURFTYPE_13, SURFTYPE_14, SURFTYPE_15 }; /** * \brief * Requested sort position from material declaration (e.g. "sort decal"). * The actual sort order of a material is stored as a floating point number, * these enumerations represent some regularly used shortcuts in material decls. * The values of this enum have been modeled after the ones found in the D3 SDK. */ enum SortRequest { SORT_SUBVIEW = -3, // mirrors, viewscreens, etc SORT_GUI = -2, // guis SORT_BAD = -1, SORT_OPAQUE, // opaque SORT_PORTAL_SKY, SORT_DECAL, // scorch marks, etc. SORT_FAR, SORT_MEDIUM, // normal translucent SORT_CLOSE, SORT_ALMOST_NEAREST, // gun smoke puffs SORT_NEAREST, // screen blood blobs SORT_AFTER_FOG = 90, // TDM-specific SORT_POST_PROCESS = 100 // after a screen copy to texture }; // Deform Type enum DeformType { DEFORM_NONE, DEFORM_SPRITE, DEFORM_TUBE, DEFORM_FLARE, DEFORM_EXPAND, DEFORM_MOVE, DEFORM_TURBULENT, DEFORM_EYEBALL, DEFORM_PARTICLE, DEFORM_PARTICLE2, }; struct DecalInfo { int stayMilliSeconds; int fadeMilliSeconds; Vector4 startColour; Vector4 endColour; }; enum Coverage { MC_UNDETERMINED, MC_OPAQUE, // completely fills the triangle, will have black drawn on fillDepthBuffer MC_PERFORATED, // may have alpha tested holes MC_TRANSLUCENT // blended with background }; virtual ~Material() {} /// Return the editor image texture for this shader. virtual TexturePtr getEditorImage() = 0; /// Return true if the editor image is no tex for this shader. virtual bool isEditorImageNoTex() = 0; // Returns the expression defining the editor image of this material, as passed to qer_editorimage statement, // or an empty string if this keyword was not used at all in this declaration. virtual shaders::IMapExpression::Ptr getEditorImageExpression() = 0; // Set the editor image path of this material virtual void setEditorImageExpressionFromString(const std::string& editorImagePath) = 0; /// Get the string name of this material virtual std::string getName() const = 0; virtual bool IsInUse() const = 0; virtual void SetInUse(bool bInUse) = 0; /// Return true if this is an internal material not corresponding to a .mtr virtual bool IsDefault() const = 0; /// get shader file name (ie the file where this one is defined) virtual const char* getShaderFileName() const = 0; // Set the mtr file name to define where this material should be saved to // This will throw an exception if the given path (absolute or relative) // is not located within the current mod file tree (VFS) virtual void setShaderFileName(const std::string& fullPath) = 0; // Returns the VFS info structure of the file this shader is defined in virtual const vfs::FileInfo& getShaderFileInfo() const = 0; /** * \brief Return the requested sort position of this material. */ virtual float getSortRequest() const = 0; // Set the sort value for this material, see the SortRequest enum for predefined values virtual void setSortRequest(float sortRequest) = 0; // Resets the sort request to the default value virtual void resetSortRequest() = 0; /// Return a polygon offset if one is defined. The default is 0. virtual float getPolygonOffset() const = 0; // Set the polygon offset of this material. Clear the FLAG_POLYGONOFFSET to disable the offset altogether. virtual void setPolygonOffset(float offset) = 0; /// Get the desired texture repeat behaviour. virtual ClampType getClampType() const = 0; // Set the clamp type for this material virtual void setClampType(ClampType type) = 0; /// Get the cull type (none, back, front) virtual CullType getCullType() const = 0; // Set the cull type virtual void setCullType(CullType type) = 0; /// Get the global material flags (translucent, noshadows, etc.) virtual int getMaterialFlags() const = 0; // Set the given material flag virtual void setMaterialFlag(Flags flag) = 0; // Clear the given material flags virtual void clearMaterialFlag(Flags flag) = 0; /// Surface flags (areaportal, nonsolid, etc.) virtual int getSurfaceFlags() const = 0; // Set the given surface flag virtual void setSurfaceFlag(Material::SurfaceFlags flag) = 0; // Clear the given surface flag virtual void clearSurfaceFlag(Material::SurfaceFlags flag) = 0; /// Surface Type (wood, stone, surfType15, ...) virtual SurfaceType getSurfaceType() const = 0; // Set the surface type of this material virtual void setSurfaceType(SurfaceType type) = 0; /// Get the deform type of this material virtual DeformType getDeformType() const = 0; // Returns the shader expression used to define the deform parameters (valid indices in [0..2]) virtual shaders::IShaderExpression::Ptr getDeformExpression(std::size_t index) = 0; // Used for Deform_Particle/Particle2 defines the name of the particle def virtual std::string getDeformDeclName() = 0; /// Returns the spectrum of this shader, 0 is the default value (even without keyword in the material) virtual int getSpectrum() const = 0; // Sets the spectrum of this material. virtual void setSpectrum(int spectrum) = 0; /// Retrieves the decal info structure of this material. virtual DecalInfo getDecalInfo() const = 0; /// Returns the coverage type of this material, also needed by the map compiler. virtual Coverage getCoverage() const = 0; /** * Returns the raw shader definition block, as parsed by the material manager. * The definition is lacking the outermost curly braces. */ virtual std::string getDefinition() = 0; /** Determine whether this is an ambient light shader, i.e. the * material def contains the global "ambientLight" keyword. */ virtual bool isAmbientLight() const = 0; /** Determine whether this is an blend light shader, i.e. the * material def contains the global "blendLight" keyword. */ virtual bool isBlendLight() const = 0; /** Determine whether this is an fog light shader, i.e. the * material def contains the global "fogLight" keyword. */ virtual bool isFogLight() const = 0; /** Determine whether this is a cubic light shader, i.e. the * material def contains the global "cubicLight" keyword. */ virtual bool isCubicLight() const = 0; virtual void setIsAmbientLight(bool newValue) = 0; virtual void setIsBlendLight(bool newValue) = 0; virtual void setIsFogLight(bool newValue) = 0; virtual void setIsCubicLight(bool newValue) = 0; /** * For light shaders: implicitly no-shadows lights (ambients, fogs, etc) * will never cast shadows but individual light entities can also override this value. */ virtual bool lightCastsShadows() const = 0; // returns true if the material will generate shadows, not making a // distinction between global and no-self shadows virtual bool surfaceCastsShadow() const = 0; /** * returns true if the material will draw anything at all. Triggers, portals, * etc, will not have anything to draw. A not drawn surface can still castShadow, * which can be used to make a simplified shadow hull for a complex object set as noShadow. */ virtual bool isDrawn() const = 0; /** * a discrete surface will never be merged with other surfaces by dmap, which is * necessary to prevent mutliple gui surfaces, mirrors, autosprites, and some other * special effects from being combined into a single surface * guis, merging sprites or other effects, mirrors and remote views are always discrete */ virtual bool isDiscrete() const = 0; /// Return the first material layer, if any virtual IShaderLayer* firstLayer() const = 0; /** * \brief Return a std::vector containing all layers in this material * shader. * * This includes all diffuse, bump, specular or blend layers. */ virtual const IShaderLayerVector& getAllLayers() const = 0; // Add a new (typed) layer to this material, returning the index of the new layer virtual std::size_t addLayer(IShaderLayer::Type type) = 0; // Removes the indexed layer from this material virtual void removeLayer(std::size_t index) = 0; // Duplicates the given layer and returns the index to the copied one virtual std::size_t duplicateLayer(std::size_t index) = 0; // Swaps the position of the two layers virtual void swapLayerPosition(std::size_t first, std::size_t second) = 0; // Returns the edit interface for the given shader layer. Calling this method // will immediately mark this Material as modified. virtual IEditableShaderLayer::Ptr getEditableLayer(std::size_t index) = 0; /// Return the light falloff texture, if this is a light shader virtual TexturePtr lightFalloffImage() = 0; // Return the expression of the light falloff map for use with this shader. virtual shaders::IMapExpression::Ptr getLightFalloffExpression() = 0; // Set the lightFallOff expression to define the image/cubemap to use virtual void setLightFalloffExpressionFromString(const std::string& expressionString) = 0; // Return the type of the light fall off image // (can be MapType::Map (lightFalloffImage or MapType::CameraCubeMap for lightFalloffCubeMap) virtual IShaderLayer::MapType getLightFalloffCubeMapType() = 0; // Set the type of the light fall off image // (can be MapType::Map (lightFalloffImage or MapType::CameraCubeMap for lightFalloffCubeMap) virtual void setLightFalloffCubeMapType(IShaderLayer::MapType type) = 0; // greebo: Returns the description as defined in the material virtual std::string getDescription() const = 0; // Set the description text of this material virtual void setDescription(const std::string& description) = 0; /// Return TRUE if the shader is visible, FALSE if it is filtered or /// disabled in any other way. virtual bool isVisible() const = 0; /// Sets the visibility of this shader. virtual void setVisible(bool visible) = 0; // Returns the flags set by the material parser virtual int getParseFlags() const = 0; // Returns the argument string after the renderbump keyword, or an empty string if no statement is present virtual std::string getRenderBumpArguments() = 0; // Returns the argument string after the renderbumpflat keyword, or an empty string if no statement is present virtual std::string getRenderBumpFlatArguments() = 0; // The argument to the "guisurf" keyword, if not entity[2]3]. // In case entity[2]3] is set, the corresponding surface flags are enabled virtual const std::string& getGuiSurfArgument() = 0; // True if this mateiral has been altered from its original definition virtual bool isModified() = 0; // Roll back the changes made to this material virtual void revertModifications() = 0; // Reloads the textures used by this material from disk virtual void refreshImageMaps() = 0; // Signal emitted when this material is modified virtual sigc::signal& sig_materialChanged() = 0; }; typedef std::shared_ptr MaterialPtr; /// Stream insertion of Material for debugging purposes. inline std::ostream& operator<< (std::ostream& os, const Material& shader) { os << "Material(name=" << shader.getName() << ", filename=" << shader.getShaderFileName() << ", firstlayer=" << shader.firstLayer() << ")"; return os; } /// Debug stream insertion of possibly null material pointer inline std::ostream& operator<< (std::ostream& os, const Material* m) { if (m) return os << *m; else return os << "[no material]"; } typedef std::function ShaderNameCallback; // Represents a table declaration in the .mtr files class ITableDefinition { public: using Ptr = std::shared_ptr; virtual ~ITableDefinition() {} // The name of this table virtual const std::string& getName() const = 0; // Retrieve a value from this table, respecting the clamp and snap flags virtual float getValue(float index) = 0; }; const char* const MODULE_SHADERSYSTEM = "MaterialManager"; /** * \brief * Interface for the material manager. * * The material manager parses all of the MTR declarations and provides access * to Material objects representing the loaded materials. */ class MaterialManager : public RegisterableModule { public: // NOTE: shader and texture names used must be full path. // Shaders usable as textures have prefix equal to getTexturePrefix() virtual void realise() = 0; virtual void unrealise() = 0; virtual void refresh() = 0; /** Determine whether the shader system is realised. This may be used * by components which need to ensure the shaders are realised before * they start trying to display them. * * @returns * true if the shader system is realised, false otherwise */ virtual bool isRealised() = 0; // Signal which is invoked when the materials defs have been parsed // Note that the DEF files might be parsed in a separate thread so // any call acquiring material info might need to block and wait for // that background call to finish before it can yield results. virtual sigc::signal& signal_DefsLoaded() = 0; // Signal invoked when the material defs have been unloaded due // to a filesystem or other configuration change virtual sigc::signal& signal_DefsUnloaded() = 0; /** * \brief Return the shader with the given name. The default shader will be * returned if name is not found. * * \param name * The text name of the shader to load. * * \returns * MaterialPtr corresponding to the named shader object. */ virtual MaterialPtr getMaterial(const std::string& name) = 0; /** * greebo: Returns true if the named material is existing, false otherwise. * In the latter case getMaterialForName() would return a default "shader not found". */ virtual bool materialExists(const std::string& name) = 0; /** * A material can be modified if it has been declared in a physical file, * i.e. outside a PAK file. */ virtual bool materialCanBeModified(const std::string& name) = 0; virtual void foreachShaderName(const ShaderNameCallback& callback) = 0; /** * Visit each material with the given function object. Replaces the legacy foreachShader(). */ virtual void foreachMaterial(const std::function& func) = 0; // Set the callback to be invoked when the active shaders list has changed virtual sigc::signal signal_activeShadersChanged() const = 0; // Is invoked when a new material is inserted into the resource tree, passing the name as argument virtual sigc::signal& signal_materialCreated() = 0; // Is called when a material name is changed, passing the old and the new name as arguments virtual sigc::signal& signal_materialRenamed() = 0; // Is emitted when a named material is removed from the library virtual sigc::signal& signal_materialRemoved() = 0; /** * Enable or disable active shaders updates (for performance). */ virtual void setActiveShaderUpdates(bool val) = 0; virtual void setLightingEnabled(bool enabled) = 0; virtual const char* getTexturePrefix() const = 0; /** * \brief * Return the default texture to be used for lighting mode rendering if it * is not defined for a shader. * * \param type * The type of interaction layer whose default texture is required. */ virtual TexturePtr getDefaultInteractionTexture(IShaderLayer::Type type) = 0; /** * greebo: This is a substitution for the "old" TexturesCache method * used to load an image from a file to graphics memory for arbitrary * use (e.g. the Overlay module). * * @param filename * The absolute filename. * * @param moduleNames * The space-separated list of image modules (default is "GDK"). */ virtual TexturePtr loadTextureFromFile(const std::string& filename) = 0; /** * Creates a new shader expression for the given string. This can be used to create standalone * expression objects for unit testing purposes. */ virtual shaders::IShaderExpression::Ptr createShaderExpressionFromString(const std::string& exprStr) = 0; // Creates a new material using the given name. In case the name is already in use, // a generated one will be assigned to the created material virtual MaterialPtr createEmptyMaterial(const std::string& name) = 0; // Creates a copy of the given material and returns the reference to it virtual MaterialPtr copyMaterial(const std::string& nameOfOriginal, const std::string& nameOfCopy) = 0; // Renames the material named oldName to newName, and returns true if the operation was successful. // If the new name is already in use, this returns false too. virtual bool renameMaterial(const std::string& oldName, const std::string& newName) = 0; // Removes the named material virtual void removeMaterial(const std::string& name) = 0; // Saves the named material to the file location as specified in its shaderfile info. // If the path is not writable or the material is not suitable for saving, this will throw an exception virtual void saveMaterial(const std::string& name) = 0; // Creates a named, internal material for debug/testing etc. // Used by shaders without corresponding material declaration, like entity wireframe shaders virtual MaterialPtr createDefaultMaterial(const std::string& name) = 0; // Tries to find the named table, returns an empty reference if nothing found virtual ITableDefinition::Ptr getTable(const std::string& name) = 0; }; inline MaterialManager& GlobalMaterialManager() { static module::InstanceReference _reference(MODULE_SHADERSYSTEM); return _reference; } DarkRadiant-2.14.0/include/isound.h000066400000000000000000000100661413722237400170670ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "ModResource.h" #include #include #include // A list of sound files associated to a shader typedef std::vector SoundFileList; const float METERS_PER_UNIT = 0.0254f; const float UNITS_PER_METER = 1/METERS_PER_UNIT; // The min and max radii of a sound shader class SoundRadii { float minRad, maxRad; public: //set sound radii either in metres or in inch on initialization might cause a conversion SoundRadii (float min = 0, float max = 0, bool inMetres = false) { if (inMetres) { minRad = min * UNITS_PER_METER; maxRad = max * UNITS_PER_METER; } else { minRad = min; maxRad = max; } } // set the sound radii in metres or in inch, might cause a conversion void setMin(float min, bool inMetres = false) { if (inMetres) { minRad = min * UNITS_PER_METER; } else { minRad = min; } } void setMax (float max, bool inMetres = false) { if (inMetres) { maxRad = max * UNITS_PER_METER; } else { maxRad = max; } } float getMin(bool inMetres = false) const { return (inMetres) ? minRad * METERS_PER_UNIT : minRad; } float getMax(bool inMetres = false) const { return (inMetres) ? maxRad * METERS_PER_UNIT : maxRad; } }; /// Representation of a single sound or sound shader. class ISoundShader : public ModResource { public: virtual ~ISoundShader() {} /// Get the name of the shader virtual std::string getName() const = 0; /// Get the min and max radii of the shader virtual SoundRadii getRadii() const = 0; /// Get the list of sound files associated to this shader virtual SoundFileList getSoundFileList() const = 0; // angua: get the display folder for sorting the sounds in the sound chooser window virtual const std::string& getDisplayFolder() const = 0; // Returns the mod-relative path to the file this shader is defined in virtual std::string getShaderFilePath() const = 0; // Returns the raw sound shader definition text virtual std::string getDefinition() const = 0; }; typedef std::shared_ptr ISoundShaderPtr; const char* const MODULE_SOUNDMANAGER("SoundManager"); /// Sound manager interface. class ISoundManager : public RegisterableModule { public: /// Invoke a function for each sound shader virtual void forEachShader(std::function) = 0; /** greebo: Tries to lookup the SoundShader with the given name, * returns a soundshader with an empty name, if the lookup failed. */ virtual ISoundShaderPtr getSoundShader(const std::string& shaderName) = 0; /** * greebo: Plays the given sound file (defined by its VFS path). * * @returns: TRUE, if the sound file was found at the given VFS path, * FALSE otherwise */ virtual bool playSound(const std::string& fileName) = 0; /** * greebo: Plays the given sound file (defined by its VFS path). * Will loop the sound if the given flag is set to TRUE. * * @returns: TRUE, if the sound file was found at the given VFS path, * FALSE otherwise */ virtual bool playSound(const std::string& fileName, bool loopSound) = 0; /** greebo: Stops the currently played sound. */ virtual void stopSound() = 0; // Returns the duration of the given sound file in seconds // Will throw a std::out_of_range exception if the path cannot be resolved virtual float getSoundFileDuration(const std::string& vfsPath) = 0; // Reloads all sound shader definitions from the VFS virtual void reloadSounds() = 0; // Fired after the sound shaders have been (re-)parsed from disk virtual sigc::signal& signal_soundShadersReloaded() = 0; }; // Accessor method inline ISoundManager& GlobalSoundManager() { static module::InstanceReference _reference(MODULE_SOUNDMANAGER); return _reference; } DarkRadiant-2.14.0/include/ispacepartition.h000066400000000000000000000062031413722237400207620ustar00rootroot00000000000000#ifndef _ISPACE_PARTITION_H_ #define _ISPACE_PARTITION_H_ #include #include #include "imodule.h" // Forward declaration class AABB; namespace scene { // Some forward declarations to avoid including all the headers class INode; typedef std::shared_ptr INodePtr; class ISPNode; typedef std::shared_ptr ISPNodePtr; typedef std::weak_ptr ISPNodeWeakPtr; /** * greebo: This is the abstract definition of a SpacePartition node. * * A SpacePartition node has the following properties: * * - It always has valid bounds (in the form of an AABB). * - Each node can have any amount of children [0..infinity) * - A node with 0 children is called a Leaf. * - Each node can have exactly one parent (which is NULL for the root node). * - The collectivity of nodes form a tree whereas the topmost one is the largest. * - Each node can host any amount of "members" (member == scene::INode). * * It is the task of the ISpacePartitionSystem to allocate and manage these nodes. * scene::INodes are "linked" to the correct ISPNodes through the ISPacePartition's * link() methods - and are unlinked through the unlink() method of the latter. */ class ISPNode { public: virtual ~ISPNode() {} // The child nodes typedef std::vector NodeList; // The members typedef std::list MemberList; // Get the parent node (can be NULL for the root node) virtual ISPNodePtr getParent() const = 0; // The maximum bounds of this node virtual const AABB& getBounds() const = 0; // The child nodes of this node (either 8 or 0) virtual const NodeList& getChildNodes() const = 0; // Returns true if no more child nodes are below this one virtual bool isLeaf() const = 0; // Get a list of members virtual const MemberList& getMembers() const = 0; }; typedef std::shared_ptr ISPNodePtr; /** * greebo: The SpacePartitionSystem interface is a simple one. All it needs * to do is to provide link/unlink methods for linking scene::INodes * into the space partition system and to deliver the "entry point" for traversal, * which is the root ISPNode. * * The link() method makes sure the given node is added as member to the ISPNode it fits best. * The unlink() method can be used to remove a node from the tree again. * * Note: It's not allowed to call link() for nodes which are already linked into the tree. * It's safe to call unlink() for any node at any time, even multiple times in a row. * The unlink() method will return true if the node had been linked before. */ class ISpacePartitionSystem { public: virtual ~ISpacePartitionSystem() {} // Links this node into the SP tree. Returns the node it ends up being associated with virtual void link(const scene::INodePtr& sceneNode) = 0; // Unlink this node from the SP tree, returns true if this was successful // (node had been linked before) virtual bool unlink(const scene::INodePtr& sceneNode) = 0; // Returns the root node of this SP tree (the largest one, encompassing everything) virtual ISPNodePtr getRoot() const = 0; }; typedef std::shared_ptr ISpacePartitionSystemPtr; } // namespace scene #endif /* _ISPACE_PARTITION_H_ */ DarkRadiant-2.14.0/include/ispeakernode.h000066400000000000000000000011051413722237400202310ustar00rootroot00000000000000#pragma once #include #include "inode.h" #include "math/AABB.h" /** * Speaker entity node interface, allowing to * get the bounds without the speaker radius part. */ class ISpeakerNode { public: virtual ~ISpeakerNode() {} /** * Get the AABB of the speaker box, without sound radius representation. * (Use worldAABB() to get the full bounds.) */ virtual AABB getSpeakerAABB() const = 0; }; inline std::shared_ptr Node_getSpeakerNode(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } DarkRadiant-2.14.0/include/itexdef.h000066400000000000000000000004751413722237400172210ustar00rootroot00000000000000#pragma once namespace brush { /** * greebo: The texture definition structure containing the scale, * rotation and shift values of an applied texture. * At some places this is referred to as "fake" texture coordinates. */ struct ShiftScaleRotation { double _shift[2]; double _rotate; double _scale[2]; }; } DarkRadiant-2.14.0/include/itextstream.h000066400000000000000000000146421413722237400201430ustar00rootroot00000000000000#pragma once /// \file /// \brief Text-stream interfaces. #include #include #include #include #include #include #include #include #include /// \brief A read-only character-stream. // OrbWeaver: merged functionality from TextStreambufAdaptor onto this class // directly. class TextInputStream : public std::streambuf { protected: // Buffer to use for reading static const std::size_t BUFFER_SIZE = 8192; char _buffer[BUFFER_SIZE]; protected: /* Implementations of stream-specific virtual functions on std::streambuf */ // Replenish the controlled buffer with characters from the underlying // input sequence. virtual int underflow() { // Read next block of BUFFER_SIZE characters into the buffer from // the underlying TextInputStream. std::size_t charsRead = this->read(_buffer, BUFFER_SIZE); // Set up the internal pointers correctly assert(charsRead <= BUFFER_SIZE); std::streambuf::setg(_buffer, _buffer, _buffer + charsRead); // Return the next character, or EOF if there were no more characters if (charsRead > 0) return static_cast(_buffer[0]); else return EOF; } public: /// \brief Attempts to read the next \p length characters from the stream to \p buffer. /// Returns the number of characters actually stored in \p buffer. virtual std::size_t read(char* buffer, std::size_t length) = 0; }; /** * greebo: This is a simple container holding a single output stream. * Use the getStream() method to acquire a reference to the stream. */ class OutputStreamHolder { std::ostringstream _tempOutputStream; std::mutex _nullLock; std::ostream* _outputStream; std::mutex* _streamLock; public: OutputStreamHolder() : _outputStream(&_tempOutputStream), _streamLock(&_nullLock) {} void setStream(std::ostream& outputStream) { _outputStream = &outputStream; // Copy temporary data to new buffer (*_outputStream) << _tempOutputStream.str(); _tempOutputStream.clear(); } std::ostream& getStream() { return *_outputStream; } void setLock(std::mutex& streamLock) { _streamLock = &streamLock; } std::mutex& getStreamLock() { return *_streamLock; } void reset() { _outputStream = &_tempOutputStream; _streamLock = &_nullLock; } }; // With multiple threads writing against a single thread-unsafe std::ostream // we need to buffer the stream and write it to the underlying stream // in a thread-safe manner. The TemporaryThreadsafeStream passes its data // in the destructor - since std::ostringstream doesn't define a virtual // destructor client code should not cast the stream reference to its base // std::stringstream otherwise the destructor might not be called. class TemporaryThreadsafeStream : public std::ostringstream { private: std::ostream& _actualStream; std::mutex& _streamLock; public: TemporaryThreadsafeStream(std::ostream& actualStream, std::mutex& streamLock) : _actualStream(actualStream), _streamLock(streamLock) { _actualStream.copyfmt(*this); setstate(actualStream.rdstate()); } // Copy constructor must be defined explicitly because newer GCC won't // define it implicitly for reference members resulting in a "use of // deleted function" error when returning by value. TemporaryThreadsafeStream(const TemporaryThreadsafeStream& other) : _actualStream(other._actualStream), _streamLock(other._streamLock) { } // On destruction, we flush our buffer to the main stream // in a thread-safe manner ~TemporaryThreadsafeStream() { std::lock_guard lock(_streamLock); // Flush buffer on destruction _actualStream << str(); } }; // The static stream holder containers, these are instantiated by each // module (DLL/so) at the time of the first call. inline OutputStreamHolder& GlobalOutputStream() { static OutputStreamHolder _holder; return _holder; } inline OutputStreamHolder& GlobalErrorStream() { static OutputStreamHolder _holder; return _holder; } inline OutputStreamHolder& GlobalWarningStream() { static OutputStreamHolder _holder; return _holder; } inline OutputStreamHolder& GlobalDebugStream() { static OutputStreamHolder _holder; return _holder; } // The stream accessors: use these to write to the application's various streams. // Note that the TemporaryThreadsafeStream is using the SAME std::mutex (on purpose) // to avoid error and debug streams from concurrently writing to the same log device. inline TemporaryThreadsafeStream rMessage() { return TemporaryThreadsafeStream( GlobalOutputStream().getStream(), GlobalOutputStream().getStreamLock() ); } inline TemporaryThreadsafeStream rError() { return TemporaryThreadsafeStream( GlobalErrorStream().getStream(), GlobalErrorStream().getStreamLock() ); } inline TemporaryThreadsafeStream rWarning() { return TemporaryThreadsafeStream( GlobalWarningStream().getStream(), GlobalWarningStream().getStreamLock() ); } /** * \brief * Get the debug output stream. * * In debug builds the debug stream is the same as the output stream. In release * builds it is a null stream. */ inline TemporaryThreadsafeStream rDebug() { return TemporaryThreadsafeStream( GlobalDebugStream().getStream(), GlobalDebugStream().getStreamLock() ); } /** * Thread-safe wrapper around the std::cout output stream. * * Since the Windows build is running without any console window * the output to std::cout is redirected to the appliation's LogStream buffer. * std::cout is not thread-safe itself, that's why it's advisable to use * this accessor whenever client code needs to write to std::cout. * * see also: rConsoleError() which wraps std::cerr */ inline TemporaryThreadsafeStream rConsole() { return TemporaryThreadsafeStream( std::cout, GlobalOutputStream().getStreamLock() ); } /** * Thread-safe wrapper around the std::cerr output stream. * * Use this instead of directly writing to std::cerr which * is not thread-safe. * * see also: rConsole() which wraps std::cout */ inline TemporaryThreadsafeStream rConsoleError() { return TemporaryThreadsafeStream( std::cerr, GlobalErrorStream().getStreamLock() ); } DarkRadiant-2.14.0/include/itexturetoolcolours.h000066400000000000000000000020041413722237400217350ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "render/Colour4.h" namespace textool { enum class ColourScheme { Light, Dark, }; enum class SchemeElement { GridText, MinorGrid, MajorGrid, SurfaceInSurfaceMode, SurfaceInComponentMode, Vertex, SelectedSurface, SelectedVertex, Manipulator, SelectedManipulator, ManipulatorSurface, }; class IColourSchemeManager : public RegisterableModule { public: virtual ~IColourSchemeManager() {} virtual ColourScheme getActiveScheme() const = 0; // Activates the given scheme virtual void setActiveScheme(ColourScheme scheme) = 0; virtual Colour4 getColour(SchemeElement element) = 0; }; } constexpr const char* const MODULE_TEXTOOL_COLOURSCHEME_MANAGER("TextureToolColourSchemeManager"); inline textool::IColourSchemeManager& GlobalTextureToolColourSchemeManager() { static module::InstanceReference _reference(MODULE_TEXTOOL_COLOURSCHEME_MANAGER); return _reference; } DarkRadiant-2.14.0/include/itexturetoolmodel.h000066400000000000000000000214271413722237400213610ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "inode.h" #include "Bounded.h" #include "iselection.h" #include "iselectiontest.h" #include "imanipulator.h" #include "editable.h" #include class Matrix3; class IFace; class IPatch; namespace textool { // Enumeration of possible texture tool selection modes enum class SelectionMode { Surface, Vertex, }; /** * A transformable node in the texture tool scene. This is usually * implemented by Faces and Patches. They will accept a given transformation * and apply it to their selected child elements. * For faces, this could mean that three selected vertices (out of four) * will be transformed by the given matrix. It's possible that unselected * winding vertices will be affected by this transformation, due to the nature * of the texture projection. * Patch vertices can be transformed independently. */ class ITransformable { public: // Let this object save a snapshot of its current texture state to have something // to base the upcoming transformation on virtual void beginTransformation() = 0; // Move the state back to the base state we saved in beginTransformation() // Is called right before applyTransformationToSelected() is invoked with a new transform virtual void revertTransformation() = 0; // Applies the given transform to all selected components of this node. virtual void transform(const Matrix3& transform) = 0; // "Saves" the current transformed state as the new base state virtual void commitTransformation() = 0; }; // A Texture Tool node that consists of one or more selectable components class IComponentSelectable { public: using Ptr = std::shared_ptr; virtual ~IComponentSelectable() {} // True if this node has at least one selected component (e.g. a vertex) virtual bool hasSelectedComponents() const = 0; // Returns the number of selected components virtual std::size_t getNumSelectedComponents() const = 0; // Unselect all components of this node virtual void clearComponentSelection() = 0; // Perform a selection test using the given selector and test volume virtual void testSelectComponents(Selector& selector, SelectionTest& test) = 0; // Returns the bounds containing all the selected vertices virtual AABB getSelectedComponentBounds() = 0; // If this node has selected components, this selects all related items too // E.g. a single winding vertex expands to the entire winding virtual void expandComponentSelectionToRelated() = 0; }; // A Texture Tool node that allows its components to be transformed class IComponentTransformable { public: virtual ~IComponentTransformable() {} // Apply the given transformation matrix to all selected components virtual void transformComponents(const Matrix3& transform) = 0; // Tries to merge selected components with the given point virtual void mergeComponentsWith(const Vector2& center) = 0; }; // The base element of every node in the ITextureToolSceneGraph class INode : public ITransformable, public Bounded, public ISelectable, public SelectionTestable, public Snappable { public: virtual ~INode() {} using Ptr = std::shared_ptr; // Renders this node, with all coords relative to UV space origin virtual void render(SelectionMode mode) = 0; // If this node is selected, this selects all related items too: // a single face expands to all faces of the same brush virtual void expandSelectionToRelated() = 0; }; // Node representing a single brush face class IFaceNode : public virtual INode, public virtual IComponentSelectable, public virtual IComponentTransformable, public virtual ComponentSnappable { public: virtual ~IFaceNode() {} using Ptr = std::shared_ptr; virtual IFace& getFace() = 0; }; // Node representing a patch class IPatchNode : public virtual INode, public virtual IComponentSelectable, public virtual IComponentTransformable, public virtual ComponentSnappable { public: virtual ~IPatchNode() {} using Ptr = std::shared_ptr; virtual IPatch& getPatch() = 0; }; /** * The scene graph of all texture tool items. From all the selected * items in the regular SceneGraph the texture-editable elements * are extracted and put into this graph. * * It can have multiple top-level elements (faces, patches) each of which * can have an arbitrary number of child elements (vertices). * * Like in the regular scene graph, some of the elements have special * properties like being renderable or transformable, which manifests * in them implementing the corresponding interface. */ class ITextureToolSceneGraph : public RegisterableModule { public: virtual ~ITextureToolSceneGraph() {} // Returns the name of the single material that all the tex tool nodes are sharing. // This is an empty string if this scene graph is empty, i.e. the map selection doesn't // boil down to a single selected material. virtual const std::string& getActiveMaterial() = 0; // Iterate over every node in this graph calling the given functor // Collection should not be modified during iteration virtual void foreachNode(const std::function& functor) = 0; }; class ITextureToolSelectionSystem : public RegisterableModule { public: // Iterate over every selected node in this graph calling the given functor // Collection should not be modified during iteration virtual void foreachSelectedNode(const std::function& functor) = 0; // Iterate over every node that has at least one component selected, visiting the given functor // Collection should not be modified during iteration virtual void foreachSelectedComponentNode(const std::function& functor) = 0; virtual std::size_t countSelected() = 0; virtual std::size_t countSelectedComponentNodes() = 0; virtual sigc::signal& signal_selectionChanged() = 0; virtual void clearSelection() = 0; virtual void clearComponentSelection() = 0; virtual SelectionMode getSelectionMode() const = 0; virtual void setSelectionMode(SelectionMode mode) = 0; // Will switch to the given selection mode. If already in mode, this switches back to Default mode (Surface). virtual void toggleSelectionMode(SelectionMode mode) = 0; virtual sigc::signal& signal_selectionModeChanged() = 0; virtual void selectPoint(SelectionTest& test, selection::SelectionSystem::EModifier modifier) = 0; virtual void selectArea(SelectionTest& test, selection::SelectionSystem::EModifier modifier) = 0; // Returns the ID of the registered manipulator virtual std::size_t registerManipulator(const selection::ITextureToolManipulator::Ptr& manipulator) = 0; virtual void unregisterManipulator(const selection::ITextureToolManipulator::Ptr& manipulator) = 0; virtual selection::IManipulator::Type getActiveManipulatorType() = 0; // Returns the currently active Manipulator, which is always non-null virtual const selection::ITextureToolManipulator::Ptr& getActiveManipulator() = 0; virtual void setActiveManipulator(std::size_t manipulatorId) = 0; virtual void setActiveManipulator(selection::IManipulator::Type manipulatorType) = 0; // Toggles the given manipulator mode. If the current mode is already set to , // the system will switch back to default mode. virtual void toggleManipulatorMode(selection::IManipulator::Type manipulatorType) = 0; virtual sigc::signal& signal_activeManipulatorChanged() = 0; virtual Matrix4 getPivot2World() = 0; virtual void onManipulationStart() = 0; virtual void onManipulationChanged() = 0; virtual void onManipulationFinished() = 0; virtual void onManipulationCancelled() = 0; // Feedback methods which are invoked by selectable nodes to report a selection status change virtual void onNodeSelectionChanged(ISelectable& selectable) = 0; virtual void onComponentSelectionChanged(ISelectable& selectable) = 0; }; constexpr const char* const RKEY_GRID_STATE = "user/ui/textures/texTool/gridActive"; } constexpr const char* const MODULE_TEXTOOL_SCENEGRAPH("TextureToolSceneGraph"); constexpr const char* const MODULE_TEXTOOL_SELECTIONSYSTEM("TextureToolSelectionSystem"); inline textool::ITextureToolSceneGraph& GlobalTextureToolSceneGraph() { static module::InstanceReference _reference(MODULE_TEXTOOL_SCENEGRAPH); return _reference; } inline textool::ITextureToolSelectionSystem& GlobalTextureToolSelectionSystem() { static module::InstanceReference _reference(MODULE_TEXTOOL_SELECTIONSYSTEM); return _reference; } DarkRadiant-2.14.0/include/itraceable.h000066400000000000000000000013471413722237400176630ustar00rootroot00000000000000#pragma once template class BasicVector3; typedef BasicVector3 Vector3; class Ray; #include /** * An object supporting this interface provides methods * to run traces against its geometry, e.g. calculating * the intersection point of a given Ray. */ class ITraceable { public: /** * Calculates the intersection point of the given Ray with the geometry * of this object. Returns false if the Ray doesn't have an intersection * point, otherwise returns true, in which case the coordinates of the * intersection point are stored in the intersection reference. */ virtual bool getIntersection(const Ray& ray, Vector3& intersection) = 0; }; typedef std::shared_ptr ITraceablePtr; DarkRadiant-2.14.0/include/itransformable.h000066400000000000000000000030151413722237400205720ustar00rootroot00000000000000#pragma once #include enum TransformModifierType { TRANSFORM_PRIMITIVE, TRANSFORM_COMPONENT, }; // Forward-declare the math objects template class BasicVector3; typedef BasicVector3 Vector3; template class BasicVector4; typedef BasicVector4 Vector4; class Quaternion; class Matrix4; class ITransformable { public: virtual ~ITransformable() {} virtual void setType(TransformModifierType type) = 0; virtual void setTranslation(const Vector3& value) = 0; virtual void setRotation(const Quaternion& value) = 0; // Rotation around a certain point in world space, which usually results // in a local rotation and a translation of the object, unless the pivot conincides // with the object's rotation center. The localToWorld matrix should be obtained from the node being transformed virtual void setRotation(const Quaternion& value, const Vector3& worldPivot, const Matrix4& localToWorld) = 0; virtual void setScale(const Vector3& value) = 0; virtual void freezeTransform() = 0; virtual void revertTransform() = 0; // For pivoted rotations the code needs to know the object center // before the operation started. virtual const Vector3& getUntransformedOrigin() = 0; }; typedef std::shared_ptr ITransformablePtr; namespace scene { class INode; typedef std::shared_ptr INodePtr; } inline ITransformablePtr Node_getTransformable(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } DarkRadiant-2.14.0/include/itransformnode.h000066400000000000000000000014271413722237400206210ustar00rootroot00000000000000#pragma once #include "inode.h" class Matrix4; /// A node which can transform the coordinate space of its children class ITransformNode { public: virtual ~ITransformNode() {} /// \brief Returns the transform which maps the node's local-space into the local-space of its parent node. virtual Matrix4 localToParent() const = 0; }; typedef std::shared_ptr ITransformNodePtr; inline ITransformNodePtr Node_getTransformNode(const scene::INodePtr& node) { return std::dynamic_pointer_cast(node); } /// An ITransformNode which can provide non-const access to its transform matrix class IMatrixTransform: public ITransformNode { public: /// Return a modifiable reference to a contained transformation matrix virtual Matrix4& localToParent() = 0; };DarkRadiant-2.14.0/include/iundo.h000066400000000000000000000100001413722237400166700ustar00rootroot00000000000000#pragma once /// \file /// \brief The undo-system interface. Uses the 'memento' pattern. #include "imodule.h" #include "imap.h" #include #include #include /** * greebo: An UndoMemento has to be allocated on the heap * and contains all the information that is needed to describe * the status of an Undoable. */ class IUndoMemento { public: virtual ~IUndoMemento() {} }; typedef std::shared_ptr IUndoMementoPtr; /* greebo: This is the abstract base class for an Undoable object. * Derive from this class if your instance/object should be Undoable. * * The exportState method has to allocate and return a new UndoMemento * with all the necessary data to restore the current state. * * The importState() method should re-import the values saved in the * UndoMemento */ class IUndoable { public: virtual ~IUndoable() {} virtual IUndoMementoPtr exportState() const = 0; virtual void importState(const IUndoMementoPtr& state) = 0; // Optional method that is invoked after the whole snapshot has been restored, // applicable to both undo or redo operations. // May be used by Undoable objects to perform a post-undo cleanup. virtual void onOperationRestored() {} }; /** * Undoables request their associated StateSaver to save their current state. * The state saver might call the Undoable's exportState() method or not, * depending on whether the Undoable has already been saved during * the current operation's lifetime. * To acquire an UndoStateSaver, use UndoSystem::getStateSaver(). */ class IUndoStateSaver { public: virtual ~IUndoStateSaver() {} // Request a state save of the associated IUndoable virtual void saveState() = 0; // Returns the undo system this saver is associated to virtual IUndoSystem& getUndoSystem() = 0; }; class IUndoSystem { public: using Ptr = std::shared_ptr; // Undoable objects need to call this to get hold of a StateSaver instance // which will take care of exporting and saving the state. virtual IUndoStateSaver* getStateSaver(IUndoable& undoable) = 0; virtual void releaseStateSaver(IUndoable& undoable) = 0; virtual void start() = 0; virtual void finish(const std::string& command) = 0; virtual void undo() = 0; virtual void redo() = 0; virtual void clear() = 0; // Returns true if an operation is already started virtual bool operationStarted() const = 0; // greebo: This finishes the current operation and removes // it immediately from the stack, therefore it never existed. virtual void cancel() = 0; enum class EventType { OperationRecorded, OperationUndone, OperationRedone, AllOperationsCleared, }; /** * Emitted on edit/undo/redo and clear events, passes the operation type and name * as arguments. Except for AllOperationsCleared, which will have an empty name argument. */ virtual sigc::signal& signal_undoEvent() = 0; }; class IUndoSystemFactory : public RegisterableModule { public: virtual ~IUndoSystemFactory() {} // Create a new UndoSystem instance for use in a map root node virtual IUndoSystem::Ptr createUndoSystem() = 0; }; constexpr const char* const MODULE_UNDOSYSTEM_FACTORY("UndoSystemFactory"); inline IUndoSystemFactory& GlobalUndoSystemFactory() { static module::InstanceReference _reference(MODULE_UNDOSYSTEM_FACTORY); return _reference; } // The accessor function to the main map's undo system inline IUndoSystem& GlobalUndoSystem() { return GlobalMapModule().getUndoSystem(); } class UndoableCommand { const std::string _command; bool _shouldFinish; public: UndoableCommand(const std::string& command) : _command(command), _shouldFinish(false) { // Avoid double-starting undo operations if (!GlobalUndoSystem().operationStarted()) { GlobalUndoSystem().start(); _shouldFinish = true; } } ~UndoableCommand() { if (_shouldFinish) { GlobalUndoSystem().finish(_command); } } }; DarkRadiant-2.14.0/include/iversioncontrol.h000066400000000000000000000035111413722237400210220ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "iarchive.h" namespace vcs { /** * Common interface of a version control module offering * methods to access its history. * * Each module needs to define a unique prefix which are used * when resolving item URIs. */ class IVersionControlModule { public: virtual ~IVersionControlModule() {} using Ptr = std::shared_ptr; // Returns the prefix which is used to construct URIs // that refer to a specific point in the VCS history virtual std::string getUriPrefix() = 0; // Attempts to open the given resource (in text mode) virtual ArchiveTextFilePtr openTextFile(const std::string& vcsUri) = 0; }; /** * Interface which keeps track of the active version control * modules of this app. * * Version Control modules need to register themselves here * to be accessible by the core modules. */ class IVersionControlManager : public RegisterableModule { public: virtual ~IVersionControlManager() {} // Register the given module. If a module with the same prefix has already been registered, // a std::runtime_error exception will be thrown. virtual void registerModule(const IVersionControlModule::Ptr& vcsModule) = 0; virtual void unregisterModule(const IVersionControlModule::Ptr& vcsModule) = 0; // Return the source control module for the given prefix, or an empty reference if nothing found virtual IVersionControlModule::Ptr getModuleForPrefix(const std::string& prefix) = 0; }; constexpr const char* const MODULE_VERSION_CONTROL_MANAGER = "VersionControlManager"; } // The accessor for the clipper module inline vcs::IVersionControlManager& GlobalVersionControlManager() { static module::InstanceReference _reference(vcs::MODULE_VERSION_CONTROL_MANAGER); return _reference; } DarkRadiant-2.14.0/include/ivolumetest.h000066400000000000000000000042311413722237400201430ustar00rootroot00000000000000/* Copyright (C) 2001-2006, William Joseph. All Rights Reserved. This file is part of GtkRadiant. GtkRadiant 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. GtkRadiant 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 GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #if !defined(INCLUDED_CULLABLE_H) #define INCLUDED_CULLABLE_H #include "VolumeIntersectionValue.h" template class BasicVector3; typedef BasicVector3 Vector3; class Plane3; class Matrix4; class AABB; class Segment; class VolumeTest { public: /// \brief destructor virtual ~VolumeTest() {} /// \brief Returns true if \p point intersects volume. virtual bool TestPoint(const Vector3& point) const = 0; /// \brief Returns true if \p segment intersects volume. virtual bool TestLine(const Segment& segment) const = 0; /// \brief Returns true if \p plane faces towards volume. virtual bool TestPlane(const Plane3& plane) const = 0; /// \brief Returns true if \p plane transformed by \p localToWorld faces the viewer. virtual bool TestPlane(const Plane3& plane, const Matrix4& localToWorld) const = 0; /// \brief Returns the intersection of \p aabb and volume. virtual VolumeIntersectionValue TestAABB(const AABB& aabb) const = 0; /// \brief Returns the intersection of \p aabb transformed by \p localToWorld and volume. virtual VolumeIntersectionValue TestAABB(const AABB& aabb, const Matrix4& localToWorld) const = 0; virtual bool fill() const = 0; virtual const Matrix4& GetViewProjection() const = 0; virtual const Matrix4& GetViewport() const = 0; virtual const Matrix4& GetProjection() const = 0; virtual const Matrix4& GetModelview() const = 0; }; #endif DarkRadiant-2.14.0/include/modelskin.h000066400000000000000000000051711413722237400175540ustar00rootroot00000000000000#pragma once #include #include "imodule.h" #include class ModelSkin { public: /** * Destructor */ virtual ~ModelSkin() {} /** * greebo: Returns the name of this skin. */ virtual std::string getName() const = 0; /** * Get the mapped texture for the given query texture, using the mappings * in this skin. If there is no mapping for the given texture, return an * empty string. */ virtual std::string getRemap(const std::string& name) const = 0; // Returns the file name this skin has been defined in virtual std::string getSkinFileName() const = 0; }; typedef std::shared_ptr ModelSkinPtr; class SkinnedModel { public: // destructor virtual ~SkinnedModel() {} // greebo: Updates the model's surface remaps. Pass the new skin name (can be empty). virtual void skinChanged(const std::string& newSkinName) = 0; // Returns the name of the currently active skin virtual std::string getSkin() const = 0; }; typedef std::shared_ptr SkinnedModelPtr; // Model skinlist typedef typedef std::vector StringList; const char* const MODULE_MODELSKINCACHE("ModelSkinCache"); /** * Interface class for the skin manager. */ class ModelSkinCache : public RegisterableModule { public: /** * Lookup a specific named skin and return the corresponding ModelSkin * object. */ virtual ModelSkin& capture(const std::string& name) = 0; /** * Return the skins associated with the given model. * * @param * The full pathname of the model, as given by the "model" key in the skin * definition. * * @returns * A vector of strings, each identifying the name of a skin which is * associated with the given model. The vector may be empty as a model does * not require any associated skins. */ virtual const StringList& getSkinsForModel(const std::string& model) = 0; /** * Return the complete list of available skins. */ virtual const StringList& getAllSkins() = 0; // Adds a runtime-generated skin to the collection, it will be resolvable by capture(). // Note that this skin is not going to survive a refresh() call virtual void addNamedSkin(const ModelSkinPtr& modelSkin) = 0; // Removes a named skin from the cache virtual void removeSkin(const std::string& name) = 0; /** * greebo: Reloads all skins from the definition files. */ virtual void refresh() = 0; /// Signal emitted after skins are reloaded virtual sigc::signal signal_skinsReloaded() = 0; }; inline ModelSkinCache& GlobalModelSkinCache() { static module::InstanceReference _reference(MODULE_MODELSKINCACHE); return _reference; } DarkRadiant-2.14.0/include/precompiled_interfaces.h000066400000000000000000000044541413722237400223000ustar00rootroot00000000000000/** * greebo: Precompiled header module. This is included by the respective precompiled.h * files throughout the project. Many of those include boost headers into the * pre-compilation, and they do so by #include'ing this file. */ #pragma once // Add DarkRadiant interfaces #include "Bounded.h" #include "editable.h" #include "GLProgramAttributes.h" #include "i18n.h" #include "iarchive.h" #include "ibrush.h" #include "icameraview.h" #include "iclipper.h" #include "icommandsystem.h" #include "icounter.h" #include "icurve.h" #include "idatastream.h" #include "ieclass.h" #include "ientity.h" #include "ifilesystem.h" #include "ifiletypes.h" #include "ifilter.h" #include "ifonts.h" #include "igame.h" #include "igl.h" #include "iglprogram.h" #include "iglrender.h" #include "igrid.h" #include "igroupnode.h" #include "iimage.h" #include "iinteractiveview.h" #include "ilayer.h" #include "ilightnode.h" #include "imap.h" #include "imapformat.h" #include "imapinfofile.h" #include "imapresource.h" #include "imd5anim.h" #include "imd5model.h" #include "imessagebus.h" #include "imodel.h" #include "imodelcache.h" #include "imodelsurface.h" #include "imodule.h" #include "imousetool.h" #include "imousetoolevent.h" #include "imousetoolmanager.h" #include "inameobserver.h" #include "inamespace.h" #include "inode.h" #include "iorthoview.h" #include "iparticlenode.h" #include "iparticles.h" #include "iparticlestage.h" #include "ipatch.h" #include "ipath.h" #include "ipreferencesystem.h" #include "iradiant.h" #include "iregistry.h" #include "irender.h" #include "irenderable.h" #include "irendersystemfactory.h" #include "iscenegraph.h" #include "iscenegraphfactory.h" #include "iselectable.h" #include "iselection.h" #include "iselectiongroup.h" #include "iselectionset.h" #include "iselectiontest.h" #include "ishaderclipboard.h" #include "ishaderexpression.h" #include "isound.h" #include "ispacepartition.h" #include "itexdef.h" #include "itextstream.h" #include "itraceable.h" #include "itransformable.h" #include "itransformnode.h" #include "iundo.h" #include "ivolumetest.h" #include "imapfilechangetracker.h" #include "modelskin.h" #include "ModResource.h" #include "ishaderlayer.h" #include "StringSerialisable.h" #include "Texture.h" #include "VolumeIntersectionValue.h" // Include registry methods #include "registry/registry.h" DarkRadiant-2.14.0/include/precompiled_main.h000066400000000000000000000012731413722237400210750ustar00rootroot00000000000000/** * greebo: The main precompiled header file, as included by the different * projects and modules. By setting the correct preprocessor definitions * the various precompiled_xxxxx.h files are included in the chain. */ #pragma once #ifdef DR_PRECOMPILED_WXWIDGETS #include #include #endif #ifdef DR_PRECOMPILED_INTERFACES // Add DarkRadiant interfaces #include "precompiled_interfaces.h" #endif #ifdef DR_PRECOMPILED_UI_INTERFACES // Add DarkRadiant UI interfaces #include "precompiled_ui_interfaces.h" #endif #ifdef DR_PRECOMPILED_MATH // Add DarkRadiant math libraries #include "precompiled_math.h" #endif #include #include DarkRadiant-2.14.0/include/precompiled_math.h000066400000000000000000000006011413722237400210740ustar00rootroot00000000000000/** * greebo: Precompiled header module. This is included by the respective precompiled.h * files throughout the project. */ #pragma once // Include important math headers #include "math/Vector2.h" #include "math/Vector3.h" #include "math/Vector4.h" #include "math/Matrix4.h" #include "math/AABB.h" #include "math/Quaternion.h" #include "math/Frustum.h" #include "math/Plane3.h" DarkRadiant-2.14.0/include/precompiled_ui_interfaces.h000066400000000000000000000006011413722237400227630ustar00rootroot00000000000000/** * greebo: Precompiled header module. This is included by the respective precompiled.h * files throughout the project. */ #pragma once // Add UI-related interfaces #include "ui/idialogmanager.h" #include "ui/ianimationchooser.h" #include "ui/ientityinspector.h" #include "ui/ieventmanager.h" #include "ui/igroupdialog.h" #include "ui/imainframe.h" #include "ui/imenumanager.h" DarkRadiant-2.14.0/include/ui/000077500000000000000000000000001413722237400160275ustar00rootroot00000000000000DarkRadiant-2.14.0/include/ui/ianimationchooser.h000066400000000000000000000014211413722237400217110ustar00rootroot00000000000000#pragma once #include namespace ui { class IAnimationChooser { public: virtual ~IAnimationChooser() {} struct Result { // The selected model std::string model; // The selected animation std::string anim; bool cancelled() { return model.empty() && anim.empty(); } }; // Run the dialog and return the selected model/anim combination. // The dialog will enter a new event loop and block the UI until it's closed again. // The returned Result will be empty if the user clicks cancel. virtual Result runDialog(const std::string& preselectModel = std::string(), const std::string& preselectAnim = std::string()) = 0; // Destroys the window. Don't rely on the destructor, it won't call Destroy() for you. virtual void destroyDialog() = 0; }; } DarkRadiant-2.14.0/include/ui/idialogmanager.h000066400000000000000000000133001413722237400211400ustar00rootroot00000000000000#pragma once #include "imodule.h" #include class wxWindow; namespace ui { class IDialog { public: virtual ~IDialog() {} enum Result { RESULT_CANCELLED = 0, RESULT_OK, RESULT_NO, RESULT_YES, }; /// Possible message types (used for IDialogManager::createMessageBox()) enum MessageType { /// Just a plain message with an OK button MESSAGE_CONFIRM, // Queries Yes//No from the user MESSAGE_ASK, /// Displays a warning message MESSAGE_WARNING, /// Displays an error message MESSAGE_ERROR, /// Has three options: Yes, No or Cancel MESSAGE_YESNOCANCEL, /// Save confirmation as per HIG 2.32/3.4.6.1 MESSAGE_SAVECONFIRMATION }; // Sets the dialog title virtual void setTitle(const std::string& title) = 0; // A handle to access dialog elements after addition typedef std::size_t Handle; typedef std::vector ComboBoxOptions; // ------------------- Elements ----------------------- /** * Adds a simple label at the current position in the dialog. * A unique handle is returned to allow for later value retrieval. * The elements are inserted in the order of calls, top to bottom. * In case of errors an invalid handle (==0) is returned. */ virtual Handle addLabel(const std::string& text) = 0; virtual Handle addComboBox(const std::string& label, const ComboBoxOptions& options) = 0; virtual Handle addEntryBox(const std::string& label) = 0; virtual Handle addPathEntry(const std::string& label, bool foldersOnly = false) = 0; virtual Handle addSpinButton(const std::string& label, double min, double max, double step, unsigned int digits) = 0; virtual Handle addCheckbox(const std::string& label) = 0; // ----------------- Element Value -------------------- // Retrieve or set an element's value by string virtual void setElementValue(const Handle& handle, const std::string& value) = 0; virtual std::string getElementValue(const Handle& handle) = 0; // ---------------------------------------------------- /** * Run the dialog an enter the main loop (block the application). * Returns the Dialog::Result, corresponding to the user's action. */ virtual Result run() = 0; }; typedef std::shared_ptr IDialogPtr; const IDialog::Handle INVALID_HANDLE = 0; class IFileChooser; typedef std::shared_ptr IFileChooserPtr; class IDirChooser; typedef std::shared_ptr IDirChooserPtr; class IResourceChooser; // defined in iresourcechooser.h class IAnimationChooser; // defined in ianimationchooser.h class IDialogManager : public RegisterableModule { public: // Virtual destructor virtual ~IDialogManager() {} /** * Create a new dialog. Note that the DialogManager will hold a reference * to this dialog internally to allow scripts to reference the Dialog class * without holding the shared_ptr on their own or using wrapper classes doing so. * * Every dialog features an OK and a Cancel button by default. * * @title: The string displayed on the dialog's window bar. * @type: the dialog type to create, determines e.g. which buttons are shown. * @parent: optional top-level widget this dialog should be parented to, defaults to * GlobalMainFrame's toplevel window if left at NULL. */ virtual IDialogPtr createDialog(const std::string& title, wxWindow* parent = nullptr) = 0; /** * Create a simple message box, which can either notify the user about something, * queries "Yes"/"No" or displays an error message. It usually features * an icon according to the the MessageType passed (exclamation mark, error sign). * * @title: The string displayed on the message box window bar. * @text: The text/question to be displayed. * @type: the message type this dialog represents. * @parent: optional top-level widget this dialog should be parented to, defaults to * GlobalMainFrame().getMainWindow(). */ virtual IDialogPtr createMessageBox(const std::string& title, const std::string& text, IDialog::MessageType type, wxWindow* parent = nullptr) = 0; /** * Acquire a new filechooser instance with the given parameters. * * @title: The dialog title. * @open: if TRUE this is asking for "Open" files, FALSE generates a "Save" dialog. * @pattern: the type "map", "prefab", this determines the file extensions. * @defaultExt: The default extension appended when the user enters * filenames without extension. */ virtual IFileChooserPtr createFileChooser(const std::string& title, bool open, const std::string& pattern = "", const std::string& defaultExt = "") = 0; /** * Acquire a new folder chooser instance with the given parameters. * * @title: The dialog title. */ virtual IDirChooserPtr createDirChooser(const std::string& title) = 0; // Creates and returns a new Dialog class for selecting a sound shader. // It's the responsibility of the client code to call destroyDialog() on the returned object. // Optionally specify a parent window the dialog should be a child of. virtual IResourceChooser* createSoundShaderChooser(wxWindow* parent = nullptr) = 0; // Creates and returns a new Dialog class for selecting an MD5 anim. // It's the responsibility of the client code to call destroyDialog() on the returned object. // Optionally specify a parent window the dialog should be a child of. virtual IAnimationChooser* createAnimationChooser(wxWindow* parent = nullptr) = 0; }; } // namespace ui constexpr const char* const MODULE_DIALOGMANAGER = "DialogManager"; inline ui::IDialogManager& GlobalDialogManager() { static module::InstanceReference _reference(MODULE_DIALOGMANAGER); return _reference; } DarkRadiant-2.14.0/include/ui/ientityinspector.h000066400000000000000000000056731413722237400216270ustar00rootroot00000000000000#pragma once #include "imodule.h" class Entity; class wxPanel; class wxWindow; class IEntitySelection; // defined in ientity.h namespace ui { /** * greebo: Some entity property editors may implement this interface, * to allow modules to call their dialog windows directly. */ class IPropertyEditorDialog { public: using Ptr = std::shared_ptr; using CreationFunc = std::function; virtual ~IPropertyEditorDialog() {} /** * greebo: Run the dialog, returning the new value for the named property. */ virtual std::string runDialog(Entity* entity, const std::string& key) = 0; }; /** * Abstract base for a PropertyEditor which provides * a user interface for editing spawnargs (entity keyvalues). */ class IPropertyEditor { public: using Ptr = std::shared_ptr; /** * Construction function object. This callable returns the new PropertyEditor instance. * * @param parent * The parent window, needed by the code to pack the widgets of this editor. * * @param entities * The Entity Set to interact with. * * @param key * The key name which this PropertyEditor is displaying. * * @param options * PropertyEditor-specific options string, from the .game file. */ using CreationFunc = std::function; virtual ~IPropertyEditor() {} /** * greebo: Retrieve the widget for packing this into a parent container. */ virtual wxPanel* getWidget() = 0; /** * Instructs the editor to update its widgets from the edited entity's key values. */ virtual void updateFromEntities() = 0; }; class IEntityInspector : public RegisterableModule { public: /** * greebo: Retrieve the widget for packing this into a parent container. */ virtual wxPanel* getWidget() = 0; /** * Registers the given property editor and associates it with the given entity key. * (The string key is interpreted as regular expression.) */ virtual void registerPropertyEditor(const std::string& key, const IPropertyEditor::CreationFunc& create) = 0; /** * Removes the property editor for the given key. */ virtual void unregisterPropertyEditor(const std::string& key) = 0; // Dialog Handling virtual void registerPropertyEditorDialog(const std::string& key, const IPropertyEditorDialog::CreationFunc& create) = 0; virtual IPropertyEditorDialog::Ptr createDialog(const std::string& key) = 0; virtual void unregisterPropertyEditorDialog(const std::string& key) = 0; // Lets the EntityInspector restore its settings from the Registry virtual void restoreSettings() = 0; }; } // namespace ui constexpr const char* const MODULE_ENTITYINSPECTOR("EntityInspector"); inline ui::IEntityInspector& GlobalEntityInspector() { static module::InstanceReference _reference(MODULE_ENTITYINSPECTOR); return _reference; } DarkRadiant-2.14.0/include/ui/ieventmanager.h000066400000000000000000000154541413722237400210360ustar00rootroot00000000000000#pragma once #include #include #include #include #include "imodule.h" #include class wxWindow; class wxMenuItem; class wxToolBarToolBase; class wxButton; class wxToggleButton; class wxMouseEvent; class wxKeyEvent; class wxToolBar; class wxTopLevelWindow; /* greebo: Below are the actual events that are "read" by the views/observers to * interpret the mouseclicks. */ namespace ui { // Enum used for events tracking the key state enum KeyEventType { KeyPressed, KeyReleased, }; typedef std::function KeyStateChangeCallback; } // namespace ui class IAccelerator { public: // destructor virtual ~IAccelerator() {} // Get/set the key value virtual void setKey(const int key) = 0; virtual int getKey() const = 0; // Get/Set the modifier flags virtual void setModifiers(const unsigned int modifiers) = 0; virtual unsigned int getModifiers() const = 0; // Returns a string representation of this accelerator. // forMenu == true: returns the localised modifier strings // and is using a different separator to prevent wxWidgets // from assigning accelerators on its own. virtual std::string getString(bool forMenu) const = 0; }; class IEvent { public: // destructor virtual ~IEvent() {} // Handles the incoming keyUp / keyDown calls virtual void keyUp() = 0; virtual void keyDown() = 0; // Enables/disables this event virtual void setEnabled(const bool enabled) = 0; // Connect a wxTopLevelWindow to this event virtual void connectTopLevelWindow(wxTopLevelWindow* widget) = 0; virtual void disconnectTopLevelWindow(wxTopLevelWindow* widget) = 0; virtual void connectToolItem(const wxToolBarToolBase* item) = 0; virtual void disconnectToolItem(const wxToolBarToolBase* item) = 0; virtual void connectMenuItem(wxMenuItem* item) = 0; virtual void disconnectMenuItem(wxMenuItem* item) = 0; virtual void connectToggleButton(wxToggleButton* button) = 0; virtual void disconnectToggleButton(wxToggleButton* button) = 0; // Exports the current state to the widgets virtual void updateWidgets() = 0; // Returns true if this event could be toggled (returns false if the event is not a Toggle). virtual bool setToggled(const bool toggled) = 0; /** greebo: Returns true if the event is a Toggle (or a subtype of a Toggle) */ virtual bool isToggle() const = 0; // Returns true, if this is any empty Event (no command attached) virtual bool empty() const = 0; }; typedef std::shared_ptr IEventPtr; // Event visitor class class IEventVisitor { public: // destructor virtual ~IEventVisitor() {} virtual void visit(const std::string& eventName, const IAccelerator& accel) = 0; }; const char* const MODULE_EVENTMANAGER("EventManager"); // The function object invoked when a ToggleEvent is changing states // The passed boolean indicates the new toggle state (true = active/toggled) typedef std::function ToggleCallback; /** * \brief * A toggle function which may or may not succeed * * \return * true if the state change was successful, false if there was an error and the * toggle should remain in its previous state. */ using AdvancedToggleCallback = std::function; class IEventManager : public RegisterableModule { public: // Loads all accelerator bindings from the defaults in the stock input.xml virtual void resetAcceleratorBindings() = 0; // Add a command and specify the statement to execute when triggered virtual IEventPtr addCommand(const std::string& name, const std::string& statement, bool reactOnKeyUp) = 0; // Creates a new keyevent that calls the given callback when invoked virtual IEventPtr addKeyEvent(const std::string& name, const ui::KeyStateChangeCallback& keyStateChangeCallback) = 0; // Creates a new toggle event that calls the given callback when toggled virtual IEventPtr addAdvancedToggle(const std::string& name, const AdvancedToggleCallback& onToggled) = 0; virtual IEventPtr addWidgetToggle(const std::string& name) = 0; virtual IEventPtr addRegistryToggle(const std::string& name, const std::string& registryKey) = 0; /** * \brief * Add a simple toggle callback, which always succeeds. * * \see addAdvancedToggle */ IEventPtr addToggle(const std::string& name, const ToggleCallback& onToggled) { return addAdvancedToggle( name, [onToggled](bool v) { onToggled(v); return true; } ); } // Set the according Toggle command (identified by ) to the bool virtual void setToggled(const std::string& name, const bool toggled) = 0; // Returns the pointer to the command specified by the commandName virtual IEventPtr findEvent(const std::string& name) = 0; // Returns the name of the event currently mapped to the given key combo virtual std::string findEventForAccelerator(wxKeyEvent& ev) = 0; // Retrieves the event name for the given IEventPtr virtual std::string getEventName(const IEventPtr& event) = 0; // Connects the given accelerator to the given command (identified by the string) virtual void connectAccelerator(wxKeyEvent& keyEvent, const std::string& command) = 0; // Disconnects the given command from any accelerators virtual void disconnectAccelerator(const std::string& command) = 0; // Register the given menu item with the given command. The event manager updates this item // when the accelerator association changes virtual void registerMenuItem(const std::string& eventName, wxMenuItem* item) = 0; virtual void unregisterMenuItem(const std::string& eventName, wxMenuItem* item) = 0; virtual void registerToolItem(const std::string& eventName, const wxToolBarToolBase* item) = 0; virtual void unregisterToolItem(const std::string& eventName, const wxToolBarToolBase* item) = 0; // Loads the shortcut->command associations from the XMLRegistry virtual void loadAccelerators() = 0; // Enables/Disables the specified command virtual void enableEvent(const std::string& eventName) = 0; virtual void disableEvent(const std::string& eventName) = 0; // Renames the given command, keeping accelerator bindings intact virtual void renameEvent(const std::string& oldEventName, const std::string& newEventName) = 0; // Removes the given event and disconnects all accelerators from it virtual void removeEvent(const std::string& eventName) = 0; // Visit each event with the given class virtual void foreachEvent(IEventVisitor& eventVisitor) = 0; /* greebo: Retrieves the string representation of the given event */ virtual std::string getEventStr(wxKeyEvent& ev) = 0; }; typedef std::shared_ptr IEventManagerPtr; // This is the accessor for the event manager inline IEventManager& GlobalEventManager() { static module::InstanceReference _reference(MODULE_EVENTMANAGER); return _reference; } DarkRadiant-2.14.0/include/ui/ifilechooser.h000066400000000000000000000032251413722237400206550ustar00rootroot00000000000000#pragma once #include #include class wxWindow; namespace ui { /** * The FileChooser class can be used to query a path from the user. * Use the GlobalDialogManager module to acquire a new instance of this class. */ class IFileChooser { public: virtual ~IFileChooser() {} // Lets the dialog start at a certain path virtual void setCurrentPath(const std::string& path) = 0; // Pre-fills the currently selected file virtual void setCurrentFile(const std::string& file) = 0; /** * Returns the selected filename (default extension * will be added if appropriate). */ virtual std::string getSelectedFileName() = 0; /** * greebo: Displays the dialog and enters the main loop. * Returns the filename or "" if the user hit cancel. * * The returned file name is normalised using the os::standardPath() method. */ virtual std::string display() = 0; }; typedef std::shared_ptr IFileChooserPtr; /** * The DirChooser class can be used to query a directory from the user. * Use the GlobalDialogManager module to acquire a new instance of this class. */ class IDirChooser { public: virtual ~IDirChooser() {} // Lets the dialog start at a certain path virtual void setCurrentPath(const std::string& path) = 0; /** * Returns the selected folder name. */ virtual std::string getSelectedFolderName() = 0; /** * greebo: Displays the dialog and enters the main loop. * Returns the filename or "" if the user hit cancel. * * The returned file name is normalised using the os::standardPath() method. */ virtual std::string display() = 0; }; typedef std::shared_ptr IDirChooserPtr; } // namespace ui DarkRadiant-2.14.0/include/ui/igroupdialog.h000066400000000000000000000077101413722237400206720ustar00rootroot00000000000000#pragma once #include "imodule.h" #include class wxWindow; class wxFrame; namespace ui { /** * greebo: This defines the interface for accessing the GroupDialog * (i.e. the window housing the Entity Inspector, the Media Browser et al). * * Use the addPage() method to add a new tab to the GroupDialog. */ class IGroupDialog { public: /** * Destructor */ virtual ~IGroupDialog() {} struct Page { // The name of this window (unique, can be used to show the page) std::string name; // The label string to be displayed on the tab std::string tabLabel; // The image to be displayed in the tab std::string tabIcon; // the actual widget to be added wxWindow* page; // the title string for the groupdialog window // to be displayed when this tab is active std::string windowLabel; // Define the order of the "native" group dialog pages // Use this enum values to indicate which tab position // you need your page to have sorted at struct Position { enum PredefinedValues { EntityInspector = 100, MediaBrowser = 200, Favourites = 300, Console = 400, TextureBrowser = 500, End = 5000 }; }; // Defines the position page in the group dialog (defaults to "End") // See the predefined Position enum for already existing positions int position = Position::End; }; typedef std::shared_ptr PagePtr; /** * Adds a page to the group dialog. * @returns: the notebook page widget */ virtual wxWindow* addPage(const PagePtr& page) = 0; /** * Removes the named page from the TextureBrowser. If the page doesn't exist, * nothing happens. */ virtual void removePage(const std::string& name) = 0; /** greebo: Sets the active tab to the given widget. * * @page: The widget that should be displayed, must have been added * using addPage() beforehand. */ virtual void setPage(wxWindow* page) = 0; /** greebo: Activated the named page. The parameter * refers to the name string passed to the addPage() method. * This also shows the GroupDialog, should it be hidden before the call. */ virtual void setPage(const std::string& name) = 0; /** greebo: Toggle the named page. The parameter * refers to the name string passed to the addPage() method. * * The behaviour is as follows: Calling this command opens the * GroupDialog (even if it is hidden) and switches to the given page. * * If the GroupDialog is already visible and focusing the requested page, * the dialog is hidden. */ virtual void togglePage(const std::string& name) = 0; /** greebo: Returns the widget of the currently visible page. */ virtual wxWindow* getPage() = 0; /** * greebo: Returns the name of the current groupdialog page or "" if none is set. */ virtual std::string getPageName() = 0; // Returns the window widget containing the GroupDialog. virtual wxFrame* getDialogWindow() = 0; // Shows the dialog virtual void showDialogWindow() = 0; // Hides the dialog virtual void hideDialogWindow() = 0; /** * Special function for mainframe layouts. This method allows to detach the * contained notebook from the group dialog to pack it somewhere else. * Layout code shouldn't forget to reparent it to the groupdialog again * on deactivation. */ virtual void reparentNotebook(wxWindow* newParent) = 0; /** * Reparents the groupdialog notebook back to the GroupDialog itself. */ virtual void reparentNotebookToSelf() = 0; }; // GroupDialog host module class IGroupDialogManager : public RegisterableModule { public: virtual ~IGroupDialogManager() {} virtual IGroupDialog& get() = 0; }; } // namespace constexpr const char* const MODULE_GROUPDIALOG("GroupDialogModule"); inline ui::IGroupDialogManager& GlobalGroupDialogManager() { static module::InstanceReference _reference(MODULE_GROUPDIALOG); return _reference; } inline ui::IGroupDialog& GlobalGroupDialog() { return GlobalGroupDialogManager().get(); } DarkRadiant-2.14.0/include/ui/imainframe.h000066400000000000000000000107771413722237400203240ustar00rootroot00000000000000#pragma once #include "imodule.h" #include const char* const MODULE_MAINFRAME("MainFrame"); class wxFrame; class wxToolBar; class wxBoxSizer; /** * Scoped object to block screen updates and display a modal message, * used while reloading shaders, for instance. */ class IScopedScreenUpdateBlocker { public: virtual ~IScopedScreenUpdateBlocker() {} // For operations without calculatable duration, call pulse() regularly to // provide some visual feedback virtual void pulse() = 0; // Update the progress fraction [0..1] virtual void setProgress(float progress) = 0; // Set the status message that might be displayed to the user virtual void setMessage(const std::string& message) = 0; }; typedef std::shared_ptr IScopedScreenUpdateBlockerPtr; /** * The MainFrame represents the top-level application window. */ class IMainFrame : public RegisterableModule { public: // Returns TRUE if screen updates are enabled virtual bool screenUpdatesEnabled() = 0; // Use this to (re-)enable camera and xyview draw updates virtual void enableScreenUpdates() = 0; // Use this to disable camera and xyview draw updates until enableScreenUpdates is called. virtual void disableScreenUpdates() = 0; /** * Returns the main application window widget. Returns NULL if no window * has been constructed yet. */ virtual wxFrame* getWxTopLevelWindow() = 0; /** * Returns TRUE if DarkRadiant is currently "in focus", i.e. the app in the foreground. */ virtual bool isActiveApp() = 0; /** * greebo: Returns the main container widget (a box sizer), where layouts * can start packing widgets into. This resembles the large grey area * in the main window. * May return NULL if mainframe is not constructed yet. */ virtual wxBoxSizer* getWxMainContainer() = 0; /// Identifiers for application toolbars enum class Toolbar { /// Top horizontal toolbar, containing mostly view-related options TOP, /// Left vertical toolbar, containing various edit options LEFT, /// Toolbar above the 3D camera view CAMERA }; /// Obtain a pointer to an application toolbar virtual wxToolBar* getToolbar(Toolbar toolbarID) = 0; /** * Updates all viewports which are child of the toplevel window. * Set the force flag to true to redraw immediately insteaf of queueing. */ virtual void updateAllWindows(bool force = false) = 0; /** * Applies the named layout to the MainFrame window. See MainFrameLayout class. */ virtual void applyLayout(const std::string& name) = 0; /// Store the layout name, but do not immediately apply it virtual void setActiveLayoutName(const std::string& name) = 0; /** * Returns the name of the currently activated layout or * an empty string if no layout is applied. */ virtual std::string getCurrentLayout() = 0; /** * Acquire a screen update blocker object that displays a modal message. * As soon as the object is destroyed screen updates are allowed again. * * Pass the title and the message to display in the small modal window. */ virtual IScopedScreenUpdateBlockerPtr getScopedScreenUpdateBlocker(const std::string& title, const std::string& message, bool forceDisplay = false) = 0; /** * \brief * A signal emitted when the MainFrame window has been set up. * * Modules can subscribe to this to register any UI parts that require a * valid main window or sub component like the group dialog to be * constructed. This is a one-time signal, after emission the subscribers * will be automatically removed by this class. */ virtual sigc::signal& signal_MainFrameConstructed() = 0; /** * Signal fired after the MainFrame window is shown the first time * during application start up. * This is a one-time signal, after emission the subscribers will be * automatically removed by this class. */ virtual sigc::signal& signal_MainFrameReady() = 0; /** * Signal fired when the UI is shutting down, right before the MainFrame * window will be destroyed. Dependant UI modules can listen to this * event to get a chance to clean up and save their state. * This is a one-time signal, after emission the subscribers will be * automatically removed by this class. */ virtual sigc::signal& signal_MainFrameShuttingDown() = 0; }; // This is the accessor for the mainframe module inline IMainFrame& GlobalMainFrame() { static module::InstanceReference _reference(MODULE_MAINFRAME); return _reference; } DarkRadiant-2.14.0/include/ui/imainframelayout.h000066400000000000000000000041741413722237400215540ustar00rootroot00000000000000#pragma once #include "imodule.h" #include class IMainFrameLayout { public: /** * Destructor */ virtual ~IMainFrameLayout() {} /** * Each MainFrame layout has a unique name. */ virtual std::string getName() = 0; /** * Use this to let the Layout construct its widgets and * restore its state from the Registry, if appropriate. */ virtual void activate() = 0; /** * Advises this layout to destruct its widgets and remove itself * from the MainFrame. */ virtual void deactivate() = 0; /** * greebo: Each layout should implement this command to maximise * the camera view and restore it again at the next call. The layout * is activated with a un-maximised camera view, so the first call * to this method will maximise it. On deactivation, the layout should * take care of un-maxmising the camview (if necessary) before saving * its state. */ virtual void toggleFullscreenCameraView() = 0; /** * Loads and applies the stored state from the registry. */ virtual void restoreStateFromRegistry() = 0; }; typedef std::shared_ptr IMainFrameLayoutPtr; /** * This represents a function to create a mainframe layout like this: * * IMainFrameLayoutPtr createInstance(); */ typedef std::function CreateMainFrameLayoutFunc; const char* const MODULE_MAINFRAME_LAYOUT_MANAGER("MainFrameLayoutManager"); class IMainFrameLayoutManager : public RegisterableModule { public: /** * Retrieves a layout with the given name. Returns NULL if not found. */ virtual IMainFrameLayoutPtr getLayout(const std::string& name) = 0; /** * Register a layout by passing a name and a function to create such a layout. */ virtual void registerLayout(const std::string& name, const CreateMainFrameLayoutFunc& func) = 0; /** * greebo: Registers all layout commands to the eventmanager. */ virtual void registerCommands() = 0; }; // This is the accessor for the mainframe module inline IMainFrameLayoutManager& GlobalMainFrameLayoutManager() { static module::InstanceReference _reference(MODULE_MAINFRAME_LAYOUT_MANAGER); return _reference; } DarkRadiant-2.14.0/include/ui/imediabrowser.h000066400000000000000000000021601413722237400210330ustar00rootroot00000000000000#pragma once #include "imodule.h" #include namespace ui { /** * Interface to the MediaBrowser, which is displaying the * available materials, accessible as a page in the * GroupDialog's notebook. */ class IMediaBrowser : public RegisterableModule { public: virtual ~IMediaBrowser() {} /** * Returns the texture name of the currently selected item. * Will return an empty string if a folder is selected or * nothing is selected at all. */ virtual std::string getSelection() = 0; /** Set the given path as the current selection, highlighting it * in the tree view. * * @param selection * The fullname of the item to select, or the empty string if there * should be no selection. */ virtual void setSelection(const std::string& selection) = 0; // The tab name as registred in the GroupDialog const char* const getGroupDialogTabName() const { return "mediabrowser"; } }; } const char* const MODULE_MEDIABROWSER = "MediaBrowser"; inline ui::IMediaBrowser& GlobalMediaBrowser() { static module::InstanceReference _reference(MODULE_MEDIABROWSER); return _reference; } DarkRadiant-2.14.0/include/ui/imenu.h000066400000000000000000000053651413722237400173260ustar00rootroot00000000000000#pragma once #include #include #include class wxMenuItem; namespace ui { /** * An abstract MenuItem needs to provide a getWidget() method * which will be packed into a parent GTK container, plus * various callbacks for determining the visibility/sensitivity of * this item (these are invoked before the menu is showing itself). * * An utility implementation of this class can be found in * gtkutil::MenuItem which can be constructed from strings * and std::function objects. */ class IMenuItem { public: /** * Each menu item must return a distinct widget which is packed * into the parent wxMenu */ virtual wxMenuItem* getMenuItem() = 0; // Callback to run when this item is selected in the menus virtual void execute() = 0; /** * Returns TRUE if this item is visible and should be rendered. * Default implementation returns true for convenience. */ virtual bool isVisible() { return true; } /** * Returns TRUE if this item is sensitive and therefore clickable. * Default implementation returns true for convenience. */ virtual bool isSensitive() { return true; } /** * Called to let the item prepare its visual appearance. Empty default impl. */ virtual void preShow() {} }; typedef std::shared_ptr IMenuItemPtr; /** * An abstract menu object, which can have one or more IMenuItems as children. * The order in which the items are added is visually preserved. */ class IMenu { public: /* PUBLIC TYPES */ /** * Function callback. Each menu item is associated with one of these, which * is invoked when the menu item is activated. */ typedef std::function Callback; /** * Sensitivity callback. This function object returns a true or false value, * indicating whether the associated menu item should be clickable or not. */ typedef std::function SensitivityTest; /** * Visibility callback. This function object returns a true or false value, * indicating whether the associated menu item should be visible or not. */ typedef std::function VisibilityTest; protected: /* * Default test. Returns true in all cases. If a menu item does * not specify its own test, this will be used to ensure the * item is always visible or sensitive. */ static bool _alwaysTrue() { return true; } public: // Convenience method, directly taking text and icon strings plus // callback function objects as argument. virtual void addItem(wxMenuItem* widget, const Callback& callback, const SensitivityTest& sensTest = SensitivityTest(_alwaysTrue), const VisibilityTest& visTest = VisibilityTest(_alwaysTrue)) = 0; // Adds a certain item to this menu virtual void addItem(const IMenuItemPtr& item) = 0; }; } // namespace DarkRadiant-2.14.0/include/ui/imenumanager.h000066400000000000000000000062311413722237400206520ustar00rootroot00000000000000#pragma once #include "imodule.h" class wxMenuBar; namespace ui { namespace menu { /** * greebo: The possible menu item types. */ enum class ItemType { Nothing, Root, Bar, Folder, Item, Separator, }; // Interface of the menu items used by DarkRadiant's MenuManager class IMenuElement { public: virtual ~IMenuElement() {} virtual ItemType getType() const = 0; // The name of this element virtual const std::string& getName() const = 0; // Returns the event/statement that is associated to this item virtual const std::string& getEvent() const = 0; virtual void setAccelerator(const std::string& accelStr) = 0; // Whether this item is a toggle-able item virtual bool isToggle() const = 0; virtual void setToggled(bool isToggled) = 0; }; class IMenuManager : public RegisterableModule { public: /** Destructor */ virtual ~IMenuManager() {} /** * Returns the constructed menu bar, ready for packing into a parent container. */ virtual wxMenuBar* getMenuBar(const std::string& name) = 0; /** greebo: Shows/hides the menuitem under the given path. * * @path: the path to the item (e.g. "main/view/cameraview") * @visible: FALSE, if the widget should be hidden, TRUE otherwise */ virtual void setVisibility(const std::string& path, bool visible) = 0; /** greebo: Adds a new item as child under the given path. * * @insertPath: the path where to insert the item: "main/filters" * @name: the name of the new item * @type: the item type (usually menuFolder / menuItem) * @caption: the display string of the menu item (incl. mnemonic) * @icon: the icon filename (can be empty) * @eventname: the event name (e.g. "ToggleShowSizeInfo") */ virtual void add(const std::string& insertPath, const std::string& name, ItemType type, const std::string& caption = "", const std::string& icon = "", const std::string& eventName = "") = 0; /** greebo: Inserts a new menuItem as sibling _before_ the given insertPath. * * @insertPath: the path where to insert the item: "main/filters" * @name: the name of the new menu item (no path, just the name) * @caption: the display string including mnemonic * @icon: the image file name relative to "bitmaps/", can be empty. * @eventName: the event name this item is associated with (can be empty). */ virtual void insert(const std::string& insertPath, const std::string& name, ItemType type, const std::string& caption, const std::string& icon, const std::string& eventName) = 0; // Returns true if the given path exists virtual bool exists(const std::string& path) = 0; /** * Removes an entire path from the menus. */ virtual void remove(const std::string& path) = 0; }; } // namespace } // namespace constexpr const char* const MODULE_MENUMANAGER = "MenuManager"; inline ui::menu::IMenuManager& GlobalMenuManager() { static module::InstanceReference _reference(MODULE_MENUMANAGER); return _reference; } DarkRadiant-2.14.0/include/ui/iorthocontextmenu.h000066400000000000000000000023331413722237400217770ustar00rootroot00000000000000#pragma once #include "imodule.h" #include "ui/imenu.h" namespace ui { class IOrthoContextMenu : public RegisterableModule { public: // The section enum specifies where menu item should be listed under // It's possible to add new sections > SECTION_USER enum Section { SECTION_CREATE, // Create Entity, Create Speaker, etc. SECTION_ACTION, // Make Visportals SECTION_SELECTION_GROUPS, // Selection Groups SECTION_FILTER, // Filter selectors SECTION_LAYER, // Layer operations SECTION_USER = 100, }; /** * Adds a new ortho context menu item in the given section. * * @section: an integer value referring to the Section enum above. * It's possible to specify new sections by passing values > SECTION_USER. * Sections are visually separated by horizontal lines in the menu. */ virtual void addItem(const IMenuItemPtr& item, int section) = 0; /** * Removes a certain item from the menus. */ virtual void removeItem(const IMenuItemPtr& item) = 0; }; } // namespace const char* const MODULE_ORTHOCONTEXTMENU = "OrthoContextMenu"; inline ui::IOrthoContextMenu& GlobalOrthoContextMenu() { static module::InstanceReference _reference(MODULE_ORTHOCONTEXTMENU); return _reference; } DarkRadiant-2.14.0/include/ui/iresourcechooser.h000066400000000000000000000016041413722237400215640ustar00rootroot00000000000000#pragma once #include #include class wxWindow; namespace ui { /** * A Resource Chooser is a dialog for picking mod resources like * shaders, animations, sound shaders, particles, etc. * * The actual implementation varies a lot, but all resource pickers * share the ability to return the VFS path or name of the picked object * and to pre-select an item immediately after its shown. */ class IResourceChooser { public: virtual ~IResourceChooser() {} // Run the dialog and return the selected shader. The dialog will enter a // new event loop and block the UI until it's closed again. // The returned string will be empty if the user clicks cancel. virtual std::string chooseResource(const std::string& preselected = std::string()) = 0; // Destroys the window. Don't rely on the destructor, it won't call Destroy() for you. virtual void destroyDialog() = 0; }; }DarkRadiant-2.14.0/include/ui/istatusbarmanager.h000066400000000000000000000057561413722237400217310ustar00rootroot00000000000000#pragma once #include "imodule.h" class wxWindow; namespace ui { namespace statusbar { // Use these positions to place the status bar elements in between // the default ones. A position of 32 would put a widget in between // StandardPosition::GridSize and StandardPosition::OrthoViewPosition. struct StandardPosition { enum { Front = 0, Commands = 10, MapStatistics = 20, GridSize = 30, OrthoViewPosition = 40, ShaderClipboard = 50, MapEditStopwatch = 60, Back = 9000, }; }; class IStatusBarManager : public RegisterableModule { public: virtual ~IStatusBarManager() {} /** * Get the status bar widget, for packing into the main window. * The widget will be parented to a temporary wxFrame, so it has to be * re-parented before packing. */ virtual wxWindow* getStatusBar() = 0; /** * greebo: This adds a named element to the status bar. Pass the widget * which should be added and specify the position order. * * @name: the name of the element (can be used for later lookup). * @widget: the widget to pack. * @pos: the position to insert. Use POS_FRONT or POS_BACK to put the element * at the front or back of the status bar container. */ virtual void addElement(const std::string& name, wxWindow* widget, int pos) = 0; /** * greebo: A specialised method, adding a named text element. * Use the setText() method to update this element. * * @name: the name for this element (can be used as key for the setText() method). * @icon: the icon file to pack into the element, relative the BITMAPS_PATH. Leave empty * if no icon is desired. * @pos: the position to insert. Use POS_FRONT or POS_BACK to put the element * at the front or back of the status bar container. * @description: a description shown when the mouse pointer hovers of this item. */ virtual void addTextElement(const std::string& name, const std::string& icon, int pos, const std::string& description) = 0; /** * Updates the content of the named text element. The name must refer to * an element previously added by addTextElement(). * If immediateUpdate is set to true, the UI will be updated right now. UI updates come with * a certain cost, try to avoid it unless it's really necessary. */ virtual void setText(const std::string& name, const std::string& text, bool immediateUpdate = false) = 0; /** * Returns a named status bar widget, previously added by addElement(). * * @returns: NULL if the named widget does not exist. */ virtual wxWindow* getElement(const std::string& name) = 0; }; } } constexpr const char* const MODULE_STATUSBARMANAGER = "StatusBarManager"; inline ui::statusbar::IStatusBarManager& GlobalStatusBarManager() { static module::InstanceReference _reference(MODULE_STATUSBARMANAGER); return _reference; }DarkRadiant-2.14.0/include/ui/itoolbarmanager.h000066400000000000000000000033411413722237400213470ustar00rootroot00000000000000#pragma once #include "imodule.h" class wxToolBar; class wxWindow; namespace ui { /** * \brief * Manager object which constructs toolbars from XML files. * * The IToolbarManager is responsible for parsing toolbar declarations from * user.xml and constructing wxToolBar objects containing the specified tool * buttons. * * Note however that the IToolbarManager does not own or keep track of the * constructed wxToolBars; these are packed into and owned by the IMainFrame * and made available with IMainFrame::getToolbar(). */ class IToolbarManager : public RegisterableModule { public: virtual ~IToolbarManager() {} /** * \brief * Create a wxToolBar corresponding to the given named toolbar declaration * in the user.xml file. * * The toolbar's tool buttons will be registered with the event manager on * construction, and deregistered when the wxToolbar widget is destroyed. * * Calling this method more than once with the same toolbarName will create * a new wxToolBar each time, which will possibly result in duplicate event * manager registrations unless the first toolbar widget has already been * destroyed. * * \param name * Name of the toolbar to create. This must correspond to a * section in the user.xml file. * * \param parent * Parent window for the constructed wxToolBar widget. */ virtual wxToolBar* createToolbar(const std::string& name, wxWindow* parent) = 0; }; } constexpr const char* const MODULE_TOOLBARMANAGER = "ToolBarManager"; inline ui::IToolbarManager& GlobalToolBarManager() { static module::InstanceReference _reference(MODULE_TOOLBARMANAGER); return _reference; } DarkRadiant-2.14.0/include/ui/iuserinterface.h000066400000000000000000000013111413722237400212040ustar00rootroot00000000000000#pragma once #include "imodule.h" namespace ui { class IUserInterfaceModule : public RegisterableModule { public: virtual ~IUserInterfaceModule() {} // Runs the specified action in the UI thread // this happens when the application has a chance to, usually during event processing // This method is safe to be called from any thread. virtual void dispatch(const std::function& action) = 0; }; } constexpr const char* const MODULE_USERINTERFACE = "UserInterfaceModule"; // The accessor function inline ui::IUserInterfaceModule& GlobalUserInterface() { static module::InstanceReference _reference(MODULE_USERINTERFACE); return _reference; } DarkRadiant-2.14.0/include/ui/iwxgl.h000066400000000000000000000015541413722237400173370ustar00rootroot00000000000000#pragma once #include "imodule.h" namespace wxutil { class GLWidget; } namespace ui { // Application wide manager for wxGLWidgets // All GLWidgets need to register themselves to this module // since the shared wxGLContext creation will be bound to // the first registered widget class IWxGLWidgetManager : public RegisterableModule { public: /// Registers a GL widget, storing the shared context if necessary virtual void registerGLWidget(wxutil::GLWidget* widget) = 0; /// Notifies the GL module that a GLWidget has been destroyed virtual void unregisterGLWidget(wxutil::GLWidget* widget) = 0; }; } const char* const MODULE_WXGLWIDGET_MANAGER("wxGLWidgetManager"); inline ui::IWxGLWidgetManager& GlobalWxGlWidgetManager() { static module::InstanceReference _reference(MODULE_WXGLWIDGET_MANAGER); return _reference; } DarkRadiant-2.14.0/include/version.h000066400000000000000000000014551413722237400172550ustar00rootroot00000000000000#ifdef HAVE_CONFIG_H #include #define RADIANT_VERSION PACKAGE_VERSION #else #define RADIANT_VERSION "2.14.0" #endif #define RADIANT_APPNAME "DarkRadiant" #define RADIANT_BLANK " " #if defined(_M_X64) || defined(__amd64__) || defined(_WIN64) // 64 bit architecture names (according to platform convention) #if defined(__linux__) #define RADIANT_PLATFORM "amd64" #else #define RADIANT_PLATFORM "x64" #endif #else // 32 bit architecture names (according to platform convention) #if defined(__linux) #define RADIANT_PLATFORM "i386" #else #define RADIANT_PLATFORM "x86" #endif #endif #include inline std::string RADIANT_APPNAME_FULL() { return std::string(RADIANT_APPNAME) + " " + std::string(RADIANT_VERSION) + " " + std::string(RADIANT_PLATFORM) + " "; } DarkRadiant-2.14.0/install/000077500000000000000000000000001413722237400154355ustar00rootroot00000000000000DarkRadiant-2.14.0/install/bitmaps/000077500000000000000000000000001413722237400170745ustar00rootroot00000000000000DarkRadiant-2.14.0/install/bitmaps/.gitignore000066400000000000000000000001771413722237400210710ustar00rootroot00000000000000# These files are already copied from the game connection plugin folder, ignore in Windows /CameraSync.png /CameraSyncBack.png DarkRadiant-2.14.0/install/bitmaps/_black.bmp000066400000000000000000000003661413722237400210140ustar00rootroot00000000000000BM6(  DarkRadiant-2.14.0/install/bitmaps/_cubiclight.bmp000066400000000000000000001400701413722237400220520ustar00rootroot00000000000000BM86(  PPP@@@@@@ppp ``` ``` ``` ``````((((((XXX ```xxx888000ppp PPP PPPPPP PPPxxx888888``` 888888 hhh```(((@@@``` 888XXXPPP PPP((((((PPPPPP```000@@@xxx ```PPP ```@@@xxx @@@ppp XXXPPP000```PPP@@@```HHHhhh000```XXX000@@@000@@@```@@@ ``` XXX```888 (((XXXPPP(((PPP(((000XXXXXX000@@@888 hhh```000000HHH@@@(((ppp@@@xxx```888 ``````xxxxxx000 ```hhhPPPxxx000PPP XXX ``` XXX@@@@@@@@@@@@`````` `````` ``` @@@(((xxx ``` ```PPPxxx@@@@@@@@@888``` ```ppphhh``` PPP ``` ```xxx888XXX```ppp@@@@@@@@@@@@``` ```(((000PPP```hhh``` ``` ``` ```hhh @@@@@@@@@``` ```xxx000 ```hhh ``` ```hhh@@@ @@@PPP(((``` ```pppHHH(((  000HHH000888 ``` ```@@@@@@pppxxx``` HHH``` PPP````````` ```xxx```xxxPPP xxxXXX XXXppp``````xxx(((000xxx000```@@@000(((@@@000``` `````` 888@@@000xxxhhh888@@@ 000@@@888``````@@@@@@@@@@@@@@@```PPP888888@@@000``` ``````PPPhhh 888888@@@@@@PPPPPP```000 HHHHHH@@@@@@pppPPP@@@@@@ppp@@@@@@@@@xxxXXX@@@((( (((HHHxxxxxxHHH 000@@@ PPP@@@@@@pppxxxXXX@@@@@@@@@```@@@000 @@@ppp```@@@@@@@@@@@@@@@```@@@@@@@@@pppHHH((( (((HHHppp``` ``` ppp@@@@@@@@@ppp``` ````````` ```````````````hhh 888DarkRadiant-2.14.0/install/bitmaps/_currentrender.bmp000066400000000000000000001400701413722237400226170ustar00rootroot00000000000000BM86(  ppp````````````hhhppp`````````ppphhh````````````ppp @@@hhhhhh@@@000``````@@@ ppp HHHxxx888888ppp@@@ @@@xxxhhhxxx ```@@@ ppphhh@@@@@@ @@@xxxhhh888@@@@@@@@@ ```@@@ 000@@@@@@000ppp@@@@@@@@@888@@@@@@ @@@xxxhhhPPP000xxx@@@ ```@@@ pppHHHxxx(((000HHHppp(((@@@@@@ @@@PPP((( ```@@@ HHH```000@@@ @@@000PPPHHH```@@@ @@@ ```ppphhh@@@ @@@000PPP ```@@@ @@@ `````` 888@@@ HHH```@@@ @@@ ```hhh @@@ @@@  ```@@@ HHH```  @@@  000888 HHH```xxx pppHHH```(((@@@000000@@@PPP @@@xxx000XXXppp000xxxhhh888```@@@ppp```@@@ HHHppp888```HHHPPPPPP@@@@@@@@@@@@@@@ppp @@@xxx(((PPP xxx```pppppp000 @@@``` @@@ XXXhhh``` PPPhhh@@@xxx@@@888``` @@@ xxxHHH(((  (((HHHxxxhhh ```000  000```PPP(((  000@@@pppHHH  000PPPPPP 888pppHHH@@@000@@@ppp @@@HHH(((``` @@@@@@000 `````` PPP``` 000ppp```hhh```````````````hhh````````````xxxppp``````xxxhhh``````hhhxxx``````hhhPPP@@@pppXXX XXX @@@@@@ ```PPP HHHppp@@@ @@@hhh PPPxxx((( PPP@@@@@@ ```xxx@@@@@@ @@@ppp@@@000000@@@000 000@@@(((@@@@@@ ```xxx(((@@@@@@ @@@@@@ @@@888 @@@000@@@hhh000xxx``` ``````xxx@@@@@@@@@ ```@@@000xxxXXX @@@@@@ @@@ 888xxxHHH @@@@@@ ```(((@@@ @@@ @@@ 888@@@ @@@@@@ ```xxx```@@@ @@@ @@@ @@@@@@ @@@@@@ `````` 888@@@ @@@ @@@ @@@@@@ @@@@@@ ```hhh @@@ @@@ @@@ 000@@@ @@@@@@ ```  @@@ @@@ @@@HHHpppxxxhhh@@@ @@@@@@``````XXX@@@888(((@@@ @@@ @@@xxxhhhxxxPPP @@@ @@@@@@ PPP``````HHHppp``` PPP``````HHH```PPP```hhhHHH@@@ ```PPPPPP @@@PPP  @@@ @@@@@@``````@@@000@@@@@@(((xxx@@@ xxxPPP  PPPPPP @@@ @@@@@@ ``````000@@@000hhh@@@PPP@@@@@@ppp888000PPPPPP 888888 PPPPPP 888```888 ppphhh ppp888 XXX```000@@@xxxPPP 888xxx@@@(((```PPP  PPP @@@ @@@ @@@PPP@@@@@@```DarkRadiant-2.14.0/install/bitmaps/_flat.bmp000066400000000000000000000003661413722237400206660ustar00rootroot00000000000000BM6(  DarkRadiant-2.14.0/install/bitmaps/_fog.bmp000066400000000000000000001400701413722237400205100ustar00rootroot00000000000000BM86(  @@@((((((PPPxxxhhh xxx@@@XXXxxxPPPHHH`````````888 ``````((((((```pppHHH((( @@@hhh``````PPPPPPPPP```XXX(((@@@000XXXXXX```pppxxxPPPxxx```888```hhh`````````hhh```XXX```PPP@@@HHH``````@@@ @@@@@@ ``````@@@ @@@@@@ ```000@@@@@@@@@@@@@@@@@@@@@@@@PPPHHHPPP```pppPPP```hhhpppPPP``` `````` XXXHHHHHH````````````````````````hhh hhhhhh ```hhhXXXhhh```xxx@@@888xxxxxx@@@HHH ```000@@@@@@@@@@@@@@@@@@@@@@@@@@@```@@@@@@```````````````````````````````````````pppDarkRadiant-2.14.0/install/bitmaps/_nofalloff.bmp000066400000000000000000001400701413722237400217030ustar00rootroot00000000000000BM86(  ```````````````hhhxxx``````hhh```@@@ ```((((((```@@@ xxx888(((````````` @@@PPP000ppp @@@@@@ ```@@@ PPPPPP@@@ `````` @@@000hhh @@@@@@ ```@@@ XXX000@@@000XXX@@@ PPP888@@@(((`````` @@@888888@@@(((ppp @@@@@@ ```@@@ xxxppp@@@ ((( xxx888`````` @@@ppp000xxx```000 @@@@@@ ```@@@ hhh``````hhh@@@ 888`````` @@@HHHxxx@@@ @@@@@@ ```@@@ HHHHHH@@@ 888hhh`````` @@@(((000ppphhh @@@@@@ ```@@@ @@@ @@@@@@ ppp@@@@@@XXX````````` @@@ @@@``` @@@@@@ ```@@@ @@@ @@@@@@ XXX`````` @@@ @@@``` @@@@@@ ```@@@ PPPPPP@@@@@@@@@@@@@@@@@@@@@@@@@@@```xxxHHH(((`````` @@@000(((hhhppp @@@@@@ ```xxx888 hhh```XXXhhh@@@@@@xxx```````````` @@@HHHxxx@@@ @@@@@@ ```PPPppp((( `````` @@@@@@```PPPppp@@@hhh``` @@@xxxpppHHH@@@ @@@@@@ ``` PPPhhh hhh@@@````````````````````````ppp@@@ ``` @@@PPP xxxPPP  888hhh  ```000XXX```@@@ @@@hhh``` @@@@@@hhh@@@ ```hhh PPP PPPxxx@@@@@@xxx@@@ ```888  @@@xxx``` @@@ppp000 PPPPPP  888hhh  @@@ ``` @@@ @@@@@@000@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@``` @@@000xxxHHHppp@@@``` @@@```  ppp @@@``` @@@000 PPPppp`````````````````````````````````````````` @@@PPP 888```((( DarkRadiant-2.14.0/install/bitmaps/_pointlight1.bmp000066400000000000000000001400701413722237400221770ustar00rootroot00000000000000BM86(  ```  PPP@@@xxx@@@ (((```XXXxxx888pppHHH````````````ppp@@@ ```PPP 000hhh @@@@@@ @@@XXX@@@```@@@ ```xxx@@@@@@ @@@ppp@@@```@@@ 888``` @@@@@@ @@@888000@@@@@@@@@ppp@@@@@@@@@000@@@@@@@@@@@@@@@ ```XXX000xxxhhh000@@@@@@ @@@ 000```@@@ ```000 @@@@@@ @@@ @@@```@@@ ``` @@@ @@@@@@ @@@ @@@```@@@ ```PPP @@@@@@ @@@ @@@```@@@ ```@@@ @@@@@@ @@@ @@@```@@@ ``` 000 @@@@@@ @@@ @@@```@@@ ```HHHxxx @@@@@@@@@ @@@```@@@ ```ppp```hhh@@@@@@PPPxxx@@@XXX @@@```@@@ ```PPP@@@@@@xxxPPP  PPP```@@@ ```PPP@@@@@@XXX@@@@@@```@@@ hhhpppHHH  888@@@ PPP@@@ PPP(((  888pppPPP  PPPppp@@@@@@@@@000@@@ @@@ @@@```@@@ hhh PPP@@@ @@@hhh @@@ ```@@@@@@ @@@HHH@@@ ```@@@@@@ PPP@@@@@@```ppp``````hhhxxx`````````ppp@@@ hhh``````PPP 888@@@ @@@ @@@ @@@ xxx``````hhhppp``````ppphhh``````xxx@@@@@@xxxxxx@@@@@@xxx`````````@@@@@@xxxxxxxxx`````````@@@@@@(((@@@888888@@@`````````888@@@ @@@PPPPPPPPPHHHPPPPPP`````````hhhXXX@@@ 000((( ````````````@@@ XXXHHHPPP````````````@@@ `````````````````````@@@ `````````````````````@@@ ```@@@HHH````````````@@@ 888000 (((```XXXXXX```@@@(((hhhXXX888```000xxxxxx000``````@@@xxxxxx ```@@@ ppp000 (((``` 000  @@@PPP000(((xxx```xxxPPP 888ppp888000hhh```((((((XXX hhh hhh```(((@@@xxx  ```hhh PPP``````@@@``````@@@ppp@@@@@@@@@xxx`````````pppDarkRadiant-2.14.0/install/bitmaps/_pointlight2.bmp000066400000000000000000001400701413722237400222000ustar00rootroot00000000000000BM86(  ```  PPP@@@xxx@@@ (((```XXXxxx888pppHHH````````````ppp@@@ ```PPP 000hhh @@@@@@ @@@XXX@@@@@@ ```xxx@@@@@@ @@@ppp@@@@@@ 888``` @@@@@@ @@@888000@@@@@@@@@ @@@ ```XXX000xxxhhh000@@@@@@ @@@ 000XXXHHH@@@ ```000 @@@@@@ @@@ @@@hhh(((xxx@@@ ``` @@@ @@@@@@ @@@ @@@xxx000hhh@@@ ```PPP @@@@@@ @@@ @@@PPPhhh@@@ ```@@@ @@@@@@ @@@ @@@XXXPPP@@@ ``` 000 @@@@@@ @@@ @@@hhhXXX@@@ ```HHHxxx @@@@@@@@@ @@@hhhppp@@@ ```ppp```hhh@@@@@@PPPxxx@@@XXX @@@```000@@@ ```PPP@@@@@@xxxPPP  PPP000@@@ ```PPP@@@@@@XXX@@@@@@XXX```@@@ hhhpppHHH  888@@@ PPP@@@ PPP(((  888pppPPP  PPPXXX```@@@ @@@ @@@PPP(((```xxx ppp@@@ hhh PPP@@@ @@@@@@888@@@@@@@@@ @@@ ```@@@@@@ @@@@@@ppp@@@ ```@@@@@@ PPP@@@@@@```hhh000000xxxppp``````hhhxxx`````````ppp@@@ xxx``````HHH``````PPP 888@@@ @@@ @@@ @@@ xxx``````hhhppp``````ppphhh``````xxx@@@@@@xxxxxx@@@@@@xxx`````````@@@@@@xxxxxxxxx`````````@@@@@@(((@@@888888@@@`````````888@@@ @@@PPPPPPPPPHHHPPPPPP`````````hhhXXX@@@ 000((( ````````````@@@ XXXHHHPPP````````````@@@ `````````````````````@@@ `````````````````````@@@ ```@@@HHH````````````@@@ 888000 (((```XXXXXX```@@@(((hhhXXX888```000xxxxxx000``````@@@xxxxxx ```@@@ ppp000 (((``` 000  @@@PPP000(((xxx```xxxPPP 888ppp888000hhh```((((((XXX hhh hhh```(((@@@xxx  ```hhh PPP``````@@@``````@@@ppp@@@@@@@@@xxx`````````pppDarkRadiant-2.14.0/install/bitmaps/_pointlight3.bmp000066400000000000000000001400701413722237400222010ustar00rootroot00000000000000BM86(  ```  PPP@@@xxx@@@ (((```XXXxxx888pppHHH````````````pppppp````````````hhh@@@ ```PPP 000hhh @@@@@@ @@@XXX@@@```000@@@xxx@@@ ```xxx@@@@@@ @@@ppp@@@ hhh@@@ 888``` @@@@@@ @@@888000@@@@@@@@@ 888@@@@@@888@@@ ```XXX000xxxhhh000@@@@@@ @@@ 000 000ppp000PPP@@@ ```000 @@@@@@ @@@ @@@xxx(((@@@ ``` @@@ @@@@@@ @@@ @@@ @@@ ```PPP @@@@@@ @@@ @@@(((@@@ ```@@@ @@@@@@ @@@ @@@000PPP@@@ ``` 000 @@@@@@ @@@ @@@ppp@@@(((  @@@ ```HHHxxx @@@@@@@@@ @@@```@@@@@@ ```ppp```hhh@@@@@@PPPxxx@@@XXX @@@```HHH@@@ ```PPP@@@@@@xxxPPP  PPPxxx``````XXX(((HHH@@@ ```PPP@@@@@@XXX@@@@@@(((xxx@@@ hhhpppHHH  888@@@ PPP@@@ PPP(((  888pppPPP  PPP``````@@@ @@@ @@@hhh(((XXX000```@@@ hhh PPP@@@ @@@```000@@@@@@@@@ @@@ ```@@@@@@ @@@```XXX@@@ ```@@@@@@ PPP@@@@@@```xxx@@@ hhhppp``````hhhxxx`````````ppp@@@ xxx``````HHH``````xxxPPP 888@@@ @@@ @@@ @@@ xxx``````hhhppp``````ppphhh``````xxx@@@@@@xxxxxx@@@@@@xxx`````````@@@@@@xxxxxxxxx`````````@@@@@@(((@@@888888@@@`````````888@@@ @@@PPPPPPPPPHHHPPPPPP`````````hhhXXX@@@ 000((( ````````````@@@ XXXHHHPPP````````````@@@ `````````````````````@@@ `````````````````````@@@ ```@@@HHH````````````@@@ 888000 (((```XXXXXX```@@@(((hhhXXX888```000xxxxxx000``````@@@xxxxxx ```@@@ ppp000 (((``` 000  @@@PPP000(((xxx```xxxPPP 888ppp888000hhh```((((((XXX hhh hhh```(((@@@xxx  ```hhh PPP``````@@@``````@@@ppp@@@@@@@@@xxx`````````pppDarkRadiant-2.14.0/install/bitmaps/_quadratic.bmp000066400000000000000000001400701413722237400217120ustar00rootroot00000000000000BM86(  PPP@@@@@@ppp ``` ``` ``` ``````((((((XXX ```xxx888000ppp PPP PPPPPP PPPxxx888888``` 888888 hhh```(((@@@``` 888XXXPPP PPP((((((PPPPPP```000@@@xxx ```PPP ```@@@xxx @@@ppp XXXPPP000```PPP@@@```HHHhhh000```XXX000@@@000@@@```@@@ ``` XXX```888 (((XXXPPP(((PPP(((000XXXXXX000@@@888 hhh```000000HHH@@@(((ppp@@@xxx```888 ``````xxxxxx000 ```hhhPPPxxx000PPP XXX ``` XXX@@@@@@@@@@@@`````` `````` ``` @@@(((xxx ``` ```PPPxxx@@@@@@@@@888``` ```ppphhh``` PPP ``` ```xxx888XXX```ppp@@@@@@@@@@@@``` ```(((000PPP```hhh``` ``` ``` ```hhh @@@@@@@@@``` ```xxx000 ```hhh ``` ```hhh@@@ @@@PPP(((``` ```pppHHH(((  000HHH000888 ``` ```@@@@@@pppxxx``` HHH``` PPP````````` ```xxx```xxxPPP xxxXXX XXXppp``````xxx(((000xxx000```@@@000(((@@@000``` `````` 888@@@000xxxhhh888@@@ 000@@@888``````@@@@@@@@@@@@@@@```PPP888888@@@000``` ``````PPPhhh 888888@@@@@@PPPPPP```000 HHHHHH@@@@@@pppPPP@@@@@@ppp@@@@@@@@@xxxXXX@@@((( (((HHHxxxxxxHHH 000@@@ PPP@@@@@@pppxxxXXX@@@@@@@@@```@@@000 @@@ppp```@@@@@@@@@@@@@@@```@@@@@@@@@pppHHH((( (((HHHppp``` ``` ppp@@@@@@@@@ppp``` ````````` ```````````````hhh 888DarkRadiant-2.14.0/install/bitmaps/_scratch.bmp000066400000000000000000001400701413722237400213640ustar00rootroot00000000000000BM86(  hhh``````hhh`````````hhh``````xxx``````hhhhhh``````pppppp@@@(((```HHHHHHxxx```@@@(((``` @@@hhh PPPhhh000000``` @@@``` PPPxxx@@@```000@@@ppp@@@PPP @@@``` @@@XXX```PPP ```000@@@000@@@```XXX888@@@(((@@@@@@ @@@000@@@XXX(((@@@888 @@@``` ```@@@PPP000```@@@```@@@xxxxxx@@@@@@ hhhppp888 @@@```xxx@@@((( ```@@@ @@@ @@@`````` @@@```hhhPPP@@@ PPPHHH```HHH``` @@@ @@@@@@ @@@```xxx000``````ppp888@@@XXX```@@@ @@@@@@ @@@```xxxPPP``````hhh@@@ @@@@@@ @@@```HHH888PPP```@@@```xxxPPP(((@@@ @@@HHH @@@ppp``` 000xxxxxxppp```XXXxxx``````HHH @@@pppPPP``` @@@```hhh888 xxx@@@```pppppp@@@@@@``` PPP``````HHH```pppHHHhhhHHH``` @@@ HHHXXX @@@ppp(((```888@@@@@@ 888 @@@```@@@``` PPP  PPPhhh  000PPP888@@@```888@@@```hhh@@@@@@hhh pppppp888 888hhhppp000000XXXhhh ppp888 XXXppp888  888pppPPP  PPPxxxPPP  HHHxxx @@@```000000xxx @@@ @@@ @@@ @@@ @@@ @@@PPP@@@@@@``` @@@ @@@DarkRadiant-2.14.0/install/bitmaps/_spotlight.bmp000066400000000000000000001400701413722237400217520ustar00rootroot00000000000000BM86(  ```000  888ppp@@@PPP@@@ ``````HHHhhhppp(((xxx`````````xxx``````````````````hhh``````xxxxxx``````ppp```000@@@(((000ppp```((((((hhh@@@000`````` ```XXX000 000PPPxxx ```@@@@@@hhh hhhxxxhhhPPPPPP@@@ `````` ```xxx```@@@@@@xxx```(((HHH```XXX888@@@(((@@@@@@ ppp```(((@@@(((hhh@@@888 ``` hhh ``````@@@@@@PPP(((@@@(((```888xxx888 xxx```000 ppphhh ```xxx``` ```PPP000ppppppPPP```@@@@@@000000((( @@@pppXXXPPPxxx``` ``` ``` ```@@@@@@ XXXxxx```@@@((((((ppp```````````` ``` ```PPP ```@@@@@@ ```hhh(((hhh```HHH`````` ``` `````` ```@@@@@@ ```hhh000ppp```HHH`````` ``` `````` ```@@@@@@ ```(((@@@XXXpppxxx``````xxxxxx`````` ``` ```HHH ```@@@@@@ ```888PPPxxxxxxPPPHHHxxx``` ``` ```((( ```@@@@@@ppp ``` 888XXX```XXXhhh (((```XXX000``` ``` ``````000xxxppp```@@@000ppp000 ```@@@@@@@@@000``` ```ppp ppp888 888``` ```000 ```@@@ @@@hhh  hhh000```@@@hhhhhh ``` ```000```@@@xxx`````````(((000XXX xxxHHH(((```xxx@@@@@@xxx888 888```888 hhh```(((000000 hhh@@@@@@```000@@@xxxhhh  hhh``` ```@@@@@@ `````` ``` PPP@@@@@@ `````` ```@@@@@@@@@ ```ppp@@@@@@PPP```@@@@@@@@@PPP@@@@@@pppxxx``````````````````ppp@@@@@@DarkRadiant-2.14.0/install/bitmaps/_white.bmp000066400000000000000000000003701413722237400210530ustar00rootroot00000000000000BM6(  DarkRadiant-2.14.0/install/bitmaps/active_layer_invisible.png000066400000000000000000000004571413722237400243230ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME"IDAT8˥ 0 E_"HGHGt8pˉ ]+0KGH/FJ#HɑgE8j\Uޣ3܄s`ɻ[TZr+50GhC%3p+% w`8^LBTis!o`3d)l `.@]/ <ġEk$Qs2="0abJIENDB`DarkRadiant-2.14.0/install/bitmaps/active_layer_visible.png000066400000000000000000000004171413722237400237700ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIMExIDAT8˵k ? XZja-B+гr !@{͑lvfeTBqDn/@=)3.Xd )ȃЪ 1v.t:ɳh|yMJ !(PUmޮ qXm%IENDB`DarkRadiant-2.14.0/install/bitmaps/activityindicator.png000066400000000000000000000012561413722237400233370ustar00rootroot00000000000000PNG  IHDR;0gAMA a pHYs(JtEXtSoftwarepaint.net 4.0.21 i+IDATHKŖM1a-};;6 ,ek)a%e!%UQ !Rrss}L̳5]sfu43/ Xit:P(l6Q}`'\.vj}+1 PT*a+v T ETzᐂi2^.tNz=$8x<~F5V^ͦ|Rp6E h`bcg! m<@VvQ4 >F#=zh#iV+izH FnC-` #4H$J ɠO0 NgMjbR0MD[7~WC V%mϺQճ&5:, ʵ߄fJ-|m`%1L L*y1t]fc%`'NpP{YI )X%fZG[tQb 󨞵ZJEZJ|so,+04S}𻕽fJ3`,_S9=MxIENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_down.png000066400000000000000000000003161413722237400217630ustar00rootroot00000000000000PNG  IHDR 2dbKGD pHYs  tIMEԖ[IDATu1 @Ri/ba7Ha^ 㲰H;_' KၵO(0[ acXI |?g9I IENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_down_blue.png000066400000000000000000000127371413722237400230040ustar00rootroot00000000000000PNG  IHDRa]zTXtRaw profile type exifxڵV[( {$7oTtḠݦ XƩD)TN.&.DSB &l=ǃ?'ovw`쏖 E}Áo@#Y~HxA@ٷS6}Bϝ~ՉnsPDGyG;Y79)z/ 9KFU +5oH`kN-/]^.ނ99ǾBM[fXXr>Kh;b[h搽 t|EkI:4Q#sPfw)FZu1h ]#NXSVDhΕ8v x%:PnXAhyZ [ ,5ґ[+dZ0b܏i?" C|"+!} %p#wdqo|Ȼ5 BDI Z6C(1Sh1ǒ$SJV+*4jRUӬĂEKfβYPcNYK䂯 RJ 5TZ͵4O -Դk]:DO]ˠTađyT2Ì3M6,jvYkZjTUN q (K$4/ͼQtK3"2X%N 8Nܛn.[[=[}}Z_6͋Zp 6yid \Wߎ;,26lZSr!J}Jtݦ!J]J?DMJ?D%W t{ݡp=z>mJף~ݤG(L=LCtœMiCCPICC profilex}=H@_ST :Yq*Bi+`r4iHR\ׂUg]\AIEJ_Shq?{ܽzfjELvU"1z ИbKGD pHYs  tIME +&^IDAT8ݒ!@E%H 0ʮ"!`\Aalbjϟ*%b6w\Р1ѐ12ntBGƍ[Ufw0&5s, ?D׾ɝ jМX%`3|1Vɺn I $4gd/`ik  'pަ, u{IENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_e24.png000066400000000000000000000004141413722237400214050ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIMEԖIDAT8˽ӱ @ /! P :6`:%J -- :KA@K'KOoٗ:fأ@Y<jHi;LpyQ|Ũ-c^©ѡ+1Hp֛G :OPaX }WCz{ʽq,'~;NfVIENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_left.png000066400000000000000000000003141413722237400217440ustar00rootroot00000000000000PNG  IHDR AW.sBIT|d pHYs+tEXtSoftwarewww.inkscape.org<IIDATmϱ 0}`7!BNlB^ 6J*W!T0reeHT}EZIENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_left_blue.png000066400000000000000000000131661413722237400227640ustar00rootroot00000000000000PNG  IHDRa&zTXtRaw profile type exifxm' sI|T9~^+;uy؉jjILM~\5q WL<W{iχxM~ F9=% C㋒Ndt$+"ƤiHxAz,+r 8~ď;Nl}y~NuPD,| u8z(Fɘ)g$H[y/ T#g<@|oIN~S³!랳{s)#\Ե} )fs[AmcZBOJԩҤBL<027Z27MZ&`րW ;]#Nd1ZV]Cs'~ q*BȭZB#|JMZiv,0)HvExl ~@[ L)!>%Qrɀ|]1,Pl&"䨡IUYrʚsjbԲ.\=/^ %+^JN+,W|]Pƛli-oVP>-5mYJt=wKJi#>ʨ6e3O>ˬ75 W;h75|jvubbm@AbR-f0v2"i뤛_BBޠׯMvBkF^׏ڇ|iqMxekC3S "bKGD pHYs  tIME G/IDAT8˵1JA,+H'3ffo*]is-ıeؘ]U?{o9l<îPT| Pwn+>σG\SB: +1]&֝u o)b)G,e_2^O}+YaIENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_n24.png000066400000000000000000000004231413722237400214160ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME {bIDAT8ݓ10 EQE8A9G3p^}TVK`?'q$;wIe5"ޕ" {H N<{H $Lfvv%1Ou7O4fcC4MPm Wh|)*snIENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_ne24.png000066400000000000000000000005511413722237400215650ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME;nqIDAT8˥ӻJA_6[,-eltB| "ocgᥰP+? ,agWt`7L'"gtjC_1e \^t97.XEpant7Y@ <ʊ[㥦3=Fm =vbKGD pHYs  tIME "S9IDAT8˭= 1,)s[Xy;+m=h'x-d3 MЩX?Va.頬S|#RCQQN,Rq!.0[*kU_8OŻxN{'U}lM2R>6mu yjIENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_sw24.png000066400000000000000000000005641413722237400216200ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIMÈOIDAT8˥һJCA/' AkAATVym쭵-_F@ CXN897lf5Ԭ%W7Լ9>qP`*#lH8qxgs}^FN8>`O1E͉خZX.XhK<?fť MƗ媇K܎;s4,7xdx0vЊ6q3ՔFc`.R3D %z+8IENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_up.png000066400000000000000000000003171413722237400214410ustar00rootroot00000000000000PNG  IHDR 2dbKGD pHYs  tIMÈO\IDATu!PjMoQL&=' 1@^`Y;f%Qq7&=Wq^uX_<\ˉ/Ƀ\9I(IENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_up_blue.png000066400000000000000000000127251413722237400224560ustar00rootroot00000000000000PNG  IHDRa]zTXtRaw profile type exifxڵVm( )H$g`xLR5S3πejByntb"BTK9%+䐹`b~֓[< `ұa'DdxQ__pH#Ƥ@_PmMP>NlD79(#<ģgᝀ%ܙ XwU}"i;^-O_쳞.^99ǾBM=Ͱ"}w\!{(#u*4ilc+FD9sSX&+bЬA^O.͛Fǝ/RhΕ8v x%:PnXAh>(n~k*P0na6lCHGn3NEdKNK1(qtjK\trnIwrnIEuZ_6͋Zp 6yid \}{46[oV\t(=.Sr|*%o "%ot+7QzDt_P@zt2UJ?P.RztҏԣK~}$Pe$#? iCCPICC profilex}=H@_ST :Yq*Bi+`r4iHR\ׂUg]\AIEJ_Shq?{ܽzfjELvU"1z  bKGD pHYs  tIME /KwGIDAT8ӱmAз$2 pXX@:܁+px ӱwژ g7h/tQ/VьwL1[SQt`U;bSZ%ӘX[G'hmpLWMEdұo&g%% H'jCDuD.(IwIENDB`DarkRadiant-2.14.0/install/bitmaps/arrow_w24.png000066400000000000000000000003751413722237400214350ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME9{]IDAT8˵!` oc<'(8I8'@X,CYҍ&5m{IkQ3΀+f&ܛ*b7X`W(+hPgV s#q t,6?SB[7OIENDB`DarkRadiant-2.14.0/install/bitmaps/axes.png000066400000000000000000000003021413722237400205350ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME8 ?OIDAT8; ! BB6m!_&%JJ8%HW . s4g D``l`PfyIENDB`DarkRadiant-2.14.0/install/bitmaps/bgimage16.png000066400000000000000000000004041413722237400213420ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME2IDAT8˥ D8r%+W2$4gQ p !ܽ|JB YDo;Lx0X⫿ۡǚ s䆣o _Ϙ2ڎX 4sJ>җ1vHW+A;(&֎ r:L|EIENDB`DarkRadiant-2.14.0/install/bitmaps/black.bmp000066400000000000000000000003701413722237400206500ustar00rootroot00000000000000BM6(  DarkRadiant-2.14.0/install/bitmaps/book.png000066400000000000000000000014111413722237400205310ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME#.IDAT8˥Md{:s'sq0 !%Dmp&Dj'-\$N(R @[Ce AVQ$ fJIg}紸es=bfNsj+ѵc9lst+IENDB`DarkRadiant-2.14.0/install/bitmaps/brush_flipy.png000066400000000000000000000005241413722237400221310ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<IDAT81JA@דɚ{MLLlnW - `33Tu&JXV$"L Aإ? Kic"N XHr{Q,BMr N5wgf˹z\A-]xjDcNZ+r0ມw,eFkJ0HLvfp{5LqeT?٨a/KlM\G w~!&un(x.b2c[Nm95+'rKH*x8 r&g'fSoVVaJl?bIdIENDB`DarkRadiant-2.14.0/install/bitmaps/brush_rotatey.png000066400000000000000000000006331413722237400224760ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<(IDAT8?OSaϽ6IdHbj vbpufgba` ^nNO@4=V^cs{ =f)|B!MVIoD~nJ.9CA+kB)e@Em<5`J3;CVbAIENDB`DarkRadiant-2.14.0/install/bitmaps/brush_rotatez.png000066400000000000000000000007641413722237400225040ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<IDAT8ő=K[a'`{iDPE: *HiA(E B'?8uUE (&Nn/ܫ7[t9/$| zIxn {j}){,,_ (c(JKB5b]= |>LDDe\|յ5TY>7SJsZ?g|AӌLZ9Y` \G@kS;In+ѣ$.5s޴GK;g` ^ ]es+}I5UW|^I{ rƀRx+td |FkVgOz@cC8jGw~*`، @|nIENDB`DarkRadiant-2.14.0/install/bitmaps/bulb_lit.png000066400000000000000000000140311413722237400213750ustar00rootroot00000000000000PNG  IHDRazTXtRaw profile type exifxڭWWc) g$Xw0˟Cr{},V_]e]h#'LDOov}&wtuY` F~NN%܍ ){!/D˃ -Z- -n]mx"ƫ)[D: s3 ͆f|IIěQ%ȫ8#*?e@/^_h6oUTmyGHv2g`<<'-3BtT)Q6B&Zn025hbG.F+iCЫMTBSo W'H5^y+DZ.]<f \#7|A7,p0DdG;F ø D`  =Gt`DArWXppb{M^vȨY0@, 'XA%guy7z~LBC#Vx "JѠ8ccL J$'N`H)s6f}Yr̩ }-K\ME*5Ԩ!mRGumwХǞ.Z>=ߣF5H pA [C8"h70bl fZZVSVNu`wE7e95ȩq{Zݦh&BjםO,sc^ThpkDYh,~wNԄN[ʖ#JQnQF:&9c~֒1,}^Ĩ(9֍(7J9lvuU'~gh I2VQֺrDѽV]TT,{8jnIo`eK'י ^:fѥf"2iy \y EY>MqG^ZQ~Q͢ՠlP9 fb;0W!{[D9omGws;,:rZ򊲾|#>[T>M﫺}mzvbCӶdkٵNz5w,u2z n3_CVsOaNVE:Y4uFzeoZIǢxzY&%>lu\ebnZۺeôINV,9L܉n2ĸRSAߝcV\!J{U=䘵 Ԩ^ I^:TqS?4Q=?MR_>ugB8p3?fiEiCCPICC profilex}=H@_S*A :dh,8J`Zu0 4$).kŪ "%/)=BTcP5HD#b:*^э#Az,Bu_ /YbKGD pHYsodtIME s]IDAT8˭/q?4iI%^B&,4_2,]jDKjB4}I3Qp{w.C #* FTG?4595%tV[bz8"UϧdPU0G%|Euppz@'HN8n_ p]/3nMߖѮ]DQ; d\d$pgЦ'Kr n` f8ʻvof,¾1E{U{[g]@H6}* B.[qy<N5,J:Y*10saS J\t*xXBs4+Z2T0GY=b]<2qG+瑟cp3̊ f.O[n< ZУ\ź9@0S #HY/@@sJv"pieϫ{@x  66Ot^s!06%c1jL1SAѤ9ql>rƠ3zg4yE%,q%- }+J\bƪ5ܨ!krGuzS52+֛<5ک$5ƃƸ A ̓Ur@7X81tw:f@ rf{@ju|m3 e8j2+M:_W;Hy_dCiSF,VtZ蕘V!mڒ*ny\Qjϴ}Z+C_z{*|c+ !_gWF/ڡd0(5lqft%du<u3?y?!֯/#u>oi^zYY]9t5v|iN6;a2'牬V'>:^H\iCCPICC profilex}=H@_S*A :dh,8J`Zu0 4$).kŪ "%/)=BTcP5HD#b:*^э#Az,Bu_ J1bKGD pHYsodtIME &IDAT8˵JCAEϺV (B I'*6AޗI`L@BZ+򲾼& ];w.3s OpT;@X.28[W!́Gޱ_$pnÈ'aH[iD 0 DrKpEwiDUx_r޺MT4F›<96kNv<jǸ-&#O:h*vI'[q2y4 p'so.[68IENDB`DarkRadiant-2.14.0/install/bitmaps/cap_bevel.png000066400000000000000000000023201413722237400215170ustar00rootroot00000000000000PNG  IHDR ꂣAbKGD pHYs(K(KV{ftIME5rWCv]IDATHǵV=H+Y=w2ęd1O3Jݷ?͂%>% CB1j`x(/!"h! X,k-d4&$gn7{|=GV5(/WHFN=0aLLLz.Án#aDM!OsˣzYF!I$IdY<^033ӤJHzH&j. 6(v1==N RU Nj䓗":;;Ԅ94]2rδ:bgoD"faaa4MCєRp":::~)˲~cvv ÀM&wCΖ/F3YAe&=mt>՚B B P$bSUUahhX +++8 9 tD"Qtf2qCeP`lP7N166lnnd7(,L&Sc6*++_Fk9Ze:B B@Bv;]h=?O*@Ų[AP.|8>>(l.+xMB888ѧ) TmmWOD"P(=yR-NU !0L8{yخT,D"*AlllFd2|>ↆbuu?~QnmmQ%lr#P;|nH1p}}MmmmІ$9O8IENDB`DarkRadiant-2.14.0/install/bitmaps/cap_cylinder.png000066400000000000000000000023761413722237400222460ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs(K(KV{ftIMETIDATXýWoHg~rsis/m2P#2KvH"B1밸ZR(>Ba⧲X#'66FE bM̢&w3KV C{} ǻΛs555f8H$4")J➓9NYЀ, qBE|>nw<|[㸛}}}qOdY&db1J+X,FDQ$,rƍdi555MNNNUU $iq*!/ŋmE`@<XhqqcۥK} t:ݡ3 X,Ǐ?H@(700i0]hă2 يb;m= rmnn~]EQ,2́Z2N\.Nka;^ok׮=88ضg~驐$ uIzF###Ohvpӧ!IҞݒVqzS/Eܾ};F !d٭&"@DQ܊dlB{jZPpfq:%uuu(**0o i&A<G xX ~kXhvXֳfd2EQD"D6x 3lv@p7E~`֧͘IENDB`DarkRadiant-2.14.0/install/bitmaps/cap_endcap.png000066400000000000000000000017301413722237400216600ustar00rootroot00000000000000PNG  IHDR ½"bKGD pHYs(K(KV{ftIME4PseIDATHŕOH#Wǿy ILĄYMARphZnBm/,C/RS걊VE,%R5z% LH%dljq}; w{{{G.BI$OOOO<>>~lƯ6{~ُ݁@$80PTfqvvvvv~<99tP(L&4KR,Ld2RK,ɰ|>...t: 4whh#rX,EGGGX^^~|xxu<333?]כOE,--omm='QO@y{{͆|>Ԕc 6 077{Q|sppiuR\^^brrxI$OT~YoRۍ:jEUT 3rppE p<ϿL|hazU²,ѫGR Ba@ BwZ_ `kF@\FOO B|YJRJLVK(nUUNr EQ ˲k Ȳ #.MA*ntUUeՊvnB0͐$I%Rl69c PJnK'@(v"E|CX37yڹX,@P(Wdȼ٫jocX_fAGSIENDB`DarkRadiant-2.14.0/install/bitmaps/cap_ibevel.png000066400000000000000000000016001413722237400216700ustar00rootroot00000000000000PNG  IHDR ꂣAbKGD pHYs(K(KV{ftIME틽 IDATHŗMKkG5!ƀ QKᮥ5PbW] *mpQ~FXpzc<'1^ z,f6; P mۖ{FCDDឿD)Zy^-B4F**r?߁ ?J¿ADZzZS*H&qY2Mm9@u"LLL>8۬7NNN~o_'w022r&"%HDX,id>lVJr9`0x^BPFlۖ rxx()BA,˒E_><BPҲ,d2b۶lnnJ89NZ%lVL|`ttTNOON;gxJJ),ˢZ,LMM}y{{5όXZJ)F^B (`aa/ox<POW|>ToyJ=hF|>?(Y^^fmm+gm3==| 8NiDyJPP766.5" ~ﭮ.q4MreE"I!3b JD:YEDDJ߫1w@|;66mT׉hnnx<^-r Ày0 iBu4M.wrE; ۶׳z6}43334::!t]i<Z ,4M1Z;0* 㟔Wo,Z>(Z,:җbFd2)?^[[l```P(햄% Id2\|144n}o9tvvbzz%K>̕RGG ~F$ i"N`z$a!H-q]` c~~1 KKK3B`ߴN*2t].+XL&KfOVU?(R_\\4MC&YE@lmm|rrEQWUUFV-(۶d2 B˛%"8 cLl6@P۵,KẮGGG;|>Zr^.GA \\\Ţ̫,ifRx-i.Eey[){ph92\@S4>-9ܣQ/O.FqIENDB`DarkRadiant-2.14.0/install/bitmaps/check.png000066400000000000000000000005071413722237400206610ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME4PsIDAT8˥;JCQjӈ X,@TW*nmXfZi%X7,f܇jǩ"Vz0DZܕ\&8pշfE}R>v!$>fp{kZ_a\b3peF8+zE# P>M勬op#"'4~I`74ϠoVhAZ%cL)1D[@V.{,e%̙ܹ6htruotrub3|?Lsv8${,}wr~h@}+oexl Hιl ^3f{͘IQDx~M^j~2۝˛y"ZԌV0]R 8dJF0<>(*:dy H.BcE5*j_+B[↓ Ÿҕj1$`z[(CZJ֒꬝Z 0Zi'Mr\?z\֌ql\W٘77r[^ukFߌי_$B2Z5o> Th#IENDB`DarkRadiant-2.14.0/install/bitmaps/cmenu_add_light.png000066400000000000000000000004651413722237400227150ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME34CIDAT8˝0 Cl znF3t0b&Wx&R"S3xu\h- W'$=v)~!Ȫ &#T?u?S0@˽"|O[>iA䳮nV 4E a3pPq]}Z{ׅS L]Z5Jn^+ +FzdoYIENDB`DarkRadiant-2.14.0/install/bitmaps/cmenu_add_model.png000066400000000000000000000003601413722237400227000ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME+}IDAT8˵ D ۰k8^ "R\.RgԐ[!MUF{\3-d-*t0"^A:p  Jxؠ Zp>$wb6%u uIENDB`DarkRadiant-2.14.0/install/bitmaps/cmenu_add_prefab.png000066400000000000000000000004571413722237400230460ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME+IDAT8˝@DlB$5F00f>;vI%X&MTKz>K0£7CQc']XҠ$\4QKڽ3IdQu:?іC(i+IENDB`DarkRadiant-2.14.0/install/bitmaps/cmenu_merge_entities.png000066400000000000000000000003731413722237400237770ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME1u:oIDAT8˥A 0 D߈Ǜ~Qb"m$#X `7I xf>.7@V ` u];;uKn߳LjxDĨq¢]ČF";g3ev~o|7ipAIENDB`DarkRadiant-2.14.0/install/bitmaps/cmenu_revert_worldspawn.png000066400000000000000000000004301413722237400245550ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME$IDAT8˥ EQ$1'؆F4A7Iy2ՋHbk\|SD$MuY5(Զ`̀J3pFrQE$uN"S8}ӕ:PfyW FZ,_8LˈAKb`V b`IENDB`DarkRadiant-2.14.0/install/bitmaps/compile.png000066400000000000000000000003771413722237400212410ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME$iTXtCommentCreated with GIMPd.ecIDAT8R @ sNLCy df/BCttȑ1-2aOϵ@tHZ[")nLi7RL.ujqfGJ WGIENDB`DarkRadiant-2.14.0/install/bitmaps/create_decals.png000066400000000000000000000006431413722237400223630ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME1u:o0IDAT8ˍNPm*Q $@TN`x ay҇Ԃ@@ fvn{EDm bbD]\,D#5>sNBM4v|\c4%H4Yy2l5AgX9UpGp լS*VpP`^)Q$zTUE̠/;la?/pЮvDk}XEK#|R$;)m@^]J _1klep)AIENDB`DarkRadiant-2.14.0/install/bitmaps/cube.png000066400000000000000000000222261413722237400205240ustar00rootroot00000000000000PNG  IHDRw=zTXtRaw profile type exifxYv0D^a9y;x R9y*̴(Ro}ʇcQ/!S~?nߙݝ?sߎV ~}^(.dF2T.CΞ/eұ| m+yqi۾yOxo:k3Nj=p(Wx5 b.f|C>~zP\<^7c+~5Lz{;k֚*Y|nmd>-o7+]7~)ee~3EoM[Jeli6^~Ͳ7@ͺ>[:00cFBAo~jh- yctyY B!+Ĭ[Ձ`n`h\%q6Ў&.ځh\0dm2?fyۀ`޹8ʵ9'={Y\t h`%F$\!Rȡb) O!ŔRN%!ǜrVZlqc(K)rъٕ6\-R˭ {豧U/;܀'FiQFfJ0L32"Ԗ[~WZyUu`}稙jv#%5NMf Ĭ7 !0LgU`%+eAFA? ܱ{ GrJ @ rq!զk6BTH?UGMw'|chc[&&/5_nn[=^oN=g 9*a̐z7V/;щb֎\\:hkqqQfT}₿GbQ,_ScHNCLFf!@iUΥչvkE>sDpp1[:VcxYeV6N,Sy[pnXYy'څKݷ߳KK=;ܫNӈfJUrYܝʌI:郯/8K\H,w92~gNjBj2'c!j:)Ij h 0 P%,3װPINQOHP_fs!ځ&l=h Z 'SIJC=h&g9!U_&:h2DuGHY1$jlβ;aVWKnIbsJo4KQ)$ؾaYBRX딴>ҔPgn'aa* l 1sCfKN#6-%쫏%+Tr.l*KeM0DoT>i9Ay4~jjܘS$v7=Q桶&V)⩤ǪaqHhWQn-Jٻ4Q+z3!ENH>ƔU\gI:ubFݩ5^M02Vh!W)` K30kdF P;c D9D=cFҤF(.iXܴUE+8!4'3yĊ * NB$ȵ$9$ urG,b3Y Z#HXVjCjxh׍|ޅ`LsL= 1OG晑AK72 LORwYyCˢWH?iDsu[d1S9n͜ykN}şS:oɄ(mBJLׇoxjT*I4 a=(#ZH-P%Q${N˦T+&b_jk!Jѓ I!iI9 w#*m7}"bJM,0Oea$$QG GNeHzRj ȩ( CKrT#t&ڡiz0%㮄p#_讘 䵖~TwES.ĝNgT9[b$ʗIoTQDDKx-%%)'unZ !Z[ւSc.l2\ऄ7PУԚlx w(u'Cem{Vo-aݔ԰z+o=#l}M\DS$ʠH)DT8E:54j9FH uGkt5"![@pvS4߅,#E0` # >j;N%5EF PB*A“O; t6WwZ2Vn+,#6NvFPt-k=l;'틹-^przH ŭwJI" ;#-#lGϽQ?yGD]g^w ˃uEnSiUD ط F&6D{hO=Qp:F>4 Okݲ(B8>=^9w#$T`Z3I?9xt.uHI2.ڨ'_1#NzwkD-jRfRHGj"n*d ~#5ytꉕzbpURJ,\ >_ ^*Qc+hqU7)%}=&]Ӌcq=WqF4 vbRJ {J</{/7voEll<+^I=OC(MO>Ű9Fl!ZZm*}u0$8$704ge3/3:/:ĭlЯ ߘWPHCˍ?huu}VLA1^iM+ovsfLݻ싯߻} q'|:#/Uͷ; Y봮s,. }%񀕞VQ>R)zfIچd_d0B CbTKJk545,t'cʭeQlMhbMhmh]$? ,5mzZB˖4Ft O=cbWc:(7_.ٲ7eŭegGZ:Pm<{xW^S35jiD^* ^Vn'Zc+E g Ydϛgrғڛ^u> ,1"\%`(zw U&WֆW%n12epRb8fX.(ǹn[ITx!ggXҶ\Ghi%^Z-ıF۝9!|\s#b\Կ3tW_^zDXT*-4Pڎ,۴#]sI2fHSL`'C9^QfS=iO^^ucB 겦8@˂fpd,˖\ eD043޵h].A5γQF[iq=o&6z4Ԥ}|kʴbL5LjpT$W}MNSQ I:bj+Iw_=lپ"U%_ESz! ,Tq sciV_φӶ&DSe Cg ɳl];9As43嗭,yGz%},aD)5deنeX #dh{/DiӋQ %UPJ}Zso$ ֣bKGD pHYs  tIME  EéIDATH?PƟsLbJ(w,)8СP:  wPppG):BI pќs:ܫX:gL{]T纮. :A3B*w]W 1b_}oj,%B !dֶmi q"UiSoKңZ0˲Fq}BӴr.bQ}r,k4Wnd2j֣H@Uz]t:b(d:~{1 Ms(LQl6+(8ɛ^mIzB V1a]?S/K9ctL-E$If8VmNlÇ^SA)hZR4M%Wocd6I<^.G˲0L`p1 BȻt:L4s.>>@b>/Vs;O)WIENDB`DarkRadiant-2.14.0/install/bitmaps/curve_append_point.png000066400000000000000000000006341413722237400234710ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs+tIME0=)IDAT(ϕKBas\","Z+Z#"ScJ\MZ$ZTr3;{>s i8n$]3ܭփ_0^ai;4!TIlb-٨e7B`? CIP= #}~_6@R x€KqAdc&6!a$iWR&AduI;^-I?ʒ%Kv?_vs*y4p46;8q&Hnh>ǿ)nIENDB`DarkRadiant-2.14.0/install/bitmaps/curve_cap.png000066400000000000000000000004041413722237400215470ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME0=IDAT(ϥ ! Ce3ͲSN1pRebIU@rIJ,Zw8@a  ePU%:/vNk b>/RpsyfANV0\'0}ceKG3IENDB`DarkRadiant-2.14.0/install/bitmaps/curve_convert.png000066400000000000000000000006611413722237400224710ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs+tIME/5 >IDAT(ϕ1KA=,AF?RH,Dl,wF+;BS[$hu@cnXݙvfoƙv3.3y/G%]=:V>4 9Q+8zpfݜb$@rΪy>JZu9L}g 2̌y+@?'i!苄G($=2u9 8I.qwa6 L%ԁ`8*kiचWi`?^6g7ɀIENDB`DarkRadiant-2.14.0/install/bitmaps/curve_create.png000066400000000000000000000010321413722237400222450ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs+tIMESIDAT(ϕkQsX>"!E[' ]AtTZ˛Ժ-.Nš*!R3DژZIKX3s99/ytx Jz˵@NRcy  ] {w3|m?ӉF_`X4=$MI:ڑ@[ತoDy59IWG@Ls ͿsO_ µgϿԖJA\ˡ^=c&(o3C)^/0 FNwHJ%| WXHOOơ&ǡ++=r:xk3Y]`ԕsnW8Ӿjh6jyO5=D` (^{eiIy)V0 IENDB`DarkRadiant-2.14.0/install/bitmaps/curve_insert_points.png000066400000000000000000000006271413722237400237130ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs+tIME[ǖ$IDAT(ϝ-HCaoww""eڬ. VMULങDi &EqIM7]ƼIqfY8tJB"OI\ fHc<uA~9`sIzF"#?mm`Z/|\a.b}X{ ׁh5kfͲm5`;`E㿀h.KC۳>-YL9\&[./ak/G XH1$-q<$рIENDB`DarkRadiant-2.14.0/install/bitmaps/curve_remove_points.png000066400000000000000000000006441413722237400237030ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs+tIME/5 1IDAT(ϝJQIL6 ""*&O X B [[ w(+ VbB ;?nd!.30p9\13Tu8jzƀz3T/$'oGafH*K#"R' NUwЮmUk )YCJif=9qKvMFw}"nDU>s,lS@ UQy $d\i,P/!9A`I8U2x$92Ol:2<@Gd |i.aIENDB`DarkRadiant-2.14.0/install/bitmaps/darkradiant_icon_64x64.png000066400000000000000000000065421413722237400237600ustar00rootroot00000000000000PNG  IHDR@@iqbKGD pHYs  tIME&:6t IDATx]]uk}`͇11`CP$K(EMQ6RFR_>TU#*JڧJDBQP)-=3w~0DHWgZk3|8> 3f0` 3f!<|ޫC6|}u^D9/9Qq5O_Y fp~n+ !Nć(,mx((?oO=̃7yO<sWNYBD#{}q OpkHF#i40LMAY04&:l!Q"}0\ q6iEțwjmQd:?x& AvJR+ Imw\FZ-c<8}O<@{sP:s*#3PzO =}bi8rXNg=:v 8}~?E4isn 'QQeȣ"G3 5C +{iknO3},o:=-8[vˌ˶U3)UG@'_KV\ hKb4C"RAApno{r^:,A R:3'Ó?_ݠVk߮V-)J2{[ٵ̈!?TD}f$U|9Lu& m* 1Eqzi[m}&D>I bRd"}?^}k1ho6ќU& 0VeϛrSS= U Y=7+#UU*aF< _%5VflV؛V z2ʒ2hF *L,.rv88sf˵ߑ pr觴 ."ksEUb!5nu̡`"52IUIfwǒYX,n Vkek՜rZ+90cqy~ɱ蜛]щm`^Uތ foXؾw޽קR3w5*aTo~(]ųl& |%UfM6KιBݑ=Ŧ&SK++Tuf$zU̞^oBM6SWŽ܋h"2qJd[gNꆲ,s`Si 8'mՕZ=N /uyZE]a;;+ucG.wdʾk#27Uh*=y~ڵh4"X79FrcB5ὣi!N&=ΪH)fX6)n6ĘHQĪqB'?J#WfLXDύFO3^dR4=>vO+,':_"㊪x_[?5 V 07ဢEם/P3N =u(Vb9RҺ!}=<'y㍷ ;5'>y/o3[an^kk5q "XYgΪg.ŇO)7L>--i7^0wn I=jT*8Tejo~hfKFh/px"Oi-*׫ Cf.?3f0` 3f0v/p¼0rIENDB`DarkRadiant-2.14.0/install/bitmaps/darksplash.png000066400000000000000000013242121413722237400217430ustar00rootroot00000000000000PNG  IHDRXwbKGD pHYs.#.#x?vtIME38= IDATxԽi$Ir%gu3 3cbYbe)kKbR(7 ,飺*+80SwȈʪn w;T>}C'gQ`p{kl\/!ǡIbC;7xXZx+Z"WPSʨ:Ql`v;0hHEA  PA7`wI{'m?ް' P wϫ vCv6ȉ! T0 ) s)0gXH1P]̺QKX Rڴn&Æ@p]X)G{2^e'h1 Rˠo6LYҀ6&J`\r\_ղ6|یқ.{%Pۛ [۴-WCG*fnjvmn{Aa-P 7ۜf+,w\Nd-B?S_y{x"L0JeM~2tt,:fBU Uxy9fbH E]bV*Y̓ΫX(ke⍇~Q(\H;oz޳778g]luڰp< 1 hY. i h\&P   G030"AMkjCikc)"uJ`-V8X][BP@hPӠZ[ |ά率no,@5ӭoP(Yվ1F Xg=7F `4!CW̷;"۽0,h7~;]^oGv9Mps &{4H3Sh\ʣ=JVEOe)>ԈiQ%aQ]>O|j?]rR]OGQ2.Η򺶫2RGlm#\mzLmGb.܍~XrjV~qpkh@ ZMrތ$ il" 0$@+A[%k"7^o5#[B @6xQA IteEM ̑p&V[H.̢}{6KKzᭉpl_Inv >eSxՐVam1_dl4kߛ# (-صhٶN8Mpߙ&F F/Ϗ`X,u չ^eˢ|yqQ0uPP'w`4$qGc|ճEOl."H!v70i6{g{ 7K^u/6(sNf<(3'E`x" ZR̀(ָOMqbNu/.5f*Xl:av> O WЃьͯ%Qb 4 !(Pz44_+5?pK,"/{o(mܙPB&D=Z@PNϬx˺ņu Ekm?W3~Ggu]ַ3>O?z07ICYUx.)]".``Rϗd4H_͖_8y''/N 5PO, Zҥhiټ:Zг".v5 p" hn} Lf3.`z՛֡mlu55~uL@Dr@GA*EyPҬa>" aAYFH"(HԆ&wk PBPNߢz5\\a^N% &.𤁕a±+ՙF@Kpbkh[`kX\ˆj|s=c]$W@Ni~cj}6fWȀPeKo%_m 6PAUۜcnMa#kd^ $L|:R;ມ#\d|8`΃ó@VuUK$3Hk-՛!c1+QDk#~S5_#[c4"rס i3MJ=#ۢTo><~puo:[.k4Iӑ#$jRs1PQH@X'*C4el^qQ=:V\Rӳxh4Vuz4ѲNӤ*A6Uuy{cwrk26oq2nN?d[wzͿaS^~"!nayPfXHh"V'IՀT3!w2NXU"Z{vsV09bn֬zGu "jێ"3 6]\4WkVeAFCLG޲ ӥY^&+K k  ;7w`BvĦ3P;XN^ -lj6({uUz*$HݒOtmr fqGPZI-_Qfa'ƅkW]kS'Hyߊ l*ۢ1& Vl}<{?~?u$bx GS*hգl@&*Kh= EeQ0YYTU 4DއP ħ!֡#%I\,eY$ӳ僋˫".TmbLERVꈝ`ּϿz[̟nFH$ V=rleebVE͘|WAC4 V *PJ*Э^ʶld[2U7J{U'^ 5,#f DdB>qj)}P6k$#xHp&p 7-;\#pnt*GX▤V<܋0Xbq YuZUBd 0*zc[X#7GVz%? ]5_Un-=[Uww 6ܺH4Y0un5`(XHD3ͥh?겜]]a!M|+qY]08qx8'8$9鲆FŒ|Og_WNx4W~20FM|"pHJFvԫRa2DѢFBrA9OxzXŢ.|&LJ?{ʔ\L;jqW!v`Mbz7{oYumq%[!t'҆_F !”Cf5Ddb-F3}䷮;*hPP:!*f3hh莲^Ju8 VtCPrriȻ-s{G>>??EBXm*́"^<5fj37$u{R-bl;) OPrGG ղڟ%/ϋ^,KU5UuBp#pjལYeޓftZյs uEQBgYEEBwp^hh2}v%`2$I' #0TLPl +X0m.cosBf2ͬ@#N4E:̦fj7<*R KXm5vAf2`$4U\L YGֵO.eg -o:%]ύq?"+V6}5^w%hTӹh[nO a% >"G/ %0A8U5FĞi+sA)p/?_2W!~vtep\|ibDQ3#]uMg  K{Ss7^6 .ZD)(e$̩48yF†LbQjTaP4m9@`{/ Lӟ٧_ ʆLJ2GL\W10KS悹VMSmڌk]w ][Pux"NMm[ʄ6s8 3pil{f%oN(:'-5U1"'##ވwgP7QO;q׵^I (Ԛ:Z66UشCR IS & l9LCJ̧7>Wvb^Ko3P( ;: |pm|}fd ^WX8٣>F,1:CS uŵhn~ti偍E[-6>Ɏ%-=[z0J<F`؛d'$(jn`r돳O&e 4d0~٬OܓQCI\UbxV5_T "2V~:J 9`o^$I"U $EmtHD5 ZC^ y(!1R5M7=ճ|2ԕR&C 1jZn,A?N/>yٗ畦;_??>="y1eQ(]ı.ELu4ZVVb}ןi$21 1,+ ЖW:?~ۮ]IMT}(f<)vr=ɽq^N8-i /I0O.ݬ b،fYkZjX<UmUm뗳:|V @gނ&*n#Qqq IDAT $i!Ο"RȺivcAȻmn(M !DVi s3d:b6qbRQSϑCmpDvSґdE}n+oOSu'_TY(wzuvHF~}uW5/NH]ʡի:,K8t#*ݰWjj댓#?|{^^_^]_?>'V<8+_}yQ⓽tod0G+QYVHP,ڐ.:F+8 r:L?x?~6__~}2{zճOO.??˳/>|q6(峳rYF^TiǣğK6b]:.|6H( ~PGOhYw _=>~w߽P%yRj4䃜Ib|uQǕX˵u>oM+wnP0&@9AqxʔNhH;ń90%jW_9*#q끚ͼUIYeQJVƵcU禤 m}soCZ|t/wG#"-ȴ/ vaܫC-9Lu ŵY#I!kPrfƗ \/f瓄/"QӈSbiH{r!>v*^dM:fklW[GB{x(e~%ʀaG4(4!l5GH)l&#wpyGT˖Em ^a8ɅjTac^(@0tBjovsp_s?a{eѯ~\_C-4z~}b4={'铓_8珏././O}`-Y#gu0Nz7$ۍaʘImyJ\J7nD"R\z*Mtܤ9p$fFGLK=PuiZ.곶i+W""]x}7#jiRk|42^m#^gܖ;k% g7#NQ0ʀzjC4`8N_LF2zu2$I?iU${[{{+Qp0^_Q5 'dCNkcg '=yZoJHޙ%>skWOwSߎJֺ'fBS[ Ka~@ $n 1Fl pCҌ벨wG'c],4zΎ~U|bM> WI4XҢEReWʋeO_^;px>㇥? eZEbL Naj?h}c6'/e1WuYc5̒$CUU;C$/>{1 O=xh uԐrYdINX]a&Ί8?j1+"q͓%DΦw:U1YOk7Ӣێ `oɦZGf"S!3dH.;P8ûp]F+xXʈPZ.p mPtd+,]Vs.C+a+bߨl@fmaXl۬s% vȅNoW]38UiAHVrxfh#t]~ld:\?JTp(x@ ]a6p8=rpq] ɁDUY0YxTe~ۑoXRg4jM9$J~=s 2.+ F"6[iBn$nxkݷ-[x :O4M(0\N"{-9_m ܨЏ~4(7P}qZ\.Vwh${O?:<;;?9>瓤*kTd4}N>9J܇<~KK K }/~yv`iG?{'{{y?R*t Fii#*[ewޟMyE''Ws$>*I*XUYI\6:U-_>M AB`B9ofih4a>:eږzgkM.ړI Y#GhZ=-_zz)`0]^;8G'Bh2~UUYLò(tG~d7ٛżK^DGĈD } gz#^ՆgiDtL0r %C,) ²mkLm-r s=m-[bI 9YI#iU],p pzfböI#޷y*"(L_dZm\K9 #Sw"ClI!RhՍM^@K2i(v|Ѯ˩2%kBat??]O_ԘUO&X 1 =%Wj6hMcTyxFdtl_̉oMHhIă1^V?8H?)* VvjX,Ԃ} \x\x?]TUXVNDPi/FlC6vH ir[@J 1 `莌Z7+p(,mܖhWi[Jt ::ԉšCڝVLNkiQzۅ%ҊRBUSU5CPAU ü 0 nL [ LQP=y|]Op|O3ܿ1j 3BHtyUUVl䳯O&4MCXgWgO>8>ݛ<c"1$ #\DHDVfrKWH4m+F"mc&Yo Sj4g@ yxaȃ9AuVQR kծƜGzM @C.PUWD !6]UAB4RRF F}Q(;JD ~N9^ٶ\0E$kb+Yw6rD|NZHE<,3 A1efbD"hV@Rr$P{{LuPTb&]̇pPUA.39yebY2Oz$NL 쟑F-^rDD{-MkT4:kE#-NHpf=mz5F Ta9pyk“Ȑb6ts8)BQ(*CE6!˻|?ɓ_O'Qt&L4`0E3U\U*( epu2ý-kɣ=c{3I8)~⪪_<~??;_ӓpUyQ0I>p*pq<̫?'|6"4r:'c2bVYNFP}qKIҽ/.Ӝ%I!UIjjLi$NOOɓGq9[qt3AF19h(*0H=S'P5VuQZ;(5&D;zTEPT֝MYZ5Zj%kXsBjf‘Ьmlq6D |ܭySh?S& =ygczs'PrQ3F!I&+@/%c5`k6g; +YeFޏ)f ɚR X50s֬upɀ(ijz82mԈeZ%'KxtY0ifְA.)0vSR+<}JC_ '^.~>v57Mvq8H:憛MtT]6CGςo-b4K"@~|"kNS$~f+avgx 3YsvRWp 0[FUdaVT]k8 yLh97 [HǢmGs/:Ø+^(DNFٟ ƽ>mK %Q"bM<_ݚW^y{)*Ѧ#9A0%\Դ\DCWK+s' `  8J`mY_0A38*`XVlX"NoUouٕ]k$O<$((mCˏݗOxedmꡲGCh(wBi*ȭY,y@:N Gw'r\Z!crL "0z``nD!q,$ޝU8~޴ol0VddL6$ ƫt,I/A2(ᄥ5 #5%u"#_@O#$dHD$v4 >QA\A] yEfOE22糃@YPR XHyZhOs eP:dоU86l 'f- mIsݞo3_y_yx~BmͶ>P9\\2 )FQ. ɻpl'<ٷ?ܛt﵃r?='?tٯznl7U*+&a~.nۧO/~*v}d6vV`J;8gս;'/wьnb@Y =rJNw, r Cܬz6I,5MariESPD)BaqX̧guQ>ծM[dѐlN(S,7z(D0d֏D @e,i =VT{L{qOMeΊ#`ω?mt@t-=+7++@ 'rt2DD aU^z,$\SN>Fi,\I `Nx"ij ݾo6,*( 7ZӒFm%F$j]1lU9̓Xm1Ay\{1 ,wz󧭁x0 Hcݝ7SmޔM 5ۍ_{'#T`( ֞ĵiO(Lw:pxÛS4\8Pi o/|_0;Pd̗@,cu5P"u*tgR("4 ڜ$f-Wce%rD*1[ GTuͅ :hf:8罚v\nRm_w/O~w<;iutz}1=?ݬdtmI_xy~{nT3Փ%R;߶}Lɍ`mOG7nikcS22l5D+0mf%h,/HIܪQKc$UP FoASn08a$L2Ev=D'lG+ҕ"GwA˾1/{̢"?ž5♮?-Xx۟S_^/(6%#:[lf 6qQB0$"0nԢqVЯW.7 x3 DE58|qP_=E00z|\LlO &0Dp `Z 2UN+%q2(,C>&D`pY곒( syPG{ms ;`L.PL"5~э}ըQ`α+b,(,3ʣ%kxIƇD9Kgq_'G"(| ZOnA\ȢVfE~bᣗ?~b9j{7N4;ODlӵ0T +uJxl~o}n/W?Z=_vH@#,KM)jrދvӛY&G]W坛7:[|)Ew(,ahJ5~__vJ\Jۘ9`_k% ~=OL`X^A!*h@-͞{AI:Jjt&AanopD 6{ 7ƙWZѕ4C!V#Pb[5L3nOU&H`TITpmԀ|`CQ,L6dkihba3ѡpj|JbX_Jp 0btǻ(pix렸5wMaȼs°iccX?oy6ГL:(`zГ5E*8׶9"kh@|YO_u`j/penyW]%CyMF|۲}#S%08TC4E=k*oL`& 3)?mPZSkJV\Rך- fiFGhsi©0SE.s$HGֳؾ2:G_hU{bXPړo08\PyLj0&"UtF2s~H^& "D< f{e-N 85D`Qz'R]gPYt/k4z)f:C V@1}CBD*̍D0΀_TԁQe5Xݾ&HnsyzvtR&H]\n\uPz{z9ta"6Gɉug_o6i~~?]|Z4 LT*HZ2JrR'~;-&>[~|y=Xg[}֗15mv>?͛|{~nmPHS`iiC(ʫN|ض.Y"B@<g7f!7 i"E)t\p^0eMiP,wbq8UdvBU )feY;]"/°/"hb,k`U"px9 #܂M2V̄ثVҘ-`tM74i䄼:C6HE7^^*l8.<;`NΘ$v2P&*YdgD{#_ r. ka3DM\ޘz㖚80H-ҚJ,^oayiJY:ߤ|.ufTJwJW?f8 >BjDk,W Pgھ1Y"yCO4KCuD#,@ɪj7"m{{;uMvэp-A1*\p,Ut>=:8]E5DCҮn$0Y.7fR6n<:lB_҃{z/g]d>yٶ42+LNAi`^~gƟOo~ˇS'.bZfյ|p\~1YS##htFL"N'L& v蕾蠁еbRŘھ&H =5Mb/.vWz\89NƨY#!v`gvw,E5o{Y#l *J)f@…SoͲv\!oA`0xF:r(۩C W4k<^9QzG3;5f_]Z 3NQ7<$[* 0fkCM8T`}tk0X(zSy>":#-"^g'y__qe2>YSZVt| f GU8p8iʷg^6;J15ՓyU3emN/Xz30qga+L>Β-.MJgnNڶtN8Y0m;[B2SS3\]@`Ρ beqɶИBdCRȆ(HS ÝpA <')^$LitGF|OɸP+PEfjPEaRg΀qB]g52,lgp9_ rj][CLaL(:8PZռ iiT^,ZI3V fQlQhVsAmc#f!u2Fj:XJD0hATEFCnEb^xjLl,@Rh(gf>([a.̛]n<{ 0p*E*A(}W7<:f7MT lߺ{td: gy1:t A{SE~owV6˥sr;~qO{3o= sŴOf( LDk7hOw̥!&޹{٫0]/&H=,֍kۿo|_VGnּfIE/l) $o7f}m fT<^Q_WYБ +A:5<bFe>ܜ5`4UAXfwt Jp ▯*" I@I87 .LK^.+c8A `O$d)02F^4 l6/7K9p£M6(Eg# 3)Q8E f9X0+pofN^vnV+fBو:FUs獀U%s4qfȠV eu"zPDo5<N|;ŧӋxm.?3! 8vTv͓Ip,&W%4Xnbd(+avm( ۨ6pܳVAQ.?ݶpBLPLT;y!^j9qW[1+|2=;fw[I?-14 8i|]ƽ|!`Z˽.FzKüp"ugyo@G*vjv?y|Aݶkxf{l^7~Ϟ>}L4飾XB<8^@Էn[nF_LC|v1\ #u^6M?4l6~70߹K??t|@pn( F_na6[TE}AI9o~ jҪ,`*Zjdiٴ~m߽l.7)} HI ̽r}щߪت>!* (c;rdh-WfFo"3OR+C tqV8[)BTh<\ZSTy :EcH~V\l)U{@€V B8AQpBL ̉^ĤD"SU*2HS,)0W!L#tSsm7fӄ%ʢ(}oҋ6-;[*&@%Ix<4.2!()v`{zq:|vW?۾jу&xaT(E7g2R@_SҢc˧\qL`a/T'$YYx$'tF lrkEmJP[0Jet |qx XEnxpl -'w愽^6[vɢF3 \/J4N4PEC+@q)lMaU`nQۻpEH %Hي%"-#ftÀ]RlK:B *c}^{m0ҵ֜\hX%&jϺt3 hHuPO`6zX[5aڕn"̛F^ 4q/]`Rvk5? gCY|z ]m?ܘG_qŠً.>" Kz54ܝ_{s8#c7 RX{//wz5~ݓdݥ8ƍAqiӽG/6DҘlyk7I}ݹp0G?xxo(ѳUfY tڢ8;]/]Y>?9Κz NŬߵU6&>zwp30'ggO1"@ Dv>/h4YgV%@Z8 )x8.BA ,02pcAU8% y%Ckд6$#(K%X=Fp_ cW"N k ׼ʭ [ )TFOUN1xpXbE\M@n;EY)E"9c]JdKn.FTcEQ]%o8Lg{Td-5_ w[=\ i- ]XU]S`1 >&;``t]U3>6%&  6Zl;!Ԍ4~1szpDan铳͍; `O (I99 O&A^QjBDrHÐ"]ǴEu`).Y? CRL@8Z1Uwnؖ}8-(,Bz'FX^N ѓųM||w5)5۟aG-o#\dqF=͐}m6MavHe㘢LHL jG3m7F|,Ri&sTUC#at:fov>]!JI1 d]ȴ4`5ܙNQАSR1 dJʩ֯icρHr Plu<ߤhy3VMuJ>$IA39kr=8//gե.6ԁjohE"Y8&䃧..y}WU?^Ma ܶ]7yyI??w7v]K;w?l}OO7//7ˮh{s?goyS(0LפnLJ;)ʢ.}NnÏgG?̃; ,l`@$ArC%YB6CD2dZ0-\82L 4crXCOXѷḳWɒQF Tk,ZJ$qߩWGdCH܋s#7҈/ O:x CxVmdQ jakuAWS 7Ч4D"ڞkGe? Ĭ Y%YTk|8^j,i8T!na纎]yQKKBCrjA)D$a8M34:x! a6_j]ܮ5hCU1wfP%˹,c]B\T6M RJi IVqJzh]DqyCJi*Xpz\k?pn/ g?_?~Խ#+}Mi஺PvTݵs7$ʹ< vM2B& `DbjZ3ebalUfԪL GR7/S*1ue8>zQ!$APz}VnZ!JT5fmt G4C s|pɽ]T u(0`DYEuf`i@H|Aa,rTdWqhEAO b) >)^iS" ۴)s\tfǧW4D D"d~R;u?U >g T k*ؐh7L:Ž/waӦl<7`bu,â,ǫV@$Zo>&WQDw>,>'/?>:])|Ev|}s1J/={3_n#jm 3w8 }yݏ΄L`0MH4F!SmI|Ӕ0#^Ŧ//#LX8Tf6+ IDATSE F GMUq1" Ri;X%U-iM6#u{ZZLfpFno%Œ%1 G, CcA)@fcF>J0hfH m"q@`R%+o;K\vX ! s0M̔41)ivTW-k=1qMg̚CG53Quh(PP>Ҥ!dcz$\nNVT;tC^ 'B, Ty3CQ!L-G]chT bnA07kwzY\V}\Ǜ;o߽ySv;Lŀ~ymhD=^ߔl(ԂaF&3$3oa[0'N_lfM'THb^rUx$F1N64K6M:W]guse6j̅ ,Z\ t1/ffRo=X >jl0s£Ad];$˥#¬ɇW^1I=)ΑƤ p],4MsynS{>~<>AEJ*j@/'OO9|Pt~v0`i7o}ڛo9lͪ]pY<ޜ~f_xxiʻ''ÀHQYQ:}ZyIRY,qbZwMY5[[ˢ,aav}R^D 7}ŋ]g^5jU];=~yg\LUY/9LgwWG~89>}_zpxO} ~X4oyg޽9rH\4XFhO-I/>?@x~x4ds&! bnO d\4ހS5p>$he:jYwM"3^љBePD>YWV"4ur,}Uؓ53rNH"kAu؇Z^"X=)Zۍ5,u樚Qf8ٳU9( Qdrs8,_.rml#OWvփLN~{@@aΒ@fBϧ/P}/.4Z:md}lP޶2:8/1O8$1ŬYzpxzb>O tML96/a? jcK +_/[|_[W/ͻ'^u͛oyt~g?>o}P[l]7wE}xhn_6ˋs*v{A%NTxp(m,{__8$qeR$<98"YkqcL0s(.8z%HҒUoN:Wt=]G]Sox9XwgM81}Z^8^ MhF fͶ *KכXdg~9fv71<ȩXTTl-Ѐ$@FVZi?@;!V7"U5d{osϳ "O}ߥ7mML!RqYdG 4@LB옼 !N:(61*npB9$1Uscǝ Y&v\1j o%8.Dc{Q ` ,yӍ50FTcZLŤ9"s K"DJ6͋p8 n~d8kc43nZO: A&MK~\zч/Λl`GPopwfIɪc,6,qAqY퇟}okww~w<}rz2 bV灋;]6Kzo~GG?_} .6[iM'e=rN_|5/O΃sr_~xGO׫g/mQ$ &ILi9}pr!Owv~k9ߵMIXA.TVI֪v(k^{|"S1KŦlLf0L(1h"X61t2 ck1z49{?OtV;C$VɃ>zIJ(}LQh?^Nw'Epp,E/,7LU)Dק˿}Wg 7ןɛwWgg> r9[i(`b,DL;OUɝ]&[BHZY8)AA%~ԏʷo0; 폞!ؔ! < ud…O>-e5TMf ##33V*=we #2cEr@-{;z:ײ;gZEJح̶Y3;﷜WX,(#`G{޿^4t#02\]-(VuK\6Fc;I\g6_ea ƁR"a'`Z+-/;Yԙ *QeM)c8OjbbP D98 SXIxnbFr ̜b{6~0?S&%GCc7yk;VBslb7VajѬUpF!=oګT@@`"@oV>ǸV NUZS cؤJP`xݚ&s%;iן !"09“' FńTЬ~nX͒pLD6s7s@6 *2 H) 0.bG 3%o&f>͵A9kH KsbdYRZd'1}CM՘;L9׋@z`w)J1+*b9k拧eDb,~˯)~m|گ|ego__7|1?WߩV]=|UESt"_]s{{^Nh;;]E!fߦ֦[[28W{?o=8I"}K5*kQ.΂Ջ3gvfyIBuyL4 a f٠"*AK:ܢkA6a*r`暾 pI "j94(^oBø?B6!xUFrFeZ n B1א$buINÝxtѣ5>+]oxЃ#OIAd efK6ü*PRu^,:H YA01kvΔY8 6CBBP *2f6riT@U0lպbg1qQ^ƅ Y3*DaizL7xW"vēJk`~Ɲ=~Q(! tg[\WPX4vUG|at1q7k4 Ѩ3V{T\0k261N;pbi YԜ%FAX|gSտFYg w Tp@l?_mR}jX.J)xˡS,lQ&AUFp ?pMIUo ĵ;TH00%(^6DՒؘ4)0C5f2D1a[!*dD3&bf|IRS 뢜_.`"?Q1۩䯼༧"վOJLP(.?odӫ,ۻbu[QZ&n+o՟9?;_zXOnw~wo o}?w~㷾ß.tTIb;_/]7[Vިݙ:9:2\L/>Z9|>ҽvUI:|'G϶fS'}|!x׮/o&ۓg'ga_ ɫ?c{t|X) o0^-,0CၑlH =Y0whuCg 9kA6CYܝLJ/,{̯RfZSs[Y&K 6/ݯWo{[:i2;o/_ W7 O>~uf|ٜ7_ыDڳ }ddnXG˓Go9^]_& (; 71%'%}՚pkҧ,Ӻ)YՓU+O>=SƽKw4N(hQEHC\l/NVUamY$ U(TqivlHHɃP *2&hJ~si>؄ 3'F^G%ᜄak^Z6c "v=am6 t ,:C%vi6"I}9}p]R5LPC99OΫx<S(dKY9rj예y~49vfUV{Ug/8R[?Oݿ'q{SV9o>ɲ$+TˊW?O}gOI2Njgzuy-ӫO^.>8^%@6˿L 5]~K"צi>ٓjgZg'OlS_WR?Rw{{6?~ugo{}\6kc.nKfFIFgp0DH"]Ƙrvt» ï C^\¯B!>2{YL۵p٪$%z$dv\>]v*ʎҁγ^D;;XzIAeQz &E@Cᘼ! YyxIQ*9-Y yGYN*E!T1<*`SguRvV2!$g\m]wg~e$^ Vx"q}{*ۘnE0bV5cU3l9IUc` 9̡c8Y՗TLL%54V8TҠ~23ȺDCi`h bIU7uy ♼nB.ղ<6} % Y Y1OJp,jY"ȠLU At1aq6hJ矫K1qz-/\nbo>|no\_W3l\t{{j՞]^u^w]'";#WԫvޫtIDs1IΡ%m["/ FƂhN㲘Mȹx,4Fv,m<{.mS9%V_jM޻x={[l:8r.K~ˋ%9{nWڿ3xzd[zk !5JK f(RJSU1 sfZ&?9! ަ rb31#%1ʛ.:"fɭsd=eNUm0PCR&[gaHy:6D1O>^̣bl9\ bP;]f^ -Bbs{q`aR"wN`&]!*a3E Bբ@Ҳ9, @6zT^hH)AbFLF䆮qI$bHLg?,`W"C]yU'1HF jsTCeuEF dY%MK_Wmmb 43'-zmH᭝W?yNf:Z%H-ڳ([>)FZ%ﭼi9@բ3lP=QPmA)Z4g],9*DAw&qd7V5 0FW%gȄDjX8PqvLÄMN' ile~;hU6$:08ÌݷgEɺ=y?RgGGoM'UqXGݏ]V]3={m~﷫oT'N_!kj^ǣqUsVgaYUL2ab)Y9KV]VV۴ Ty,H#\9圾'QK:ڳ XX9zEi80j<ɐ$^GP#bΰy֤{a`S+|CF.+n2U{a[:aNK` *vߩ]Lu'1$A5攭C3{VTrBizf9 [D GY\S$1$QaXgYd6@-ĮZ_!o+LFt~7/i]GBDLIWcEIx*Mekd[BNv j4 )P &^L?qؘ,E0ڠ-î*CJ2p9[ #(\&EdD)kg\9e1~0eYءS2F:D%`DȆ94Hc /<3 o8KSᜩ()1Z͌Ǟ8 A!cS]`kR\v9:PbeX17g,뵭ᄍhO>~ã/=@2rH;o.=Qc :*Иb %eӋѝ;q]K;Iuo<4qҟu8L7nỌ|ՇW14Y؊lowUF}I}{wtبr8;9Mg{GGg;VUqkz{7m^W{o}1|Ujt2LѓW{(>PtzD@.p;w?cnP9L+?e루s&9e cؕLfDij8ڰUNPGc2dLdnyӿz< ޞ.LpNEJ.< FQ񲵂qqI['Qɦ10FhvA!I#a2iV1QU1r^KjZ`WITU셢UwaPp9gx"$16 C,􁲥leՔL!j/\̥>L`"l# gcGD XQ"'#EYRt.$\\kR2{ع6cx+ .(jrҕ]3TJNώ#nU8N:nOw^Q.LzA E`*]:pwwY泈g*W2 8@B"p@/:bC"A+&G$@@F7L=3&="[JIv†q{M Y'`Jj9}2]r@2l`LwMlX'G6珟lf ~ M3ق`RYx8;vePO)B֮ %ׅKpd F6U"fp9bM 2T~u{lzrMǫڈ"G"6&wf޻E{RfͶ'R4.v㭑qςYV.{׻[ۓ4ɉFe][oݞwp.Ʈ:Y븺U"4ߚ%k{տ'W2,Wf//2ulL.V|y\'ӽI9ǧG(7"XDygJi;EtR:7w+^>E_Ux<󽃃g'?y|躻yy4z^ɶj־tٸB@j^dH1c$daD)M=Rowo;]o/io3 }y?MoOXA]7n,ÅȖjP) UbbaX)^u:Sa#[T30ٶ}yF[^u=5Qlkj1B3ɜSב"vSOs~: N Cf. &+bL^Sdeu4I"n`6uYMhkI,u " ²GQp]3̳*WL-J1G%G@Өq'R+=gSZ(eww򉙈c;9K6} *v0PY;k%~u޻C[31\ٷXo5Qժ;]r̶3swg@9](qk~V'OnyKKɢi/9ƀYa M<V(ؘDݨt̘pCʪ>=+٥.v5hAV56hDtݙλjbe9ach׫uVAnxZL +X2Ҫe-'Jlxaŋy[y3)yD$,(ʔK5.;\gKpaدy:<*"(&ӒLYMugdc3*۬lr6SBdQB(gdPeC3H}#Bx/'C f#B UE4iQ4dL&F&:u2"E\ե(P8 5!)UD WRL`?GMcպg=JS(q kbV֎} 6+r! 3xJzv2Ps+ڛMd$;^_b蹝s_./ne&7lpalm;ISQj=\YK[/V7&DhֶXY#!DcmҀzA՝1Ϟ=s췾7޽r4Wgpȧf-/uΖe >F_RVч agP[zyhLEaz] nfJjUB'dPChSsjSiU0}آS`n+LP.],E0`x%j\$cuұ#56 {qud2DwZ4,"2ɼ&zS; !,Ui XrҦDu.&lVJ3Fɢ15Ԧ,L9R\0)wmQsR0uX f }G5M(y,9 A誗6N[ % 6Z0Ɔ>X3*ʁ4=r"I,*-'?k`X*QYaV]Ox42蠴 &5ǫ"KWɂNiq;ݹͳa\bǞi`*[KQ=i ˈ5|jcȠ$ 72t&դ:=3t(̲+ *ݳ|9^R xw{V\NZ(ZcwJ_,xBƜ3İ*ci:(ׇ#EavQXkZxlرZҍxt@PEgѱ㡱7uMz0a813,}cPQڲj;1iLȪ`xư*֯sP1!B$m (ap#RNQϨ|Aۢk n> u*sZP1fmDLPZJg#*a,dYN"Xش IDATchi8'ȡ C(6u d|G~n] Oy۴)ÃwKԀ 9Ua!}&0A5MQQuĎ9FY'jƃPOݻ?_o/qY]{tgϽz_y۷y.\X=>njao_qO>qFjڣY[9&ॷn gloªxwǏ?r#O?ڽ'*JD2 c[['/pgk)ei\{wNWn+ޞ M nÒsq_1co1'bkX)() ԕO!]n Q )t5$P2ՎqF+B0 EҡȀ!hk\"l`<NahE +3G EȖ u$gY2 &R[3tg.Qlz**^U0`zk.A!Yt5LxadN"T9.Pm1-͢)`jnY!Y l:խ/I),9 ;Y' ĺ 1VbzDr۬!{]cuLJmFN."gxAe|J}Tz[ZC5g(T@&SKoƒXe MY#) Re~ʕY{xE`Κ_;2vz4(6nҲ n[#kL[>:xfrE煙-ŮtpNȠ0n>:*NPyGj}eA#P ``kJbUd]Oa14:OR@Jj ٞ_1T5diqxO*CM ظQ:74Qc;aDr 4|7(#cDd-o$iYdic#SZj8V1! բm جM!)ECؘXT Dz}zÑ`6pÇ9Q!)AAX(")QR(21TbB-*)yG(grdD cAN9p^Yi sI*,BA=K+eELipD)ks>>KVȨO^?ZELޞmLG{b+?×;3Opf=HH R%KdMJ9V}1i*!nݽ?_Mdbyq:B]6r⑋>mO\8Q;uڭ#ɜ,7ʼ[;ǧzB2{FOU?̛m69ޜn.o޾O^:ASW&Z?ąB3pfaEswmIfN桃1L.uaQ·w,*6K$*MӴ4@?sߺdBahRA8T5A% mFV:¶ 6VγM!aYЍդJ&c[VZ }T" RҔ1'2DCkyͰ [TE^^$FIAMG Z$}|mbQY |)C\3 SМW zW/uv{_fqA9 츌,.jբcfruX.AiՌ6욹1nCRKPѮ 'yՆn&央jSO=8q`#W7F9WϟꑳݜNoݼH6ɾ7|tZ\Jyl-&s΢"lHRISJޙMiE.+b IfeªQ6>6[ht(nymX/zܣɰLCKm/vw&e2FG"΍-G&1AaB9*3 /: I31B~eĖ0L ̃8cQNvF7\m]=33v<7B﮲:HXRjhLAEr u P`Dl\غzSO|vc3s13z{U0ʂ !:2L%k$2ph!" g6=ICS ڒO]5~D%,C}2F%.A-yG΀kW+3$ǶMTdd)I(u;#Kw7d /Cϔ](eJ0(+rXE49?/)Z"hG~> L2oo(_::KrnpbN (m׏=wd;*;0djb" T1JRFeQXCN)@5Fm(}q z pIɃv#ax˖zh|g]4)xVtK^v7q>h[7kԶFDbFWiaW][|yAQ V-'> BQ)a`P9>Uţ/ Īҷw 0@Q8"B$gj-kmF%"f}@rN9gyX6kg6JTPZ@=MYE#LkRo  J&LuXSX#)1%b%UTU --f)dl2xT "&PMR9H0dD%$/<ߞu췾PsnKi0n~wpX-g'["q=kB,RMڔ{Qx8`VBI.ھcx#BB.o=1'mfea(O(˝hwktfstagGhG/_N6[gw͚)gTŰ]g ΌUEu8u5.c9k˒]MQmcJv1AAhUO_UܸC$A^:4.aU='ԄG%eElǹַB'xaRNy}rnd%C'Y{-ta0g& d.jIF hDT UvooYb|1,t>WhF=",;4֚͑I!u(Tl6t¢\ːƃ/S]̏>=}ijnTs{~^ec &$`DpzRr"6BD)zD`}"g7,_B]$%Eve.B뭾8JC>YuE֧f^ CxSul Y+EB-k)3Jh~>- ud 'G7MBɆN<5)=+v`wBO&X')Uw&F# +7ڂȝ!0- ul\`{ӸvÒ"K8TU VoBpҁu}]*aeKfs. ^httR87hIMtd J**:oGuP"$xFeP0CF.i'KӒ^ RK$)kd笵ٙlY+5Z=YbH4;k!BPQTUV^ې@j,'ca *g‚C?,kQ%Z.-Uܚ\)kȒڢveݦLT`u$ @ J"RkXcjR";X-tQ*4*@aQiLJ c,)jXYps[o(yj8pү|aiBܬV!z` ys76'nR/S1.~6Ţ $W '5wVpl~pιyl0K_xd.ſVq0z0ls:?#kB{wsNQxʆJď?_+@6֤6U79|c[-7޸؝ iWκd:/ht.!fpT{(yHt}V.qOapТKh"N]=wq}Aǯۙ7c 3]r<{{#jkrB̞GX46 >v3zj2ߘwn}k߾25!Jg/o|瞻tk?_;]b~klR:9=r,Rs|cNVm CGARQ# Y g=huT/sO^w߼~q?t'/G?v%ή`1VA!=d; CW/]9UVro^; P)JKnrr~ܹ󻗮;~X.^~~n{oTitc`x<392)(L/Ĥd!.j]یRׄL]+Π*TAd-VAn~I!l< tݸxI<)ViGf"(ZUHEpB'UĔlxlSPDEG%J,pw6 kQIterl\۸'txO[~Cs'9C|(bgGs]e)HDCĽG/p}uRVNZ\NO[/<2޹RSӿ}4ss8\؇!5(f͹)B-7m^QN- ,CT gjG!ʪQWUY׳@@#nXٵȐ:$ 9[QJQ,Yc@eA0x!{Ҭl(C$d@,h8$kXRFlȠdk9[É>wS@H11:yάրX$gɈ˱G%5 {gdfNxn*6C/ ejVW#*")ҠpdZKQB 7*E/s{7WܟʹY|VۭLe{Kv76b)Yﻰ*Y 2 u,ȥݡ5ć=s}b`T~hn^hQsiQ3f42xgOis|p4[w,G,ڹj;}kc]*V]7Yt C{jw>)vNLDPo82\ZSs4;ydI*Y55 rD~0Ov6]>-GtM PIEWN2,Ik_m[Wu)AM 'r /ݛ73{+awql7*3 9g/Q9&۷O^ŝ_o?'/o}7߾+_ş~ŰxGMID5d/S?~},"HMKq_'yͻ/d5Шyw_?wxpO{7߿΍KYD- 6.&017wofqXwlQp*6`DHkY'|Ot4o^c_gy[#GD|Peڨ9?l ŪHi19k]XԞ >G{ f. rP]eԆU<% C լ -C%8$ uAЊ|Ko?Xv`Ն {_{sO)}&kKA%5}:iw/7o?UjjcdF[lMwn_RopS6tclywO0[U&"t͊%]^;[EpE5q]х||<){+hq8/_rfn<婨VuRb iՆ3&f|XW"iZ'e-+ qet(.z5TIk'. |UJm:@M |~+|gW^3.Mad)1H?twŁ֖ Hwl{s紹G믾?G.^zhס8]nРx~S_yozfˏSXqH uQ0998hEI1޾߾v 9w'_{?xS?O],xVeɶl F2Tx+~}_o}]c>'? ~駯շhfw֜x};Pi4]{__xͿ}î ˨ bR [C",P }V .]{R2/ȻD".|5ibEO{X IDATBR۷Hqu}t6D:G?mKIQvZ9+*ޡ7ƀ#X@Z)j   ҢtfoQ8-<؀e F@K,ΰHg@ ae*&,%G&51֐wl2&ƨkӺ5r0yorάː put1=h[W:W++)lsfvt G+ʆ,fpt˅- J.ljFr}Ĥ=9dsxO}a]9]̻. kV~otg>;s&K!]ccaV 9(H8rE*Z2J’!Q*MZJ8Ќd8}O]9ʛw^Η8;Fe1" 6a\_k ?g?LO·2"yXCäV_՟7nޓí5lm&EG~oq{ѝ̈(*~\|Ofol͑މ|7&ۯ6t%4 ;V Цն/X(!zxn7nk7Yw+~_xճ>qӟ|ƻw&C Gpe'F*„3zW_믿KʈFk"X4ʕ+9;_>]OG7^F|q!Wzg?IoJ:C ,L49XҊ48&얽x^DSTR>Yjש0%ʝ`TVţ$F.u4]ώQif=uJZ'{' 3~:.mȨXPv[`4,}[PHB#ȫNàĨDTt4t)d:罹V㻄^K*]eıaBh<(ɨ.Dr0lyVaNg_d| qoun!{ecċ)^yw8 8WCCB%,"f=F,:]t9 KcladFUٺ0G 9&응e醙 MtB+飮jd](#J@!2QT:X+؈1p,Kc)K 6T9ެa {(y]iٲFUI}A\؂Jo[5!*@Ql ֠0D 0 TޠpTyfev-11Ah֪5όu2j0ldQE :MJ b5qkfUQ{w?JLLY8頸3;U͇!68Yg>t?rN]T'jk޿r'޹u:r~}yqw ȽҹШDȥuKϺ%Y߳VfxsխJՓZRkB! "@8l9M0`cP-0mfJ4ђ]Cupn{wCf-؟̽y~7nuʥgXwOzW!8*ye>QuzxUn&ɭXԓ0l#5i3ݚAё\3h-Vx%-V| 7޻Ή+v|m)=dOCYo?t{TQdHj\ٌYV-ly,P Xrf;TUQDԜCUN%%: NU(=TLX< 1׌IS>~_Ε)@!%115[Qo'|} كmTh Dc N ܽuXB;u HRU_uy;w}otU3UfB&Yu6_ EY|(*GdLU%kΪ޻"P ~? ?ݟ_}nkיG)ͱn"N+/>xUD#E?{oӟ_{@D,x".JY'%x?_/7plYԲ1QQ+tk @ O=urB4Y`D FQM0$;Y@c:YZg2. dKz.tkɺMpڭS O48WafMSWz|7\0vk>qeㆽ-ĢR`2*Ga{+uh$ L(0zA l -Ll!M0};L/?hyZdhCs;grZA1.ݠAu@7=2r\V^O~._(PL˗]ݖ|^wQlt4LЧt HL\xJMؘMAÐwfݸ.N޹ I7ܼwx{7$<(}ۀyp{b~&u7L'U;]y_dIr2hNw2L٤>:]4A`vTnHYk%1Qy90ɪcl&a 9"ƪF@]Oœߟ}K/o޾mxx {?ܗW?}G[󳳝ƐNWZ1d"aZ- s 8>]Ak JLʑ>O}/W{S;uWp: D k2e<]dUɆ(x5_#uj-V9>M߸}a7nܯI2vF>u>ݯ?|ݟ/m\›JFc=>;>|^?׺lNJ6GƊ1×旿q=⇟wo$ fl}Orlv*7d^uy=3M>8m[pu&s }P:WԬtvu15uˎlHG ĴQd;k-d?Hzvwjxz:;Cٱg} ؘn׺X(X=P{]֜K PR<;!v=5P``}gdr&)/6ԒlQh)SQZ˃Ls`:3ӗw#T2tNԎlqV^?nױ` ƌP-u%s4LrF5J" 5UbIU h(wbj 8R=[HUJMMp+E9+eʚN*w|LɃ CTLsfeOAC!ά4mOD̓iV+\Z$R 2N{:`xu^Z9Bb6FUP#+yJf*<'D33 x*,eYw"NҳJ;(U#,j'<ҕN_I qz1&W@5Qw.T"}N>2ܥ#kߺ+uz`~w֎ʒB:WN۳-9~9?kA%G#b!A|`ĵN3"TrVpr>CV۳ƙ亮vf;[ʛsc^mSURĕ@%Ifa)dڙ(IiL;3G#oͿtn4m`WNfPhTbFIJMN'|iΈb|aSSrG#lu(<2Da&8sySMW~hOZvĎѿxK{h7=9o~xqI!y,:HuA,*@2UlT)4D۸JGh)Œe s;^cP16ޮ@.l:#0&L`CsCC׫H6x'#c|xbw<>u&=Jk(IjNkHTj n|A(أVӆ;ubZ2{eG4XZ$S&* j> GY J4[St#6$ށ< jY -ePpG[ Ѹv ӘC͐$dSS4JET fJ9k"G0ENMT @6ihѿWv؜t(0 ( y۶ڊh39lhNhPeI@,\j]l5MT4|ʙKӒ9pQIh:ϝۺvywxοj_,SnwC3Ot}?+mۛee:먋hJ LEs6S5ƉIP)@yͿ._;Sg?kg?j$Elrs_~//]l{;[MpD=%pUٸPUbo189>K)M1lHyPpdg۵#:YOFIC/#u< Ѵ3yf%{Y 8( 52RQl]:z/ pʥNQUܷ&}}l ҡwM+>Ζ;*J+J߽1pegfWNF/~Τ흢8IzfO}Rwjh{?_t>b}Btuzf҇MѬ9RFQʩb4TEwC3QN9f&dӚ5>Pd"hJ@fj1sPQãJkRY09F&d{%eY1J;_Wz>T /\nc86&}=x4i6eMe2|s /"9IRr0U3uoAhiڰ:!I ި(8KQgGh7*B KJ,e81Ro7yʍFl[NCN2jPF= \u$Ƕ %Y5Ѹ`ta'S!1v* pYŌ!hߗB0]'`L f`hujlG{ϜEaoF VSPvܮjdNb"Kג#SrtXS4 0$[rd Q B%J79.Ƥ4*H` h`n8Zpuo.׾C'UY`<y /om5Ź:w^4Iz xѐWU=|Ԓ>/JgW+ Aj;?lumUUsѓ_g.os: IDAT-+Goӭx*HjoT:R܉n׫Ճ= 6L2`/ pԇ7Tڭc\boCq{ byQtZ$#&l죪RU8sPVzxR RJ lQpKʪ4"%ZgR*aB&- oO GäJKl7vu+>\_ݸmGk_|ڔ{?'?O<6F f]!D$g8_;ms=xC2w#Sʝo;߸ul&^fX| L6aHɏ(1WLq Md5&0gJNSXJLK쏊4{9xg0q p0RJ:jʎPد>_ ?_~\)(9-l*1EK,#5L2y6bbuIhZO`:5IMg)x*p`x;oJs9@"x] kC=s(;һH8g`['霩nZbG5ڸ}Lds̘@@p6VpF4S`>k,NF %N #饒?K6 &Zuj@ \+A$֬P,zAq{jwɶ"-x4dRW!:5?mW5#ip 4%1#UPiF&t9{$_icHXydT\pX"lJ90rEF&bNLPV >eҜ)!%qhKhDZΏ*[69oI*=MŌ 3釣VzԿ𹛩>K~+m>ظ%ӓW&փ;oܽ}wWPw|u ï旿S~#+rx3}owk(џ?orUir&^K3-'?3/NV0.xEۼc8H]\6%HmQeΑ7o*YU%#Pὃf2%6l9I5Q1Jrͳid @'"p5X7iW_J}scQ-)V޽mvHLU5e]6Pr6[Yһ9˨*UDC4fùxy6.*hŲhN;6j26=j:{)q@ΘԆĹ9Oа'y]3h C? v+k]&vy,Q,ܾ}_]y ׯ_ EâpbtyuC_z/XgjcX`Ч.aRRYy^n`A*]aT*g1m3̒RHcyM30#)~ 8J퓦L%o/;?]mm&zqt;jv939DQ!ak0YSڐ0N`B`Tي˜3R־5bkCL> _)C fItU +#̲svW匜U-6 ;B)**  DG3j j*k*|V[PCQ(t< .~H*0"ljs(#T.B@Y mgvd Uupd1%dNWWvF_moy,\qb}8r]yo]3fBM흞̙hLd{\2p.W^1vv˻{[N8]ݝ.ޞ5Tw~k^9oqcn<~tGj|-h,s"""|6%!Ę Nj 3J6" >G.+/VLly&&7srlص/Wv @G &Ta<ҺқB}觞y?pO\HSoɐ:Ni%p!F \v~Ƴji (Qya5dJQz4jPD.'GLf9o3w1-ɍxhnFΝnC)ϼt4$uMi"(P1K+z;?BU ,ҍSLhj.Pc64HQNb$p !63qɽNWHvBBNT=H#R~0nvaP{)jx.-)!$͕*ĂrwOP"xȈ-eu`<*8IxfJB`f39&M8C|Qjyg,dLĞ 5QQ)xiPG`ʲL'ZMIs .nx-kC<)BU/ % ?۷N SbT &S̆;8^îK%'n6';?:9zpa<[)Fl콛_JGsF?89{ʀ`B[C$Lg],{GFErs`l<w޻̅0c4/}מ}we׺f2gG[[r~=veth4ωhζfC7$R9fw9YbW&8#*C$}4djYEMB$gs>` 12k,LSJFv:l,O>kf?X7nU bK1ƘBffs{C?S~?]c3iR :ieF:"r[kYic9>8'"2"3##3U̲UvnݘFne~j$EZ⅋@j5 nm5m@cclv\*Wq\m]c!Ғsx64KUɒjg/Ňds0DAU HwД#OszZ [wr>ϗR‰1Mu)w5ƉϤ@(| A{39x1s"Md^ZaBR(< C94B!_ 0Ƒ,K{c.uvʸ;\?^)R) rv&ALU\'@ .6 $`VEa^'"5MFut7C7;NTETq+Ә(D&ba""M$y!Gm6 *ZIyQr"(;A}r0vwEQG)T;d笝v hs " @Db1?-89 ܌MOD\nEfP&T$Qawh.zv [ q\0)H6 5'G .dJMH*!e4v+#ap@_9)\]GO2dkݽs1[zɞMcja'!4ݛWWg卛/={2t}Q~wnUxc_<]=zNOTYǺזw>zhQQGX.V/=~q=VONotm2kϖb߻xY W˪ˋ~7Z0qU}{85/鰷3۝S/c}~$̼Yofle`Uw`;DL0+WQVn#dE5o} 6BH7ce$0MۤᡭC?w_c^/ as؜JDeIQ4{TM '>K/Ci:Փ NRHc#LJ 1ox*n0-`1J!w7&5V4QJeΊWf ds36R1>))P X/ѭ<bjlAY }Gb|ˆiOНuJ6Xzl =ܶa a^8njm˘'~<ژ@בV`RmS*WMB ʻC鶕_eod:=\" 0(8(Ek9Y2 ˼X'۶ݙaq4B6Vv';;ӫ.[׎vnhGGwyuXNW4 =;] "S_ڤ=;_^.wf{x~Q"g5y7^ԭvZ{rf>j8Y-}rLYo℔2Xz?zq9j3I7=l.|irѵm;9L,"hqWsw6 w]W4M  !$0qR%ߙIBfabUHt3nw UN^"Phks@CFɏ|.t~?3_x?|vi/$AFF/?gcxNO36\o/4+pNEշz+_c!;'vM9i4Mxz~ uFωL0$hv9_smy}tsH B1Wo cp\yT+Kqwg/@E7?s3Uog/|_/~G?Н]a7 ׾pm7]_8"d#_ ioA !n"R`9ƘȆnΛGj!cF7P-\`>iM]pSh0J #.ˆ xæ8[傴Ўƣv|n&-ür),8B*V` 4ul}`jajBAX"Pvfgl!m@,큳[HƸTf /6>% IDAT.N }-6< cQ ;NaR\t̾{SQl%3œD.nLSjS.,bֵXUE\^1{ &O!Xc"3XNE1 0ǘu )nH BfmS Y. f O$v8om=k6C ,ABdS71EBˠmn=s`"bQ <\(~Ę=k a'Ƒوd@@gl v"k[N8=? }|!uo>EW͝僓ýnHhƊ\վ\t{+ Ɠ'}g=x7άꨮ 8+xmxִ,FQlfd985IT鬭'q|+acNC69h)j[vD1Q$ JSȝəahրb#}/6  G{<[!dBtϾ|z#6=n?{ɽUޏ|7| ?̓/[{カWdWo==|Γ\t:k|&GV70=θnEm:}j1";:^ݦuU :2^V(qHCm:D4R|*d:Y<]! Gw}3P&.Qڟ3ڈfO2RGWe3b*t㐳hVnd D$ q8b+#F4TB8lj(g5W|*Se"1k[xLOҾFX`TYU‘{U "cTU]UUR0~~bBU lyD.aaDn\Pԣ3me.F!L]3'q!0[ (1H`Li+؃6ns`!xYD`jBnACQ >UC`$*NH jqt3`ȠaAk^̑`x bdJz%i*Q`x""àCA`LU Bb(9)W" !ZlBEi>dc0%wf+<9{y6MF>[>~r8Gi^//Uns|p;ɵgwާ?<}:{s?M|hx3t$!l6,_寽ï~ŤHHM|~qfnmqgO9Zw>>$}F8m /M'up[nlMl8lXT'yJm\>;~tp8KbG =d-Kbbt"JF F.ʽ6E6Y1Q p1Rh>-ZkRȁ ˈ* gexd9t/c?׏y|㟽ޭ^o&s޺w?n7U}p)@P,pub_?sov_77 xa[}v7֗oOzbZ 6 QHD"VoV; mɇUKfa^Lps s0Bsa-_no)zFI1V$<;e80p{53qUVKld:d[w[[ <ӐK k)#ԍ7_#\,Vӊi,jю_A[ I`^\H}oEc1;-[dגf ΓKG~>;*ę.d盅OΛtu,D@0HPKh+ 5ftLJ x|&P;1?X|`?*PI`O'){rn) *lO.Oqt4҄[z3dxhMO7ò@qz`v~z' %2QF &ͣAcrٚzqz|}v?;1- }ɫa7\7}QSO&fLff,c?r0Kd w#C+%ݳ78A.J԰v+'8ѬjqS3ϚP+@_(` E/0읏/=>+/k6g4I?b)@󵽺y@$oEw* c!Hu,&7go|'?wIAfH ^vǿ'z7S?8mm]O~0gM- sCD*;Q P.#%<^QTnFUۯ~3Tɫ SY?R"ۉIכwAb^vn[lRǏpueI]NyVGNZcmc>Ԩ R7``'Ϯ֗i2պX+O:jQU2E~$@W>n8)ATr(@KQYB{PQ]l楙]]|)vůu2Yvw+uZ_:77 }(nmB!rhQFgb),;[ֶR$qx10r4>fp#H n^ă[KN5;!"f M*fe7O2cd8'b!i(jDJ\ b\:y:cCAy0%PSq .0 %Xèl$B٭4ug ,FGŘrq5! 蕗B9"' }V5nl–h.ݷF 6U{u<6Y@>\EJ^=mjd`'OW!6JQVcrFw~~?=zS/Rq 7j8xѲ>5)ByY0޿צG ?e_.q Mkd~^ VONV%>Y"D ڂ?ܑCM 4ï,EVUa:)Ϧu.' VĠ+crYH `f+//ulḯ_ 5MuuL1"m_t;0^}KvwO{@`vFjᨒlWk{+͍'>|v|PJaʶ_>D/˟}ۭO~rvo}pSk{xtοst|hWn=9/qNbݏGo~{\.|vyΎ0dfSա ^Wդ!RTv`4?{$v;o?~r Udr+w^;~sϞCZ\^M;LƬM0 P"" @D]oo6P0B 0(TjɪL̃՜udH( Wjv3͛B˿G_N:lA3JVsB HBEmN1M"ʀZ|2`FK@P {?\T:kljU vys.:}|Lv8 jBF]ؙ~"FR5 q9(A bDD>ĤfVjq7E܄ \G0f7Wjq ۉ RTw Ȱ(m~'h1#t1b8LmTqp^`j"<6+a,er%2Nt@MKɃ㠫6y]rXqXy -WscEѐtM Vݞwz$k]iR#|:I>/vZ|=OfE];ÌݴhWP щ5D$/Eʰ6* `&̚ow˓Y_=yu5o^n~wo{QsM7 ᒛu=j/&I=1.\prj_>L]n/+0)x8^7]p^f'Փ!禝`1*[Vb :1#Ʌj>f"&5РB^T"@zraQXI%L4 cytt4N+_nȼ`PASrج:ߞ. ze0IN56!m s Dȳ>wr1he4m$QM*dO}h4 PƮrWfj&h%72UWLղz6 qsAe*I:md/Y%h"U!bbTjjCy!HPLТoIחzܙ)ms饖`U7$֑zzq֡Ls5xz_Wu@`CՀYXj|nd[MթOG}cSY i..-Aj$X} ~0m>mz?L[ḦbVdH$q?fȍ+05H( ö@r*fu0e &Oȹ,,`PEX7 nz_ogooŗҎ ĉո,5԰TyTOid[RW\ "0Gqduk HYbs۩h4#Z1Yؤj\+H.6G)\`0J\bݍaUX0s1s&'P}tN Z`zf9{#&R\!arwvwh`ꊂ33I%{F,Į0R({ r8Y1GNj[6UEG!ES'DT5 '{8.}:u ԗ f.kHQ/ HRmaMyɘ[nhdm<SfR%)n=(anEg )qɝn癩PM|x|i^;~Uڟ.r]omnO޼s|^-\ms\Cu/aeeLڝW,0x5vyw>q{uA\|n~ufӪpskXW&icL\ӛȖ%g~s1)ߐSe"n6] )@l5z#h zVF"! "nd7U]UbV7>{9f? @ <qq|~z#  LAŲ]aI6&|)^IܭntF݃zniDMkAcCvԕn~fO1BH:9~7Q` vboXI(t(az@bcT݁$A($ %'$t#N1P8*VMO3؏HuTԂ:Cba`AH6 YĆr䥖Z՜7Q Ya8C>+TX1ޖZ\xZUu#&-8_o$QJx9_pH& @hqR4au` 9<FbEFY1>?Q2G? 9bO M{gXs8k^POUOٽJG(ԙ(!Rߐj%u$F$mҴīQ1PJ ҙl&W3RHEƙTEm\UY8w9c0&Gp4R(D-Qm4>?HH3KRX+Jqs =cV-R Q)ZaMeUݛᾷ@vҺ:qnᐭi(0]m#W>*Gs=: qб G4 7ȅkU[44g;}cŐ?|z]ˣE;_J'VJd/ROΣη.>;27v<[$g7[z˗?o6g? M|z?JW땤'>Jnj B%q Z}?t{NM3UF˿~9ms'3ʦgyX|'/.=\cڳ'`J;O]׵]4];oڶu$!JI1ra<sU .Dz&(*F+j7>~]yٳN?]~[>(7NCd/\UD䢎.X 17s8@UƱu<'=#Ս 4\ {l8H s%].Sr窾-{Mgbmt`Rhn]kg$yŊ&e!/{=;( =y4z9`aTp=[&2uf&0fG+!!&t`Ih{V_&A\+bkQ|?YuS6?hՇeCDR.f\sɳ˜c+BY.,溿–MQ'/ӓSuНOΞfd[bC}~3ٽ%?0: a6ͶfxkȆ b@dry/1@LH~Mji7fS 3teLh)c(Pq4 gj7; .'Oٷi/eݡ.z4B17'7Y%@ Bm; H`p@Jsg~U0#FibxKLd mdX"`(Ek5k^]<0V;ثs58(Fx#IJS ̄b:;݆DW3B A 0 0D!bGY5 "(DZnuD !Q,l)xM:kF@?g_\|>]ی gPxv=<Տ??|\W.fJT8\m/V#=ټ 6z}wmy]bu2g(}N\U]:^$Mhܕ܄yZ1Y#$ XɉbG4}ʺ=% "c.p1?z͑4IFi珯x{y9ߗ1cFNExpB"ciI#0<3U' ( dV:Ш.DSBDMejf l #s=;zsRܣMBARء!R샳lޞ|mo͢nO̟,M_n ~ٻkk_~6_ޓrwX}qۇCj,VRbb5ӄZDID1äER1\a@Vh= ƒw.NF %S\E;CU@CEb* H°˵G)< .RV ;ef_0ߍsjKn|>o~k>>lTI/.n8dώ'F`ز9ܩmP)c̞U)1ez3.nuQ<]Ք09XONp=CָI$lDHYRCetoV'%۞,.Օ>=Yna!Z:UPEBy ձC$bN!D |aUcņWV=7ze EcݵVWRq2UHQEPՉ40z5i ZK)N!bMC! MPn͋;b ,R1"mP̓Yzx?ɫoԶ<ϟܟe ^^_ywfo6]ɜi`ެ8NË$OKkZrb$(vSg/..P_ۿuzuM/p1K $`]뻲>xbѴ]gq 6Nƛh]c^4R31 #U$M] @fh0? ۜf:Jr~ wC5Z ˵Ffx &5jC V{C jAʲWJh[t4z{hA Bz/f+̐bIm׆&iJt۝ЖYP£S5 :BGw>H3JvZ׆aޤB㘓J#.א8%ƹ趸j|S1 DݠA7M೶6͗tz_n_Y]+vUBiZZF`ȵLE4,y.:ci-M} |Θ=R25ɏ ZfK$!0kj\0L &&&[-VF "X @NRd $B{t-ݍNMcxtKhRӄr'ǧWc{.TMe1 u7kZ7eGYW2}ŏ?{]=n".gMR޽~ӆmQ,&>VTU#3r55*&?{Քb,t*?b}Hw/t'϶}:9LW|FTZ~~ϟz5Gc|yчƺ]3ԬUm'?{^TRBD6[gFKBrv3Y<BIǙKt(X[GeFl$k;@s8VSfrl[ ΦZD%+Ym Oڱ.&=eȬcH`qThd*\"KfPR`As\ "J&Yo8 b:\K. ac2Nqfɯ`{"\rz ?jmOfm9ߜ.iov. _O_=> S;Ǧyןw-5lm]/donv2jAU9FSUc'IӰWIŜə c.io.~˫7}30q$0|;Oݝjs;W{ǗLRDZ*ȉe<8#t>~ͥc@o{njyf2o^7|_60n7p퇛mn<ۓM^\#Jco#Cu|Ҡt2 :NA& M Ywh "4yUDA h5IϜV_h1'Kta @. bww# '[o2wsAd,ud70dJ{1 %0 t--"hjutISbYK'KYl&Q|Ң61SH2<Wmv"FIJ<գm`6{|?~7r5>bf\ &A$}H [5o!7N6m!ݎKa'[U{{P{tPڢnD?t9C=:ש_jZ 7YP|w7lp= Vj`!Ă.б:@!qFG< Z:oh>qv=i }ԋ+/ }ǶۓDPȸQa~J5"#Ei)]Flp׀E1l`esb6%yּ[O4;$8 yyާIZ.Cj{PLl%{-G*)AGfAGUv> R@IWptѻ$D̡Zm֫ty1 !Ʊ" &'vN`ۃC"f8o.+ B1kC GQyΘF##fU٦SZ[b l&L”D__wx~a͇aCM:ykz'7?573uMB)w0>cѩa3x}4_tMzW7 LBUfMg>}vMo i:&C컧.7Gvxc8HG?yxk?o=j嗷TGIl=mMky.}sfMmWZz ҳgHu!_/_^O_Wݣn(4A~>e Q$"pw95GوU?UT3Q ٦B`Iqa23I!`Z5" 0a=\es p. uGdvCՙ(S=N@SBR~o]bi1(Mv&epCj&IbVj 䍄$<2Vw+E0d% 5B"-DN؈a,^\q$.][u)*(Di=csiEmӥ ]FpG".n˹h2 {J8S1J$$Q69Gj"&;b@ԞդԱ7SFDXqR1n,@:y8ի`~H1q`FT%*$I͏B4Ub:$uR4T+B@PyF O|F%la!REa~s]r!e@$p{ao!Ar Q{Bsk-? njɑ:_'jiXo3Ss}ӟ7ޣ^7o^.ʩ=~<؞''@/?O._Ge?zwK WW4w|.w[K;aOmg/WwcE7/, !AoI;q"j KÁhdEfeD$pCI";qIRVwS8@"gJ14!x҉S5F{9h6V"}E׸MB|$i$>KuMeL*51f \kHn#]BT ɩoE8qM|T>4գG*Dg'DSqt)4l?pS)Enx2qoɝbd%kjjRb;M !0y̛xm],wWxj_4d-&^;LIki&&p@wN\T,B=E= a3گT&L6yIfi'43vUxeo^x;}>yvAh*v42e6UQB afGyK eO eK]@#h=o  4DP8CP!q*I\2YBj:*ǪAxam-JΞ/o{%tU#iAU ^~l5V{mXK԰xuNbȷ1: ѢN쎬@m4R&s%%jC$fqt|'fsQ%S(ؑ@}ۀkɵf tThVs䴧yϻȉ(d)OV!mv7hUHchWyj`:`F`,܈ ("RUCOY%Y \lzP""Z.B$%ۛm(a7]ϻizoq*}"CZn7Mf6,OgW×7oo^$=^^,b$sA!2`$ yj|xMzVSd wE٫lݿ^^]o_^M?~YNq᳋_,}Z'ޯ?=;Bv?Og'ўA=Ԅc1,c8f4e>Vl:ǏWM5<%90Lh#32@1(V!]աdAll애 Dtcd\$gDM&ZH1re!rK)y'7l&"[ްi0GsԘ򢥋‚1-GjqTp.r3OFҺYlSJPj & ڎfoSw{XA@ۑjuD9%!)JŹ2Bw%2o^esk'٫zH|=5HxZ0EuPs!: ^~q"9"(뽫m2*h2׫,0:$R5U͗(hff}IGmA읪ymٱ*b%^&Ͼ݀^b#}!I-,BSM݉R욳EjN5of-bb!xpuO[B g$҄\c$Tŋy1TjPFӤ90՝"m"DsH MK`P]` fsoR^!!h{4-RQ'd*U2}̀X<դvlNz>6gZk+$`T4jhmDj%m~Ճ!vod Hpft8kD7\<(I+?zV`(0nBJqyyиJ~3=EmzDZ6G_`'G ǽ|"- >b-dN6h tpC83RU H)¾*/=k(WxlsEۀ6J?].j?lQԼ"h8 G]OA&]C QA j1z̺N.;6w% 2ى`0al2 5ɏ|αMt=;sNmn]]J"<=6`? a|ȧ $03vVL<6[dDkH]^w>k-ISTh0Y qGet ƈ51WB,2N8PN0ә&Hz) Ȍ,8-F@b#\עѐ 2 @0h!I1B0 4$9i)e(Md "$VN€Dj$LxFt%  Ѓ!IL{^OmonDօqiu1q̬Jqɠn )M]oyx]/> fV&$QA~s'y} I ޛ'uT4_61-OEϾK*dE@) wOgN1)Z  iO0Ԇ Αb"eFVmC/MqCbb |Ƀ@G5'L C8T+H$AzMMUEbGE amo)R Os:-}P**Z:mnB!YAДPˆ⭈NlStO !bA#*ҊLz }'}e%ࠇhF`  %]MM딐E1#Qf%EHNA#HT 5KiLXfJ295+ۉNFC.V=|-$`@o Y1Y*$ $B="+O]lKR@$yt[vU%TnfHŒXԮ0MRB$Ԗ:92t=6A P&Ddku}ѢDt-Jl8Kv+2.ӥxv^8z.Ya };)0UJ[Q4y{ bk" )bJ *9%S:yϱh[M1*|eIj=*4lߊxn[-槧<yH[ ݔdgɔE(CK'^@sIK2nAL[R - ʂHLM^ vnqw~xrg]ؒ]AQQXG'٬ǟ}lol&a-u҅Ζ}>ŲڽSЄ' &G/}/?q|mx*J @V (2>04VEQ{nV!pP8k$LBL}BfZ pyWָ9WgP6P 2΋T4Ā حY49-VO@igUhlldv@e4O `ѓt}bѐAA"), !:˹I0x!$3\lPV/mP]8 f#T""I(<;{ay&((hPa/gpYG.9ibfu-Q$+m7Z*$t"( t}P̲R4 HbfNk&F2 &ȍE7'i;ABBM92(  |D͚@k!7f1_6>\%1& >*B Ȝ3!Hn4 bbn5K$k٬20 1՘O8-«:h`@@lV!(c]LX8!s$cR}bֆD}&ה?4ZW U'v294U%XuE3Z8jUM`TZ'fJlgѤaFՋr0̬U>5bfla$RԆ4KH"Ł# ~# 41U*/V SCG sG]ۄ]eRhXԢ U/(4BbF6uL")dd EҊY aa 7&ae+.A4eZN>ț'ar֨ZpT.ZM\I5)l U60 c1抔¬ ȋNVE)SH`IL ,*:g&MM)Fayh2m\b4,Q*Dgu aFR:,a::ƍ͐3!UM\t5384 Ym:к/NqF@JѪM4b*70td5 Y;:' [ , &Ȣ6G- ZP X , 3;Y)6¢>E9T@d sXui X@H*@ 8h"%[E}iVHQ VD k]Zu  ͹&D U0B)F69PB jFUa1Sb&TuCAKd.r)U{1gUf8S)du m@aВ ]U/6Zs\k粪\qV60gG(EAtY5F,(Bhd I>cE)dR;.3aYHAD6aa4kdE ME}"Ei9 P$t XXaR^( 38&B3IXRK,AĮR_R !}mX0X5w̚.C[KUDgtyv -;҅1a36;+ZMO>}ړ}mp1_6]=kUN5Wb9ZC.~2I`fj:nehRW&iC,43+ow;]4e&/>K/=gӷ={#_WFAd9^֤MLkNIX'O]ĕlV?yw>nwg c Fc`lUJҲml1ibkqP0dZsD):eȌ@62mKBCJ*D/:"@aq`j݅TZ\rR#"F&9DtNk5\{AāÑad-թ@ G#!X'U:kO@ CG YI-‚! 2^NkzA(Q[\pZU/P4tF)rNk6\BK $$ Z6!QNH഑Z(`hqQL{ty> ' ALP\rR" e(, V@ KY@*:M[#(q(` ᴑiig8ʈ@i`I͕(-2$:: bgpYÍBfRf i0t8i`1&p YÙƁ€QR(Q O\ZrR:!rbB5W0DrE'VCihFW\ठ0<*q72O*xAIED I2NxPL rzt tQ8qų6/ (ϲ(WJ)r`_snβ_|ׂW'ǧɀ`O}ǫ*lO<{MR<.kHgYwm0ZA{s{@i UՋ/fcd|ցg;G#dQudzN1|1}]X4jw}݋[N@z;]m]H{_|$Ŵ9l~xo`@}<]=H"IHd8(rIa<0zzkz)˲߼yV'N{wFV`At17oBJntZ!Mڤ5NtX'ar M(p\iͅѴ+;&Ҳy_ٰu[9hq]q-%nXy!k휎ta-;ePˀ[%4riFmt X NtiFsC5,J9mTAJG6_r@u b䁥YGހW3꞉08mJ aT5_Q*P Av_ܪ'(|\Ka4>q_yKB =HB`4Z KYaN"|uwd{Rn9m  ov5uY9Vu]dŢ^AaM̭{efLL2BB4L)EAJJ E2%FD" X# TY{rrB",njEV3c @L,Hkk۟ϧ!D0FaRa4V$ Q1R1FZ֭QBsEBBfF!Zs ieT5l,S]#R!$AN"J$9wPsF#Vj J( 3Q Ę"k1F6F#&9gzw!eUA8xk0@d1 }>Ƅ!'hh_|ڤ'_8CBo{LyުBz=syӻ6+۫*dY۾?nܝ1v} /=3g~EI \1*ˈdUA|lf14FUOO 2~{d]dPns A}/!u_N{0bH'45βdP0!!"'YhAn!HdTvⰼu*w>y[sϋ2321EUGzc]> )Ī^%Z "y!QJ@ܤD֘MHV@Μ 1AB+Ƥ D JQJdMt[,kb9unyM15M:VD$|ןH_te\Bi:> T^Z!PQfIԝ{bEneϑb9)džǓtX`GDZ)Y77/|YkYf_sڠcn\+ G}/]/k?)]ds=??g?T$r r$<Ϳ k K'oۼ$ij P{;r>.b*tٺ/Gg?7ӫ?]-q^Onl_vq|ykg;_?/uW~IJ#??xڵ??~ɧvw/<{W;(s=mxea.RiԫAQ1شeeQv]31 {ͺv 0)551Ykn4@9..] ԝ7|yKmͪZ-/~Kw &4M5͕Ëg{_W7Ęz"Xks'_|#kLww~w_/S266sz=Urq ke-H)-t 4HD1"X Ac0&I$E4(!6F,AkR{kk&RJ`#"Y8%@k GBRbJpGTV< ڤ{lM{h&׵ OZk9"Ĭ 9>8Ni<*|$}LᬏGG0FQ8V$F͓gm}3Oêw;\Ȭڿq;g-7g.Ot].yPM2! m\(G_|~qhr4c@nߟOBqEa5UWrO}@BKՠЗ7P!o+uhU}wmsptEF 3{'Me¥\&4"4] "=TTdV55"$L[{;&ۿ秗vхSރhҚvU}eeaY+k`բkC1rtvݹss+1t]P@,1rbY]EdiQefuH!8cn">""Z<:u?m5b* +.,GEQGX5j#%>>2`:ߠ@a !y`|PYS5 8Nf?OW_}Z1Z}XV?{!acc~+}?{jX5!Ʒ΍W6@dpQ' ֭[o/'?W_[N tt`X㍭5p_ 7ɭ>E {߻s>4_6w/}L.J^&?oZ{O͟d25Kʖ7;:ln_퟼yhN޻uK3cru z/`궱$ҙ+F[ӳi`4"nmYM!<σio.4EѝY-~f.{gZu-@4L !<D|(ASzD9ֱgcR9)(`{fBp)C+>mDXch6,@Eضk?dmG1 (HJ`_5RRTHƍq1#f 1E9^,j5|o6U\wxko./ 'Y&sy7w6)+jڔts2gwoݽs^/jZsٍѢII\hV.ƾڶj{HVu]7ݣaisw:-^0L Z{Z-:X( ')"!@(v'Krzlx3XՠɘM:0Vs 2c,!&ќ"Z4"Z"zhFyX"0+:%DȲSHhai҃heDJYk LDD( F&?Y)X/J5G<Ϝ3'T]F!xWtG@y߰~:/3kٴeXz?/NVJ+ŜOZ 3|?/1,rwVV׮=ٵUUH)GG3ϾƏp޻nnl|HbXg][3|1 j1g/Ju&ŕOnoލwJ/_'٬NR)_Z>ߺwO7fccBȲ Q>ʯ7vj1!½ G.lgwwU5ӓc)LDRy6@Ѱ$nDN!kYf-I6{_7Gŭ[7!֘cY8FmkO>sz|SySUmSYk~W~x/}̓{Z2O)<^{ɧF \,^ǜwFK[;mۦژgYJI3>,WDZuBׁ֘C4?B #͙|gYJ`ͭ}^_A/a[~/@HP-x.@/gJ@?A &{zUO"}Sdސb *[eny[kߺsl4lmֳ4ܹy2Uv>{Q-]x{w}͵k{?=9lnOiAV5-$U̪g cͰ<} '#e P<0>hmϖuf?= KpݳY0"$;kFQT}LA\(d:]wv&ǧ+"CH) FHb9;o"cL,58ޗ@$Zs~⣋?\|rvD ǣ[yݴ޿oλ!{ ?^OD'0Y7MÜ|!0R: =PْG4ˍ1xn>‡0>c~hHbWmooǿ/LOeGmX3@)Ʋ,oߺ=9=;~o\hcz͍K.7u}||Wdֺlc¼Z-͝_ڿ]O泓W|WUdyvk{{_◯]{r:;7nܽu/2sC gYB]7_?C|o6{&|1G?\V_{˲CNi=F)E˗.rbzD1G]666֫ehh<([z,^Щr0>9:G*Y^CthGĮmn޼sϷm֛?탃ZfS"8&Ȝg;~_(upxMgד61y#d1=X5땇f6|@2OJ)G{^<|rҶKU!,B*mPAT,l=kCG.tsBK]h+s['N.,Zd'rW vc<||`~߿q:jWU ?uIHidOwfU#`2f0%N1Bf*P!s2?8yutAQ)5iVu)q('enSsygkk\6u `Hf1I)I6G'ĩn[- .2g4qO ")c:Z ZsUBb@(p |$þ>.µvB)%ˆhFFkksRH!)UdE1]5GR3ZٺDCxO3Zw ăY7cJ_'>o_79 _ odcW;o{GUlnmua=,K3W޴nfz 0 H\jERKʄ]b Q )b% i%)rwK, Cxƴv]e߫iVռiP1]/'+|<;'# !eXS?jnX]Ipohl}CTƮs-Mlw|яU'.Q\Ô-tx~eBh.Wt_Nff&RkBmX#i6;_|_swq||rsc qV5~wպNBȲB( )1Z[m;c_aA<QV; "on "B,A"  .ZT2h4ȀF% /c :d+YRp Џ}}7t-ΝZiŜ Z"L\TIȢa}ZGЬ@ NZO?ת?id3ƹX8pxʛ/{Υ7_gN>S)W;Xyfv&''balEq_yf[ksV-oB 9Ϲx,Jx,޾ګߝ_X_JɅY\ӤZkO?#G_W߾V2ZmL~a(H7~㷪75SO]zXtG ^+g{7~:?7o7@.1AJʃ$е-8` %dc}#9xFΈJH5(-ξGfc O8jlB-O*JcD'\^I0R&bOFJt;mױ56p?GapO^[BSSO>Ο(2|1Bql-z#FE0#Dl6FYlJ#JIv7c eWUb|ki (`[6P رBfJ-%eCiJN1B`v &QFFQ 5v d\֙y{03]=@2[ϔ61dg6Y XH R5"rAd5lCGyz$hD* y ]בi4ȗNr;0.*mYaAHp,V,6O0#Le1f`?xaLSWW 8" D}6F@ &- *B.7[z+XH h\1;扮yd@<3YkapD(`?2Rj1V1(NR)%㸮-ABֺaJ0LጥCvXv CayքQewDULuR* hmeقH81,IӌxjvZ )(&BJ+m d Jz H)31QwpJf Sv.d2,~:pپY02;$;ׯgyNlln6X8xӟѣۭfq0Nf0^FN/JKnlm§~?3kwB(J0A? `&ɭ]QRA\[(*RzY'j+7_{B*}y?._<= >}Kv`@IF1VB)Q:zKյ(J,nlnnp8tG?r.Bccò-m˲lǥr8I! cPB7 c0H)-RK) BT1͉WWWB!d0pZ딫 oYM-;3VyB^[]=teq]ǎ"LBqbJgf*cc׮]{Qq.(pTj$5Dq hclBJ%]8#GaMNm`t{0$INZmh!k sJyWB)AP61b!L"S&Pʔ`@&IjmRFk_4!DH9*p&|wжOB*` fл$Z<a/,B eaF0#2B}ꆑ8 x$îTo^lV y PW^譾XG˅^l~ڸhQѶ+B;4 t=}O8rBk>4 2Juhzp=T(Iĉ E:nu*g'q10\GA_Y-oRxyTpfGfkkOՊ(wNyJaFX ;:WJyR/x=2)Ҕb;n,-bFZ72 B3 A caBg2!8.qRu{*a1ƴ12B(!@BB296H"GME:0i1aq(N?!D#ow؛`/{ұ'3eFlYJnlܼw޹s91#X(.Ka0\K(u49s>|M?1mIn''>/~/aQ81PJ00,TJe.Bh\! з\P/$p.ATʾ,)wFship8 (%bj:sW/sK1 纹b1^X84?h4RJv Yށ9q+)oY|_xVKJշ>{ܰ߯ML$I0cJY"2PCJde,KkCmPJ)ۃfBC.gnk]A2IB32hgZ"ٿcee>6"0xǁm#q{mgxo4Ah;jr22eQD0 D&mL1u]aЛ1"-+`Wzim 6S ^s?̡s3Noէb>fח4bDF#3S/yFFIHU)=0Š;|^*칅 tZv 2Odgh^2ts$ $B[D\%Fyd֔0 o\^_'[vo77]u7b\(e1jq0,,gr&f8O!q)w]J+cTsM^}bfr0L0FW(:SAx)m`Օ{3sSkcժco[7C_w{;oZ ,ṉm(~G?l4\\~1norzsC0wPJ'@`ۖljֆPBP9I"n|~JRJwl%R*۲ RD5JyB\DXj1v:|؈H ,'( n>}?1v{l/n߾:&RbٶRhHj[tΕs9>O_V5dTI!LvVڏlrSi#i&xTKdٯd<#n+v% ?P)J) 8"!kaYSWJ-3 f>-0 eEj6fDL1 d*(!BQGEۮVn&؉Nc-6YŹBq&N`0}Lo|`R+Wn^w E8H!D(3 ғWi蓼c\ $ղg@^lvoŢz{c?]P cA1,:S?E!sraJՖ//6d0;%&H$I\ํfËw4#JkF0`(!B>Neq,k ^@C8*]itggݙ^whf&n.k}[vsp]۲bhLkCv!v&3i:[/׵ۭ1FCa2[0F-Dh0֨|Oɞpv2g## NB[^~)Ǧk+wsR*5/J[[lQʥ5}ĩ|apT$ qbLsg`=̯--0Aq̃0?pP+ Pl㢍O>Lcf1n Vkuai!)SqK A4#@yB'=&쬮4JÿOiЊ!4d mCX&+աg~, qn}Po y;L "< xB\뛾t*r!؁:3wxYY AHIRJ^7 ͵ _/hrnVR 'N8]-wR(D !¨`@#P"В` $fr Hܯ +Gy#6RRR )a6iT*q$IMqFyR`HR-AУɐI)Z_b_KBСc㵱$776RmX;k(VJvP, !PXt;\$~ȅBx qx]K(I(`jrBvllmnNkcʽF3|Q[3ӳ-J{^R~? 2K[>DZB>O1xh$7\T\.xV0:ώr ! Z*|?|90MyF Bh+FCJc乮eYPq?OL/P[}cmp` Ơ`3(%8ˆv^Buq.gL!޺[]2E?L0#w4"Pba܉;k]?m)6ڤhw6fQ bLm|~܋9upʟ^]\oui0"2D:=akX8>{X*0q{]ɰ7 |j y@Pxc+ X\QBa $ V6) x3-n#w.,;gʥ$`053Z 0s S$ 2;ffvFR*JP?4ХGYB⁅{E፿{/p,9²mױAh?fP͘Ji0#lۮB%FGQP4!dħ>I6)o-+%?^*MO~꽕 7nHQ2Y/pS|.$` ((v޶[NSq0HZܬAs޹}m0Kz>/B)DZ]׉;?oܥK#0n<6F=ڎA`-0=?T8r&mv3s/<ܵkג$=|O?;׾~9?V 0c #,+/RǶVJ!DsQJk10ҙY]sq(ձj:nMXB#yޖZ 0VfB0ʶ9Eq{kPp$) kkw.yct^.77=yⓧNl[33|۷n8v3gFKΥpwЉӠVת|NH9 ''&&&1ƌe%mt`um˶\<۶-v9;pi9[ ˲8?H֜oV Xkz%IX8sluá 8x_ҋOWOM<4W~Z$p#(1 `0[r Ƹ停=1`hƀ6 Xkq43;nw\׉"ҥ7Riq8RƔ685$i5rs)TZJPvFԹ = K/~7n勇x[z=덍cgFQ*t\Dz(VeD !X(`r9/76c#ƶ-Ƕ<T<#Xq9Jj4F8ëu33 bY.raPf1qJiheuZmےo57{.cܜ{oynk?O8yK_qQ W/_iڔ(jY( 9a}3jMݟgڼ(FgI>~?ʣ nTؓ]%hGܯ?rh˛$ >{h2t)h@ejr9JRAǏ6rX\26PD'N:03БFɵVwt\#"2K2MTZǎN?~j!HߺZ;a8f6XJR X!"I#-=rRFI£wfs&Nf+ГNkw7o\[ $r.) V:c  jRmX/Srtc'*p%ڬnvB?,U\I)o1!V{8JQrDB2(Atd$P!-4]VLy FwwZ5rǑlEaacm4OSvc;EȮ=@J MOݟ޼q!lRmr1`Ee1hr^Gjgm rlrSF^o0> ҎmGQ$i\GQl#"ԶG },8?0J=taQKaŒRʥ,h(33WVVʥ0Ƅv'aQ%tV׿qٹ{;߮*kk3<>sO^H Bb!\JmG(Ji9$i?HeYs3Œ4J,KT29 ˶bm~`. yFQ ,P )VRٱs㍍)EDcvROk++͛pT.+e>҇:DZ-JrY>B!t!_;n6֞{C`,nNvQ-v_@9KQ~g #{ C1k(qzaX:]\a ջBP֖ bn5\m~7ɳG[M60rvݺ,罅0Z\vc07q'TD hdQwcYF~sKhǞu^|򕥭^!R!^-uM϶mD\ZtyNP# %xK'L$^c˱( hPb pFrL,Ųve9Uskh޹g[QG[5א얇v"r 5@_{dR E]m7̶Tp)xʣ0"@,!LCܿe |jz3'޽EYR>>`8y^^3Z[YRJEU%L]N1GҀ(`,.H۫'j!r9O)%0 eD) ,LŒewWr\,iss>inݝNa _{;O\|S^GjXZ[]#PZa’8<~\ZO"L ~33SSzW_n WWr3kVc%LprRa| )(1fK].le5-c4JJVr; 1fZb}Oٰl bYJhbr21Fn9/WL8תZW]bl Zmd:?v'^TVzW^??v7c[Rlvs]7IBiP !8wrJΥ  wC$weFJvɣpFG7ZbOFz<#BgZb.}<[~2M5Xn@wBaWzf䷫G_ ˨ۯi f~+ˑЎFqA `Zc%Z+nh1h&Wp[mis7^sB#!ۡ<|Dh1W7@3I}6: (Ra\ɠnjzxR!XDÔL6(I #K EPżվnl}'Q`ZB(A-TE%Q<脁ԑ0Q7C #@80Ydq.7@8 q,L(Mu:+2_(`))4@ B f J1HH5g+VvE(wٲpԋ}y;w6%{Bq$MD;/8zQonQ<`GffXwZP, rlB\b%$*1 +C?IQ0ތo=J{`Y##V'^7/o]gVՉə4!ԶQ|\*E tfv]/gS~Љ;nQBxekclb6PbJT*eB6rKo[ ^Gu7|… 'NĄѿ>sni{/sϽ S.:xp'>oo6}\wbIJ(.ޒ\((%R9XJ$IS 7`$I(`@ڶh4.-?V-i#1ƀ@H8qccE0 F}a0h l;YOr~,w_{ⓖ;W߼rXU)j2hTbVHT0\vS,/>ԏ~׵0URR],(m](xIB(r1BDZp˲ 6^[[\;:vOoWR ?o~_rNxc:1jJյOksr*ZX8vʵ׾W瞼qoO>_^8sR')a񓧮]!( !1ƚ0A Q2%pA W0`HiDAUvgZml:;crTt:jcAU4Cן|y? \᰷p` …x?Ï}4;nu^{r|̹_ u !8˅Q@¨2V][] p~VC\N yD-(-졑ͼ&ٯF6FOx`{~խхn7?urh!D.liNZR-BkhnRc0 ǚ $2Aɟ,x*VZ]DJF3ǎꥡB #ZSp衣G!6(!lۆZ@ڒm05WQZQ8 'nŃǰ-MԚʖsF?jv}ײ>ї61?ÄNJ@LS LQ- ~{{w?qgW(fR/slFR228\"oʨPhˈAդWG>҇-/ }L˗G>acÇDkڽ/|^O>Go߾259u_,T΀`wvśaRJH+#!B8"J{C11b4Ŕ͗*;7kqO3Z]]śt$B\v:CN,x3ӳ׮^ [[-rjcBx{s8z|>Q"P(q&eaIjY֠?PZ2cA@ _WJ!f`1Ƅ`11dWgn0V0&|Ԗy@rw.PR2+wĉ_Oo!0TI*McTJi%LPK eq.4Mr~oRj۲r;'f)AVr!u]s1rd;ŕgeeU$dl}h4׎ a]/a lÖ`–`Cj4RkdwYwU;!9YŞɀA"^dw{?cߙ6v,&jVeZ\>~Wmq{Z;oT.g.JJp0/2Jp 0Mi5_:+<,p?5mzXBuCk8j:4Gg&\f ygt1aAiٳz֝{[D#M"cDx!4Px;YZ[;B~̋.{Q7{q 0R7w DTA@CmLdb^z|Q?n3ƀ{20k"ł[ȵ")%fNJD&U"dDe0֫;A$h @(0  0E@qs|V~~Tٍ㥚[f MLrXt;G˕ B[U*GXbf\Qv3f r;ޱ,KC R{+7}|.GFTT2ǯCȣ}}J&V?`/G^a퍝/|≯ݥTAJ @dDJ10&#Dv5˳MNͭ^;=e\4!SiH2!3!%DR+ ږ:DSw68vGV齛kF Vb`Q-Zf6H bf`ڤdS+Jn0uժ3W] (65QV7n7Arj3VO-[i\ӽYq*-F nnҁ9XOlu3h0ľ{9{+!#&?Tɧ%BئcI(KTJf1RgRi N>0}Pc.~Zk'뵧z?KN :J!$^[v{7o\_}? ׮^uv(I@ |mߙ{ϼw Ytkc\gۖ11vl@pr][XX\qlWH}u]*)Jc> 8r47`8[(;[8Yq.͍?~7"> IDAT;.lmm;wnnooVM‡)"!jЏTPF|_!}T GdOVV<3Pv;-md?wf;NQqN0F%0BmR: ^.)2)67ϝ99v+)PVg# |De4Ā"TZgYJlo,Hkɝd@-Uf?|Xl4 " 2&3` sE߾6v, DC9@ dű:Z4HA̅ҞW v?^ڸbA[2)6Q /O:xkܝW;ݠdouZQUL$# *d;}!98X+JftS"H!16Fw*{Cmc|jQ5&LQX${r_X{qbGs@hv+mAč1A2fq, !$t=ARj,9ptm~X~H%EFǞ.gLT+F'|wtչٹF__5J_Y¹, %_/ZVRI*E6u\-DAf$_/YB,ŒPcLiL+UhImB 0Z|Wͥ~فʤ^ZZ~⛄, ߽pic Ρӵ6gRFk0?oBrqu I/}k_Zk|ivi'~?vG*ŅLKiV|ef c4ÌsKB8k>e"!ZK!ׅK% @*Fq'i'L'kk? Kc, !xsqNJEj^>:Qoo>tݶjcsɧ˿Ad;VcfBEJLU*p`3bps$>S w{Ne#Bl2"t1-ƛd y;1Q~p/l,K:{{:}H8\5 wyRcaq+/{έզ*!$R!]ۡ`h4ȤRKJ$IљǏOLNvQdMMwovRgQHe) inmIn ("$R&YVvcJ\i "γ(0.`vxeIp,1XhheZ`"U*8(DL&u˾C0hV7weՂ[Q#ǖ(6Q7TuSMu-BIO>q뷵S]ngI29Q\w 0d̫NL$}!T3"d0NbhڴS@x8F2#"Â{^ 72j2j$,ʅ S+U aMF|W ўת i `6J).sf)FK Y[qcC\mʱSCH?_'/n0jmƀ~ 6@ c a~M۱O?Тq D lA{?y̡CG6VkrjBgB (V4=|Xݿu岋 q7Ibbm@E@+u;wn cO޼~-x:177[?/+WJBٲ,Z(':w_qL}7>շg}ǯMVcg`nf'<'mw8JggQ2f+)(F )6@ZhĈ|۶1eRC)C-^?0[b1RJױ1BA",˪V*qbȳlJ)%YRX,HK_(`&F͍Ϯ;18+ yb,MK^p^@)3F)8BIMXd}sl4} ^? !)gj/B{m"aFc1>f֖eeuVf qǹGkDu#t8Xev{1ߨO7[;AHq:݀Arf#Ѥ\E L3raZt=<]̊ɂZoF,҇g<)4)3ae&ҍ@w"<2DJ T0 ׵K򡹩SKs''$[[;iT lHA e p-|ta!ef#iAFeP!榦(ʏ>\/{ՂS)z "N+ J4?8=k~& hQL&'Z~?TA{8j!I!ɩTRUfہ2<J: c~%R)0rgaq.w 0B6TŒoi Q"eDb$ y?)Di*)E/F@-sP 6LC=CG|ꉢ}+_:TJP*{ݮR\&X.@He\ 53;eɽ۷鳏"D'Ql&Tk!uN^X8pfP\n[J,VZj=r뛞ԧPf;NG+: Snʹ1IB3ӳFc6Y_>|?ދ/X*mnnQn?i(|Wknj]t{o%JW/k|\r \W>ijϔJJ|jmo}\/MԦ-RJ`,JAh\qlv\!MՔVq4x67֌+Ǐߺ~P,kkk8\IҤm{OnlCAD_Wo߽{ʉ'\$aT)1htry^k7wwAlkkc#KD :8IY9|dP&!F KR4 p!ļ%YƵVêJt860! Rp=X,!,S")%:tJpQt6c̢iq[9ؽnߺ\Xxnnvv~ƍ ǶܹeYL,*0r 󫫫`kۖ:m ѽ:/{AcN0ER?v<텹|d*ȇFq x b:|^/{cǧ&KTҏa76>2sNzd3.&(-%+`N*k@h` # ,plRn@ H)U.3>:Vdk ^YxrV*ԧjjmkjg.wzQfFȳd *NT$^ \v*5xZyq!2Hcb.iu@#R'_|fI 2X‡g*eqku{ޝb43; pA#8VRzG~a

Eas}!<i/|'N,}套~oxY9);iX_XX@lQ͘%+(aXd4bs̊ QTX6(J3mQT*xοrsϿRqNOOum%4Fp8FJi(͘ &¢Z)SJI:?~g^8sBqwg/]zK.W^ǎOdY7]J^%ݸw_ǫGm-T7/\^>'$\ϲRKԲV,9FsqܠIP !H)ғ !dv̲JE(e`L4!Ȕ%e>ʥYB!$sSys(!iD˗&mxt/I?ܹǮ]O~ ` Qbia;.*#u,JKalVR ~FБ 2jhϟ\c0߀ce_>qj !c٘q"elgbܺwnnΒͭXRac%0*ft^@j7^yÒgO ;A^^OsPv-XhʈE,9Pr5]gr44Al7jyV9wvfk֋~)ٖ&$3ٕVD,Lj*i)NEq"Aı)!qXO2 hCȁX/=mJ&#-8XDj^-vDDeĤs3wnLBL3jG\cZm8z#_q퇿 !*"؅\R)"@sH8cf"ci&[)S2` n|B %+/}ꭷg]rСeqϲA R)(Mbp5.$τŬ` _Cҁ:/* O?tiicV{cFnP !@tQ ma{[?ڌ6F]Z`4G(zcE7ڢE/(utqfX4 h$ M[vBױgL] jEǥZ*044/QjBѵ, T[ۍͭn?LH$@a*zQB&ksf@)ʧ.˻>@ C02 %HK3ؖOchZD|`,0FQ'-zUQ?&-8Jt>ɋr<\w'=a9~/U6 c/XtlESbQmJEcL)e H(I(Hcv]XG[GWaT?yjaa_wקy/ Z8M0FƘn0JqoJs؃S.,BRI*IAaPۛ;JfA_OSjB@`6=tTzƶ(}1 w\smRƜf!m !A-+ʥBw߽sϽpA?Ȳĩ3;;jݖēO?|cumXw 6%ӧ!!I 4%SJBu^;9Uϸqж]J \u-bJR*!E)!1$Y&S3f#7qm1BRSV DqفF(EQ$2 /̖ʥ͍_$44M8K_J2bB0R;nՉ )~{-B< <@ 4m(c2rz) ~w~}{}^!A,JўUݝ/埴[o۷{Q bƘ!bjtG)G'\'F- @ktzJM2Z*c1RiYjF1˜1 Okq޸qsaqammr(ˬFQ.a\OS}?9h6C+ťťf1wl@F+$ˁ:@=q d VZBRPB@M1D)З`S* bq@}Odv` %T$ΤFMΤ@ UpZ4J<{sLL<""fh$vT*c$B 2fg @c@3]Eh_yÓop˩ S&(2H4BBNkcJ-xaS)5 Vy#†lacc4+1J<<1&:FyP~g h&+Ǯ^>_T;Vf))Em 0y?1Q%As1&NRulƢ(J!#fQ"TD8H[ BHWYb)^@h6˕J$vwvjluO~Ƙ۷no .]4??l&oߤdc%@Hrlsc#EE%Z8d ǂnȖ{"{ɻ3*F3&* u t G- U~1 EP5D AeYR)6(w;(R5\>\( b]I}zq3<3;3l;pDe'vb/ S3NhiYҪzW._o~z}>5lQ,KJiY,$b-LcV7_} DaV;7E!T}zbH2SB{i' ) ~9csz}RH[7$^X<v:wn{ʗG=f!;vDI:1w]znRq{*)łg`]]۶ QKIR)g[E lT,1F)\(lٌ%q,v?ieYZJφ/xQc 6^ѽT*Iƹxc_/p.m6sQ86Dk\3m+^П_Z2EqC˶,f{Ն~? mO 1{Z[|oـA!A(P:"Nz aJ _pp{ Řu"t.~V!Fe9G0@"}4')SS+1*54(SilIk R4- ! RJ1{-˲VVC6 $p~aq8|/lJr^iy{_*GV2!۾wNne9Ʈ퍢g{l5/X}q\[SV %J(вmL0ƢT*!$o''kn빎Lp)nESӄ陻wo>|X*}5ߛ_Xy&1qa,"+\<sn<˴~ȹTZ9rP:Q3gnoܸqKϟ}>:?dМP=[{OP.\8L]d5g~Ͽ$8g !Z)`JI* &SDZ-din) $V+%˲zYJra8R B`&KB!@vx8FA)cB!NR/\r۶cߺykw][[{ƓO=lZ-c$J ԝ۷|OP(BD.Ba:q/y7% wAB~pԷayfh%>"ƣq3,<,}DecP*NEY4k%(AET EV(,(zj͏o53 0Z BX GkQsQm{*.9{dB!R*4%M.%D!2 @9 h@0楢.!4@F kqAqbԲ@ FkBcYe}V{zf`@,ĝ(R"%N#Kr9_'G%YeE6!@,$,uF`auVշ>K(A(:-"B!*Lҋkdǹb p#D(%2pʰu^QiIEB9p: S{w>:i`('g kΝ mqj5xAH qkρ5!L$r0Jil^%ϰss>woe$`]f%gl.]xrToVZeQ%nԋڪN7NIcFI^vUyqcT AuFANy!)(4Fk pPwn$IIdIbYzh0l[icycW\~ƿrE> .ٸi`}an;{hc5&,I16=22J@ F9 1ں4͍RI2J}Νu Mbc;%c¨v|ݥ2JإS_k j< ʲ$VU/ڏp?jZԧ{{'.\0=@1FqZxwg<ML0{>T#>Ԝ@g>:Wgj'6x4:啵T(es'0r XUeaFJ]!}_PF`穕'm _kw C08y4K jFYwxfgXyH.| XuocaZJ Bg!r9T%S\]@SX%3`-*Y#+(tqթEZcVq 10AaH̟9?_ݾrUMrev QԦTAe@d~ YTk(RV?<0X : dk{/dQXIv~ii9|vU~~bscUfCOyYF8R1ny;[RI#RRIekaYU(w66<ƹn;x^`qQ&Y~Uc!AՄ޿wZ扵 HLP($kVZFQ&ISvso#MaQd2ZT߸iE 8omm;wv~wol()߿KZywe䩧[4U2%uza~e09L&ց$BYsy^,g ceY k4= kCTzyQYFG7߻}x8|A(/,$J m60O,M%&8/NkJI9cf0Bx}W¥Ǟᅃ^/}~x ʥe0A9&qT{h[gS{^`ȉQhGxO{5|t<,?ѳ) NVC,JYTyfEO38DYYlU~qqx¾WeZ*m%k@bb0 1 ͅSCAf`^N6"ggm? !Xe1:8e@`6"1[lR5[PYU%R*!``L:UC8N20#\~哗٧{N"+ &iMOhibsAl57T#usw (),T'בC5BJ(#1~Bvڣ 'N \Nk8iH?s S$>A'XzK"0~m{3-1l[!yDA$<_ҤY[cFa4Ϝz!daY=O~eI읷 oJ/ܟٟ\ F ǿ yjFLhg{۝]\p&qG/?^EeQg67!ec !Z <}Oj5Ch#h|~cF)n:- IDATBC±J)ӚX}qmGqmЧ;Ȕ9> b=Nݝ=|j ʬՌ&iCQFa)QX4ZYVp޼.KbAI 1pHJl|R^xc3KcUFR3StBDa\EҚ߽oa2Qo3M?#<9"zO[;;eQ8C0j畔0D8Nݹ̔}-кJ|?Jxi{?6.\5 ƴ?9__sjlr8#'F3sK{bwdA*m,JJcR: Ck-%x$!CF})s߽s XSqխdQ4;GFy >UUQa (RV?E!ל+ˋֺhY`\Yɼ(ϮuGܻ{9qLxa JZO ڣ6qa&xr8tZ8IB_pJAJM YI eaB}x3kYD:FPꬅք?;}mE 'imm(Ơ80,6} \7`"<bL0\h7ۭF$Nxdj484۞ jbdwoARX#|<#f$ux|s3+kiQ6'H)ΔXAYiDY!~o9ANx' #P6V==1xr㸥чU~l#qTEQ1{ZWFqe9Lv0#ƣpF> R 5AofL&I[Bm !Ph:`5g/M5!l8>_~KAUe(F>8J9wۯ}׮&ͪ|0qwv=OU8l1E&ij|y'7_?v"VϞ7"W\Nh @Q0ɉBrXVZmYD \P6"Z9de,r!ed.zTY4gRE괷8PшJ%9&֑ b`OR[zX˳Q=ӨO3~hx4`4s~8ӥ9ZTʦZF?wƓ JѦ7>}C ;.Fzǫ=!#RDv+uX'Ktʵ:/%`md*5x]h(0K`p{{̌5l\]ls$퀇DB#EXLtN:)ng.-tlCiRRa j$2z0DL8Y9$:k<4W~#|&8 TK !V2 {bRU˝|7Zh-/+^KBk :ňPcD@g#c"˜!^{I cn?>=P?;N}+4@Ύ:~aPw ! lwˆ638"m5òJ>pV"׺}n-%5*OxRJNιGeQB[;U|j_7~u &?~}"tΝhnwΝ? +"(cgQ*rTouowzn\xg~A2`8M[[n@qntΟ}AA֚ JxU7x+Ux<AȋhfX0@Yk5 ֽS@Ijj;0䶕NMQ@$*kK='E1Nr),a൛zKbݧDTi5)5@A'[~i,zTeuqʣpTqǹD8G">[K%y!"t؛:D'2ӍsgA}БT&rFt %!l֜/`4;3sx'qJq)&KS%<˲v͹7tB(e16!|P- ZG΂cn/ܹ|6_~[Z Se R󄔹6~Qj_'~7n\k ֺ28cA[mEYf9"36Dn \X (* eLI%p4,ܿwʯ/⟟=:%57ϼ%yoQ'?80{qcV)*ݗ_+O=?譮ݽ.h5O>!H,6n+iPߺtP1BN[cIL#9Fii#H0EaѪqR81 XV!H)RJEA)Fmyիj5Fzi0 ٙ<Ϣvٹ͍.gvwZ)5:\ʲۙ_ɋ|a~TU1n: 1Ba<vj{{gV}?Z}#,??l; ?gc w>׏%>}1Ř"(-0 *PW`ƒNNJ[gS#QA|ʓv4PG~Np3Nk<zAX甔Vktm QY"0(ZYZ>cv= X+ Dge2&*O=CCiG5BVt| o`rAJWJ+|?gdx{q0퐳"H0F(!ˆ`bCaeUe&iCIo24DБCj>>J)OXp;H6Grk8&c眳cn*um-R27[Ic9ec( ByqJ[ ð;Ltd_ՅEBÀ㼐{YZ@Q6 wOOXǮ5}yssڵg,c>3ɸW^[X4`YE=G _ZZ1vw!Zc-F{.^?lD0;΁ s>~{woݾ1Vigڼ(Ry%)*!%xffmw_K]ǞR~'UUߺxŸɟ{ s Dgnyeڻ׮߸'>QO<;YB4F---;k8&IJ)%Uβrv#8Ͳ a:;;{xгMa11#6a^YJ|ffQ <_VRS(aCB,QT',+4^jO~OK|޽{֟ؕv#z{~UU8 ΁(9~RZ)İ=1:i(>rچU8s"(}޷a2-Pz"hqӆ6q80Mp%, CjÄ @:Hs_%m 󔱲Q1Sqj``J]TlƷn^8{vǽNSd 7ƤbL)q^j,@PJh>ZR`u` ͖*'D*Oškn>amnnqs0[+˷/a 2W4 B,t-~gs{x!d"D8p9L4Z>3OLgQFb HQ)hmf9Fa?veL)c#B7>7'Dqk !B)s~bD)=gNGl.|z;FG OwWBnUǴCF8(b2Zqm6"XUQ)4tj##eaFS VP~)KP`DSDZkZz=/#AMY3JeIRdQ(?[5et Mht$o'i" htw.@(`{7WkpLv4]|7}:tĵҶ9S {<ױgc6BDz5=:038KӬ PkJIZջL sL3@J=3;1:G)m|kaSx\&<ώ:4*[?~O<_7ǵA@i=x&j31,Ns"OܾgΕ83z?7~124MwZ]O'˫竢ご, %T'{&M~?LLh{8^=UUYc( E8?T*bu y^ଝc*k!@(e!;FIX'ژv!d 劔xǁ頻dy2ZQ)e{I, _`MwxGOl}OKqgFWNg4tD Cr͐94JmV"z_r8x(i5Bzh8BFqP)M&UU! AW~8g^|hpcǃQ^aPTLST;$Z L7 Bk}{{R=uǜ)K($YU\x dHjk7!xN~ؙmѿGր'j;B:p\8踒j~zG1 I^TB_DX})QOYXYy,3gl/ʩ }Bj dy:˘0*m8cҘ( iύp0 Q1de`(YDaT7{AFOx04Ms?{y/^~div^vݥՙhVN9a g>F GA| |<|8՟ }(Ô?~RB8EyR(2uBZ 0h!xoarmeҭC5WnoT1sh=ltX]sY hQ8,s4h_,ڟ<~>gڭVc ʼn0ZcL(uhy/}k/~m\q%w߻6hؤ)BD+E l&Gٓ]y'{W [TMJ5 m=Y?z_2v8b,E84#41&5L썽b g=pUhu2|5_<8x cBsx2n=A^%ɛFo\"<~`90k:dpJ8Ndwc+RJ+@"667FjQQ \΂/V~"|~RxƏI@gni/W] g8Z/w^YJm0Vc"9x Sk,к$Ño(3'tBx%y-"14Y B!YYc>w}_wgPېS:T3`:< 8֜ѪaPJfqE?g?__lnm0~o"Lzwow88[i40 !Zk9Z^Z(:/gO烯ï1 7U s?g[/ q[ks$,+4ec"Jy3Id pӘV+M[~I$Q輳"k,ex siFYR %4M0ZaQPe3mTQdQ]QLFCNpރ1c!@qH x uSn{gxT5/>{-@A;o=.IBA!\ܞok@ky.B .ә*sşېalEY^e9R+([MgyN)2/sQ]7~"y FIFXFȲ!r1^y՗F~nwk++rMfY!K QP\a'w(;1juLgs>K^u֯>zxn~F7Bn,l!"s+_QUB{tJ0wzUt:(, Q_|:w-ogq!jgY&iz]cQcZkd41jN IYW_}=Ϧh !x8t{6;9:t~_`˺.jl_Y]Ν\FhxGx ܸpt2PF^~w~GW_o|h/"gm-.]ܽ~)Ř!/ztiI+e6qu=!@_%D qdkw1J( H OxcUY)e n'ZYYC?9]TJ<~|08Q'+\ڻX~{|*GdfYB enK)6Z9h3a FΑu/$ sLRBH'>3Ozogs=;'<΋ԙ\ՄDm"Fh)EYC$2F;JI6nMۆZڬi;Dz,\v \j ZaJ΁HpYRʙ"hR1k {gXn&Y #VYqD258 #E(kR L#qv!;cs#G5c,uδ,XH;fBj'@b^YXmGg}ltpӠ"7#7z2’x¤iK/j^_gS8օaZBq$6*(´mqZG2e(bcl$uJE^z!٬r#E18v%üB4Zk.t}? on17jFiJpwl#"cnY%lsskM~?|o}??x.]d,&MS7@}q,INelcM֫o|c|6fBhueU[0M5ʛ^;i3JPMڝ~>*Zk{n$Bk/߹}k}ctag][Ƒ:9i?=9$yVYN_֢* c_DQj^Ãò(ڝ~Fi\Y=|FS΃wꇏʪLh+vh0x|yvw6ܼW-oQQUY4Mcm (DU%)gNM>rN˪fUUup8LfJ B UIq֔LjYuRJ)% #DsQH22kgN F0Nl6/򵫗}nVVYݸ?www{wn2Z3y0北4M[]]Rx8X+h1,lі{s>ܙb|;_g( g!tGp\:# Xgztng5;BˤB3( /ύ1v8BDu(a1*pn 2B(Ax)͜7 :P Nu֎t" adF3F2S㬵Z12(%5py(9ZQ֜.zJvNILm\4nDPc)SB{0qeT*MF(!1zH^y;ryYt0)`V+i34CeK0ş tx@[{`Bh7K7Cι:,FXƜA9Rc#/#,/!M=0qy1(8 `aHPJe^DQ5+ 9 xG9oчx_ݫ|vS"[[[+މpvVD]Esw?(Q p$it/O۩sB9 ׯ_NG 1i!`QA7W0;/Ą$IJSBH#kPDv-Q7ӕVctr:JkvjFoƻL)Ń0MmlgJ{u?.\-gnܼ^\jA1\>IL^7M4L&V+ڳY)JEB#.^UVe߃Td"rcw9д1) Aev?O>89~XdBLkתf(- F(ʓ}Vfumc{s}Z''/]}EfeRJ4v !> ~U{kѤnAgE#x_΋b3 1F'a;U^I v+WW׌5,<⍭ /jJD랆''  gmfR( =Bss0@4W?wG^zhp[Ub@?7B ;>9LJJ`v#r΄ h{iyߥa|p|w0.X C>íu„k<c(a1 °Gkko}uWJE1g2F[i쭽$#p#$B!c᜵y~v޹˜  V:x+"(I'j8Y]OEUcmmnU5ݟkg)A@Jj89e1"(zNU_4'-ަ<_G_utw:#=o'8!!ڦuS{<]wBHFG𺮜u`e,aff=m.n$@'GD(QbAh7Y0$aLjyub sZ!5Pij: C #B <99gaJ(h zFFٓq=@kb 0a8FS>+ 燶4|xj7w8\m^/gνdO[f_,Zy6%M e^qWeM]-’7\ tOyR>8L$]>>[aݽ9րͦs sDa1Fm]f'M]\t 6߻k[ǧǔP}zqR,oi"Υ,?Bj}txD9J N˺T3gIc✫ "DWN !EvCh(%a(bY1"M(cA N&3LYJUhZSF8yqm mkWfX5a|rrkr{wv㓃ݽi+5 wvv?c B!H)u@/;1&9pz !oXmt@hXN8Bic8 Z7,X IeΤVSՋV7'Q,b<4=!:`Oj,&8K@#@P)EU4z&qR!F0`L":`M` aa཯(1BrKvC8_NgJs"bJpy9B]ʲbnsF4clYTAZ<+8&§O0b< ' Q|||x{qY蜯qa- E.֭V6$a<Ĕy,30x/]Ż?wy>|?NAt:V;M[ O֋FSMvhiBRʴ'Zwg‡;e8 XuUUNȧ"k{v;Gs_[e97M!ZF @鼃 0ƌ %KgFk3G9g6fl8ww=7M&Y7xϿ8<||'֏ݻ˯t_ꓭ瀔:Ϧ/>|9ıPB8뭳{z#Eԓ,ng6?W(Q}}Hd[Pjy98ۙڹ ka9i}1Ǒ3ʦ ;˖ Oo~j7a2I8=)g )18clcƞIo0PH H4@#C-b =+ ~LҠр(JI쌖`1b ; QB;"8Q(B[9( -ޖi`mz Bah=D!8 倖fC1Ŕk)GR*2&!fa][ XHe`gc ?Ju.J2!4,Тx!FR %aYi]<ٴ|B,5EW16g/ʡ+PN!4/04!4)e˼&x0 ֮_{iVԏ>en֘Y˲hwvUL0Jlf#HX@)J7z~4v{hJiuU̦vkkx,˪Jj=i_VWWkJ(+"5aVT٬(1Bt0M#a!tao+<@β4myz:9CizW;}!ꀱ( GimqmBRGجڎU}5ln}{_/cZg 3V{oֳɈQ6_1/~杳R_{i0ܿ'O޽w0 7WCV !u㣋^+㢝p(tU:<#tZ)( ƘT:K*!x4<][_R Bi^wl6Vq[Y9>>JSU0Fsh c<RA՘Pf{0eJ (Gm#%*K]U71I߹s{Epd_2/c[- KAOgJʠR*iaA^O>AUu  .|6Q-W)afٙӀ"|]XY+-0s2oyai |2yN%7k-?? &ˆQ:GT-sNH4Zi̧CpO1?c8.lhjm,2JV{cx*kQ1'Re(y8 ϲjZ |P4axagkߛLf(n2)!9J5+5+ qfzJ,drՍov AQ&()ђuO?`[!eRb;a'섎orN=lu𽪪vΟ}};y[n7M tW~b|x4$qBJ1Fqmo޼o;y4PvpGiQaB\z;?xT5>4&!ey|ES2Oo~{9,w,NvnB`X>C]#])Zၧ-mv:&Kq V&#.8(^:p|,j[<'S#F(Rw(!֦n[wP;x8PT A0R.ڇޤ,+m)dp\@l@jc'H9 M#s6㪹7-Jsws K孇Bhs}Y1F60Fp&5xHBNeU'-O.rޓMfv%bKS^iRV56MPgY&Qt{E)e7mTyg+x fj1;EY[{3 \Mp❛ד43?x|Hbִ 3b7H<-l6+Ҽst2>:|d2)ų>o~ ]{׳T{w[1M'EbmmgnU-67W !}$L%`4uhc1Bs7߿gi HIFa D!x@gܹs80{0x{%h Ą, _f/g`8z+?Z]|`ow"R(im΅iCqP& BB8Y ʻc$cjV `(%J/ rTɐI8Փ=tBh,qb@BHwr>~%ҀsZ?"=tG`s؎/ Q )8 *0Wr@!DNe$KSXk-Հ L .xJBbdV p&j7kNiJYIG(Y0B-nQFB7MDlaQZ+65^aڂQL!!wljc ±@1juU v֔SI$S-'ei)Ɍ9"5c $.?iLy0ܟzQ"BkM0UcC06zh43ᬱΟ;T 4 :gˢ4ZSCIU ֹ`0V (Zɏ?iB`Ɠ$j[4Iڴr2ٿ{r GsW*l}e?j{pY DZAwv7| /,bkscا矹}ܻ{lJ&ZkJ dqx &NG"¼Z8Ν;[VcT@0cQZ5PD"" k\Y]%6."rG|:nteu+c֚q2fEѴKc$nޘN&?|mK/_t2޻{[˙x_>ؽr>{u1?tZ3 nsݻs`J&a#_pu|th% yALgRj4Xj-R>aw|v`LZ)uEԬ}j"\^=6k`\ҙ9Hry OO;u7)D>8C&&1k ^PpK)ZJ)E(Yil-E4Cc`O cDZa (Z_[>xBcAC!?~fQ4OJi#JcUuݭYY:"S~i]W/ c sZH4;iC[?K"Rl~][[k"cãIYxgz<'ܹ30k UA j ֯iU;㺩ć~F8QTp}ݽ;5euﳇ/{C(i/OTZiJtZH!X(Q,ͻ{uf{[[g.\MӶM5_z[7Ο?w+yp…?xp{wxQ @յ[:/ !!g-ć 0B^Vx*嫷os!A(1n <@c6T,#ehKM9޼q-a ay2AMlQY6|ྲ26˲re<]6?$\rm~?h&m;oSZRRF)c~0>:"0BEMۆ_:ӭbw'pr JK܉_%NvfZK*R备r cL){!'{!/gpCOFѓ?r$K=HXpgcbBH FA3`hSB1cжe+Mc _)5.ʦDT;YF[cu\DqXa.x0B<#H!b>8x {o=AX*3׾@z }p@<0$<ǺQB!D C9CB(x$NeU !\WGFO] }I"<1eS'Dc)RΣ1'eXq*v˷S ƓJB"BȌǒޏy*jqmU@k%F)eMg^=k"կ$Ucu#Z__}O*a̢$Jon(ARMSJ;<$"DӪtZV5$tZ2Fu+a6VtZ9#8 ,Ehyf=mS}ZoFc8.e.G#Bi&\DQ[[?)cohŻz(ٷ?v_>8 8!λ(GhDcSSc` (PճI&I3ڇ1|Sqet˲릑*o(`LxB^i&qEGaZbQE3<"5`@Z/1QB U-! F> LkZs:5 `󢴀2ʀgaQ!%z@kCP-B8IcB{.Ţ,˺$4L(|Q !&`V菫>Pq1!3<.8̪YLD(8:uIIϜe gٯvGPVJ sct8S@ݛE1'i?ic#cySd|(gNg󦩣$ ?x`k{t2ٍ9/{4@ayEgPm!񮥐V!ߺw?IՕ yP)(Mx)kkuYlllKN?~O߿pµ7vbeeXի>G\jcᰟgqh<ܪb1_{y(qJ+`0ͧs%9)X_qdc }i_.h8A67۷oo};o|}Z^[YZ?9s^)GQ$ԅ$~KWxƍ39S81Zs.{,ZpPmTgǓŭe)8cƌ6eӴ`TD4KF@ "&q׫!8BPbB$ B"b0B ljx.miBe}|@ljX DcDaB0J!~?!w2 !Q"9]*k-AhJ iҘU^,Jx:yv(n#-vBUO]]б;ǖOC~&~ŌƲ-U]IWn'cvy!`Ef!Q4!ʈM," I?eIgUәs6*a:9y>""X6IҢ,7ץ7m1Hi1?w'+Ѱesa zc6l<14=8lijIb qVQfG{{ͻwn;{o~g@ 8?xx?@l. Zky gT!8/fԇ(%R|~8 ~/l&SfsjEm&*7` n\YE6?:<|Qhm4U3H~?/~%ÇhC$>Zb^gmmoogلaLX ے;O09gimH#2BoCpZ!τR1mU֐lWZK)`4L7{~ooU:68B`Z%q+ge ꚋ8M&4\ /|y}3;oy/9{>k>y嗋gΜi&xt[)Bm,sFk&Xʲx!倀1>%NşS'xYr9J|QHv\cҶm=9lO}䧌ya 8CLpZk+e, -|MoϗEoEI|ʕjϲ֧m9(OG!%e l[42xG0(I|a[,'¿K]?᧟OƓ|r%B! oy)q`<~nRƓ/2aYr!9{!kkՕp (\օu`OOI Q󣹵IƥR`R 5m+kAc<>:MclVk;_13hcR F}}9/18ٝokU+C/J`w~`{7#Ӵ!K\$fc\T#ZM"B`Y?xxxpx49geD$˪BdDO(rMm!blkQ`1β)-j<Ώ&/?K)}`g^ IDAT/^,fDjmhU"E[Ahq&Ql)ƳY9a8SB,Kwygy[+= p)%)UӴbssÏ>[gh8"Fz;>:S7M+m?s.%(Lu.4e! cVgPJ1GYJys)?^}@w1ƾ~dH^7xδYˇUmLb! !I,p]_[] GH$#"HjwLPʮ/x~kV2@8jB:t^$I]3ϜK~ !뜒 #J?/i=wBWϘ( AHČN&Q#M]2Jnjet2u6v)f;gG}ig,!HXYV)x"qkmBG[8KĉW?~ܯa"q́4Ӟv_d9kRM|^Uuub6yC1yB]B'[jYY`D8W$ywp8-sːP%AhU.l|v4$1( Ѭ,dAʖqjJ43mXkɂz2-Z몖9,CRyc7Dc@E u)de*~"Ʉl/ܧPdK B8#JĻ 8$RUm WFڪJ2h뺩JR"do69 * `UkwxH1q! :`fyvW}BNSpF|> s L8?\V3;ms0߿xioƹiƴ޽p+/gW|vc;h>Z> 7n\/Ww="Yw讜5{ Ϟ}ΝC7$huJaTڙ0[뫫AGR6I-ۣQr<>:L&SxXڧI">g`8Z_+WϞPS !hmbPJJt۷?jk`Y7~m K;kblʪΜ9C"D۟769l6$ zJ겪`I{`cN Љ89i3FC< F+Ii- !@ hcfj$Q\V L@NDŽeZ[VUSZݽZk@Bu߻%:zQܹ?K/]qY?&iETZkۙWŢw"(@%8I}c }$SNLȎ G_ok_!Ľ<]w !X:€HKq! $<)iL! XC6|>XE\PJ 2XJI2\/JuqQ-dЋ@c(8$b;NHRh.@ !8!B(+`,Mbcl]Xq-c DD4Z RM@8Pvꗿ<!&:w$QiT-}QYB_ u8FL#)!4K3Vc10WeEiFc,eݶ i2,G{ bns!R!iދdeoehheu-KX,¨(kuhN@E@YOt|><< ?p0N.]ڝ;{nE1oKϽ&Qd{x41Ydi"`BV6GGQQa:?{z㝗X Yb1{)JM)z {*UU={nmmm<'I6Z]qc\)im C|o\(ֲb(Q°zC!A(:Ad%olɦKu)u@뺲B(!F*-4K,.]Dݻw`$)ƴi3欍S1Z^y۷nHgHzAUZ)W4_Dɕ?tuc]whM+ػV֚,͔p8MCbn)!B'_#]XJ*OOROO*l4C}?y' 4 '"2>ytr6#(S҂ w{=@i,@i!  1I ">-@sN4aJ"Xi)q9Dcwv%EJ0"4M1h4X]_[IgFa&!TֶZ P^?8"-j=Z[\ۻYVb1GBXFj,˞yM&ٶ:1S֨i\PLh]No;3c̩wu(AѭΗ{~" F3et1vqS־dlV槄N0j,Bɧ8qNs!tJ)U+e$QA`{l7\/8NU:h4rel_(ҺQΙwy!dYtnY1c(h]VRBĢQhoQJc%3Ngs10O"!&{/ v `xۦmZa|u 8c\pk bܴi {Z^_+PSbK+s~nn}GZI//}NWd^ñ%8YYcp.8G̦BC$XH&[|/K"Ik$a*F>XeQڕW_~wܼq-Mӣm4G퟽Yote‹ɶ,V D\G?׿s'O_x|hY ATI9k kΘ1Fi0{ –e27)@_}jd<^ܚ?Ɠҕ+޸|R{=|xbQ4m㌥I2RhE!dk0FVF7ohv?:x?͒8ٹgwn uΙ3ubBg~/U޵!X(eh1D a!0F]h1dԕqzǟt}%.5SPjWO7#K{r3Kޕ;juW-'F~ysﷀ('AЉ퉫Q4VF) |B RRk 0|*,4!1$&smm9A0 82)Jn,e`!0%aS Ɗq10) i1XRqX 2Bx2AbT B9B Dxxa͏*PJkkXkZ{nZ,:a̝rn~EZWLq58yZ>EeYVR/*]!EVpy>=YtPk]+ҏyUlqWT=ֺZWJYQ(eiڜ8c`7@QibhԤeY:.a(0ш E9J8 PF t$!Α16MSJp2IFCJ t]CQVQB)Fif\uz9I/tm~y`4 '$kLv&ոޖ&naR*0,'绮;Q|B+VGd2k-`L(JǏ,r 𥗯e&TR껎"77M O77?GGF)%IR-1͋`b7J( %AkZ-\=}FgccA)h0c2L ~hu˼@˲Z0/.8`dyT9LƎ㌆frg7mmmٿSFCL0Wp<,ť(./˪V_%˨ۨNDq1I!0BJιRKm VH;!tqqq!&+^ԁ0:k[[A,ʼȭiEyd21JםeG4RV!-Qk ƀ+/]'fcm};'^{O8/fYIPJ%Jk+eTR%4#tFWAg,KZI J1iif~`91KH)+YA񢃍Rz:,Lؤ|~P+E3fZiZkJ#A{Cc&j421Jk>u%;a?p\lsGC\%RB*JKJqnraZ(Q(qfJ3AH^05J@R5,F* $VzvR !A"R} \22)D-lzz5'AuyQPBF & !TiJ-|LkZ%'^_U~},a7M+"H!fzܒ|J(iBV ͹FkP;RtK)a(-`8kB`MD{FYR%`0$|+}!Z9L5inPgg"vw:nwD͍ x;;{{{O- 6 zxɰj՚ͺ PX0?tSX`ރΜY-w* b٨ŵnP%z1F(>{O?nȥ=YZկqZ7/F۽~7 ŕ$MD*h4*K^aLӴ՚o/ޏ@!cˋaaSgtGh8 (,sEG_}-rX:aeY( }BfY q=/+W.ݽs7~]ܼ++6i/^8{…y7ad}d2( E\puQXF$O B (P( l!"#kyX!*rsqhFx2U$qZf,/lc{󓛟8R/fyZKI:{fm`T:έ{w߻˥\]]RuXmcF}:K }P },`Xc! FcN^ 0 È,ϵPk1u46ɋ `V(e pǓ0 E>`!L>Jxc* 5@Z[aPiuc.cAkTJ k17R c40^9BR4LR FP{4#nTr_ 7s;M gm65:'4g O1'3rpyż,ZTۭ@k BaQY&"#=w(Vk1b于a<á@AK)( u<YFKZ. ѓǓDBp>Aѝ=F.^- @U\&~K! O=~{^\Xr\XdΊ" Zy4Kr)Js-)A%,t2 J.!"KgΤYV=t]Z+c,u!mLŵ~X`8--.`ҘLiY^J'Zeb\q&ɕ+/;9oV._"w~{~ޜ{+JQ/1 A@$2BFVImH*eS󶺳5S/y2^a}x*__ &{X#ksUvF<˫nԬC( XPeJJ+]1ʟ!MEZyR!8}ǡA5bdZhɱAC\aTo 'E lԄPLT!H k0cyQJ9-!D`,Zcc/9uX^cr@yjF Ƙ5d\hc9㤔Rj`Oqwc\E*=8a4.!' V^l2jRW2kU>mVr'`?;N3j<"a0y1d<ݒ$IB !dsFQ c DkDZ8W.A cNO$/KeDXGy%˧kxu BZkA?N_h8ezg `r. ^{q"DF0-"<%8"X*s;Vkkъ2vttuW9 Zc sW.\ [5Ç1/^$pWWOa~Gz#>{|^!f"hͺﱹFu]p-yɳv{B`AQq=*RJah|9ۯ5[ aQ C uhfkFJ,KWϬݹ}^jGR BȻc0EYV&_7w=+)RRc$#aFYx?~RׅYH%F&@9dy~P9Di ,i4J(6Ǐ!!Rq8Fi^fBqEY\{+{O4u0\x<_yAo߻.^zKZ= ?دΝѻh B`1FyɭZ.$DzӅj wJn^9H?a5<&})o/ ~.imN`bO*~ճAPiLfP9UTkS+SRR*LA!)!RB {Aܴ)Zq01 ABrn"ť8 i0@ #0Q `J! .$5(O҂ )@*U5;c$ɴў*8B(J0u̮ :J+qe!(X "$IAl<| B?]4 50-/0ƦBS<1́O*T B՚Ϭcq8c Fpuv2j-[ xx`8xAxji~㽣Oo5M _}/vww}?X>u 뺁򕅹Oܾd7(1YG FY^nlnaLWO e\3ÃdVQ5K^GTǁǒe+ xQV{ !Q-.-uzo]tioo'x6@+ivwkh<a|V) j8:h\p5(\b-XZZ?jm ǓN1q#ӸVGY!;*zzM2͋T AK)q(,ĩB8=~A"VpssMhF%Zl,`r.Z8?8<,r4PYVuaѴ41%iU"0kc^ z[(c FXJIQ[ 9d< ak8Iy}@iN&Mn^Q\ /_r s°jz=҆Px&c CsB粲T%ZI5>0 ڦiϗ1kM?Ȃg?Sq"A=NMJS{iBl ﹮  6P!x6FkJR eY cW#Hś,R>%(R*rrT"AF#$JM h:, CH)駅1, p8*21S݆Sr9wqZBzBE9?W'i20R )BJd2O]l 8<'l*p~%ak?gU-5NjONVl͚՚`J=Nyv+M/8ChR$H;-6hb\S Vnkn!"2YEZsAՂr ,,!8`~#xp,p4RDqGOj|[+-BM4 9<:w]Y87l$;+~;}fwq0 F`ob!ؐf-`OJ ^sGk ƭOo֢Pw4M }ZU\կu8I'W_yOwh|woӟ||<|p؏'a[O>MFز8 cdܟoC 537o}Ou:;vR"+8B(Pd<~n_7zץKAg48J8R՜,he|܅F=~paJhf!JAͷ[ͭm (z^Y9W,K0^d0k c4 TZK;=FVvvN>}QTJ4M"%q0 Rd2??]jq{`Ȋ9?uv5Q\s(Fhyu>}Ƨ>ɲ # zr 7:.#=ʊBRp 0(]a,SHb+  !,,ϭd*ih R# \\$I*{O *8xPFs )`}Y]>e%B ®1FJi5c eTRicTRu<¹@,.$I(%s`-B,yIY+BE,BTuGWY;xlJ\AJ1ٶBfv&SB' ^=CգVm@W*DXQg3K'5Jwkq\n@|J\h4#bSJ!`iz\=#!e&RHFY0e()L&ܼEQi `hΘ,.%Al)s1eFǏN&Z}v{qum#BNzFǮOi &B4mz|֧Q`~32wRsZp)EDI2~͵şϬo888W}zp8N'\b^tݽ?7WV>o}˒P-..y;Nwfed2#j56ֻCO>|K'2ߞwgw8]͛o\`m ۭh<Z"dK.J{bw-ƨ 'Z))ED :$y77wk;GN;w'_L'9@ըieeYe/,k }'.,Gv= x7.3gGTrk}$8 V﹖KkEF jsK0!Xuic`ع->{xFei,עJTFƂ B"f9B`HѸl/,X}S4|Gxvk1*:FT7 %c,Ř8w B@<ף`cA-4J R<!A~؞sݸh/-(ea,_XhZ]H#d<~vZ59Q# Dz91Rr<>qkíyBW=wիWrs<8~4u@) TRr!tz{"`" 0IgzѣzW5ʲ _^B 4F٨cY6a Οhoݟ d8ۿZkԾy\~(;jU_ 0¥]Ң(ad<.B+olnyV)={~1ݵͭ,(+9w(ɋWΣG_K|O^{[+毾O?w n.x:ɍ:.`0^JUHBb- sVO=JPYs :8:gwc sJCxZᣝZfpУ`0}EYh4$D$]8:7Fg8^}kk^ŷg/]^+?/\-$ %2Ӧs v,F%EI)#(e|6ln*/5/JUiTk|i9ė(%fvь?uYuUB{oԌ ~&$ Xb\ !=^O0JkB%֒ R !(2˳*ǼCk!P10Fy(sigyiF^ |1͵LV{c55O:/Qo4'Z2Z)qk[kˋ J@H~Fs DzJC)s1BZjeRZ*1e/9?A~?ޙg'ЧbV<r1"gJP΋ȥPu1fe):h4.*AY#3czZʬQ`QpBF:ab\,O-5n7Ks2&˳x e)Jqa,<QZ IDATRGǃp2J:Ex00)rnƵZE6ַ?wI&7~? Gܰ/ %)"3rThucxNG鬜:]Y֘$㵵QwFOzq~{Յbkq\ǣ8NYd>a-Ȋh}/jϷ{G:kA:Fxŵ4)YV#F $ZBX\ )J%Fp8 wXZ鬭WWJW_y5LƓIaQ~Ekc˗.GAݻ}q}Bpja0R"jIv]wyii<aV} +7+ ]Ck]}QS />O3+$W2fvD9ְ_lP.Mf#\ F c0sZ+0,a^aTT‹Mc=iM)}%XSyOWb,Xh%MPj(ʌsska%B6/B/4K<+{U⑕Ƀ9]ROWh`}Al؊G+Y-x\R=Y ^ ~:У幀E.XgEnM K t]"亮0J(c1 !)% 1EcAʈ9nJj48ke{֧^ty0i{'Nwh Hĝ͖d{fʒ-Olg*TRd*L3I%v4ȋ$/,RW bߺサ=?F)Y5yt;l+|Et2Aη^G+K+yIQSFBSQXkej! !")%!<~ᲪB* BdbkZ%`^,4w=j߹}Z9D6DEYԥUџ<7zKZ{Vsȑ9~ǯ\=׿v?xB3]v%Ң,-J)&q %2QRϹaZ1,a#FIavHًMm|(фFJa|ALt?iDwuMHyrMX'[i۝ !v`bݞIѡh<8ۭp$4bMuQA^iiA)"(v7 D#ccQ2APHuu Z!Q B_Qg%*4/ 4,U]LRHMB_)(5a hxBY3I0Ab!i]ƐR"VU`BTZeު:ߵ}0aجy 4B<ݿzDn0`i`p|BxR6< WδbLY-(!ǒ0l`d( EQb=Z! ]QB`:QʘK&y15xee5/Jse[-$c! (ʢ!Ƅs.$OANkΫ$vc3qcORV@#?BgckW.Ay~btxH9;t{<q\'2?xV5՟^ Տ7ۿ>v8Oƚ*0(BuN>~?G]3n|kkkm}N~~q255oiSOgy+__wȃK(㩩G.9tfYݺ8z*R tԙ ^?:^\YLojk}CyswC%I+`T/ qgnSp"LZX~YR)FIhQ* !z-??vu1a9uqD h :F!Xj- FEly]ommiѣs^k?y{ߥizh8RDQ,Don;B4&".$&陙;Q*- TX kwP`;MɁ aدd\+ZcFh%ܾ~0Y]5= ]\h6DׁۯLi}m%]ct9sq%cR`͋`vrP0. PZ]}OF 1cJ6\"XCV*e5FcFiդ7w CGa+1u]{1K j#03aTԥRK`xPJ[U-%4C!$4% [Ņy#ǧiUU5^EͫkBHYUUoVUUUj\EQrnwBo2i뺮Xes/\ƽ eyr5Z˹nܜ2J$2Z~qP] #^X<"\@ 5Vי͊h 5Fkch4=0PR :Xht$R%N e< "cJ$BH/S\x45=778 -1wzV{o:#7 mgHM^ojjfJjƜ=ofzvcTonnVI̳_Tu:aLM&t0bL{Q&QVu=3,.b4 K}8yO|zc}msKAԩ*+JlUw#FB)՜ yY 1fWu5Jk0 (@޽sGOW R!Ydc6=}̙&'QXZUՔ9BqZsm )m #~Nee]]]„yA1wF^?ntaă<eY}~}yiqz^"?V]ʲN^Zcy~($9jwuYU*N DRBp%đ#DzlB(M/|q8>=1EKQon?g;aQe.L8ǣ$ǀs(M&iUJs]aBLhg' } [dfQJB62ͭ׾;W0 %ą M'L%A` 05Bpl- ,OsDMbWp)PuTL&UuǡAVk-B n<]'nV>7Gxku]c& !#8 qֈ@וXրkQPVxg8PTJ!48Zc)%(J\ &#aH*ZekBn}qyQGA6ka\O EU&\^l梒BIi vZʆj ,%D*)mu 8ZHF "{(6b,˜HB qkU]Ygff!Wimm,ݺqc߸y-?-#?ŏ\q0̅jkgk; mIs mOJz!ۛ:~뷆;ӧwcO 70X/aСg?wg1"0qVu}ԩS7_{_ $~cHwks]qV "ƀ۷nUk{hffݛq8,51( ?^8tkyQba)'?BUNu7~*qׯ;+3ϝ;~c[?6,y.}0 IDAT T5LX /iU wZXQ{.2\B4B \UnQIAa mV2 Vu tCkmBHx_]R<`7Ԇ1 D`fE*Z{sBIUIZ:Bxmc;/Ka$(e DsЁM! E ~U$-<.hRKE<,}rɀh Zg)xWyR%r!AIHXK4ƽՍ~kNq]nonm&I˲tskVu=ɤR Qi>,?!m:NVz 1;Xzo•A+hl'夬s8r_].cpZ;vNƍZ H@N=:NO>g{_G0vFׯ][[So?:~[o^U7Fg%]rﷻ0tz> JZ{Nup!wWqLOMI3IϞ~zTuyzK/oPF߻T: >&hgblv]Kڬ(\FQTfe!L꺺lk6CL9%WOrNȃ6LP46Y_FY!wi[8ą NŸ1=a{Zr!Hr`8J"~??k#7~ !<8؈OGC{wZO(q\Ȳ|367оn\5D0 9zs FB9ژI/n%R*Jq$ITHB\P64.uC-he6BH!֪j!R6 FzSrOI7i1J)D BT9&/ yJȲ.4ljnVtf[SxMޯg 09]&C#=1FmJ^`&vL&{L)3JX~FQL0-k Z@Ҽvjjf&LVGJZ#7 i!i8=3er<'N)&$r ۃzgԍHfNpޚrtvzS\$ Dn^=67?/6Y>~7_V =ϿUPwRwx-V^x V4ˋBcVex˗OZ_[X_)" |-,6Zܼya`꽕V=0ks |Ki:Pqnv;|\JʋRk;3s33]Q77\zכsW(hh#oZs{uu% aO'i,/ΧYaY N,fY^ocW.-:Rloe-=5=7;35;;ݟsVddB)!`s„`B10ǭx-bjfn,K F1WI\u]h]Wwv飏c/noonmn8onQB'I<ץO׷{ BwU]ce:g}xvC#Ǯ\ =q_dzX `YZ+D2,jh-a16IQv9ESV 0M>J mSOCB҆0>RE,|E0+b}n_q 1-rM@{(}^X} DB.l %0C ,ʽIea} [6V!Rf|0l3FC;x?ɳg՟-|K[O>ԕ+67טÔT²ʫm(R)=5]{BҜP:RpR[k1BEY60^%D k2Zu㮰n栔jB{J5 1c<9$X&o$?Fs/06fspk$ܨaqJ s\J]a` U02'FJaiRqJ1Rƪ"À21 FF);IS1AQ+`wnOvfyDS,/VW0pUJM&B01JJ'pe [SuSm uGXdCX̉֞yeMYuU'pg]?f~ F*,{NpXV"ٙ鍍4?\[>(Z A(#Fp?KaoZr0ۃ,_kO( &QYFxa.ϳӧ=~33Sw~R=`]w9VϜ~筷77_+[[w0 :l $p܊ۛcՋa.]i'[ۙ&\URIM0:q{.|?8q;/ݏ6i%[[[ssW/\ԩS'Vs _oX {ݎTuwnݸ/_׾hgmuӧY1bʝ,xi'eYQd͋*+aIeِcZEY`"? 7$/N]s`!DhAqy^,3[?ޟ_YVl 6_PU(vѹJcL+pIQ1j~ 02P( #kڽ۟ҼiLϬ )1k_aQTvS$˪%g#x-@YUyUEEFB5O*fvAIS>C{!6yTtߥd& SX`c#.wāgR aʨJJ3FBBEF)&m2lUeUռ橘S1q]PLj_Usw5akmkh3;3`R̹RRBzs4+m-vV)(3XltMR alm6mQTZ)8?R*t+Ȕ*Xò <.x$*+({qKJIP݅@qumi{*B5uac !"!ڈVeJHJcH3RQJ#3& Hy!Jk%@{n&Ef%&0au]'Fu$<<ޚvN&nW"L"2OMt棫+eU278qDl0wޚUuTM0yi!pn~~k{c<zV 1I3՟RonnEs/.#_5 ο|x(y}sᢨn_\\ؓت,=/b\pG/\Zϋ<QN:ʋAeIWu5dJxqpfR \Zp%w]J"Wki /`{.P+3q0N"yE_?ܿ?[` !AI^@ 4!Yh<9rp*k555幎DwYϞ}rfz#EuWn.]FW^_X6VUezZK9@hJ%JUeA˲fV}DXc58a 6f> zR8Gn lVO׈ĵ>Ljt_>Z={BRV5/*UY|C5#,+˪ʳ,k|_ " kJƌs3Sz8nM&uN-z[e^caLe$I Ѯa|nck,X 06& Rkj^v|8 @>ڣ|uwnRU E Rz@%\+eQ(p}m '5Z[ckMqr>ki)K\  Q+sRNǃac52a)ea%.*60NM1Ah-PJ9 ^G!&TCLky꒲ȹe-E,==lH: sSU 'jq[[<7%I;r]Ï>mWuii}8 Rnn`F۝d񓧶67=/d>sq\ 3]\=Ky O?ٟ]__G߻s/'NkcNWb ܸy3>zo# Y $Q{s'J- !lx湗y-z1|BGI)q IDATgbx7%~bֲ~k_ƶkU|ٵhr^v*d$u~SʓϹvZ[qvmon~񕯞.Hffǎ?rjKӻj,.ţwn|9.ɓw~+)x]9VOEU~'UYL!bj<3;`#ˇO>~,X*XJ#!(nNMRpyŵ֢9*5PJ UWZeQY.k$)uUV iS5-R) B0(K)$ ¤A "x˹JQBFGk !0 )}2Ď?aMoT44&Nd[4УּH39Қ5԰6p `W7o^x=DV"+n4""N?8Y`5Z%Y>N3a!BJT_gS'5dQ)ۿ:PɃ'+SOnߞqxT['kmԪJ)N)0Fi繳!495;3=a^ެ$Mc9<^y ))!q%UiQNz)՞|\ 2kӪxqYVӁB/^xa7ۓk+*t SqjW{oٳ? ؝=<'n7޺Fs,KVqn:QZ1Jj>Fd<ʲLkU坌?t(q2TsUiJ鯋3Q{AF(1?*<*'~5WajPUEH) Z++%1B"Z*!BʢU@)1FB*qQX0FFcaYkYrlG0VJ!3 (j5!l+TH&;6y# 3h1FYh( BASJj !9zI˹L'c|P9GrV z'L&ZKZa){MFZӜs)Kf= (09jk:$48MF CЕ+s4DI)xu>%vc78mo7ןɀv{4]Y]]g67;]q$ni+{W_};8|v!&Q'<`+ʴq*FYttKg!aغ/o[8 4ΝjňNL(F0amf6+4I7ΟGgΟCa" ջk>.+.^z9c /ǣ4Kn߾z~}87B:Fs:K3 S?#+t4(n,#b{?oʽVBĺY|\ ,+bt2z8<^ m-K!1ڣk&`Z!1c\k~g?? LOF} Vb  |gNF^H)g1F% ޺v /.[ƇqܘZYyjVy#Lť=!$!<Zf0VKyG}㴔5l}?>(T5O58NTGf;:x,0 VZ*0V'ΟG >68U=VH^N=1(##(A!Y3ƔBhgYgzN#; )U:s#QRtc)c1gRbnZ(|ϳօaB )+p#ưS8uJ#ժAd3ZkAn*4"j=7!B"iY!S(J c cF) c3u\C 1_" scǹbS cT3l5Ο{x֨SSx`5 D1h7h?f')rds8e5v-/MAwn8gzۿQ-f n4&2E>=?9jaL(e'ciԃzע$ǣb z[6A[*(05s{{o|nbiL^ݝ?K_"&MA1KK;Rr?l0H)e_{m`+8`?.^ta}\Kq2fPZMaO>ͲR(;cDYEPØG5Z )~{p(_9Ax_ʯ /|GQ j,IX+;Pb~~L^RH{YZ*!j)AZE6BLCXJ=J8I4_N3qt-PSJ3\$Ν?pVo~/paE. zݸ=YqnQ&''{7+ 8o1iB1t0-ZwO0]Y-u,q*ĩDxяxՏ S᫊#c㓏UH% Lm6{+/Xu{ꂫDx̎x#!&PV)7;0FWb R0EYI)g,BٱR*m jbD*(MDkK(BAD֫bP85RnPJ !=ۭɉ0?U)9 2SB耭)ں4Y3UG0~&lՖLړCc,O}Opsc*UrOq T >~ c|?;`eYPJ=3=c aQVRιYj6!xx |Aнw3+RΔA;Zf:NZEQ #;sv9Yјl5zQ8kꇇ^ cc6A;qrvZEq1{j\ogMEެdUhR^o aY ) ) iƘVy@ZIPe|?!eYҐu JU<䝼rhqQ) pr]@3LemiC>r yQE!ZfYQ`3N*䅌yYTaM^h-DBPdŐW~]RL?UǵNON(IXɡISkǃOQu)gRZ>BXkEL)眕J<5c'aBm0~aBQ*PJ!Ԕ0DYfYy /nܬƺ 3RueR)Q H*V`Cc;)q}!!,T8I֨$(Zťn/3N;I2JAÜѳ.={qqvnw{Y:Fdc9*b޿}ՍZMch-Ϝ=J([ V Qb`Rzܤy9(5|,J)ʨƹK.aL767D9hO,/,-]te1/Ͳ^~յg{}v곳s3oߺ~G|(`sviajYo6>^E9,SJsΕJ)Q JHGs rA1-uQ!Z+aǍ(oޖ9}E5qFM, ^kQqB`EiYLMͮNMMlo Vo!91z٥oٙ,K˲s݃6Bqy)SF8% #R\?W?ٸxb9RRpppىv{8kgwi2{깩̙ǣѷզ=ZmL)plk{7Bˋlsc}=B0[9i-QeB`nZƘhgZG(,˛驙8wvW>.-9_\\vWWW4ϲsxx&0/\d$|F֚G,0}o~Q1Xk=LWWVn}y+Egϝ(ݞ(ޝ;#ν^_k%,2/ 8C! VB=8h6Y@VG:BN OS_Q!v{,GSKXc#czsMyŬObNj>V5eV`B X&X<)jͅPJSZ/20jm0ƞT18,|$,EGE)RV. eځ! J A:K)=[cZkBIvuN%`2=5e:wf]H%{ϓSϷq(:@je)}8wXqݼ}g+KJЉpIJQloo ^x镅dv{{o~rޭg{h$!TdQ_\rVoܿ{K3ƚ}7uy[M- h<{pO?ݫϼ'S._ۮkF[#&Ӳ!5Ƙ1Vn'=Q\׌tah4&&)clL)Zz=_"40B(jOƜ&ca k?+DfopvM).A#(+gS3s~ ngp9eKfƭhif1Y%2 L<ȔRIf!Tȼs:0g)!$dE,.,ڽN>XJP)vYZZ'ۭxh9'v'jg6==pZ]ݜnNJ魭ZoʃvCyrΝ lmom*%..{ !q}7?쳛_~+z_|1:|T^aT\o[a&dJsYҿsV٨7+mۭɴ,//qiZ{шRf:rk0 <3ZQꅡ^8LyRZ2T?JԌ ޠ0[{wo'i0adgϝ^ta(4/шr^y]K^eٿgG7Ssk>>cYm("_^:σp{{^l4FQge=PgϜ{qseY$˵RƁv1%1]t~{gࠃ=a膎볧RNƙNaN?6 'o}B>ƗB"N;ucԓS+(GFAgEQTB֢0 | )5#(=)Z4Fg[ueYY89bCg\8BbTCAt8RV8TVl֢8Ѩ68 J(Jc-h)RHDK * vNF1&#GܱS Y8ÎD5n#cɖkh:6~hk1"ܣU}Y׭A@! x,Ae(r{[ۭf3s%eeeW;kkkq-Aٞ&6pEs,E%XJ k{ CYa-JnI:,1Xu(<}L8L4 Eٚ_K8tkċvX3ۨA _H8cˋݽuO?tVjUg!^7! =o4TNLMqsokv-Kv.=<,+\d$D'Zwnccn߾s(DžUEqIR0,__[2%0E=D:侷i5W.{R޻}|p3~?^G?Aeo}sfs}}gKOwt0,j&/evS._hD?~g\ v5qEd儐O>trrr۟^pvo}tbBdEA Dj0 L,<`Z1#hEq# xD2jzZg!D{T]%8Ftn{p<7>hb2kktA!|B'&n{kﯯ1ƿwk%EFJ{\}1gtX3}FKo~ysZ׊ GJPBH1 ڵZ<2|n ~ի1bӃRծ=9uowI0&S ǜ IWDx'uk;)Kr D)S6cB@t1Α8B(R 5 ,pSJ1B(Kk( kEZE1dYy^Zm6y@y̽ZcQJ`0BXQIHJHaRIJ15<(,\Tcg-0b$BTRxB[QねCD@xܸRI:j>~”Ҳ,OdS"DyRӽN_amp1)˒2iP Cyybchc0Rh7BJGZ-g)kI>8YYyq5F+iP3f5 +Mz1Lz}{gjc L\C0JC$q^"O8Z'i^d5&$IK!JK)sQ}NKvPL7>^Ynl2n ۷oYonwEVܹ{_}7m)VZ~(ʲjnm~0  x,,Fk.hfn?yιǜq/%t** #0FY.vw0VZO4FNe9CW lE^ #D10ZK?PRjm+z_ލvk^q_~IY_t?d0{KgFAggg{iqA޽;&g$q?5ZNM/._ :u0w#lW_^{W?sW~g+^yxޠqvw懃[x;%qfJE/Bh1 NBJAu;BT[Yv{eYLQr0?ŧ~G>sϿxmWaky旁A` f[,e7n'&| Tck paaݛ,vv,Njg eQ`N Q8I!pήZџ|Q']%<)ǁIPRN%B1A'OF3FR XWYH#s1.T"J=EGTx5Z'*קSLQ !Zah-=eƣ:![0Fk$8 G1C@%c m/VZ4#&Q@ sXЅ'Qh'4)!0dRJ(x@1*/4mF 6W,I%ȚJ_[WpZ1B߯Jo*9{d^{ N~hQW1c]68 bVLDJ $ ;@3cBTGn-OFT2x2HA΅М3p0R{g0sH~\|'qcʲc־+,Do8S2ZB&L%tJ1 zHJ~G*E`8rQJu @?:GC bwwknf(H`F9F@lllu7K{J94ښ7bq(F~ E! }t;V{bqf6vn]o0doo/R!(W\yxIdww "J B:47?9?317/߹!.H\qYPE:! Yy( Z- c{|k8!ޘoQ Vɽޱ*s#@1P>) SQ(Eց` @R)AW9eI !#L$fsQ|xD0ŒBB0p.BUY$?xR#(xbr8 ca xgo9y Gm !8J cԬEb8%MDž9rk 4嫫1Fmaa{%ɼGaj$d8Y 3׮wݽ)iV~1]?Ԫצ/\SBDQ88;{,RkBؚCfYx`$fsg`,n^MahZX0PEC1Qp@JIx> g0F #'*,oNkk'/; ܿ?54n&>GAlohm>%Gц4h4͍~51pu׿ƗW6_8GAG~%?K!J!Fä2q `sx"~иrp4t7fƘ{yg1RꬫբF{ϨV2 #)rQP*k{g]SL)d~n"gRF־ qsƒdo4)w}^!y^~ׯ9sv(!E6== z]i33;=<Xc`)`|9LNN~^*_%vt|W aEt4 (%A2)FGQĹeVJ BxXJUY6i0O0Pb !QR #ab<+)s"pR- & )R$Ď?aOoWWwu7 9Cr;hZ, %A/ =HB.+%Ct._Ux=DfVV$Bf@č;|F*\Q(3ΰXCD( Ad!gLH;ue8l!dbD=9,,] B՞9謭agADWO!|qmpRiRfх닗_|G/vBpZ0= @Ybm-g*es8Ƥil6,eU8Irc c1@(LfEi*~R:( J1A;`eFk!kmMliiiiJHt}>6bh[A,*ƨs(@Z(VvT셩§O3/oO'an@X3i)'>sݎ"ZVܐ  F,ʊIǍ(j7J6hBLzs4Il6BK,1 2'Y M/l|Ks'~$=3ֳOp87{!*7~߸uܹ}eiȘqiyzїssY~ GG}c-PXU @hJ,-wzs7o<^lO'/^9nEꔐB9Bs ,Eg"FQD0SJ+#Wb trtxܼ!eVbtVdď…V3uJQ4v^Z("!‹&%a&(02&^m4[/_v{ǏeY^F[kQI:0 <SB%s[ͫ7۝.!8 ,:}4E'IH[]RuiV,--WEgfu['|?N$ISFYfk_E|#vS]z-QMu6iFb{{a^ &( }l5P4in]ul->h<<* `~i_ſ Rȼ Ri2EdnIa_XvG![׮8>98/\8tuee4TB=+E +(n]yG|z?n6z+Y( aPBRZ Q#4-ZK cJI¹( 1JJܥ ֘^,ƌ~PƘk[dLDI`khk &PF"E !e!Z!A9B@h:Rf9CPk9Q1FT"$&_۷c)!Zk)e+FX\  )ky>R-bXP(ky5rTHdz :ۗ O/o^^]m:_3;C~8gOmб5Թ #U)궮J`h2F90 Ӵp1FS8B &(j6<1Γ$yip}۳4"k-g4 CLRi]1~ptxT)eꕵ$IōhT\*% tZk\yM &8 pttxbe,+A4Ji.{$ < O(RJIE͞`{g#pJ4c~dzth*hqjϒlA#7/ܾ> G +iRtJJm&:D.a mmhQJJ6N k27ni5{^V[kfAV19 ^c!UfF7 !-m "DJ0d:2\j2I۷ܾ)8??r`?L)sJV??Ex͍+;ŃO?A!SBt,EQs{{Vƌ9`R{/k;;ҟ Ņ=Ӈ K{{/K˫Ajc0κvS!sr%Bonl<{!e$rkV5.r6~]r۸.]i啂"#lR WIL^cxmU9ߥ1ܸ޼K3D 9(g1B9Xi#!HfN l]J(! 6BiLv"eAg-Z,) 9!R*f{8 eZjyB 4!$ QIs$BR֯TDXZ)DcLs `1& DP_R"[r3>dzL5s;m .ks=HḾLnZkTxqi fk% 5w@0ƌtVa"(,b R 4*BFs6Ykuロ`0 c(,R*IYkQy_Y:& ,|O*ё5Φ3ʽwnA|dp~ju^ g3(@ ᅱNtt^<|iY͉Rf gVMC%8?dY1prCS[1"X=(7nvbWww/<s _;ypqv5藿_|TG_|O>{7׿tt)Y\Z>}zpt͕)ChBj: R~a^B*Gj%K3@B8 9sXkpY3yE }qyYVT2(tBQdcl:!NjC)#Ս+ia7?M~&i{{;(piiłq2tV:m111Rz~@g`g x^?$ o%(A;JƧ3yeB#E%d5N%dnl|{s.+B.YW=HJ2BژBz:%N[YkR &Xk }X9˲2b1!`:q X1FmowNTei3=q>j:BA+jJRdy "3JQRJVkSD!"XpcTǜ ecd)~ 0 eh}dZK(5 D;-!RtgJDJiX Äalu41cFp:F D!@|ν$91Za K ec}t\e=/JJZ&a9qonn6LF( u{J BT#L )" εP,Iӟ|2_9&{t&FJ$=/10 XZ^{RJWҬ7Jn|#Π@*[)uVab3Ɔ\*n&ɠ[7,ngѰN@i(Uvݺ{N:9_Ws, tHi0"XHyi9{<>X];YyN(-Ore%^f~ CɃux5]UшK+/߼qcGhxhfĵkdcs0-=xnG;旆ov_<{ps!Շ?޽$M ׮,>zS 0x LѸ  FQ*lLJFi_k]+ڝesssUY礔EQjwvv⨱ݗJ%IҕH,AuFD7< k뫳BBp*/Wvvyx<;;=hTxGH6C߃rj >>ǞGnمd 4.2Jy~N jE%XWsu,D(c^JȥOF ^DzZ $|qluS}:k9uy=!MwA2yQ Ą`YB"sT'ʊ)Cʒ0`G Dc;[GH B>cR)e !|L03Q2ZkJ*eA $"ݚ<&E4,DJT*ߍB̌Zr(pBHY}msa~d4pj 5XΒ|rN3na=;O=x++sOp)iō>:#k(oLQ\Y~1 O[Lr<03eN-9]BǣzOht2M$ݽ =0IqVKiYRl?{N#4B8OZ ZS *&4p<qv;?O~tt'x·quxl|ڢ4M BSuRʐbt Θ1p0p4=z9T i1Cd[][(BI[]-@Q`d}ոQi`%0RNf|0~ss;RJm~cg\r)@fiaP7o-?M' cfl+ኒ 9ɲ3!hsaќ_b<<67JY2VL @sBH)UM0B ÊJsJi`~~`eus[Xvj:?OOo5xD~p28ۊDeE%WYodTIqۛßB E ,a9Q_Y, 4_^x<FV/_:?y|u8=z!~ݻ[[zrpKm4ã~/~a6AZp3;7oozƍ[èՌ\S|vg˽yqq7J>ivޕ͍gO{*>(ȲtQRZ[0BJVȲIYyah6" %J)q9PVMhmv5:9Tz((Ҳ;Wdi2κfVk۶RB9JI%2! Y̦͸9d @yAd XYY+7\#lGKnwu} _`yykmcTH97ZkȃXk B@FowڝttVBBH0FuƋſB&s?W4_]/qHs9DDMxɤhe0n?AaAB PqbEX`G=8J*pfa1#:vqL)1FU5<PZl6GE`dR*`( cHwJ)9&ӢBc0йSz~9t|݋/;׼DF4gqC}KbV{ȼrru0Fg4Z݀3?0@ !9KYNθq2aIYUX|!*yttc18Ms 0^\\GeU@pR&E0Ԡd6m:nO?/.--o\_$Ipֆa{!(pΔf0F!Adp42J1J@ :K |(:7y{j1ڢy^DR(1(<}<2`B~~{A߼yA: ׮x"n4%jUUaj-=}2N(ee7v~ )eڀ71ӥl &,7F@*iΥ"y8(%qP)U %1r@3@!Zq%rV( ÞyQNu>g p#g '(HBqicIyaFY Dba)$%!uϫ[cQZa)s( 8ہ;8g9ӝW9uًDZZ蜵"^S+ s_?^:9C7K3 zLi #d!Jygo_C :5Z8g1fa%9}[AB1tic:m;04FOo\u, w{nnhymc@)YsZh{>}w^]Y =6ͪ,?y8Ƶ+_ou:h/~4YgƢVWV˲Z #Çbmiyeow~RED$U YY^ <{ާ][[~W1%͈jYJk<V0'1,~%N2^vi0eE ;se׮ݿw޽QEi5ak鳪*zv~wd}}co掠ՌvB;8rZ3FJ0BVsum-ORB ,VsJQ ΋4K8Rzsi22D)JUet8γtɓGi쇜ZfHf dZVBJqťGQXv:rrR`q,ٽ׮~xL @WBs'G'w}xW%" "{,M_' <ܑM}ᛮp}_z7WK%X mDcDZR)%9)FFI)1Ii,@̶be2}Ƙr2aJEiVWU~](VcR BSRC0BƺWvPoaΒN4ђ`|8<::JV 5`9+1Ƨ*pso=1Qa1%qu`0Bje''G'G; f5T*ajx8QI9yDc!䕫W p> yI)dl6~+)dՅ`__$-,3_:GI8[#5=/&/[mB(?k_Ͽyp~a@˝VEO;|y487OCE%|WJh ێBqgn޹}x? / V"]ZZVElAnܼ{tmJss?㿻'|[{qV+ ցFܚ_<9>Zc}6*Ή0Ry`\!psLv_z94b{cg'Z v^9"!zovM/ݥ58ƈ3& !Qrc@/jy sJ@0cc p`dJUB&+ZPY YYH8y^X.6g,A1hU%(\YY,*)%%,OI8|# uH)!,'ǣK/rpwugӳ'OFQ4_d`R q{dj{woyi\CP'I\ί Zqa3 Skjq|co_:]҄`띷dW]ݤpܼ@x597m3 ԡC4!/1XSVbY.3UEY@]]WyQ둶J@P@Bз~=) .@4qƵmS½ƚ,r-b&N88Oa(YcFkJYkZk8s(%j)SeXsάCtnJseO? 4ֶ׳szZy^sC6^`Uz\ᇤN8t@1c [8 ڡ-x,\RJ6BC!VZ͵lpi 1u<u!!M]Aw8wf>v=D0Ѻ8qQ7r<^.gA$uXN9yYu'[C)I~ Vl:)zuΆA 1)qsQJkC(eUCHI(5ZmNwssk2 (:O(/ 0I[ڵMcSBpsu1θ@lsk}o&07׆݇?ݻs(ݴw,mnm޿okg'I)Ⓡ)o}[i_/RZ qz_zo' r Ajtګ=Llr{m4~ob1߻u>9<9[_Oѳ}gO>sg?Nǃ wU20eg//_P|vt-J]%'e!:Jz4N νغn0^. 7M]AȋzEp@[ 2˼m %L)wKM]R;юP륻rhfƨl:Zj:P&$gK/p4Mץd%eb6ol GIZd( b<_^^L'ͭ{ol8k$}c lEQ7{~URk5% R+h㜽N%f:BjYb5+sWWMk#S˥Zuzn8s^_f$_5/ vsBV;FRFH)ZyY1D.}ıp!19 2sW)e ԱJ7x {m Ppn)Fq=&!D+] a,*c鬊VS2VK)VP"+MߠK)k9W Xk7CWYW77F3WFjkA #8cUUjHos<$zO=VAkF:IBB"/ aw>{#0s P!rK޺Ç4>9>Ъ }ѻ@X&X 1;UY\N.|ak1U8IJcH8#nY.shP),ZՊrfF#:! 0(mIoR 낦nsf|$nyYԵ8vJWSCj(Zq$8p`$1 Μs]L0ٻoZ3M&a]Wyγ%p߿{'#K<_+;k|ɢ?t|yq.!m8ѝ>ә3* #9:>tea2)2{l.Sku&Inuޝ>ᣇQݔ/{W_8=1(=:<1ܻe;<:J><++8X_ۛ.qA`YfyaQ!?yRNI@R!EQJ ĝ;w? (Nz'v8hUm=֗{|UMMxՋS}(k~6X甉*=X`O>2&IlJuӍ6a%ăJ֖rg~;߳F>}[@kkeYmFMd֛f-𪮼i'Tͦ?ML?J;q"sIaAHQ7uC>D'M8gM$'M!Bѡs9A$c֘4ak!X#QJ%Z+1(LjmuSk)":V"J, @e J#ƼGqVׁ!P΢0 PZ3k5 8E|}WAi> ^ lԱn0W4+MKrEɸ{zRzUeI\ʦьA[Dʘh{aaRU3Zk WZXd1Yz IDATx籠$g|/_!wEO(ȳq~֭bY;qkk*wtt(e\8IYL,-Oh^4(ΈUU/ :I\7 /v<]_JF{<{DHE겪H.Dp) ˋ%g1;EMg((>ߗR? >|AUE%Iʳ\)g4"z#@ )PJ!V&N(Nvޭ~t<=ѳgUOOvwӣ~; M}>UQu]ik"!gӓRЪiŲۨr+Ε~q)wwoLg|)b|ॽV/ڠWWM0UlVXU ֆq`룍{y׍O{ώ2HxCsyQ޽wO{.OY (y6Uu`0(:Oʼ@˲Y6&<JBۙNN i, G=k]4uFoY7P71FHL@ֶkdT-eLSǑ6& @ʺQ?~4wwo'?~}?;?q>[l4Ju=cL]VnZ;<=;zBQQ o_KG4ZAC!(^ Ey7u~c ۨF96@C)w^-͔Pu6-HⰩyݸ Z$R:CƊR$*!{mSrB8PFAJaЧI͛Zl'C)řO_Uq:vWٔRƅu"D@9O<"Q̋fROo^M#o F vWŀam-t *:n U[(޷2σw( [km_9P!bV&8N"CG BJRRBJy[XaX;;񢪔RQJ) @Iw, qnwm}6򅵪]T]\L~7ә* eEggeZBD*eF+pkkI=b.gyOyERzPBsķh+m)PBc1 B h窪/?~֩-J촮k~6L&^;{>0\QV{h\S֦q0јtJiq,ݝ,gGk4`vyIǟ<̦hm+BՕ=?s @ L(2ON$c8!#ۉ;hm GkEeRPhŝwB 6I0ܞ'!cl6Nԙe4u! elww?ywo~2iҪ c`ܣ8I|?n/}VQ )Àed{4@"@BpBkl̊$^,:D[嬀p!8\Ϋ0h ey'^{_݇,RYQ [M"BjshmNNNOf䤬*Νgdzل ӓi:iNnIcYYUC 4_/GwlYF'M&~Өb$ 0d'EQ'VNr;x1'r1~ xAAnr!/f(!eYS![nGcd  Z(rR2CXu:~O&$LE܍W2 u5!>Ps! $h\Ĝs icsN/("Ơ1= J@ks!' aRV?w+S1mŪǫ%ēwuu=n9q8ЂL[F['pȀsԵ #Yk8\JkWn!xy^MpZkOH EU+csZ-^9[䧧Ĺ8 8ι @(QuӳѰsν>h2͗R ljB2ZEDNXk/Ǔj$mm+E5UƝ_zsʀ*mSO3NI* e6 ##|;I'~x6EQH/ |gK " !'~0PcgUY(ŅRfˬZ,q)Brmgls1Ou?e^)E>ĎY C)PJ{NN&<{#!3G$yQVZꩧU]e= n!p>g3@͍ZaV|V5i6M6<8M;jw-s)c:@ż&g'}bnpq~BIHI)uXNu?vx"oՖYj}ck{U v67&˪Mj E @<IdӻtSno6<;8wdQȫX.$8\e"Rp,/?88xFq-۳:t.8ICY,$I8ըo|w6?_^VJk5?؏;Z0 VXHE(DM+8jQi^ 0ն*Sk.ܝz$WT˾,SAnRn$ތ7/tŃ0 :uXW1B() ZkB!ƶpg,J(BBJ@r)B!D%QRJI))($IPx$":g^G)}BJZ4 q"9 0l; Er΅X y p eU'FҲ#V+S39oտnWj4/,־7pY [vFQx!8cpeB}  ] =m U0ƅģ2Rʫ=+08t2sj9 p8aXmmm[]eH c\0 eUWUU11R*c|wvr8Q᣷o޻jZywQVqONQ5Zc9q,PE^.n(!qztkd:\p.*lnnuSSJw~IVPK]!Rl?rк֟|.[۽J]8\.8ʋ,[r?p!N)m(@]՞[DvϞɾJxDଭYZc-cl:KEH.Y6Կ¤ۻs982:˖[{yI))$d?O)oyY̗InӨeQzЌw_zwvǪ 'W:Z_'g'Y}ɃƓ "Tmo.2_ 8llln?}o[oln*Jx99>6UUoͧ"/;y` ݐsl\8kz`0ul1+RH!ZKSuX7Mtyޯ.<_twrQcte=`{KqotH['bDյxk{2~tx%FޞGk%ħInWq=m :@():{ (ʌ1yqfkk*k);w(hTSk)gs,r[&}hu2-  x8炇A OI+WƝ"2Ƥ_Aow8 XK,bZZQJ){@D .BH_|*`(8NJf 0 7U]j)B[R-%$ B59 ahJoQ\E͕'D mhuJWJY;OPpj8LU18,BΘsH)E1Jh] adiG~ 88k8%Z㺽. kzW4 `g766vv7?CJI; bs,  ]fDs(a1ƢGG8+w۷o}hw1֚(Gkm C c hV 1hC*6Vic \Q-ډPƴ6 X.˱ӁUYDQskdwQ˖VSuO?7DQDVU^]&z)̣7iiǕ>ָ6WE)0.%aLߋ( ʲ 9j8u$Z݀[Xk1c0ύڃq< X'q0Zoz_ټ~G|0N?QHh"HN'%R\8sNHyk1ئQUUik)p l{kN]7Mlxp-[/skt+ {R!-o佧X^OxB8U]tDCRA J7ϣ>wP'O?WMSe(Nnjd\\rh "b7^8s&ko|ӏ?l-sޭO£ltzbRBke1nYQaPA,h R)}N".c,ϲ|J˪:9_R҉SgZQJ`aus~:;r9ow޻( Ǘٳ} ?lGUTw٤.ll.2n8 d:fBӳ۷fNQq`l0gY^׍e9{I 9{6 d&noGlՂ؊^v)ioՀP>ȍ1X5u)\)W55y.U/!36N4ꪖ:ymjm*I]77ꪘ\HȨ3{ !!ZeQy@=X8I?lDX\&(Xk)edAhyȊͷ҅8*4̊wq-߁f׈k`&ueLŨ z_j˰be30X5n:|%-jMK-5^Zc`B^` Z^ !e 1w. hS{'%XK@JrN9'J5Ρc(ͭ㣪c!-SRZguBʲ*!QƣG?y2˲JDυhB8 ÆR!BhmiDF )]:l͟i;X_X`sH2) @Pښ![g4FqP@ d "RƘ8?ﷶvn1: ( $i{֚@Jt*՞vyeygeʲ,(,'G`4vcYgu]-pzJp^l>9g1Ra޽qҩz4X眵( (%F(NO\HJd<omllѫFuww(wp~yi1' iuU'7?MX/ˋӵݪyWA;M]ƚD[d"7msw J]Y}A!PUr'<(Պh+JRRh0 U Ƅh=8_.NqWZiOƗQt:]ySͭO> FN8I0Ti!"hcu=} %<"2"sNN^-A i(is sH$qx[~z>%+쳇JiU]oE3qF!z)lhm9@FQD͖ﭭ۱:k˜#0hжd й2/d 7eF˳ZqU{.NVB$Ip~EMY$;>|rq[[;oyѽwY̝[r|>UM=ӯ&ق#gw w.OF)^h?w\0"{IԈg?ڶI'e٬mٳ7}tHeXʢq爯)w2tǟ1.ƀGnm .|>=Xˇ>z"Dpyy~ˋz:?@$amlnZ =(+pV,8/"N,/1 t8jwX֕e%Bܻ/ ofbWoʏW>J{CX쿒o%D6Ӊk ¨)Ԇ(`'&FW [4F2JEAu(@iRhuacsK&ǺB!'sc@(#xhT5HƴF; Cri'DkB[ (GGO^`njH+\N?w_>>6zBxBSFuVśzZWp g!!QyvR~(CQ`4-(d =㌩FI\ k*N(80N4MZ֡ p׆C" %- %Pg(B0FPDa>,[dZw{o杻8SBpB&ϲ,{!"eνi⫪&8Q!"v]Xc֊Rb̀zOs 뫪2Z;0_!zr𔮭osdLyҫGG4899:::` B>l8@9<|FtbsetÓi(<>: iW\Ҁ"1A(M9J)惘+ocHvo}89zu$1qO qySs^ &S }[[ӧc1zU'H{{W:]FYVLVE߷)r9z w!v[oӵmlq޽}d2ھ6ݍ7yr2ݿ( De/UO&٥x~t맧|5bt2::=:::><>A9s@Cl: Œ<$ˮk &\dƚ|=ǔfJ%ѻ<c?QԴ=\.fө"ژbF|ι~>1^zg,+y'[ۇG;oOU^L'W5${s2YQ!i897Nڦ10ƪB(6 2g0.W8qRiqL֖~vc@sF +Ro>0Fh%M)5&3JCY.)c,J`pMl:sUJTc1y)aj@YBJnRQF1>BH$>3jGU8K(ڜ5Mk덧dJѲ hLJ @6 B ic2Ĵ12:͟nF)I (tHR'YF ߋ]B BcDń+O\0Ni)"% #bT 8:J3ɭNJYe7߼]{BpbLӆcP3.1)%2)%SOfy^7Bɬ6:SS]! pL!ƈ$R-V, JiA3S(]Bףx;cMdvЍk׭Izd͵7^lC__p1"D(+5 /ہt1c͓ϯpN1'RNK%3C!C.PB0)I0dJ8$h=L >|Hh8>"2btEW!URqAA*1A^VZ>k)ȹz H89Y`ĪQF 2.X $]U&x)Bd]t !Ɣbl.8g:Bٔ a]< Z{RJ\cLlCg9Y63nzty/j|"!Dk8yɊ B@!E.01XBs"yI) U #_-WR B(Q}w=bs:3FB۶E)ֻF,%(ʫJ6l9"SBӜ 9黲,FQRkcEYB+''{cwwwǣї,Tӄeyl>_4qJGe`3& ' .\UecDr)2 @t2'J΃Cjդ D;ۅR!NzuoaFѸYYM~[[&%ן@y ~y K!ew{wGB\e7u>հZk{m0M  s1ᅘֱ*l EPHJ{l:vD ym{%6d|Ҷ}QW\MFKm>o՟ɟ,,;:]Ι&ϴqw~=q^_?JybzWu]>mUcwJpRVSgTeR:!F@6ʬ(^# !\ hmZql{{6۬횄qz:;w~a] 0jg^Y8_6AS#FO>nݎW!T{<_{^b(JmtQFV!YBHPSFT#9C!8>:_ {wɳF?XIo}ӧBW1ƋZǟ>~``rg\͢o @0AV__<{x7*|8ۻ~xt]Mv>DDUdj\BhOOwvf[cWc ub|֯;[3aZ^#C)9Xk I{Q۔ޚ>:8⋻LƂj5> %cm5Ȳ|Zb<7kc/6߻!Fw}?ʶ*ѹ'"яcYYV;Jf]1z<͗ FHy|rZ&l%]Ww۞_¿terkc#k4-t-pqUP>A"onNbԧtX7Eg2SPP|@!$)`oBpM[*0*2 X1.m0AL@؜lZ)"qYƲL0M2Bdc%%@)'Py0A9.fMY@/ !DLйþqgy gyi3@k{T۵3?JJ$@uB B5R@$yqMd b&#8>>FdY^sJq$WJ*9ȦSJkjL!ZkѨ{B(:B()Pfy5:! ,"!8c1B餒8&[|Q?|g{{dvPjDB %%TBy 'FUC.T&* [SJP %7ŔN7m 9(%΁,L٤N׭81Qr! g]VŬr:s!ƸX,q:yf[.R_}aJڮM;7zEY:(%n!`$KXцsN)+L)94{{sϲL)irżSRZͣ#՝ŋB^Z5B]j:<=>GP1!x?)k º{WVU<W+ty{_'5w <5>^ ,Ρ1%L)SFc5%4(Vuk~XeEL{BXKJe2%"BA 6r@ C Xky.ӆP*32<^. ӮY. B !vp Rpcږ`"ySʔAe(3K<+ 3sڅd |Jp.0AjEx0onЬr@ot:],We>MR(ABm,!xc ǐ- B eTbkk=b8eb-K ^J|Lr0l4sʚzRҞ̅1*)t}hTkں,'e9.ZX"9ژodX IDAT& c!$u r!@NH%8 ߣe])FA(22BRȪmlk燰 ( ﵉1eJ,Q CJJxZ҇2_vWB{mI翥[Ƹp8% 5mcRd4|yGz\zm!Ҫ')A)j$B⌌G*4 1 o:' {ʚaA]mJpB B L)9c3)dARbP(\]!!1]>({NZjҸvVw栘z>/??>9޼??o7oݺͅEI1ڄB };k>~d6VCB1BY'x2ݻRBp,J*ʘѦzcu9B`C11vywo2BV[OOO3% !xҚis{U0uM 1E !'(EԴtY._ލ &׮V!!W`vmwۧEL7ۻA`]`gf;P2W+&JniXsv㵯~5_dʲ,=glmn\[/]{7Z{Z1xSZԫ@rNr4 )e (mYbcwև`kݰ>Ŕ"):R(bHsZ4Mߵι]=x@[sݺYm6,֭oܼ{J槧֚66xFN;t2޿v/M D&qpp8Fx9Lf 5ZJbϞ> @ lƓMݳgϷ6(Ȋc,roQ/0^x00ۦo{_<gs{o%bʶY}Hpg?{!#x# %2uxp1Nba<#%(gdk<K& FHgmompuϸB_A* sXc!SJkP˰ Ͱ?ߢ1ɴ~8pw WzI)齋!6(nsh-H B1ZUJVsxrZYW( L*Sڶ?\P9g2ZdqO 1.8 IRD]#BPq[{`Bܦdu3,PN)J1_JZXzəsafq`R 8gkZ' S qΤTZwYc)c\3̐) B Lԭ/A"ˡJ!sXJe<)0ct0J@9#a(dG"@j˜lnlǣkv7lלZ )Zp0f7]K!(r5Fb6_,u1De Bh^dBHHi2,}CҦB}E1rbib]L7VXdyvFtB)2D5}ϋȕT'v<]!mu}1($1U5 juƧ Ίяo޼:_GbV΂d _ٻܶm{%i&XdiJk[LaP"Y>0 C<$rPF$6k!ԌLQ UQ}CI${m Lj#I)sBeHmVmN$!S-}HOW#`6cF$ b)vew#{WO?P&qV~?qֻ~gk{kZK1򣏂b/^==9>vNۦnVMo1TU11&@)!RJu-9;8  `9f`9&1 <^'Ã"?*%xdZT/MZl6+QYdY>4>|pxx8NUU-ϟzw.Lnx}ʬr泧nkm98.˲B(|(21ҳ%Dk87/ǯlV7uޯ_YCW/1c7Syлz \ կ !o,! Ş+'{`A8om$)%2ΈP'}e(JC$)"0  H5S1Bw [gY0f0&!<%;) Uq#"3!4m;aM&cΉ\Rqz{\u3 p |N4ByvZ˶:C1O.K$B0&Oe( Z&bbt-B#bBBH1ЀFPB炳 F &sCC@|Lb %(B(GOO}a6fx4L"O?y0L!w ~:Z'c-*˜1B Q 'Em(!1bTcMA4 U5[,އ^p.(AކWM!dQ8`(FEYv]xx1p¬RaMCBȲ$hQ9(^֍5qF C7x2޽r_}lQQ z )x( bާ)>g:><9 4mll[w|s2Ve?L[c~gZ*olhլ[O?L BQ:p4 a{O4ƄS %1B(5Z cJɲB ?ǟXw]9=9tyw2xv 1c[:ۏr812U=}$`j,ͳyg\~\O7X?㓟oͭ;|чJ JIuO>%b:eY(wݸ\._uV>|u{Ji].^uS*"R)W .cZ  .W']0FbeL(F.ƘFURTR캾;fwg_9>xzbRyFg{,5kBtMB}RTH׀*}1hz?yHJA[A E'Ja U20R*.8g)e_?6EYxXKRY?S\c > FĘVwL >s@up yeHL(>x|n)%ch4U8? L0RBCh౭=`y+g, }pa+%0<#e1`̆@߷Y%l2*s91j~\.ֹC06Y5B(ʋU??B!wy:ui 6ZŒ,86eW'~'J%֬,붥T u)EF^p6lDg%Zk鵞LM]UYqeoc!a:k1ڢL2L7sȔ`ujml^[m X&Cw!u!$ͤRR3@D BbӔRk@)΅Ȋs.4Ƭ@} ޽/?ß'?OgϟBloڟ_;y몲89><::Zյs[hSRFbgb!D)K(!Jpt]Sh+F S*U a)]S]>y <ƛ+T'}EYeLX缏1YkuMbda}׶M({w櫯~Z~{ccrxh\x_Տ_<=F!&BlscwFe/?hO?0UXcc/?L1}/nݺU*;Zc3,SmۭV~Hv}^+B,zCF㓣m-ݽf彗JnomF"fh^ _+.ݭk2ș+kWXi{g{o{o6xEz16! J8Rt$DOh1Nm6Ec0%(~͈4fd9QF_׍`1#N0t2)<`uqCCM99c.P"R ZqT )cbq.9AdJ@)109]xAgӹ(|-MqZ"\ot'|p",cLA Ā1ȢRƸt>ێ1V٨%dUm;fɁg Fa!,NSFFe,Vֺlsc6Z{bX,Bv|UUz ·Ns.Fv͍Yuu!FchRX Ƅ$\A\JHg6(E j_#͋hD >|Y1S صkXBU&9cmJ'Eft&e^-"wRBo/韆mE5 $!xcJɠ\ )}b)9JDgVeU!L,V# B" |aHfM!A <4S`dC!( <*J686ryJPV_η{;ޙӋsk)xcsѣGU5;[''ǀ6,x Φ*P7mvð\I0rAC4Z.3!x 2lc}g|1Q~,4vs]d2IbuUWut$H/$$@[d_0H$j̨ T!Y623썸p"$|Ɉ7Ϲ7^{}7@X6]cibZbLʄ1 $#ĝ"FlZ u{{S#Y]/N񛏫>"_?xowNg;{7wJȒ$I)/7Ði"Goxgf67R5Uwչr2K,o޺u IDAT'rTͮh$8[WU9flٹe h(3wt0o!B -Xgrp (xD :=?T$ӯ~_ka<M&כF󝝃G}OOE(];'Yx`>wjsI>9O7`:]tmjl{kOISUdw,ٲBbW^ytcS6i'a4$yrsa8W@䇟SH >shS}"wJȳ4KDHhg|'IHݙz!8"磃 uBfQ&ֺ!_* 4!s^> zS]u>pvZwS@\cB a{X(ʲ9#9c=#>+ C@\+|%}J _H}t8T|xbEC 'bĜ8D!^F# AB1")TICQs1^%fMYQy>7LWͦ9 5rXԌ6zSVaJMԛup1[x8;?;ORUeDyK!|ljTR7@"k8DS7%qcmV$DZ*%(8;bm%R o kJ5&ܘ*LIE1L1j63^>0FR)3J(p `eDuߵND #h1N(8xK!QQdq!Mws)E$eё)"I&J2z7|1TJh#FmkћmZosmxx w(m'gN:O$]> Rr\@,Mx%:g-#zƂօbrvV^kcc J>8BL1hqښ:;NDmst9 M-D8"\f={Ai dC=NWjNA@L~@8cWYtq8"E1BBN)1qhz Ѥ,IymhTeP*1_dLIk7uaޫTrpVsr.rR >BP*V[cZknovP a-F9^"wKw|uHݛg {q~Zm |ӓ3C^Iiu9:2D Z4MHHb E$8L>l?aYx\ܽ{?9_/KBfQ%BYF9J! pB0aHHm[yo #C hR#& Qly/A{s"2ZrȈ1kcnںn8D!BQe)gLH~Rm:XXm:>rL=Hb8lW*ݟ~kg9?=},=Y#gmmt/w+Rf;*80S oᙺKO-W$3\]GũG„kt1"im4G4F#0Yc]a2)B,%PB@D6Z*B95w9elN\(FE^uS7IK5Z,xgRcB}T>\P/-c  $d#>lȈ \cq 51&~#ι? `\"!ĈDK2spA%^k) j"c1!s~>oVIIYy zUU9iΙ^/TBa@Bhlwzr:G\ Rr<>9؎Tkn̘鶀{e#ۣE{k,& 8ޚi'q,˜֙,MrfN1ĩ{xY\g 5Θ|3UE14IJ)cQBgl&f4>:=Gp#8@PuEJIѹ>g%ŨxWyFMozެWgg X]m?yK_޷m:m"Kc}[w1`i9*l{1(EZEN\HZ9RUs޵]1JC(9\|*Ƌ)DNl(1OƺɁ N'"OTضH@(Gsi#D"5@kBsbi%|!l}PIz޽ݽlrֽo|[K/htXכ>`8*Ĩ~gg Ώ9>z0BdZl0ۻ|\ >'LVJr\ g!SֺZY6LuAt;{\{ދ]:.'GG/7wY1~yuE7h] y߾mk''u闍zYmunto~_Ãӓ%+VM%h$;?;yǟ ʾ!bTW:˳z[w]_mN)y89#%1vنTXF1\afG\2Xzӵ[""8T !p2y GbL\H?b]9gb?tQ:OH!pdbic4ߝ+%g˭5ݬl̐ 2&)ն\,.uݵ1 ;g12AŐe *!9i ϳ,pkcQ."e7D}:"$?sFĴ/ANL!TOF L˴Qq /(tb19?,y# ӗ1!# zN90Ѷfp62Fum]m7hoRiC0tDB;^i*!ιN{ۿ)4 :kvgTvmgY^>y"dyAt> ?>9~vw:ENQgMͲ4M!|\\W%g.$zka!ueuۮ{O>~9#BT:pqLF"!9mm4)ZoQ?wョ-BW_{[-|G?|8*'q w~ig}"xmkM0G!@J:b|b 7M6UnJeyvڍ/ك_BگhTFţO?9>>t2vꪚN׮Y9rYZ JLJQ]-1*MoܸQ#"fE_~lq^xt2}9;g^^օow?뭫5|,ծON6/~޻ݿnmvm0уwuD!ʳ͛7BeGx:2$|)D>+M_vIZ9R?S?l14Zc*O<}$0L_L} ȉ`B HyYfI#tZ;Ƈ2II23ưgiRٺ}Ǔd<4lh$!b!0m(rDҺ8grY۶KBiikIRs>f֊q@A(FƘs1 sU\ޥsdjR Ȉ^JWb\+ih5`bī/!Db{ !(`C뻚n7Hi81,x(5v.(dyQ{lJ0bX#Nm;-Ksn]<99&,&bJ,ץhxD鈐gYqX٨պ, lQ{;JJH$1H`Ɔi&ͪ}pk]ضq,T|+wd:n"xBR8E1LߎQJ}.Xo,8cp>8mˇI5#mqjj>8,_~+Zݶ]!(ݙ{|?Ǐd[&MyGJ1DO,FLb4}O$ITA>>z!Q vGYA k-OSl|!"c(mU'JieivuS !T"پκVTJiN.r<ھJ$J]}ƚy:/w9G]n:'|%|77o3qm9w!t뭤s}[Nfy`67%URUTq.NOOU$o[o'{;99OG{ϒ$y8{WNO꺵fAJɦi8uk$yb[?{$~闾\_y嵗ҏ^ ./}{7DYq!i9mRqqvvnPՃ,G3ԛ+czj>|x!3,f/Ogzˁ$TFO@l2πx>wY$!SY q`p.l^2)v6+Fr<¶붵 yl:>=,v"mZk}",S'hcqsn!xBe\^#D$K EŧD2O╻xvx*}"WO1Å\f[GPdx C)$ 28#$ӷm_#`Y$i46=8Nuۯf\#֛:nwGEۓHxu61Vk-DZmMg,3 B^) ƅDS;D&DFc}Q2xM#1g l|wcfà7~OߛL&w'Izv͹b,9Zccgtm,2VH!um:dLJ2B1X#VѨc$Bm[DbPcaMrɸJz!sv]I "ĺi"#"}_7ۮwB`/Z)w~hm8cZIZk\J\@Yo ޹A '鴼}sx[{{4aӝ*kWォd/Vuu 1Z.Z%E@Tm ㌐ n_O{?,Gf^_=~{ODs)YhzD>4)b[U2ɋt3}ٟ?Y~W^}-_><^߽ܧ|r Ѵu-lmvFS~&HYƸDBg_zOs)ew Lt%4}_*5^ .ǤC ~ve0¿ 819#qNĜsMۭۮwn]qsDxt|j.rڶ[䜝guo !16M P&q=!ERUc0pƬ75M"8kQ&(o6`Dȶ]f y_X )]F1f.4| ׹P|:Wuu./x8@`"ㄌQ{BR! H.˜zIRgLq}7JRJO߸&$1ƶX˹$Dk& h,Z9QGcbYн!M32+6o,KAmێDڵ @}CTYRM4]kBZ_r[Iέ3`i[čcnrTD]SD,K/xgu hi;B11|`LAw IDATuȓݝ{ۮZ^BG1ck׮"wˢoݺۿ[1G?ÇU]u(İ$M"0_!$缔)(2)̳v1F@`#2g}4ˊsu$ J0jƣBIIn6[>N^w}#u Xv8+"@ιd vrPJ"f[=aȅG*˒ZpΈ" c˜qƃ_B ?Ӻ#dr&Ni]oѬ[7o'i6O$nHā$HUR^dE3ƪi##BRNsw?o¸$bޙeG{{8E*WUF*Ej:?|C%"%<9=[gއzz%{DGMU7QdDD ̄Vb)b܆ b]')^/"IFH"r)c;m7OTD%c6ֻQs !sN gqv.CTE~Y}..WsnQ1}S~R5 U/ pFDC`\.@"uE̋B&"IS,^f!ٺ $q9N-V΅6iu:T*9n{%HuuKQ2(bH)Rp1X󈠍#QY1*GdD%yM'y> JH8غb[xdY2yc(}G<-ì(`@ o]<_ՈPb!.@T!ƷYI}ömNW4~:?z9Ãg{J(ޜJ1䓏';{/[jld c3\Esm6Uֳx4ʳF"gD!cmp`{cn\ӲNcBy!ȳ4<NONmSwm휻~QE˳w,UMۭVzӵqZS|Z4ֹ.QJWOJdAPvi帘Mƣ"c3${sTkw͛w;=>ƄX]7RrnTw1)4qRo~lw~BlF9O|qcI0nTɴi7o\Iw﹓4Id<Ͳ,R@H1L8;?~4 ^!lLdb=)HI"}(Yg!Vyw6%bW/$IM3nUm>ȳ,ú|DB !8B$MM>FHH R5! 1Q,ͺ ' UX+:RJ2k9 >٣Eݶr^k;X8JkDFȈ[=Y(I FLBC x1aR!XQL!m2"5b!#.c /qMvF$" b"3nXht]6 H@׾ќH֟M,O[iqvr(g!fIiʲnszVM[MEV(Eu]WN%Y[;j@$Iid zBb)s`\j3kCߙ6x@Yj9su}w'Ku[y[vm2cJ:W׮_?|r^"D/6:>D`4`-;cNjӴzX>JDUHAF[M h\~v||g\JJ!ۺz~-:˄;$flq ΧS^mOmҋKTJw}g\FiN1"='^C<Gn )<u]#(ΊQnm<GȔtuӤIkӶ]1x wѨm["&PJumkC+1hcRCV_vɤ,8Ϭ?ol1Yf&J"ɧ,Kb+?ws>*kHzoovkmE QSA u@4: qrrL)Z_}Y>vuv:D!n,[7#`4YQ_y8b~[UD(cR>y36lg7n\Y/W;n>xL\?|sr]ݽ /ZЇho}''yV Ķmw9!d9gm$e ~J=h<rޭV$M6\惘sΘ(:7 {{tzee;W͢ޖq>*|/D7__yj4MR*`C}`MkDxXw!@6md1ӵ1[cнy*BiZmWŌm׷]C4{}"eX)ezÕO'1MjIēM0B[\8dƘ8[V-,KTq[o1:IRr;!&*ew}/8iݶ:~3!^ !&ӒζU@L{\ŬI Aݮi mtthoyaCGi\'bq:ﯗK)̶uѻ;IY~чJ_o۟|~׬zNj#W˷ckVwG/iodux;ͱ*k vR8q8Ƀ–[n  0Ԕϸ'+Q@4eYNܙyz)=Ԅ]\,\0)W|1P Oٓ',eNL (ƌR@!^O׺͞ !|׍@։բm̠I)^&w !ˆ ]  nwq18fnUx*!,[BFB(JɱCmL)zL1xoaX{1$8g@"/r2-r1xQs1R궥2NdYu"ZQ$ 0&UnJQJ18?pt19+ ୲]ƛp4'59z4Xc"­g鿮3Ú162@ahZr7fEn޶m1٘(E^ cMgͧx1 "ZkۦE|Rֻbiȁ2'ηNm'繪&l6t]wMuJh_^''wc 1,ˬs}~q1`Dn!Z!Jkc r<+g]7SN:.V M\tƎclJq.8BއR뇶m IsSZfVY&%Ru>|DlƥbLN3!Dzu~y];ks6Obŝ{g/:;8#(Ҳ<{EYwNN(BHȢ !Y^_6lvXao$[W}oc FBu0)B08}qD˲L:^]P!DUZJ1S*!:Rʼ,Tޅ8c  \,HXWoZnxg;٧'WOW*wvGW$c{fM].לh=)I@IJH)5@(ID9ӻ4;gyA1 _ΌQ\| w ߻B7NѡMu| :M mk{6>w7FPnL+!gcL !j)"JJ-J)NA€"/U&H+!4SJTqF(q#/!z)!>ƈro@z;n(!zoʜ!F-$ əP1}~ԘPJcWuJc0hk[ 1*πCcRAEc! ^)!w#)Jc7Ąz6Rխw,lRzI c\r: nHN}Lh9k:'@$2b*bZ?}qaC#pNc(e4F/*Y$R`|L \ǘ{ sfdnzo>J*[GJCkQJS%릏11ч4`.~ч_cRVJ# @ !(PzkJ1qx xDR:>v\^K!si-c4\d2%\xxz޽2U0R6fjɵ><< ݵ7zNg]k>}W/޵Mb8KդBϧyiʦI„ *TUZ+hCBJrI:slDH)#BYGV0]O J^YTΪIlߵr5mG2B !S!zC[1q;s!gry_*3΀ݜsF׆,iv ͊JI~uyc\.2+4Ũ$()| ߄]%V<bϟ?-"噦SιCy?VL.//R)g\p>V,F{=SΚg!$$8d0??gw?O>Ol|~}[,?']g=L)ͦ{ggp|t޽{xx|P8:> 8b~}u=?g}I[Yߺߟ5ceެQB,o+eƄ#mC6_2˅̕HOs.i*vt2<*/,יRp"g,$b”UqӢ0 d$ ר#ԇ;XqY)Eiga !>Q8)&E)) لRK!Ԩg` 62GQc#k:a 8=( 7q7QTo7حq c0v$zD`l}#f#)!g|m+?XL]_mI2t>(de%|֛avCR,R 4H ;BդO'UQTUmC,J TQb+tv}}Y䬒"BHA1UUDŽ-㜫SRg_M~:w:HypH &DcbCHC7k9At !!0NP""PF:%#}`Bp8NCNgs`PJh$7;ʅd Ʒݶk&PL!! KXwMUn` Z)X.Wc.'YDILRHB>XCs΄8W38DDgcDSVeۙIBuzݮƄwNdZRw=z?`Lehkr;~䳋Kh.w/_fyQM$Ep ٧ýٓOw}˕W'-'t׀Mm8C@H$ wna0ц I)䇄d q7R`1F6` o=c pTۤ!*nNc  nqRFGD(&\C?P%jJɋ2r2'T0 JCäfRָbiJRpmDt4SMnx9RUWrp@`M?lۘl%*|{IYNI%9ju|4%cf qRc@ɩ1] cs;<|S:cQR8gP~^]7Ck*H0k%$<@N2)'idʦL:xeY/_<_ZyJX;:I0}D% 8]5u3]N@T clN%r}ﶻû'IRs1wTu~ϖחR;y-MF]5fEɈL&Bu@ "2ƺl7,ϴz$3.ʲ:9><8::*{Gy՗/ ̵4kY7& [ SB eV_]#&(wO_Ę w~`B̦k;cՅrp6۬10MkUY}6$ B('$2N <{{Vjϧ?|tVf䋢͐LJzxs1N"JQ 9H|oGf"-ƞPG!$25M3|?\\\BLEݺ^nJohBcxkӽfH5HO _8 "I!_B( !$yMYt>MS0)E#4&Rt!LI%ڎF,+"B ]ge@wqJi >G:xe, &ι3N("Q/@q.H>\Q`#decl$0`c3. q 0ƁR9l4sεңǘ`'e ƴ]b4f0,~i2z9 Uњ ʪ$FܸѵesZCyf85$Q"1(EV;`HSŖi^TBri6c$N*]RR 2=aHiDEBI%kޡ`*&RJ ,jڴ̀JSI){g//^@] =:ZH%v[k`-%%) nx>b~pu~].X1#S!` GjQj(N'*1t(i5fݦnm8$f)P:栎C+yrrRMfZ wUUJu}7?x7?7wN?%VR&8cwN׫k!/I)"4y}.F#U BX ^]n2\ yV 9TQpRWZW_~cv; _|4FY1)z;˗v7t|q4&@u]?dZQ`<{r8RJSJ3&|0%)]nv[ V1Fƙ,ژ,"ajۮJi?sf\^_f`eD|^^]<|-yߵ5wbs-$7q1٤K~>12"H^ ƆrDŽ`ö׫*\SB۾7֕R1u25J!WW82C Fޤ<ϫg_Ng*ʤf]-%ﺞĄ-{o&rTq)ʃ޽wΓB 1/yl_|DiGL+CkXLg~G>bRJx(}1vY8 ÷>ݷ.}tȆq!p10`.ӻw}>8::W>9_.0{l7[猔R0VEQdRzABO!wunk"ϟde5?Ng ;(?8>9|ŗ^ ;dLg.$Rw=Z{kOWU4IljBCfvA( @2tqy)8F HBr>[V!&ܜ`k`t6XOf{Y8Ϭ`PRg<gɻ__^..cϝ{H.<7z͹N*T@(9{3™ K $ %@(#@BPoθ~ ˗y.CݴmfzM(A[W`LA qxx RI&d6>J]m*.*Mp}1m^[Ks'[8~߆u',VBJD&T&HyG!:XcLfJ1 I1v* хR41 kr޹#ARLHA(2]d"cDL1FJu0%$U;cTeM&!xDtޏJ!ńɨH1d% 7y)z*n`D^ќoF 7icnR1q3Yd@Hs}זLJgcӴYq9B,+JyQ*p|R:[k'O|㣣j)91gO>z?X/3$*!C׷ Av~]7ۺ1>na۶ug7LuA$|p>ջ&Z9c`$4!㇡fB?z8P:h[m XgoJGo{t> &%o6${y3AAHR"ֹ3 ygb&ٶnTJq6 "n6b8jVY)EUศ٭W+J)7/Οx27\6X.cƚC]cԘ &A\KT#R(y}}9c1!gk5*Q1@8cL5W_~>w]ۭ6۝sn0* y.ljz5C !v}45*9d*b&{ϟ|%3Jd'w˗;|X^_O<;\pGoC !&F)#+cl?mNNNcpZ~0PUR[ox甂#0vppnǣJ+O1~`6֕tkK+VT? j}bVMONRI)'UQAx@,aL)P`Rヹt:),/|22RMJd"Z|@ 1I)pJQȋG7ƃ`Lcf%dp#!brCgC AJ!1kYeÓ;u F-_yQk\Q'gMnE vmB?t92ʀ0@"w1C#, q1)K!һ.^SJi5!$#l 08;RJoGt!g}LRHFV:w\J0HCج_W_2"/tQR #ȁ1@d1Rڅ4Qjy7|VMkmR޹EQ&JɄ?勧cRkmJc>RNkM i ݻڇ(83.p.<-U*nY׋.~Z q^ovIq  CFHB"PHXoC9[`HH(g|&#kSxg5vI% IHQrJh"Xy)0`9mH"!E^^-on@Lr3P1h cd@X"\O"A%*FU0:xd" vuJ)cĀ SqN)pE zo$ڌcR1L8cJ 1`!&`LRV@(ahB(əoflĢ(J(!l62*)L) Uc"jˋxee6]۶$B23!x? Y)ͦwY| Rf@h^f1DJ1ϲzGwg!"E6ɝ;O>,Ph]ߦ~AnAncn}߱6J*,s3ƅl\5펋BLQ*k5.J@cOX6yMr:,JԊKŴ'G*R1"J3!g3"Ǽ.XH J8BHU٤\/W4,+3edBNeZ0ֶC)weQ%$E!^I,R#",cI3:JEDqB,,{{؎$9U5h҅8{粼Ckr1/3JyuBY##P+*+r=(@JIY}U5]6]g̓j ֎g} 6xc`h!m6!DR`MqDR^)wgby[EJ,5t}/Ãz"JHs&ٛ>[v]a{gӛ_OF7a HI%QdRĮX++WToI,'ELDsA ot=lBrn/oz[ݳZ7,GϸO3}]IeK)yRēc?9pW)<B<8:JID"04d2Rɢ hƸ^*p4!HUDFk:8cBЍ[w1U"E"PPBt,c#$!BgN )>BzdཧثD$>bH‘1{ "y<0*zw/F @ѥ|<)H<.Ju s$!pwzbJ j@L$ Dtu=X!eYc``)I:\.[k I"х@YmiJ' Ɠ1X32SJfY"8OuVVdHh6B O$:Ο;Ʀ֙`m!8k1/{1k]Joo}A]-xerxr>/Bo}O?UՒ bIPHbss;gs]Y* r4M킷1.^}v{cz(Kx0 .O}`mE޴|YUZ,Vt]0ߛ_8w])TiTkg'Y92ISDғ {z3%W5=\E!x}*,ק|R !hsg~lO|0ΎO,f̔JJ@c %,ITI q4f|BPJ1汋#!Fò(DH4eF4JAuksY9@0ԂI"zN3֠mkPJ6H"Zg5Bъ, `49B)b zJɶ4 %TIJ1hg W~RfR&md<chu;o~SkD@B9R5헿͏ovww9gdee &dFZ/H Γի/ ?RpFi^7Y2j;ȼ޹s.H)RW^_}lx#Lfמenz6 _w z9o 9?, ⼱ĵ!k sj0FBY!Uhhh4mpps /\eu(]HR6V_zu1;AD`DV 62g|Qu](%ц0BJp5Qh< _M&le07Y۪딐XD,a$)7;\~}ŗ!.+9sAYVB BaQU뫩dTTveY)>r ִ+P κU1m"e?){/bO ž|$<)E= >>>/OR)}ߨ'&H2-|4icffTp)qR/5RT`<+ҼPXkV2#]GMqXT  \EOR+l+JضRB+u]p21`C} e0RpxXVޟ$R B1FA3Ƭr[CE A'B?W9pJ{[R@J(hz;=gL+;Q!HJKS:yr~=_ԫ+ e{g;>l1]|=i}O$cDM(B+PJ @6D"80J#@vGGǔL sŊ<O?aR5˪^](-{ jY e④4o1|Qs(`#j ǀ !=Rn(UÄo|+?}ZkDvʕ?B b>ܹgA~xprᓛG'YomnpZY\2Lvw;MPZMVj7iՕhabmcӚ1HY|uu5M;P'՗ɝ;T/͛7\./MO~h3ƶT28[ E8ygYpmJlșH5sΩc\LNy"s8iC hXիCJI /tm[9Ldq~TaL)tB)BHyxxef64M\(x4]dŒB 4/rklc2٨N4&޳LiD1=Ol7zk6/rOU}ӗ{`4u]{:> ~"Dh1]7V'$K(B"taAh\)@BIf~1Ӵ9@p.Vl)`z몖RZ'yBR<21,fAc nqKb1I,Ϻ<ExƖ!˳(2;">3 wg4ͦ!^'ȇRuvujA" wSHuVu2Ώʳ`6$}|迍O?ć`Bhun> 2QD19@:7>=!νtк۶Mdks^{NK.>ɽzI AӇ_pO>eok+㟾wE,Zyu{>hL7(Jk/Ye VM5͒#IB?OkDK=<;s΃{WgVD+]<ӦY6K'(nrF!E΃;Bpc:-D"R2@!2GM\xaowO2{!H){V'Za:K-[v)_, #kC2ڶ`oqQ.߳&0&:7Q^(k;B{^y51ł0aLך $:ץ,VNv7^;;;/⍏>t^by .E\6MΘkw dlˉ.76zFϦKVsRkmܰU§Lz\#?W!}d]3ӣŞD"!!y$`TL0ד<ȳ,sc!8JiE& e2Ἅ*uR9)Dvmk8BpއhP81 8_.꺙 ǥEU5!tX@$8yoneY^vE b `4V ɅbnMSwy_2u",8-EҔRj]A`>D`W[GbPufamuUrE #!ԩViC>)9gw8g{{Z`ړ+Ĉ@tں B&%%GI !l^嗯\4Wgެs? /K4_R${tZ!N~|tȸ<b\[;9>*x?͒$ٹ\<{O>(/ftx'4ι|]]mllb>Ir-Tۨ4!(GBJfJijPU-9w݇퐂RDpMOY&g%%̷x}\y>NVV%dz3(k^)"tB$꺮Lk%&A| !uic9 *ų,e#C0TkMx`^| uwn} t\J' k*I|W9_YY}O766]_o__zr[4(iHSRJh$.d7XOmg-@;(,<>y~ڦRRl,iRg]3Q|jteo s!Os})Ac9g3ۙ41kڶ3lniB0%H-t!@!leu2e!wއ{e$Rc-!$ZKI):Ҕ'*HœSʌ,IHTR'!>PJs-!"m#(+L+0J}Ѓe Czqa1J) F!d %4M4Ā$ #@QS!zFigֺl〒|LHڮ.ۮS$"JvmEY QJ Ё3δl6倉0MG:Wƫ}^9(N >>PHzr9=z$BP8 cR$T*R:[la*l9i:yƪ|X̖APe8c&ʸڞh,8!9 r~2YOGG!^y,F $^|2|h0KY62F4()xRk!4IIl6L;Νyݛ7?Z.+Ny~w[o}oݿ{Q(ʁF*!鉵&Ƹvҥd5!NOŋ꺦9gLJqRW_>ݹ?YYښξ:뻮cg,KG)VM[*);42kc1TKƈVxP1`Dk[!2;_w?w0rƮ^s[+9!`/[YQv3&ͤvifzy۷isJJBRTRK‘OE̳R&2"TZp/I΃{yFX" G+4NNOOo}Y7|vv1$r'v.h}=ruYm"k]U܅j#!@DH3.xx~.NVa2OcE=H =I$zg{>?0B`oPE\3D b/.R)[/DXD vN)9J,idiNp0VWYrLf*Y.+lY`cuePe t<(c뺮u]gz[Uu! 5^p^b0,|U7%2AY,C?pFc:)TIqJ(TK#'"DSRH!` Di!d lB,$g@=c$!x% yZ5m-ˋ3D)CJAXO x1 ZI$"lc}XVu()gEZUKgM!RJPr%zmmld4,Y[(xf_z~o߽?RH)|w7>w苼 <,oI0BT'IRU%P-m[od~W^l/W<͊hg!mX{_~y|7kr&d20 d眳< $R"R,)(A)E$+t6ckzI[׌FIc`}Z"RHV!ޓ>-<^gd&JJ諽'?s){?LDJ@fr}c[Ghc@ۙ{jxȇd:"F +4Yd2i&JdP"GBR)Ba3gm49f3p" ʢȊh:cC"c2/ ASBxlmn )UmCd\dZH̼w 2e J HM FCy{*#tc?b!J%cIJ΅\1<S R֋K1FZ9RYɇH4/2UZe) i;cX4d(mVJ"lHQM"b㥔UDBɊ"s!R:+8By6 cˊxӼU]!9rM-454BBi*R9uH*klǐ/()sއVicDG{B^==95eB  #V8DJlZey9T_bȒ4uMgqd4MR%$2ՍA$֚1Y[mk:Ѻ5(,K w_=$"!8 cZ$cPbԉ\[1t&EQh8Hr1K~Ug (%_ipRW_|嵫W_{͛UUI4/Afy^p!e/vcsc8ZMVd4Y+_zK_~2Yˊ7ƣށd  !?ӳ8/ mۜ߿ ?n|ҴmvܹeUt$G}3 -wvln_8:>vZvy "4:뽏yQ%#`ww)O Uݴ$Z/&@$q.tօ aёHm_t|trOw:JX\k]?8>=^߼{K_99;!|k_|7/$ͼww#!Z)։1Ƙ9a`+u]s`uWONHh"$H(PGB{uLRi}HI=I eE@…'<^q! O#ȅ !<^Dxdx@)c?@J wg,('D" (U2=NpF۶uVD"w$j͢ѻ{3ae2̥P91Jz)BH5զGǂ Έ"R&4hΌtuR̗US,K( BIAu-"szp8-#QX! 3d gyY= p!7)Gp8[4RHX|<2D1VKtqΓDgZ#Ecm׹`W&$ME`8.q.VWWCI )!A1J)"-E,k&O\ c \ĮmRrB;<5+Mb.˺QBQhۚq.6)g,qx2.TI 1u$Z+4 "J?A9>x(ӳT%z8zZV5LrQM I(عN2LF5.s)狪j3X>F\wkY(S` >L%?8;;K JzQ'GZQJA |A)=ːqqF Ͳus~뷮_G?]!0;/?_.DK!(!Fa\$IQW4QGߍb |Oo~87]-Z,IEHν;vpx,۔)$x<1&++wvWjݵM\M-LeYA>|r|;{hBD]5eI(6m[d0 e8<<cڽ;c(c4DN\,%ARjo'qUU wX'=8g% u*湚Nֹ0BZ# >0Fw>tm^Qܾ+|9$ɷ?i^/.j{UUM!Mт-\@FYwU:)tX?ye!ڸ:k#v$@~ 1ns>)'} TB0gL?M{x֛.=#R,ןE>LUI"iBd(@КRCD$$Crbi,0FMsstV$]_ @eYIR Lem\K%RB!xk;$i"ikXkOκ"cm@Fzt!o\hZsGR1#B]WMgs{D'c1ҩ`& .Cmׅ(=8{ }\pkU0HW3g(S:MӤm[b110BVq#书`!BH_IcBYڴl6o[cж]mDd,5 c( J Ȓ9cEi X֤e9YYbe>FdEq8LKA|8^-3n,G'Z!= f% R, (kC(NT*c]"jUH50)ʗ[9=`ޣB)!n!"rW )!9缩jX 碫QR$ :ε/_R͏?6ֵm+٥֚38$IZ*c3c Ҵ<=9yEuttʫ_ !?ofg'U?|/rmc,KӶJIx<88JN m3|>zjU-ӳ$[[U1^p܅t _x-I/=L&{?gi"A|ԿJ@W^ym[Jyev뽆h<~\XgN7z9CTRijk;L"7Muṋ]x Y۸LJ&,F=`ZEZEiZ{6=y޼q߿wgg "c,O$M&2Z'Z)e:y$>PN$H/\<_-u]3.?mQYJΛMӤ,JN5!RT筩S?>:g2٠('A^)B:/s/^ݿ=}t6rݱ}E,B]w1O\@J) _|i>'i*X.b!i{u5Rz1aSmzIaۼ?lzv1>ro  G@MYa:cL!P1-ʮ]Yg #pA ²qe+\Ntﻣz R%K$"C Qbw\KclSWsK{o-` ʲ,'L,t0U`:v=(ˊY2{Tvo?H]@(!,놂$(||g`r:-<0iY>(Ųȳs΅8r4.Vy-B(QS/775R&;_~\W|>RmlΟ|?|\YTUK"FЩWїlzG?Ӎ˲afRb~v6eol/f=c;u?Z,F"φ'ᆱt+|X7_!^y͛o}M+_;;ƣ2BkFÇsTq$a2mlmyWLN,KUY]\olnKu(3u~um-M̕t99ؓ`bјJeE2[1<ٜa\NfyS7{{{m[yggBIQrF !G /~{] Z)7s( \ %_[_+ˢcQH4rn{5Ļ(ɲLJ&:M<ϵͷ>8+jkZb8YxҥO>q~e|6b]'!r+g Hy8L@R4-cP&8ᇜ|~ʕs 1RF 3 (gS~1swxy7,Z{3ÝoUWwf7I-*4R%YDGX2H1C@6   b1 8MъEќE5dU]U]]u8Zy8-d}Yw>{}2ޅ{RJ{o/̬ͬ1|0Y,!ɺ,7$"ϋ*wenU52D',p۶mGDDIvYAAŪypѶ}T댵9N$k*2b-ag eM5MQyRvbCcJ9@0ۼT!gLXޓ("kfM۸HҌacpR@̲YrĂDeU9gD8nbo)! -NiEѶmbN)Zc]<=Z,vC>?I(⤓Cd"MQGF0˲<۴R|JBh]eΰb>;[W6Srֈa3gZ0NTvv$m"7nðެncOH_YV?x 䪪5ͬEt8^?ɳt5+2c *uh޹[WoYT04a'<ϻoۮrA >ض1|VU5[Z{MU]6uen6k,7֡zټfj}c֘{"lya0` /js_wR ¿_{OxÓof}yz@?~'?lg~<(\i7,k뺮gy3kmۭ<TW_>ew-I1ŹuW޹,˲2k݃~uYoPk7HjvΊ?ܭ[o'R!mӓ~rg~> dΕr_;<\.X|O=˪|sxx\YU廋l~/'}s7oo_y"ˮ֫|;or<3ԏ~?v1'xw߼ukwov:y`^_q'<;8;y>7 CUW wӓ6˗8XBx_efG%k,ˋӓvg1`lVeC&G2 tou쭻o_mnyuٮ7~//.ܹC:o-MDJX_wɜ^FBywi*')AN0 }SUd\f}ꩧOSCz[qb'] )xxǟ|?|̧Bn]jgi1k%gwߚ,SO\nOO]n1iq^eY `3meeU58ɏ|䇾ZcfVuX7~zbJNq^Y&/Sw"d\QΒc x|s"+:yp~> {ӷ>~g'>ϭr2;u3?ߴeQ]\e5kfwUWm]d1q8tRh3uS+cꂈ\ఉuSFύoffggC?$"4œb1$ ![CH]ߓ;Z2cg0:1dw-o#vWkVAcAcuY<[W)E{K5-~g~ۯ~=~3?#jW|vv\V{EYܟ{w޽|;8nף>5͞{x?ͯ~g_ۗȿQg{1y k?C-bseawo><_,^K˝ݦ]]] }Kߜ_wo~ŏUfvE  yc}/6+d$^U˺<ۓAƍ'u6k21E,3EyeY%Qfٴ".KΦM3kd ̖fl6wwԵ}b.Duڬݮgb>oRd CiqijSO/|hZY*;g(yTI2QWWW1q50cc!=֘[nHR6 !M3?5{'XDT'hBxֱ6a)`o=?6MI~%;_Q $Jh$BꆰǶ@mM7lۡ) k cLH"JO]u-j3Iˬˍɺ 1>tcUTtvCH'= A̶V8b*76OU7U7Y:z&.նo}r%ˌ˚6+ @$("'|\fy醐gi$hvEw|LEUxv cYvCH>6/|`YѲЎ<&rg1 "nrsvfevwcLcr]m1ɦ 2$CD.Ft^1cnh2n~1/]=kv?I"$1Bd@$v>cB}71]^LX6^\^n};z}֭۷rGg|GWTo<[o?~G\^;z;!m+|g2?/U_җOllë/ɽ޽Y|qN]^nׯ?x󋳓|?3?WT7n5_h۷ǟ|WW?1+u,LPWWYQw_7Ld1$I  fYwfgo$6 (HdreVHFUy17-8 (>xhUeOiMQW.YCJIՔ?z /]^98~j:$YCR 4N Yb ' V Wk|jmOǐ6ȊOl1^̗{ tw͗\^-vvk޹6DM9=Z/$(@Ȋ ѯ?C3=<9c 5OC1r` I"Ô}~1iL0M!91JL$!rdQKHYC1rHC!05q' <]=3|OYƘ$":# *3!N4 !XcU +,D4qrDRYиi᥊`ZcclQA]ש"p䪪RXCYIbTPD8vXk/3gL%נ)1eiaFTQAIȬ]`%w<3 2} Vem WD5cʲm[lUUni $CtN3"2G0"ITE{?q؆sSEwm7"DK٢FCLh da& `l-[1'V5 ^2}eͬ1d`?=}0p)uι=u]US*UU]U53o6r?Tom( 9@[U,;o|m<ԧ_8?yܻGܹSԏ1H_{r{=1%TսW}bO}zo|3)z7nߺ;8NÇ~١޺},kmkf2lqy)逸o~E5 ,1dMUu }puu5)[T3׎11X̑1,8wvۍg!xyKE0n68gEDEu1aX 4M^o>߾^A=vuyRr.aTLUGއfyQV'ߺ}SQD) n|'YC~g /|n߾e%cTZSeu!i9$D(Q5oy?;_^x>|"议6ƒ@٢ԉpU"|`  D1&@RQQDchJ #cQ)#1©$s2Q!1!NlYKd!|PyU^"veY h:0,9KdFa " YK5̬ʄB$lb۵|7TvB*#V"cpf)"˙&֔DU5IjHu:v6XUX MӄPIJ̀a\;/438Ĵ3\u "PE@:I9g!2EtYTY!qD*RdBUcc*`-JHgZ[$Yaa"X*)$iʼڝ,rJ H~gL+U5>2e1(y1Ii1P5D$ B<_㽽~e};< :|g"ml8C!Jf E>*Q$n,aңɄc/ySobNE #g@daU0efI(Y>(2uQ2iJ:3i!aF6s&Ƅd-vU;DgȀ"="G Eu*3, $UahrA.uÔ Ƥ`،"2>* "bXBfP!3*jd؎%eX EUa;j`TՑa#30II4 49 QAfkGӞ*z@|T(rJ,,5XhpGq3O(MfAXh $Q@D%h2 Aɱ8&ICBX;1FCRPh (6B" +^"k*$،YrJ\⺗$0/)3X@(:¨D%Ew (lzQENրO ucRK aFӣHcQU ĵWu"cK!)$xIwJ&m2 *謠@Lʪ` $qV#IYuQ! aV#if0*A !WNi iHUA>%BhqDgM֣)-0K`X-aT uiL j&" KYeV{lIhBG%@u)(d4*"(ceesQ$1sJHQ"09iGL:q3HT]IX'q t50 cHSVX4&A$q$D4ŰKe(0(+l"7?eh1W]*BVG$HWtLf$$ayiQ&慱!(r($F uN0tAՔ9$DՠeQGʬQtQPdU@PtQY̿˟YKnL1mY]7}oU[@`VhHECE1D1IuY xבuHjv*گ)0V(Zud~E5zs꓾M]RָSQdح)>:ԳX-J G3jl:$ ,  'o! VPݩIQkJjګ(tߕWj4Xitd- (^`B4||edIu"i'?(ԴSQ`ݫ0>&gX,%An{>,hV(pa6Akv*کPNZ^kոW(z8(p+ճÚvj 5և-o'/%qFکg9ᖷ>wgxff9&s .K:Q)Q,n5npV)Qڭ1ȳ>>'$qک(ՔxzjڧG,*syЦ6g4+P崓m}*o('t9<%ݯq(z4w-Acv+5EC# IDATчz8jhYg9>ȃmjGksDi50.KƒMj}K MOъSaC>^M`'(`QN[Y{$ny$۴:&I2 -JLnyks(Up;τ1,|MAِȺWlj50S^b1W>3pИ #AMqɇvJ"G3nc4$ - գٌ|֥.g uÆ^EpҥAZ?6 x7%]2Frؘ2tP`ٯlz:6 NY =Ɇgjsֽ~Ss3F9mcdL3ӌi36vAg>/ՐFCH²eCԃ٭0 `F,JcAuYxr=>:vJ@ܯFݩ\@xiJ|4g/*3˱ bJg6w33XUhNy>U ʵ$xՀ]RdTdV+O6r'm vkڠ^=,JİHa!9(&ָd$)c~Ų֏-+(UNc^2׍"xU,,E(זn1A7w=x{* QQIˢp<[^0/EIjN6igTCP2Mq6y=/`3K,&%@rȬtvY٘gB:J)bp^蘰(Jߵƕg >\WitYv`Dt5Ƌiy'sWYP \t'>^d}TS$)?~'J)C(w'2SE{NOwVj{3 en G3Սly O@`ո[Ѳ4 <6&M !r]Py1v}uz=F!*Y,-`AnRTWE 8wvQ/J'AyާxZXiQ߾\. ͨʺ!$h&^.X ׍QTCЎ6rVK%g1ek{ݎ8 t5*.fAKb3 j[Ij&g`YV!\2dO>jSؘy ">b~mI1Ac:gۋjQGO։Ff8hRsI";eem$,uڔϳg+XQy˛>-t̷c8ow6W_N^8ho;\Lt`UWnC>$MA~Ӎ~C8+a٘vHДfۧ ~֦vZvۓ- >ZY?8nH \tpnڠrm>yGˬvJR̰=my;kܳ?7w_/2ߛ. ^_f;% 4Jyuz?e.R:/Xe3B.*CȌB2&anLFdނ0#aPjT F@乣$Ӂ5XI(80i8q / @e9^4Aq셣! h-*LOLn $&AY-kvlTN6CȌUJһH0+4!,)\leY6z/*9JI!XbK茳XQch5y1 APgH$)bf20.vdP7 53ߵ 9޺un 5HBXyficqtMxĎnw6-mIH h.RI|=kq /dfd|WoP.].F3EΈ*l\~Ո!Rz5i*x L.x pq(eRiۀL;ɉ;G)Lt]8rFu>1igJ;-@jp@7J7I)z0azm 43SՆ9p5m4 |Rƒ|yNX^6}ϫad8 6ptF$-tS C98{ǪT*ΉYf Q 3Hཏb~S`FLǬ)[[{q&"R86l1Tr*ObEQTMqTRsS#_9Qcv 3**f{)t&cyȱHXC?8 Lpjzqʩ 8f`4=y#-lB}w7/:/:f>2e;}26UMR)FB3B.rR5BfP狚:bl}r*V7Ӯ5+l=18WfF`vdL=(`d )٣p?moO~y`^Ԕr<ۚgU:g( e5[[<AI,+0 09a KA"  bD 8a %`LLUq8`}(2lJ`̹PFݨug=3"(6 v!BE@9;yVf*g=`3+:>! ;,N׉viLE$b\5w V43X:{fY ̊Eh *Ty0urIR\h iEϹ )VaoBl(IJ ovf6mO'V PJ~X}'N!ރq植ttcX2 9|UܖnݸI%w)e"lQ}d6uwevG)7vƹ#QwV%Xlϟ[aCƟsWAyHЌeٝu熦M?Z:3NOGn*s9y./l]uV7 2N#X)B"znKO:шK`f݊gX5uqk19L9hLgNDjMdFF&T&mD*(BjV"ŸʨgGbT}1*6 5]RRKxL+TF^ cS:e{ xfg(+ywx3८-:ݎm59xIzŢ:Utx}ܻg<|B1 ʉR3֮*e(A` dPP`(G\k w]p=3c~zcnzHV- ;YA`֣˶Mn  .TLECym[f~žvg &6#F:}WX ,6h8^xmy <[ͱ3CAZ6#!OP2qmM) ylRlV0@WX(@"h;.+<-wPk'd;)+sIKM@ ^:Onz:A0!*Ȋ+ ɖ1UF 0.Y a/P'aHoˤE,QeLS4հUeSa4ʐ§}ZᩧȘ8(deDwn,l^Ocd7}ɜl75TQ:aˌB"I tɊǯ [6m 90 E14; wNG?7t7jɳu1`VUOqsg0jvZ6rnɹiAfUE ņ6DTa} ǤdN*3D1dtxF׈FDs@5C1:׼wQlU 3ZX+` nf?-ՑX'fXIHcϐ`/H{ @l8 H6d83Sm.=CTjG0#3Wd.-sӐr!h2G] l%C%h*;K0Rr.};sV@0x tC׮!M9IV-ьPFAB@ 1 YIzpqK7}q4չ'RumN:;jf"Y* MRĴtp?BF+1xڇit"R!fY1gM+}6)#⃋cBR Ah@Mg!ebh6Z8nmInւKs1Xf:Eѝ$YT5: y0)#Jš̠B z@ LIsdFlPIYY36L4Gt5Pګn謌抐!{jpEn|\ά}pw޻v>}s}x{P;:׎\Z, nΦmlDTTl^?z.NRvZ4T7^JX,ƱSa͙4N'@4jwUzjLJGׯ޺vڬg[ ;8K?m>ոߛ%n߼b|ueۧnR5[M;kCUM&k_*aXN[W_yeۚTI*ƎBf3Oo7'"q7;؝ln=<&F1TG%m]_];><<99>A[vg\:;{zhMMT4R2{՛^}ދWܾ|͓E{HLgMňؙ02({08PKwqgoUޯׯ=KDxU#8og9~ѿ}ڎz2F u)#Fxr0 x+fꥠ;-SOI"fPj`jȄBDmb̦:=W@P_-l$X5\TD֖sƛ]BhE ۴& ,}2DBݐcv# ଢ଼ҚrAgd#F\R 8 ĘrS9:ɛN <֟w6nCԨNԊpquw9r ;Iu82S:s;S!;wg/|'~ ]~]h_agaE3F|&&YdRQ[t~׾o?p9{ﷷO?wGPˍ+ +M:д°i}~__taqC. Lt|::Y}/?37mIw-,/vg{w}dSD:6#s: n-盇^׾ }6^|$m3tcِ hzηw]<8]l> ּeFhsSǒeq^mk׏}sԣ'n޵ :J"[$ilagbp^ʆxZ{Z,O"Ou>=RJ!3_gl;56=x8+Q.7kZ9K~FYC9Wr1X!V놣O=O+9WHTZF9Z.|_k)2λ|쳇Oֽh44XWƣu?;86fZ0Zv;qٔ{sMԭmRfラ~෦T6Y=++_Ϫ9bSD;;'Oܸqĵ5yW(g3աnb?߼GGgE\dݞϷoK h9s0"騒hLZqjf&@@ ;+?`*M1 (Lp)"#MG tǝF6!ű萋a'#t9BI+*7 T;FѾ4uapsTHvظxmenȉbM`CElFih҆ e1حٖlw㦘\V['T %[)pɪpH+M嶫y2*ѴyCcAf)Z bìeEՖ]Sʩi1T!S'\4e#j`փ) ñ!0چ=Yw̜ƒTkb6H-tub0t ]I-Q IDAT^@ZTjH vT7>Y4%)#znl^[n>EUP2Ry DeXpRHNٴ@ʈLiwr#v=3ޚӼ^S2cN=sQRigCw78\"w%\:]ll{{?=OwkӅqwb;w^-F=w`2u8ޔg;{awvZO~~^Ɨ͚ʌ|}󺜬`:|\w=~ڞ;~"vFӄg{|퇾mߡ>L?-*6IB ,d,ԗqH47?uWfcF.6s]z+ߞc!0|#V̚2c>YVOmYtP1bl8Ot7G_u~K7Ue }TKܷ;~:K([Ͱj!9G/N|??~'qS&bVN;<}Oc0{87]۸0ü&ڍH.xz/~ߗbͤ??G]&s1.ҕRBMѮo{oZ/}G3cƙEAd|͛^.Y'蓗o ?O=cO^]oOQ#r_lMy#O^Gfywޱ_]>co= ; `b0*#gSE00L+55UC|:EI@kpH@'A` *mH PX.s:3J 04aU V OAźd;tRyO޳ tYYJt<_d!D5)* P QPٹUVpyRHz+~7 wN0op #B0llMt>}u@A%QŐ11Rcrkyf-TY@+gd΁BDqfU" KFsJ0\DPQI$8ey0JM[Z@ J&>@^+ƥ❢8*a)=l)*"/.eBRfCH"i}3FlYtBrf;Fιj ɬk!B &bӏà̮ 䂵'D|mTy؈,IIg6Aw/W׻O0 cv.`^cPdhZLA z2۳75|;۟|ɔcVӺ*۠m!-i׶qc[13_u˷t E,4&`R&vEV/cזg"EoG#f5n\?O?mqRU~^|Xн >-Rt/AԪvI{ʿw!LH j\}VQ?ևw_\d0f`ŐQ 3>s7Q׿گs?uϜDMXSlb1"ƎЛls/pE|6=/{uof&:HhO''=ٟ?jiرJ1`y=/k_뎟wOȕhah9{9;dԕ>w|Û$tg{l{)LhguTՁ9D)mq.$$-LMa_x hZܦ/Z6.F%猼A(F1|䣏~߷%&mO|=3d٬:#0pW|ًe$|_y2^≧~G宓rv c_zI[}Ow}p UW?A&{8G @Q IFVxOԲ3@Z,k`xC`"t$SAFQZbeNّn 9̮hCs{(+0/7xjN0hZ:b06̼tà=`m2z_(8O-@@MT;gVv[.6囈l=y0+4m\:egjF̍cϺ)kfR(jx* ̜gΤDZ CҤ6f8绍l%E3_đKQ,,(ʅ@^#2a&S58 'kB(%-{ZmhMp@NNeuǴ_cCQTUnA+RPADVU(BLg$[QR R6W#;Kɘmg^؃GsmlNbCG ]N0֝ag{_!ì+ ){>ZꍥM%* oA<) >w|s_rOwEB[vn*phRݼrio7}Ϸoo|}[g<>2h'bI sP-}Խc2^{wg&}teԳR 1Y5ӏЂՆ%#6{Up]~7ɭ|W<'wbތ0؝ M[G2_¼VʙfSGy"MC~k@a|kws-"ACfgȦB8].~G?v5yxg>_}gF@xSoX~۾`WwZ'zͧ V U5|0Drko)f~ DˍͦZDwɗzfpZ%e:,bUV5#%Ȫ*zۢ1[`3ѦBEn/cx~{9%ԉ"DTGɊt҄ pML_@=v *$Rd0AEȟL8A,+F:ې`t jRJ'JW%qFYC\;b mH8H,F\4 I3`0ӳ Jeidg'SK1BpbιF-À-{ fi1;HקM<ʙAMC)D CZwFb<7-x!zxm@q 1yOR؉w=5M4C &ә *A4ZAc J0BT-zNX3s@=[C3.Hm/$elk" JE^ӕ4stg3\;[xN=jdw#kvҮ-wqm5cmoz]w]_ߺ~ilG 56o!8P2q C/9cs;>O-:C"&|=Xn%(PC`2S3=)(hQ}E赣Oͷyq;_z'>q]aVƒ r r0USTG^ 9sW= o{/kxwu0)rz6ؑYFIM 1#v*jذfrLϵ03??+[[u}|ޙͿnҭwUMt3&V;̎  &1ڲo,pσ>eÐ/~[^|2'̚*`7Gy^ffjjwNtbC͙!;vt;=~n\|՗l/^pnfP<[.P'8GgWP3fjWr jm;@nq"73@0Xߍ__<3Sb{{g~ ZO/ wQ;{?tSC̴U{NGA@0F<5+lpev, Oj =Te30G y2?2 T(P:2xB,*&A8щ4@1dB0ez&q4**@zJI|+*D蜡PE?Ԙβ"cj `$Gƈ mXe(1I(L P'T+CDqvh<رݭWϟXHgneQ0 M0%X%+wE];U41+R3X2x X&=ZPVyɆhRhsSѬbR*dHmJmh!k)C~@(I8HVeAcqNtIHt%0zfCDpη"`ؚFYC0 "ZPE4UU>Pli"bCjhTNzw4l1`<2O U7쳨B0kӬ1lLE$zap\@F;.0unP ľu^liBސ SlDl$Wu64Ë>O_︸}xsq_o<< OG[500"aƷ啓:¯lox+?OXLVfU,HyTMp V]ڛ6PŒ!̌`{{: )LC`3Biq$x:\O~ ە/kKz[_yt/,Y彃siiƉ]f 30ѳ Pν Ӛ V RKz߻wo8Ưz#y}h۩]pֲTàSƉb$?aJ!"Ŗ=^?3ڷp7Kg.ͱ#3dԅ BǝhP@UWoy=kt'HQ$qDK$Zt[-- I5?@Qh@:SؐԎk)E RM{xw\ ~z׳S+HacfyODȰ^,tT xzm;[a+LILb F "2fj3Xҁ;D:*,O!3)jP&b`HK4 zJ+0I꾠hf);Vwk:IN5!1͜&*[`m:׽va?b^Uu&'|f>`%v wU /P ɡsk}atoڢ|}{@$ k Z`S[vZfDLŊD dg2cpۜO=覵,B`l\D$^WMkbA߽o^MfY[G|s-me>:>i>0aDL4ήUt͛6o[M %C%[ZĜä`Ry[zJ.*6맍&#MQ^s31ARP0Ċ[.k= jem[] ޫ*G˲dVͽ.jv۲KᾝO쩔og>u8k@teh^cS, Cli.I84=o]7~ҐV݃rlPQfr{S7Y2|*Ȅe:ZaA !]y\ .Uf MIĢNE5RL Bo0cBn:O`p$7apS1`&7N ?lC/ɱ9 crlΉ#UC)-Y%22( B ̈*@~ӵApvzߴq8jRa H LQZ,3 gR@3>>cHH\p-I3cAT޹&ĉ5Ѓ֠L b,XwѓQMU>w^u}wS.,fl3]ANл6=dE'̓Bs>FL(D -7lm; #xrU(1cځ@L13K;uW1VkæQe, LOTŊ5NdH}k][mެ5\ނjh=7n3Wj6) :X6i3}23-Y+W/E@iҸ_9GDGGȄ,uCFR.˔jzZ9uJkb/΢*iDž#{LJ;_~Jf"nK7i'ܾ16>c~i_qӦ/|bf?ǎI M?i99^mV`cuQ<`2Aq NoHc #o6P#41E"31pc׻?]פֿzۛЬsź&θP`LTU}QLtT=]x+mIU1 o6ntnAR7r1XckLDh}>bL_3Cs}0᭣ls`(arM-_W<$ugsS?=8ڝMJa1grYʓcϏ~7U?]n|ݩ9SSc7vcY9 ,N`Hߺ*9VW=?y^ͪժ}wנhLbmiVA*G&;q>t$]DD4abug] 'SUl34Uy@$ @d4 S[ IDATĎLL 0&ԑӰ3UvЬE 3^R\̏lfbFԊi,eQi=2LI>N E Ep ø|.sc7N``zz,ӀHUf,`22h0 l;-WG9:3^hh*Z׋cM8uP ͨAe0siRQSb[4PA'TN7ҷcLbUIəZ%`\Av+\wv@Y*XJr֔,8 &26À*XȧZN#٬Wڮ-X; 7kFcZu`gw< k4q\ױsl FAl~ ze^wN\a2zFi;Tl%ڐ';\Ԁfs7]J%J7x/`P|2⫿O|ՍG>7_ӆBϩLe(#r>Н.›W@;JJ}Ad2 .nYȍ1(j@ܤ6K쁻vꅗ7L !Όk5s'c#l 3l+ؼ_>?xm;Gج"-ER6UinʎQy8mzqQ`M2NM(U7O9m44KPjM-fG~kO>Zno]yO<]y?po\]T@+݆Ʌ 6jd&BJ ݸns)!Ҵ)B-\iP]VwSU_/*/sgdRM#0QMj 2 >|CsNO_SݧV'_;?$VV*( "%DrFf2⾀E4X`oFhV#+q3#:$S`K Ğ@lL&Me|*`dT 3I3|ʞM+ RT<< Ԙb$c8`G,gV1yu,bYrUX 4~",VD܋tB>$(T pA3~&`vڛi`]BR @`!g6qAlV`SȾZRV*Оqf&! ]ƛW0go]J42B;0Z]1탙`ZSN#+: DnEM }'3 ȰXpģm^vf)V䳠qVjL5r%9"9>e-IUb\$AKA>8*bED}p٨Kue.Ƀ,ml?Ӯ㛝tJo[s (HtN(yflm5(S?RXbbH'[Z )C YR[v 0of*%8!PlFFb);2ǐ5DTi0sfJ19؟*Ԯj ӂjݚ_9Rbb8W3! xQ8a=9*v+D9/'oZ?:ZO}t>Yx~C.bO""}k;~ί+9he|Hӣ~s("QQ1&כl(4_C˹{b60lj*2,[  {7~s"j&R\@]45`f^(.0Q%%6b¤❹S~Ӊ5[M8W]m>j]vYΌN&[P 6t&^@o\w~xo~.EڟclbNL 3qfaK) 딳F 'KUM\6!hZaL7L9l 7[\; .]7LDDybRʃ P׬J;]J)/>ا7_~7ut؇ϿrR9a@ -PO(6`Q06k*"*0#:7mL<3KdhrTE3 Xd QQj39וCQ*s&-)࢏{3 ":dGg#@IaPі 8? SqY ̬S D:!EҙHj(ְhHU٠: 48Фr^91NQɨcc&T1YT SfǤm.KAK#̪ݎkX'Hˀ[DjRP9cpnƹa05tEw+DZʞ7փ c&P~f0 xPtL qDwfǻA@YWqQB MUЫa .h S99Q.+趽 HҒE_/PL( ;8aC*2Dsј (Lu&L]Y4Z1"ryGUr~WVWе54Pp\KNNB~,<&Oų{rD77D跞/|܌vjjWC}q)˵CLUDJu_͟}/§=\m.hz0 Ί juDQ!&SuN7ɖrFP2PTڭ v,;bGr۶f~o VmR˫5œbTRӵn78YO~0o<;5_78XON|_=,/ HmA3ŬzQ8fX7ߺf.Ul:"@<&hJ6XNy:q [LJnmpw6l W j EEzpǹ'>7^kH_𧗫n׹~`W)#,O@**)\B9eTa@R"9J)- ͭ:n[{>a -݀U26>ˈ3F:srJu&LC p|"'GLgJ$;+fElvw66b 6@kiҭ** +yjB fTeTfH8ESZQؐAƢ bSh&ʇ7ssfdtz1#ԞvE%|`m¼SA `Q?Ig!'ݬAכTŪi(haF!^/￴G]K'{߼o.J"ਵ`'x嵫~iqZ/<y)vo ]3y*:4bZoFl='y\ookzo3Gm[M`R lr bmg)6pmƎ%"W:D$LTUFHŒ@ 0S"JAA h[3b@SSU9UӒ eOP+Ylȣ S%u3>h?Up@$0L``81(DArƨEŸ+i[ eޓ;P6F "PJQ湮b#21ZAe4J[f1Wh`2OQt#zÏLP0r,@;.b+UYK_f9:ZJњq㴬{9Q30Ց#R#DF RJ*tyg 8P`h*6I^#A8&!T*PQr*jb!*ٗ8{f'CYp3LUD"u]RvN]O\Cںʁ26HAٌ UpŨ_ 8l&ED/#O$(ƲXNp&h936fVy֪EXn[ʔ{/4چқ]^v@7rQ' IG 'c!$@ক.F{*Ӻ iI5d$#Co\M/{wm[R]lP֧>=>Ny]g?ǣw/^MXJӮr#齗1fATRu:`B}ws^?_\]:;N+H0nlh;%x{'FͫGD#ӿx&E&$uj$:C$wB㍕[KMEhfPr$7\Z*mvgz-~9Q6tj03:ۧy 6p7~lz\ZQX\W~ٗ|@9l7}~7o.^?~\H`*PAKͥⲐ5:>VV=ZI.+gQz1U!aږsU`r9^MDڝ'd[m” i鉴vҫg7Qs37ܳ(䂒yB9:J5BegrF` b, d#9pXk5h8ٶ&Zu%T.2%uPRag1F炲ȐeMju &җJ蕝(e9%9 fVY, oQ8J NK.DXjd`B.`MڟC ;JCߢn}z9^VN[OqՇ s^<__Qg[>C'/~&@ ;v̳}ŋ}Ly/rtE]luOXܝtKjRlmY[?CZmo}G?r!Xl,8)ZlR#G97c+Y8 6ѢwLDO8w;"1åf@-v@j0k!IĐkk6q೟|9Z>Зӡ6E\W~RzQ%ǩǝ`Yt;`c-~DpcǬlR$LdflCv@#DUX9$N@"(M[0EZoC#u-vf=vm;LBgcٶ8=6qR ȘCR8$bPFMY hKjdvLBGT`K[f`љ[%?z**#3A0"8a͋kbTjn74n fMC6Z |mu'ZW099ɥ(}Ҟztъdyӫ{w~/ ld5>ԃlC~^Ժ1tw f\S^̔Y/Ԃ>/}_O ϾtmAl`4^b>5hnE{;>7:~ktMlQtU!F)63*0Luܤf.m60j\ܡ94>no>[wq]ڡ~:lń0R\wkGjGfCg]])}O<[/mBg#,֦m+mSQgJcJ&MٶV UKz"C)dS&i[)BO<4 K_{q1 МCƛ7W=}hsŝ}ޗsk:3e=`@ d "g.E N[ pEbof"Ųh**"j(HDZL Σf&fF)2^3!ʹEX XH dhBjeulf3CJ@90258P Ѵ2# HWj sŽDfY # LH }ZR#YsA 4 @n)1Q CI & #6zU*#mg@RL$%;9#f#B=ɩ(Ec% eTTA "Kg c2x3&dy0K5yp4 fCRPb<Ԥ$;އ8 IDATVAV$4{J*y!sjlw3J-Rrnː1/\]R+0v@d&b:h: @3b"TaoF;6օa#mc2ql[ޘK4icQo A#f`pjgn35%Xm.W'y Fc>ʢ]?,~x\DaCEkppBdL'-;$CZW 碣X$ci?מ|e{?xוޘ9,{7oiC;;~L1q s\~D뷿 3^/~}/HT SigaYg+m{.?~݊Zbhی¤ȧG\Gb [xҏM)0B H YCy %˪~|uQ]o"9 &P{WQ/S/z{!?x~ܜLw~tg_G;=m~7a&ٌCIOJ{t"c=GIvaoC La v;ȧ_|koNopŤ3A7((!㴳s;׿ۻm y/=5v;?쫛yMP= l0d+E0r.jyi0])ضٌۙWMl͖8z󁢣mbI1(W3+@Jep 9wYM-o9Nᄅ @M@$8 8DMEDˑR)[IUo؊S-Y2ed)d8#R$ @Lsx{(G*֫ۯη7@ R3QYN#QED`"#$1L )٠9"D 7XʐB67ĮPl61M.-; (_JQ0Hn$( k0tЮрhN4%y+Smyj4M/[ 7_yӫO=ąǞ9HCX(8 (}Ͻ涓)v;#/2+ H4E`QQiϻjž~?|ZO?zÊ}ѷ~_s9(;°1No|䓿߼3>}n$6" +[h"v=:mlW2X(c:5H*3u%E^Y7L>+n;LkѢ6Y+Qd+;N} @Q11ԳN}r4b9jf*] tf?r'N2 \:$\oD6i&_ ȗ>hУL/*ڱ܂X2uG=o>O xo>6DV0yB/J6ŸbL8 U1YER-Зp薛G}3?r+X3rTsRt`j}mUn pPt]lw9b6u5;s᫗1Ba9yv2uJp<lS;q`1UE:QUd;^'Q}mo'Z hds,@c&- Dٗ,;W {8,~'!&CzDy[^;siJ"'Ԧ&!;Z9. v&k)ҶDM K2hsTUrɬ﵎hW*ZRf  6z98XLf;re k8^_D5ACPI`h$9.Y1%5ÊrRpp*9KfvPe25;@,3@jbt:jE2JoPF-h",]7S fWoPLJ @# 9\0e&\N@=lyNuhT bE,3G,h#$!Ud U`&0C _I6A Yowa$-̔iTRg8GR8F pS4+ 쉠*m{rEJf.{FDHLQ'M3M\AU՘}m(fb3"Ap/5T#&ic2̄20*V*ͥmNSU66a5NR g&f-U*s3^= ?[[/| 矩zqV+[[dB,[yyO^W/}ۤ/]n[%ńBq\M8)@EDa13,PR=gO_}`pyLEÍNno<{?|urǺ2q"&au@s9uC'UՔ,=8^{<O~ ?#ښ.~,jz(R$$jd_Xvn3TU,{*l'gZ)W?a/)/\ul8H Dk=ϐ6YM3<]$fyΎNB ؆ @pޫ: hOQ2xaT&A0do:pȬ)v, HFCCHjAm`!.DnVrufa`;#]o^7cfC# # SйE:=APx爉(m^IDZ:pdc! ˘Dew8 , O5Q8/ieh!FYѲZ vjUaHllI%{hec>;EB[ ŔcpMUB ٲ^XEa-)AP9*b6,߶U`ZXDL9 AI`JRC6X# /T"XsZk=Z6® -,e>QAjp ,aӃ@ ,j4W8U&:^Nm:W2Ԋ>-#2)w;gc15KlW>ptU^[E168"&/~噿o[V/W>>Gc1j9LW8sNߧOg?hJi|ӟ~t$c)-#܀ ac/=;UK?8{S $Lb0DnO뮕QɎXm^.SH/vsjzdK6< ֠]uz)}O P*Fm_2(E.==8o{p[Ξ&>1#f)mWse&#e-Kb ;5Rq'~ʻscpS+DDb%sݢW.7 ӼKO~cMSBb(x /]Yf{ מ|[l\ ,2R9IusG1Ud0 jI=S{c% ژE%αMF ZZ}~QzZd#}Ot!zn%'xB_Q/ Z#*UI_JNhң5,cf÷9c{n/bbA"JШ N6[lnVefәb+KC`Rv(uen0!lfeN`?s7ڼڅ2}b6K9Xf*Op^W?䲎7fqwgcz sctuJ Ҷ-vr}ej\iDUdqGW̫R2{j.Z115kټ<%Y;Z8.T1(PĂ'" Dg0eT3 eFAU-:*}igܺI'ְ~T&SmZU!-V HmsD>~yۍvGiuʶ IDAT|K/;o9zĚ>vnUPpB=g}ܽ͒nF~XX278m_x7~[v)<\9;wy~rkSGysS9K[sAesO}=*&{<_ڑy=710Օ޻Y6H}[R"➳|Aן۬_1ėWl: ǿ~š4T$˅/=rg6u/k_}g.iJ[DJCe qTGZ! 2Ш~뙋Q薛>=_~K Tp&ŜniB kSϾO/>8m yr@鑠QLry]w'}ڻC墭읻;^~ѫW_9cg)%mPpݛdf6W{ͩA?CO}&ύf죸3o:ux%7m%Mj#s۩ygisq(o  C^}롂qmo^OyXrqcן>R]lzM![[,͎wp-JćȩǕm〖RKwb8(7?+oꮥ8^A?|=鎕b UFؽǕe9it}??zO?ԃ$ xA1|޲6\2Mf|ÉգՕǟ.M ѰpaQ78v/7F{˪ p/۝b>o'fʨѨzcp$Pw|8&.]~և̀@dptyjN}ory[]coYøG!pnR|W6=2ڛ/|0{JFJeF#jλNW/|\ZC}mʧlL^hnPΑc9LqvgDO+e84@IRB(0Ec-e_\6kOT*|O=C\GCql]7ه_]`ڬ[[n?3W/Ncgw4mLݝ6!CÞOI~#d>y;]ߝeO:ү|Zⓩ#(Z¸G]o۝1dS]_j 2ĤZ^+w o/f/`o\y<9KjoO\SdK [ c^ ^X@^sS7hggy㙵p>Rdӂ;ffح x9ףv>\J#gNw';T5#Y_?pi㣧//1-ZlEl7/=CO >9Ъ%C\4T~Ũ{+|aQ+@mUO]TZGԄa\ GJMpĥFkKA߯SY'{WPI( TaJ1FASVK ,Oo(O??5А*O&&f{[O䏽YYz+}8-0IOl[vO+Wu-8jVX;‘bF55?So߱N|pÍsi+{{O~M+/}gl\`PPE6X E52] %8e@?,#(z۬e,G~^*Q'qb }wd\lMh"_صM2N_={Eh- xy쩋}'4ϊa!riP%ߣվ.S[v7 ejcZ$R҇EcjeƐAD/Y$5w~WZҸyt۳ך%V+HTםk uf*pC`1JȆȀ`QTLK5& KE6kQv8E+HJ1 @ߣp%/ѯr>e,grqUd6#W2W[:9%e%q+65kMRg[f`AQ-A_`,ɤyNѦ^; #.=a̱MIfIV lyL1]ТZM'{ ƲZ$7fǟ³o-kxãg ^{79D  IX,%d9rqFI;3 Gn?_rRcq 29QҼ"-x JP g'^!cp$.[u1Km;DEjBDBS18q?m~7x@.P ūXWu%s( qI҂͚̿xqkϞmk`Xg|T[`8Khe6 aӕmw#Ip~}4c&"'˭#TNc;@f&ճYޱwL|78KXgDAS rq>z+_CM fy>{G3uS?J(Py|[O~'#_Oԧ|~ŢKPig~QfnĶc<0)Ownm^uf_n;Mj%QH=*:p".ju"$ձ~YSC 1 Qq>6]U4R(1%y(,m[!UQYea}du1|;#΢L8mh$@wd,  l xVz(wri2댛̣*נ]gB=U.K0mcmG)έ"6q?' ">Gr@%;Gˢsxa&ZT*wS0!#$Q7<ݢ DBFI$Bⴾ"x>R<;)(1^]Fv&:d4GuBTfWdC-M^8K3ޗs0o)MB j}k>g[|&H}<6吗]A Adk5w-,` M//kUx~fJ.̛ vb%u$47QN+{xXUE 79xcw??v2w#[4cU@~͕;`{؆I*O}h_x@(\P鳎>ї>oώG\'O7G59%c"iqqگkvCCRK'g/BQ"cH?= u$%J{.ڻ Wݟt?^/?7֯ f.ہIjj4U>@.mCET5#ZV{zV BdU&UscAefe ,kq]?g3 J+.CvTT1^_ɽ:ڙec U%ei.\k% CU#LyLF(xsdz @F eNc0wH)Qt.64I; ]}Z^ MX!#̠ GE,46Al&J:WbPP'ƒ)}"(F $#"5Hn(P p'G P"PP0@(sZi%GdJT42یQEHZPXJh"A@j#QC<|gP@#LD6-Edֹh ee' o{.,d[=&Ww|+K5_ENL]c9%cL,b`È҈`*T2ь]aNzRY fySXZY4 q,~g #F%*% *B?QIUP2YD\UB!9M_^-і A,h)3f|Ծs:NL`&<yēt@Wcuc=|B.Ä.p.F:W*Dg s]:˙!&ِ>8PGo;,ZR& Z&xq΃ޫeĢ6ibjSIɝh_+o_MB%a%Dg+Vԑ IDAT\-IT)`U Mk[[CJ^J*MdrʣLwBc|( HRq̓V8 BTMA*bfi'ਣ,[U7^s€6J@ >,Ո $"-ApU@+ ls,L~`hQ\T(DLjde2pKZPHn$vľ8έ"#* QNkȪ0iA!R=0su/>\X )I!:8yrEf#8SJ 24j' 6)DV {\pRPZ.gLl&{ǖi @;56)&cJC;ۯyݹo!BҔsu{Rӄp"BUC~rlb&\h6:^__[_ Nuv0048 ^v ]rf&wRY^}\(S#yfIЁh8yˮHo(. T>fJERWk\pٍ#Fh*HLI ro; ĶG#&!U!3fwVvßǡڽp߻ܮ6 H!R![6{YqsByRY g5U8Ja0̛TU!Z* nfC}2r&&VQ.XE31pVmcbF9Br緯 YVl":qS;$ Z&FtΡ@g  4*J2F B@$eZ:ZbSO,(RTNu58*MQ4GY:ߍ6tj݈\P`*UyA1G(Ty LӾDH:&iD*` WESlJ](xUCP -"" !r ir @GDGw):'_JU(!Y啯݂4;k% NuZ(3w-U9UmeU(9;%ѧVʣ'Vd=Rd rN*R' V@`S.ySRVy)Sj}/, @+j3E,,#XpeI+[4;TsDI:MW2smN:BJ yP>:XꇗKoUXoG>h>:pUG%*ǂ-6\oJx/?*ܿo|_o pϛYtҭ8&닑pD]z :%U0(Qy6AtJΤ%,`?EMfv!&l7*b$*b! & %2Ӏ 0I=}N,kA!N'+=IQ+5ZA6g?fիJ;f" RqZUf)4I;D4Q ~v?d~ ?~fH ZC{;9m6JvXY5q(f,0YLF'2T&]J檽;2LK,6LK{^Mvyr (F"DdEw/ a.,weDEQѺCO$h]Ǜm!Y=?[Yu\$l03kA&N'A,8MhroA: ڹ|tLj%o/чM]aU0:fY]Qgr:0bw*4ꂄ.@wS O^+}-{!?xԸmA>0w'$`C|gK]jZ ̲Me'+˞RO&7(kg@l % Ґ:b+@6v\ vRli&&؛AId +n3Xe[-'?3oټ "b|~DA :k.hhYg2I%~|}/= g{/~h"(p r%$@);4:fS6h z]C K>Ǻ043*ݺmPG.+H YG!T|!۔2yXʫJ1"*kER!蔔 RPEĔ2Ͱ4>XP4C)܃yɁiw \0*FB"U03] <گ8PW9ݑYUTɼ]\h `lCгK?_4ouy=U%sKYyz@?~o}' Nj#]ULuD]}VftK󵏙!1L/0bQW#N#F8B#2`+`Gr.Nj|T3 6N^(1ڡ4S`(~LL6ԒD" ZV !Zd*X_*e⨴b@],|"$\4WKFS@c5#vCEv)%.[`x[ITIjdT%gX_W;6E!SyJ:@W6;vIU9ԬtA #tS@G'Z 2<' 0EY}qd H "3cb1#AŇWv9 &`J,[@p6uS/y̥{{=.˵}{.7 ֛;U'&A bȾ}UwźZD}TFh+w:~kK:?qt^={My҄75El[ E1كA(^΁:b^=^2O| N57~￸֕E#竝m!F^c7h4I->~OoƱ;g/۫ޛP}bPb> 6ZE֑f^b9́"w;RiHM1^(+\0|iwRon)[MwV~逤X\ZPvL=|jEώwVTeD;tԁ-p2#S[+qrn[ )x?֘FL"7Q zGO4)q;@5C{EL!O}w$\#+8̑ȻEP89 Eq 8(ک#]};#xotЏͫ{[|߉ գSJL. jRԁAY20*HM Kv0N_"*2pn1vBYG:7AA t NӓoTIσHpnҒǫ6l(v[~?xo}s!mb~u:cl,*'F o?=^D#˩VYLd s@y*T A8wz[jȆ_ >A.ZrUIM@1^r=0Xwf=?X3)($ C 0D€z:[$"z$!<&Kʥ0jeD>S#PHap5Oȯ{[<}\ W]F Ξ>}ݛ_/N;ⴒL]>eO*/} V8_=}SgM}G?&yO6̾)]pI0Egm=P(G&b@*ٰ0tz泪dG(nz~>KV% %{i*#(HhxT2LMԨ*O7Ɉp" H(|EvŊXE`PIGDZ ;nx)~L TmU A& IDAT"AGxh98 A:aM rUh2,J|CHHdhޭ~` uPP&x}5JSqQk;MdQ0UxrQ^_-A(92 (@:n0p s"iY\̄y"+" TNuD`P 8 hD+Rdْ[k{]4'(C""Gh>PfLhDR4J2]Dv~^ۼ&22@e۸ګѢ&mV4Fxsfx787?8YkgM2O{/^ߺ˶FBeXݪum W}>-l|bݭWm׷ЊfjyV.4ťc妔v/|գȠB$S >TVh2WIX'4 [ 6Tc[1+m/;$zGFf6 gX #[7L`v"Fǭ)07,"Ysfn6 aJ6{hf/B@QtlGt9#k@r>$9l!z+X }UC-M:hȥGC[# =v|)[XYی-; guzh\Y0%cAϻTBv2ZAbn h"iSֺ;<5 uPUw&o_%NkdO\tNti\cuJ;. 3RlzxeMӋx#:;^]nu{V q ^o,ֻm2?g<jW^!8Q)0}r;,~,|RqZ=d =^@kyG 9n3fX9O},^LüQh{$G5"n{5AYeF=EeHʢq3BR%L'gƙ!J}F=!_~r[͗/7?b/)e<-ܥ|}ųƖ/{PCKO 7gw޶ a:Z+dz!.m2VYjUK\vIu>_V(Yo|al}̴yp_kj=b ڎ~xtjȯ2`du婀`GuYNdcI6VF@P$6YA{8Ǟ@-dJ#b Kx\rtT|Xr:'߹ f{{'mwbj +,ڬ >Λ"' \- HV@,%Br}m<س2\o2cY}UFE3'֩f,yiJj'E5;7/_jm]|VP) g ?^kL:t&&a}9T2CcweUӆ!:cc#tgHBpȐJ.*,GMnoO&@G25 mY:.tFnPWqDH]V7~^:L3:B-OaGtT5#~E¢l 9 PEYtF,"Ojd Ze$:0cEsNM*#q1ڄ0w,L' OkL Ѳ㍾f4im*4@]h{8o ||ip9ݓ7o-U'bL`v4\U["aU* TXLLȐHa2A3Ay6&ƊMT & !گoZ+]}*wx$ibNM L@O f:wbăhiSX!9U:]%R Nh"z` 8)Ƴ>tr6P0ؓv Vv-!r!0YȺػW3.Ew0|>Gx {(#U(N ЄX4G̊"BwNǫq^JɕwJPj*rƦ-'%@'|Bam*{2i%rc&8Xr47N7/eḘbrsi-̅: McUGDLxvRf]nyԳ*9#'ȳ3 uzL]?Tkw@)HT'[ӆSڤΧsf-Z#kVϦ3| ٱθr4 e8Ҡ G[1kuHIb>M2kSA'&~r1լ16_wZuY>VMm/Xv,JNrFu=($6 R d~,÷fU叟=M/MLH[ hW%|%|o'˔Հ Ѱ^kӻج 77;6r c!U81Rn{19?_?ȅ'8 Mh5Ĭ@w 8`%Xm ~A PoSbLH@w^_zhm}% ZȀS {[k6uCQY&<4ֆP4#S.a5fO*YK@c4¼gƩ*W=2jȢwᷲ|̌6FAGrXZv^{pUc<[@>Y,6(V2e^/PJu$9X2'(ǻFVߴYDU7U_U^/ykeW/L"<-~UM [jVluYhdMi;=< l )U#t6I0n {۔h)5Q5nHB&7[+*o6i+Z=fIJgE}6inSil3"GOu+ey <1LM+bcٕWwDۄph 5FSmᴮj7=*C&/{,jQө۔7d!f=_vDӄӈmU㓀7϶~pjj c{-X6t VUxu,YRt{,׬ I6U@m[Bd@c 2 1$_LLW^^.;Oo?xq~u7D|6WZop3e=9l cNںjICvU7?GoO2}bަ*Z :>xXKqxw yoc!Fh * rX!ց>C%d| O]`8~~\5B#D4U` xUºcrN*e)d$b&\ұcn֖}O8]0i߯6iA7.Dƚl2cmL9q" 윛6O `׭Y4XB0ClujQH^lT%Lj'x21h uCF*e\'f'nKIQhnW!keNŋ--bR|:S"fL[5VlbVp8>M.i0Gi4g&);ėw>8nYȖ!$k֏2,*"/?jշɛ.N3N/NM￿_W˿u?da&@"Es,l 1%GvQrN Nڊe+G:a#liēW]k#, &$$0Jxprnoñ=_9 >ÍȉY1NB T_"O@lM XZth O#KPB@W>%i=L1 P#'3*K wRkCZiGϩ;ҎA4PR4 ʰ1 ʁvx) ̣U^iG'lMMT;]otXKFn772z;6njn:y]<,W߬_jUN=HEVzhn5t  R3j"U-2[ft'uCyݫtey>YusOQNN飷۔0Eg߭˗7s}0W _\?$/:Pjn;M8 ^/c6L9zv_"᝚; );*]FjIЇ,֮؊/SSŜHBMÉ)bo넍c}63Ӕ@f P}^xБHFlVt,, pAV@MN2[ٗW_g7Um8X$c>{[)pݦL[>Z݅&*;AI.\!J2 c?XZ%ymj0SAk1D2qOqw Tʡ&(ݾZ"PSTcoH! d8ow\3C_bm R1Y0di 30{ܨZ6ʵПr΢oqN2Hܹ2u^8c=􈿺t^3?}ZQc`qwu@EZ}jFbf.%FYH`~ @MJ2=F*4^ UYD+2ïPi]6h\b+Ȗ=`n} i9>\C!)NEJ:߬)yF;1%_Utl<<ޘ|hQ 4dB {cN"Eeѣ*?T 1#bPrl3]qabp> 6#$_wHI5vN,˨JZʴDc%t;e& Ѱpuަ!&M 'e~pXŰ鞮W eٙ}Pܦ꯺M?Uf+*DEBPuiՏ?moF5 ^u93kbTfn I VLÙEb03D  +W;yxջ*b%ZcERʼn ]0CO4d @GTupCћ`;Pk >b-Y ьU&4V]MFh)x$94" _ZgpQԍOG5NT泍FaK蝭CGˈ;9?03KR{!o<+ `Z֊|:e˰~v"tN逢G?w||o›y %.q5<+^Sx,NQc7J"~1hw53!KkŇ8Ni\Е!X%+;m#`PvFvggs|:Y`PFqVg!ЁP.ex@^Tv* #UL*Cւ[(- #3õSABvZ\g#(uo/VmU T~>dgϛWO^ӗڊ<zta)f!Np&LnuZ!},&&3c{q΀U& + b,г&O}`X:֮>k0UV>).hƊSC|Cͩ*"j c/aBD0lL `D?,0r E0@8*ôϧeAM`/vS"pap$` &0m.YD!U])0|^NG~ USv|jHZ&u9[<.T`^j:q wVcsCxa.}P$Jb7Yc/vS!Lc;KcG._[! >?ʬtYGHA;"$YYJ!!;11Z>iƿmA@͠@@il2 0BH,L:ڌLfʹf udu-kaoo 2lOqȊ؎$`Zqv2ԝT=o'-.x2W[2?KZ ގZh nV QX^TrSu2񰭸u؃+YVfQ2{`#9`tewĠg5;Mo~-LrJ̬'!a̢ܯmMs1<87oݫ,Kh| IDAT\] )ֳ hX2p̣Eat \"rIk gyIB`xl֑]X :ڕ YH.7V:*axY$7w@~=ޤ9)V!ĵ89N[{̽|= :FTG)͆awi|h3+T k[0Y=ʥ\%>OaQHBRhu+rANJ8 Ob&)9'Unڎvr"JkxN:UPa4%6VB$/8gN@=v50)![ .13^uK%T={>7Yy^I%KeBDp7­CD 3U5{z/zY'xLOCp\wrƲ@XGh%a;~;h%L؎*"jiO<7N D^&uyQ 7%f59hvC`q.fNn85́WzGJXg" \g0o"KȢ'~;ț#!umvxfe{*; lvhz:p79P>Z:)m@^XBAJv#|<1E=d8׏<Լ=Bo!B%}H(,c\hkŃ&>~=t=H+éa.oXVI8%DZg-*֑hq^N%$G %S-B(4Q|g Ёؗ}p# mU2C9% ׶Vh -ë+v9À8dN4䴎\,mN-4f)c~lD"ߝs^1dc8 :`xC&OS@GL/Fzzؖx 1Gt@-'9.X+p9Wa LӘAЌᬲ HH[h!71UlDKpVwQ6Uc1N1z_^ɊLw;D>`pƱɡTGh{+4= C2u3+~Soya8o~mtB[^XZ:ȐAy6 "(hSyCoa0h Wb?S6L]eDB!$we! ;dAXERƠq$*PGЅa < |2gIRl"BMKܔW'."*eHH:HpXgirn<y?ELxf WߴZ&ٺm 6I?K$O&7;C @b pfakb[2=U%QX΁'CVꎏ)уP^f@L^;8З"J;zjV!@ðxyrΦR}(V#H`Ww#2N9j$-q.S޺4d0-fy[`=:` i3cS<ͅ}J̐!io"3Yt|\T/@cvlߟc>3q21\WV4Iq ~qC גC7ϓ'!;@UZduBq8nWVRenv`v$sig qsդ!WYEPsp~6#@װe/lG2dJdgp obf7 h0H% mۤjV :;0z`; 8Jy<ݭpfiNӊ2~:~u{BxduOۡ~_j+zԵM0~. {ѐ3l(68EDŽ O;GБVQ^- Ҳw|T:C RQS` Hnĸ$l=Wo\Zvf|=0nxZ秓7_nFBDI=!rB;쁈!ׁ^уfny41ޞ b5DwXrpq3כvv-Ǐ"q,@ɪ-:Z{Sȱ "ii`Ągld^ BUZ{y./nxP/"kP/HV2fe!r5.ȡ;7 M G1s7|>F>Ha+]7RF(e9@ʞ4GC6'TmAFGeq#3t=|z*ְr7vv+#.];[ݥ9p30P”`S,aB$׎ 97 WcaArX?7h1 F|40(8Q#ae;(B8xXeіƅq~zT,!J¡" r?G,mw5;~wS)w͇Rmy!Ca;%}ŹG +S*6!f3F}|۷;>KM6\fl>cg-dqo7PZXu{pQ`z&Q CАS p-tc z>&Q]I-LkW?hi|w+cC6B8EZ}`9cq%eέddAsk3S_{KF3rBRIR -S:`uP8=0eb#1= 2Iw o_cL= op?~o_`2zsE6^0_9lP!Q?Xmy4d{Hi+GYZ>BwT%oǧHo<>`8C`76%؀衚Ƒ pD#{DX y1X#a \ےAq8b V9cA(1lo v-\I5r:l+/lJL(Fhh} /%MI#8}-mIjH8ED"ς5aҍne716AG/|b=2bVǼbYi} =um>{`7lvxD0gd4 wU_jpRw\n!+UQf|sv)&aHK;\ȰSJLBmwrI1KIAGSl[^KZo]Kc1n7Ut=KRq@[ iIBL g/c0kĢqn'w9T Ffc ۠ːB1@߲Z>{n?T$L#[δofYoy[?v]o/=*I |_ާ;>S+;{j?2ّGcN2[ J%T2ͤ{} ^ȃ;c.y# l_;ò$8mY2] yThD@uyzj>$?pNa4B5gOY9(<'e(Q=T?y\Qcx$îòW=4ɝŰtܛ_<&8Pm,b),Qz0d)mWYvΡ"$ί~.>"ݓ{P ~%=`FN)ڿʬ趀gYgIɎgD]#{hh)l'?0=<7k6# JU}$ &kGF5qE6DLbYMJ tX#©~oZƐX}yk?a> rCqKw ~qTM@Vgr AIDzrseZ!@J7&)>lˠ{x8<1W>4qCK0Pˬ 9ϡ#11$^gGr%C wl^u rUd|;q*> ]lXQeÊ>?I.w`&~ӧ/ٯ~4 u">}ǷRwDm~ێz|㶴b! n˛\r?ouCd&8zG0 Ai@ dw=۠8QI3?; F;X1&w:t<{,d$TU5UA}k5$fJ R٬{UIUWKdt2 0N Y>6ٓ'.- $&Ms~q4v-y3H8?٬/_ff&k3;??|>???7X,RJj^Em'I|6m+wyg>o6w/?Z'E=??]ו?R~Ue(}}VA0qyI a7&^ +"x.pˏ˶,q_^^[C||~G~[իW?aUUO>~Bxw1g?fO_^^Snkmjڢkɲ < iI;0 L{KBbeIa l0%&I:zm8{wojc xt~0xh4>~Rh766^xÇ^W*ɉ,1 ϟ????_[[z`0(JiߘRyTVuyyyޯZVkr#Nu|ppÇO2w~ӧ'''S_ZDy ΍hh^>T` l`Eie(= "8-cevURf[FXl &580nC88˛Tqi`KGP:<ɮIJjq`$dJƣ0vje\lw5 ѬXWX,]}:*W~>~Ó'%RJ䤲(T,a躮յ66RR2rz8pwvKE.(@k}]%ddnW’~l6ӐeooO/FѐgmZr4vagϞnB(JE`0v͎VhVZv]իWR]Fl鯖ZIxl1XSBF N0"{R= +?~=7q:spa,]x5,Os lvi=K:x&Z '[?i,TT&64H%%k()Ȁ Dy\h/WTVUinlֻ<5[PTn/.ykۃ~uA[}$`kk3:u—/_a8N⫄ a ?~*K#l86ƔJۑL>==N @M8svvc&Vqk({ .Fӧ_3:iU:8{=:J"_)U&'h+*,ڊE0F09j(ӥ@vVcr":!8NfMж ldpZ53=nxl)-2܌z,j9 = V(;Ptv_^wϞV{w t/_[41ݍ(V$ϋ}ZrZ^^\t:BX(٤L{֍u!syjUf&T*J%UAy׫V\.;ϥnUXJYծjZcR]9!.K@lˀc{ٗ R4LYIUV.5,k4GUub ?De7;(/Bp6ϑ\1:MH,3Vԉa" G^nTlnZ-?\7ԫ_o=6h]i>Y~tIOxv}vvvppj s8Hjׯ" fƒu9"i”^}q0$Zu>DIDATxx(T$ջ_dTPd?'@xϟZvvvE o޼9::z|Ǐv;{<նr_P L4wIV-a1 u T[ QP2u(D]SVD됎Q4wC[TJ(VĕLPp&"Q20=<^q#‡*WV!0I&aJ}(RyϓrDBaڑzA`0H oIT*Jfivg,[p\7"caP\N)%}T ARuu\m4Ba)nllQѐCd |>DZ\sX,F#GQav8NGZ!u ʳSW0giROiO><&96%<8D9uS)pגj O`"\かb΁}H0!*phDBÚc8ΐ)GWbrbkQ=# |RHːQ8:;,ӝܥO߫Ũ޳ln!4I >q'1`bw6xa,s/h#.@8DJi8 { 0bá!g;frzCY:eъj"vxT֚NlJƉd#$d%V} #xbD]y nϳܒfOsNN҃>{08t`$׳2ozDq K,9bd&fv)9&d( 2 &=* @ĺ4s Rj^rvU3v)M%L\&#^~i/<O='O7m ZHO _pйG~~A'@)NiPzs `G&>P{/9. ,GQ3+%أ*փ(vCg2>|([mOysݕ@i:7ume0r^a B( yG`VFǤ@ M6jp1OY|^8s^e/kF;a''ʗ@sZyRӇ!0(B󊣸c2fQ7DtƖ/#5~" 18qDx/DQOzBwxs8mmZc}gN 8?1T"cLQKRL)IïK(IDTe 5:Zό1%kι,Z\0`@)WƚTiŖ4u-}s.]{e@(0HCT~L掓!7@ ɇ#͋&'"uxuxggû}v6{ ggûaeA%Lom^ Rp@f`>Np[w)mE$bHDՖuƅ0|#Ƀ;h.{Dw.ؽWU.v|wIݻ$[3O\k_b;߭RМiCCPICC profilex}=H@_SR*"vqP,8J`Zu0 4$).kŪ "%/)=BTkP5Hcb6*v"c\bH/f9]gys*y>xEAj88F=VrHO^iTXtXML:com.adobe.xmp ;kGbKGD pHYs+tIME 'IDATc`@(Sx?6 &hIENDB`DarkRadiant-2.14.0/install/bitmaps/delete.png000066400000000000000000000006741413722237400210530ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME-UIIDAT8˥1Kagfe3C@Q[ [ I')`iW))R J!]f"wȰ(셁w{Ν$2T]$o( YPV h%L= hC{8 ꘌYO5; XFp<4` 7MipB /7oj_qoF1 >^`ј_#X ʘ;_8 ^ P<&B/J{c. ԱHfVN16$%ˡN"6IENDB`DarkRadiant-2.14.0/install/bitmaps/dontselectcurve.bmp000066400000000000000000000003561413722237400230110ustar00rootroot00000000000000BMv(" !""   !"!!"DarkRadiant-2.14.0/install/bitmaps/dontselectmodel.bmp000066400000000000000000000003561413722237400227650ustar00rootroot00000000000000BMv( ! "   "  ! DarkRadiant-2.14.0/install/bitmaps/dragresize_symm.png000066400000000000000000000003701413722237400230060ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME.2IDAT(ϥSA0kssC6CHᆤT0ƑI앍3KYgԼ'j+x䱇d< H琗Xydr~boUM>:q;L/ĩEIENDB`DarkRadiant-2.14.0/install/bitmaps/edit.png000066400000000000000000000014431413722237400205310ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME!"+IDAT8}MhEDm 6M7MJBChk XЂm`"^{PGE A{*Z`sX#؏fM`1!͚dw޷Fa͌QUppo T{(" X,dOS)brKI5Ba_X3;Io_c0EnC]?Mi;H` ^.Γ~r)ȍ|#R@-(` ߿F1gc~9mcuul1с_;X2_gxk(#M,ZϛCmq'atzڅVW64#ngu;o)ZW8A!?ǏC=yW1=&@?P I9.D5CB훈\+ C-3APCs. 0މ>z \DJĈJIt.]%Nٹx i$F-$ԚpZ4!.֒PkWE3(j$*)㿁 Q?DLwp7 D_w'bRsQR邴kw&K<ʁUhNu]VZI ުW œpM$|#qm Eݾ5tajhs.8++ 7hJnPCyOM2MNIENDB`DarkRadiant-2.14.0/install/bitmaps/ellipsis.png000066400000000000000000000002311413722237400214220ustar00rootroot00000000000000PNG  IHDR &ފbKGD pHYs  tIMEZR,&IDATו 86)lX~QSn#=IENDB`DarkRadiant-2.14.0/install/bitmaps/empty.png000066400000000000000000000002331413722237400207360ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME 11 L(IDAT8c?%B0j 9.4a)qMƻIENDB`DarkRadiant-2.14.0/install/bitmaps/farClipIn.png000066400000000000000000000003161413722237400214510ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<[IDAT8cd )bcQ3@ Y`85cA !Z36CpjfcQHd``h$v#(#P |#ٴIENDB`DarkRadiant-2.14.0/install/bitmaps/farClipOut.png000066400000000000000000000003001413722237400216430ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<MIDAT8c`:?lf hCi&h11 ah|j@#_I'y(IENDB`DarkRadiant-2.14.0/install/bitmaps/favourite.png000066400000000000000000000127241413722237400216140ustar00rootroot00000000000000PNG  IHDRaizTXtRaw profile type exifxՖ]& YE$@b9 =;^b@c,JEPcMUkiܤ!OԴY˭tzk{!#8a#rS#wb>5zPEjNԛ^U}Ndbu@@dB`7Mf>3NEdNI C'nv{BOAMt;ȹ rr@ͯMy SaRaIߺ𯆐)Âtqjw_xn:l lm6 *n6 B#hM$H&A3nuhwbIPq%IA7Q>$h9{䣏A>,#MuSCǟM:=iCCPICC profilex}=HPOJE*v(!Cu *(U,VhФ!Iqq\ ,V\uup77'E)" q=Vf`P5$b*_C~D9x=uSywߟ5MD9̦s'tAG.q.;,̰r=*J lbKGD pHYs  tIMEnMIDAT8͒ 0 D_AQ' a3+ZedV` OҠ Kb%w ?{ x ѺhwQI@`cj= &VJqaJ;7#T" K.6FA5&lqmhe݁538M|IENDB`DarkRadiant-2.14.0/install/bitmaps/file.png000066400000000000000000000127351413722237400205310ustar00rootroot00000000000000PNG  IHDRazTXtRaw profile type exifxV[+' gYx<';SЏ=\$0alRK.qv{ɺU`l%ʐ!{GHndzn(톄 m[6$[(}k۱^3+M˗il{v5u E[/U $=[L5WxhZe4"(E/22Pџa2G@])&*Qr߲\|ڐo/ݻ#'ŐQ/vS=tciCCPICC profilex}=H@ߦJE+ vqP,Hq*Bi+`r4iHR\ׂ?Ug]\AIEJ.)ޗQa5 e11[ (3Dz1u"<˻ѯMD9̦s'OtAG.q.:,̐IbJJ bKGD pHYs  ~tIME 4 !,#oIDAT8c`l?6\[[h֯_ pL&bL=pCss36Cu.CxAPR.`a<>blF2QmCa1>@|>N޾yŀ7t}5ntIENDB`DarkRadiant-2.14.0/install/bitmaps/file_open.png000066400000000000000000000003721413722237400215440ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME+X~IDAT(ϥ C{-LS8tY-Āf`=\ճm<.>8*GW"3l1[ FXK0*}b)H*%RRN,e1O*bEc0!{= ܕ4IENDB`DarkRadiant-2.14.0/install/bitmaps/file_save.png000066400000000000000000000003351413722237400215400ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME13jIDAT(œ C2y3PIX—<6H fZۑtl{rP+FAO/Y RS4d@Qfld%U7IENDB`DarkRadiant-2.14.0/install/bitmaps/floorSelected.png000066400000000000000000000005021413722237400223710ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIME13IDAT8œQwtIԄ+"ET_BPDdȊ\A9V ǝq7aU%ĄO\ץYqi mw V!V|JW/fD U cOhzH L^Ƀv0es,HkG23W Q~qT姕f"qvIENDB`DarkRadiant-2.14.0/install/bitmaps/folder16.png000066400000000000000000000003121413722237400212200ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<GIDAT8c`hx?N z x)j7anÀ@   y 90IENDB`DarkRadiant-2.14.0/install/bitmaps/free_model_rotation.png000066400000000000000000000005041413722237400236210ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME*_NIDAT8˝S <,d}=A)@>()!&M{l͝@;,((, _Ĺ 9%kZW`T0)`$@Zݼ_z 3dIEZ5188v--dw׸!5n=i<~MwIļ8Wu"\~+,og"-LզHz/IIENDB`DarkRadiant-2.14.0/install/bitmaps/grid_down.png000066400000000000000000000003151413722237400215550ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME*_NZIDAT8퓱 0 ֠`1)"Ӏ@p*$7ⱍm$EҋmF.OhOYGşr#I6z&|bQHIENDB`DarkRadiant-2.14.0/install/bitmaps/grid_snap.png000066400000000000000000000006111413722237400215460ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME*8bIDAT8˥SJ@]C x,o/ iV҃`ORbOB Đ>Xvyo$!"1ITW."=P"c{, L[q9% =coT#s̓ʵ]t@)$2 j HZ;n*ʙBv9PcE.ʎa@ȴph&¼eN :W5ǼT S |,{!xaр| 8IENDB`DarkRadiant-2.14.0/install/bitmaps/grid_toggle.png000066400000000000000000000005611413722237400220720ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME*8bIDAT8˥S1j@oc–qV)\R /!!MADQ&E: <0p.H2hxP߅]̲mQ!@$SK@*sUHBp!&f:MF3x|GFH`/^D0 X;Z@o.{G-M]綾tn<0]zQ- mkKnTCWW^H^P7IENDB`DarkRadiant-2.14.0/install/bitmaps/grid_up.png000066400000000000000000000003051413722237400212310ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME)fV9RIDAT8푱 PŞ!X9D/[8FCN \^f5ZAMLyrdQM|_p ߒdƞzIENDB`DarkRadiant-2.14.0/install/bitmaps/group_selection.png000066400000000000000000000004071413722237400230040ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME 1$aaIDAT(cd`̀e X `JvAb;0@h5. @c*#*_?6UL ۃi3~`Dp?C)y"b'8K#  c/ D8p̂q&[22̅݀cG\5!>֑IENDB`DarkRadiant-2.14.0/install/bitmaps/helpicon.png000066400000000000000000000016671413722237400214150ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME(Q/DIDAT8eKlTu<:mwiI &H+T4Ѣ1.MQb|FMX ՅM$&.4X4DЂ`(Fڙ-{3ss]4MY[XQQ̚#*.0;5;=?02,Vʺ;_۵龭RSbXia^ȑ5 ?>b׀9w8u>,2 @RSJC}f+3s \tc \_I]]{;1 n%?1#=Mo>pٮu`q1cXV_ŴtBWvN!ո˷ H,^׳OڄR9Nҽk//p!RPW{'y;Ci*^;V;:r($`1~A$ pC<'Z!R)JUmJ(\Yn.!R <]}l=7],PUquXDq_y)ɉüM7݃D Sl M,̧nS K FUSvyw?PDyKIL^>Iǣ"`n [k d<7~WCe*gp_/_ezX\gn~M21A.c]Lu tбm_4A2 em?F, NH.BY oYf7jTXKIj`@ K Sٽ@4.x7kbzP/9102Snvs5'<8ԓ0xɃ 0^1bW8z*3 g~y[Y )Vzzb9 |9*o gq^ Vl` #&GnFkMQ7\ctx vV&ęژ9uXrUwENVj@@Vj#&LGd/Vr^OIENDB`DarkRadiant-2.14.0/install/bitmaps/hscale_up.png000066400000000000000000000005751413722237400215540ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org< IDAT8NA@ W^5$|_ИXj̪gIGP]A +aB-ɼ.j;ɝ1ƁI[v@zo=Uf@lfLG 9k{Q?g~[g@,-@gM["up^ t[L,6cOq ESQJq32xn/3ZJ'n/&d P+Uo7hg,gGrٷLx4V^IENDB`DarkRadiant-2.14.0/install/bitmaps/icon.bmp000066400000000000000000000011661413722237400205300ustar00rootroot00000000000000BMvv( ! ! ! ! ! "!"""""!"""""" !""  !!!!!31331111111131131131111131331313131DarkRadiant-2.14.0/install/bitmaps/iconConsole16.png000066400000000000000000000004051413722237400222230ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME"ƱIDAT8Œ @ 8`qBGqsy=-6pp%&԰V z; ^??JEIENDB`DarkRadiant-2.14.0/install/bitmaps/iconDrawBBox.png000066400000000000000000000004341413722237400221240ustar00rootroot00000000000000PNG  IHDRH-bKGD pHYs  tIME!h IDAT(Ͻ[0E`Ÿ~wpO@rHxNҤwzj*aca )mS`vEA0 (5?XBhmuۏ#듎9Y 0=1<$af;9keC|Pᒺ[G}/kC?5f6IENDB`DarkRadiant-2.14.0/install/bitmaps/iconFilter16.png000066400000000000000000000004711413722237400220510ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME!h IDAT8˥S0k[0n@WKp|CMACncpI]0q["aI$">mPO8qߚ ( c)zìHplɨ9r4]K'o"%/(HB ĵ{jsn?YE>Ho,'iب2& ZOIIENDB`DarkRadiant-2.14.0/install/bitmaps/icon_ai.png000066400000000000000000000006511413722237400212050ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME(Q/6IDAT8˥AJ\AoD(DE) *xZl$ t6Ǜ SJm_:q4|Wm=bf%>F~#{2-1YWmh~$<5j4EMp%Lq׉Cm|O$]\|=XyLNC9/뵄V+7Յ*t5\ׂm ps|(9S5b%Ww>oq_XLsZOjՐ*&m.(9xRXe8CwIENDB`DarkRadiant-2.14.0/install/bitmaps/icon_angle.png000066400000000000000000000004601413722237400217000ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIME]?R5IDAT8˵ 1 EOHT`Jf5Ґ RpeF`*zDuMBcKc$ DM 9 -!De0;͡A'܁)D\PpKI@ 0rDYg̀&`*mZM\&)jجSV+LJ[h2Sew>IENDB`DarkRadiant-2.14.0/install/bitmaps/icon_bool.png000066400000000000000000000005251413722237400215470ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  d_tIME7_IDAT8ҿ.Aߊ(;:hD e[ƭ% "! DFb-T4so6{s3g'Pj 7wr|'E/-|g.q2az/)3_~Ӥ vp W(Cތ۸nM)&ZKna9Owت%<ĺ[[엡o])V+)>n%8y IENDB`DarkRadiant-2.14.0/install/bitmaps/icon_classname.png000066400000000000000000000004221413722237400225560ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME'2>IDAT8˭Q 0Dߤ) R/wL?jv YHvvfdZlaz7R\"W4I.%6vZŝ uюqSPrXw pqq 7JiޯW<3}Rܮ^Q9ZN3ӿ '_Itw>49&6W}IENDB`DarkRadiant-2.14.0/install/bitmaps/icon_color.png000066400000000000000000000003661413722237400217350ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME'2>IDAT8˭Q 0 D_do z=۟ RjkLL*-pP!7SG31gjz!HӮߏ^p%MG;P{04:݃.7Dcً?OfIENDB`DarkRadiant-2.14.0/install/bitmaps/icon_colour.png000066400000000000000000000003661413722237400221220ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME&IDAT8˭Q 0 D_do z=۟ RjkLL*-pP!7SG31gjz!HӮߏ^p%MG;P{04:݃.7Dcً?OfIENDB`DarkRadiant-2.14.0/install/bitmaps/icon_entity.png000066400000000000000000000004721413722237400221310ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME&IDAT8˕ 0 ?GLGG-@ #nAG(]hx4KrOgDnXo !*`5Z ̞ fnZϡ.sXo% x BxH\EuuH%(a8,Y5Ƿn"ijV{E19{vDyj]y`6csAB#IENDB`DarkRadiant-2.14.0/install/bitmaps/icon_float.png000066400000000000000000000004731413722237400217230ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  d_tIME%oSIDAT8ұJCQ ߵp')8r(TЩ];"}7R8NB>@G7p#{CfI KHV&>0Rŷꐆ裃ʜMf9n3|YQr*;wHM<~X"kpbK.~.Fn!}S!PG̲ 'bQ|%zGH(*qhNIENDB`DarkRadiant-2.14.0/install/bitmaps/icon_int.png000066400000000000000000000005011413722237400214000ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  d_tIME 4\eIDAT8?JA_S(m,=*)ǰSZhr/^~kfx{`9oR] gr|W4-TvpU{` )e!\3{ZqB5g,b/,m\Tzqc-%m+W]A]!t96o-Y(IENDB`DarkRadiant-2.14.0/install/bitmaps/icon_model.png000066400000000000000000000012671413722237400217200ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME%oSDIDAT8}NSQ>chbhL1 #&DcG$h|}'N8Ө( abb(*ҋ&p[_GL4qm&Wg X.Ħ\X}E pʼ~8ϻoͻ<dN TЄVPK nl&"\rTD#dG3OY)jRnךU.@C~{rujM|%Ujm PQ%an9O{1W]d6#nX" R(4m@l>KMC10a``x,OHlW20J.a߉sg``EH-Y'D>);IENDB`DarkRadiant-2.14.0/install/bitmaps/icon_text.png000066400000000000000000000002731413722237400216000ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME#'HIDAT8c?%Bc02bF$1LL%b6 9*8j69iK2%]IENDB`DarkRadiant-2.14.0/install/bitmaps/icon_texture.png000066400000000000000000000003421413722237400223110ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME#'oIDAT8c?%,S<Ƣ@1nd(,(% gݎ(3e:+s)Lfgs}(IENDB`DarkRadiant-2.14.0/install/bitmaps/icon_vector3.png000066400000000000000000000003631413722237400222010ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  d_tIME"ƱIDAT8˥Q C[@%|,WՀT*[|TN0#bw @:KXlM צ~x9UPkIENDB`DarkRadiant-2.14.0/install/bitmaps/incoming_commits.png000066400000000000000000000152661413722237400231520ustar00rootroot00000000000000PNG  IHDRVΎWzTXtRaw profile type exifxڭX[**f <`?%pN$wD(ԢgL$%†K.ٌOwy_?f`Q(y7Vź7dž@Dm(] f em!E9.U/%̱ [0lb#(Zvm:rչzY sv (+a;}O>.,,N$G.H1ŜlbO!I)1iogtȹ_BK*}*5RM57۸A'ZhbK-wJuC{y7CFi;k/u̍5;Ҏrg ܆0*'^9c0.*g[4YRꔳ-Y3 +ӌ2]7sȹ7{c9R0 kMO1Mt*cS8em 䥤RKr[7R Ƹ-5dd&3-.$o|1?>ᦓ'|)ƶ賳~: Jl4Zq Σ4SaP!J=*xJk*] M }VP/H@GYbZ%sj&n4MH9 Z >b>ǃ5LIjm52Y9"0fB.Pz7;ػ F}:F"㇋0 :KqޢI3op,<:s8}7szm{OM{XٸP0t+CMx9Ws@SZjT%E `#T#]L_kNexT#5M"!jUkpK򿕥e \Pqv8UM{ޏD݀taEKUKܥ~5u5p gCN8ò.0}m)Ȉ:kgP AlYIi;K pr%5ZlZmzŽN t5kb 2ՐSddn8E4cMy'xUjF]}ɤ練Jz``OH 0Lΰ",~jc3T;hDbX|kY#>7ޘH5:}i8::W@k2:IiN@RϝUl@O"FULʣ^sv*aG-{0ZFVCM2a.d'g U+؋uEh}|"}zG_3G ~ /̴S? }'On;GE(AL-B5͔ SE![RĦd ɇ1ـӳ- \h5%i6{iCCPICC profilex}=H@_S"-"vqX,8J`Zu0 4$).kŪ "%/)=BTkP5Hcb6*^@cDbH/f9]gysHj88Ɗ=rr~7iTXtXML:com.adobe.xmp fbKGD pHYs  tIME#1KIDAT8c``'?]?\x2QED jDKk Õɰd\~ BxwIENDB`DarkRadiant-2.14.0/install/bitmaps/increase.png000066400000000000000000000131631413722237400213770ustar00rootroot00000000000000PNG  IHDR AW.zTXtRaw profile type exifx[( Y,zN`??I'[̌ c>!ampQ><\1?Ϋ;q+]==χ]S^?zntpv#} rK,~ ʗ ]J(6eƩ3M>,wjэoRkݩUZD3H n)F bvdƮPtZ@0btgq}}B#7:m!aZpl?,*3/4OG!G2&:OR1GJهU7!(2p)*dNӕ2"lluETSV֡Zw`/R+9d6Y7q7w }p6sPB\ fݢ|5lcGl}>ctKȒ>"|4d1L:QMNa_ /5HG;&T "(]|ldںl0B.pQLhVL2 JUNRsiGw;Y1q&9j^Ñ;r壷[aVCiJ] Ս(XڥqV>|I1 u1KH/ZiCCPICC profilex}=H@_SR*"vqP,8J`Zu0 4$).kŪ "%/)=BTkP5Hcb6*v"c\bH/f9]gys*y>xEAj88F=VrHO^iTXtXML:com.adobe.xmp #bKGD pHYs+tIME !XR$IDATc`>)_ BFdUȀzvPj IENDB`DarkRadiant-2.14.0/install/bitmaps/invisible.png000066400000000000000000000130571413722237400215740ustar00rootroot00000000000000PNG  IHDRazTXtRaw profile type exifx[#+ YY1pfgn餓VZ:)Te lgHt࢜MsW!sb~$O @jyM?8v|r8ۃ#1~8ʇ#ʾ,Kc\[66ߞh!!{]a!0d@<$X%!!?=R4za"q;/N1'"@@1K"pWlIe݌3 T$ XPըIM(1D1$),TL,Zd,[ɜSs)Z`tAR*Wj5Uii-5s-ҹK9cOze@)0tđ5:FjuL5 MtA8 8E͋7 Bʘ.81 X']n~BBgnOkӼچ+^aXa+Gm;௣?ьl:R*tYjp p0&pjtRwu~Wh3ب_HV7z&;.#i <~Fߔo5>N4u|^xwW{oiar(‹iTXtXML:com.adobe.xmp 2zabKGD pHYsodtIME7!i:IDAT8=JQmQB$сM{6@ bZ5$MKk3" ȩ{9Re'%[z-34t=yf1S3]EB&p\H)86}{m|{ﻵSifkb " 3d!H? {/ƪ> lb97jb\@X_!'IENDB`DarkRadiant-2.14.0/install/bitmaps/layer.png000066400000000000000000000005661413722237400207250ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME IDAT8˥@E,P`ebiCl aL l6c"Oq-63Ɍ*K`D_**n"e4M"m;Bڛ@CS<9Vy^{,&unG$}1f~k^"Bu4M Y@UN'Dk-^#n7( <8عEQp8hoar<q!o6[.:&Yzw4n^0IENDB`DarkRadiant-2.14.0/install/bitmaps/layers.png000066400000000000000000000006561413722237400211100ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME ;IDAT8˝n@ ?'!j˔}N}1RĂZMu=:fH5X:>۟~|(=LU iy6q~ S'^lsUFLDQdBU[;ﷀ*e1tک`ݶl12$a4QUX,(˲XI"Gv"b8r`#"c0,2Nt:l|* :?c5A <4M) Eaǻdް[ͨ|>Wmig/CxAq?% '~~`[3IENDB`DarkRadiant-2.14.0/install/bitmaps/lightingMode.png000066400000000000000000000005041413722237400222130ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<IDAT8Փ= @]/#\# T]ڒ1ѳ K H6N*fs򱆉QfqbՋ!Z*ikoq* 5ѵqvk并m8$\H>j׼/bD1IENDB`DarkRadiant-2.14.0/install/bitmaps/logo.png000066400000000000000000001002471413722237400205460ustar00rootroot00000000000000PNG  IHDR;LbKGD pHYsgRtIME슠 IDATx[eq>>s " SXER7=8lؖa H0H鞾ޫ*3+k9=='ΜϾUY_nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnv<ɫ  7lO{6?̟p VZwwɭOn=s?c/G""JnL ! f1CD`63B4Dt+*"r_/߼ry}`b飣/ϦbAD30CJD D[߫k_*_ݐ*Ao?qqa=~],gg^x"14L11ljHhj,ffffDz2TNIEJAUPMXj)2Y)Rk!BUC@$@d1ՔYDOnD䔾|7[SroB\ C&f~("!2"!bBE @0DD4fb_jO?='?w? ϗ!3'!I LEHU쳗W\Hfp||WŤV!qR PrpyR9gffNz9s"U:ֽb\,.VWWW)e"‰J5PE^ w^]/?ut''|t_\E'>|H""Q8sBtsDI-03#@G 7|lZO_2hU$bf;_=|juyq* 41"*-/FUEL@rXD)} #L4.|?3 Ժ.8T13SarʀCNfXsbf@1q1H̦vvq)ZTTRDIJR9131.oy5?S#p||쳉 ok7Dďȷ(fdFѰ 0! d"$on{zG>췿OGV9Z%$jr#" f\J8>TjULHŕT)RTTT-qCVSZ8,3>̦Ry朆a<;;+k߻wGrh?O<ӜX#T5FfFR+!!x~zH0LDFZ Cb""i1TKs\C@D*&"8䁉RN>g>g~k_ַƗ?}px|<0As4l>^5P-߸f23CQ o89YPi 9A9_:#D1@ikfYL7no?6;o;;L)q"U55bon> ̔L挎a l@D?0 80sHfRZ-snf3@sz3䁙C."2sRĜ)8DDfn<Ɖ}#ۃ3*""UN6L_b B@$7^/?Gs}yqqÉ88".nػqԋ6#"zy k>jsFӈ4 D{GG|uzq\/?Oyޛޮ03 03PX{xU$&)! mOIMDy18)q\RJLΐ33KOBSQ{q۷NtM|?{||(UԬV!$`CX!;fN]<!%N)1LI'*"D~ʙ ))8V1$"޻[wC}'򳯾v֭}tɃWd ρ}A8DDsȆ>-'px ߺ)E1ё]<񽽊8,sohBH  +` #ᱰMRًΨ%U31?>&K9x>K?'_/^^]~//W D@M4 TR% $2"ffRTMi>CRJ9e< E-̜+`* jDÐ -qIUbRݷUMUn|=/0>q;!1 CYUkSRUb0#Bf81[ץ"s`3H #qb00@)1z@Cloݹ{:_ x^ѻ9:=#''U ƯplXYs f{s2(vVK<2C7@σO;_[LSQfd"? ! TIaȋrǜ0<Ÿ@jZK-\2$0U3/SAa+!Wk0P;w0z^{!?ˡq\³{82 ǹU+x"3P#b"f&4PQ+0"3DL(-'23Brhy6#*L)1=|7KOӟ{7 f>{|Rɰf`; "lXj-n{|o;: J3!9x#J=һ~y-trK7fE,bDM0̦ZT戳mQ(@?ݏa9&1x- !TΞwYTя}坻oWSNLD'P3,8Ki̙b1.0sq:h6t@ = fbNfx 3Ąd3X 15Cd|~prq0/襜`)V: hDdcS2 ѺZC)e?oHc8"wF^O5^+Z,{< T__Dt歋K3U@D DaHCJyR8cÜ"ZJ5S@2Z*`*U44`i~FDLٽ ǰ)qJiaȜ91y)" 33"j~͛o)ɓ05Sju~q~ԱD2:@A @+He|4ժHNU[  hNp&圪 $L;c DjT3Rp̤VNW/Gh]">g@ "MՈ3ոE㠤1շ5D53}>:v4-".4'_NcTu_Q"Bm"&Iv@NnB8+l|*ժ:'HnlfUT''p꫷/ý @DLc53jjy0Zt j2?px~ T u3!J**3`)e>1%2} 1%FR2bRH4 Lkf9wM M2D EDKÐ9e2DxV9MČJ:<T& 94#UR@!"9%5uCtQ23"o5W2N@djGKN!fH(6sHڪr d0Iwa-^ 2lUu,IԤUdyLzoOc_RֵRT0*nW酪1suG1,T0:֫0dGJgN* &lnh 'sVG}/*(T% :֕d9$RT AT <Ґ1R QrB$K0AS⏂:x$54 ϹYDf1LSCBbHWwnWjEI˞}xgC.r{S M;mA3EGWHt"9]0U`q^{| #`. -%q7GD6'"<|h=MCJ)JU0̦DHZ 0s^UxC`[FECyP߫zNWkM<u*s:)D\R굲SZ4,M)'3S1fQa9df~0!qrn)1rJDTjN&hq0>%asN6x$ '4}Շt=LլU*[/ IU Hӭ9DU2ZO 5~Fx!LuS QT3/ fh @B4U;9Q7?_[/ua&AS+HX/q<&)dRՔHcQT.<kZZ1!Qb)!5+sGg LLUDUWWWe*ɼXȫr8 zJE@ @Di B&BR[ Bb┠fʉZV uĹ hP­:LYY3 k}۫?aqx# H)u((Jo<31 &v$ad%0 C2yp^R"wP84 )%RUъD`8;HLL?*JGkG {HmkHjwoHo֩sЉz}NX]jTюam|9GE C"EPM 7XC+Ď.a4M\jAZVSJV5ĄT#!FYo*=ݲ-3)2Νouz9ޜT=:4  C `g22ZLqbylkWSq1 9qëhE"dzTKU toLm\43;"3lL߬F͉#i0Ӡ37H@Tzlq/KEU1{"hT,U`DbVUO;_3|q<9NJHð`*ruU00aJ, 3323hِAZUEdF*3nfU44a&A)L@UTj-R%"2P A*DN~4MzooD@ g"$I՘TELz VmPegR j]JhZDԦRT8"'ULM7bo@:>q$z)c89:됼sƒhj NӚIU``QxȈS(k6;\Zd x| o>ӯ鋿Ezd}q 8"W/EeH>MMeDjS)SZuFUIJJ+\9] Rb…'WTKUTGF"A7(Ujy[SU< fce (sDNp޿&fS!'V `Ɉ Nv򽉞 xȻ,!lFzqڻ!l~4{շd#"^9YI\$+7 ) oUqbg :ب+80 `(9n{hVĻ̼{ppWη//ox4Mܐ&VQ'BČVU٭ S)Ĭjfb=À*)A#?}::((U۴^:լ;qOG3qx$[Og";\144+!NqDzit̙S ڜD-%g:[t'sc9Yc8gX 7D2Yאem>jeD45m2O;>vBe#iicvp5>'{6Ionl¬WuH 5,(S~Viy!񏚉jbv;[WO8Neč8Ss©2cnZ;~՞F{5FUc^bu&q t~lkfTv8z#>2W`|Fբ,0J@b^V׀(t4LJA+`ߋMU%!82!sFs@USs-uZ,X_-Y'Ib\pƱ,֭.}~>]c˙To]^tJ1W41זt!xSlmdiZV(-hSc`:0[hf"uOuo]q4z?L ʽ{uf_=o6]k{!(p;oU۳AkqiĴsU5c Һįj]R9a3Gw=sy6ץϒoD<=mHTm['X 6I9̹fg.ޝRͷ+Ӣ\`u]Mh~v| xVFж-\p9{?HwI"ת:h\N@R7w>AÑx3iڕbJK6}|fm939l{3vG-ҵ=Ia@:ZZM|-)(t!PZݮl:=Q(~h1ΰc91Odh?%#. ؅~;oЅ3mKvuE,mp-Lag5xψjC-":zX7C.)"vu ||T#FD mNnCV7^(T֨]o /^рn__%?uin?hǓ׸vvڍ.32tvLм4UdnuclS86JWXފZZ>dDlI=DfՖs[۝a:H@^a\}nU"o%rV+a@}C /qm"9ϧ^wZH⭳e>|fRC^?x=yB\0gD m:pmЭhz!> YH`Mmj蠋3~U+Wk\I0<"Grg]Z"ŬMb%tSIoIg4U6C3^d `jF*1h_WِM͡ya>FXخF8xM'hWjMpܿ9?T$h"LZ#]?msC6$tYuOpE F°NFq68:eXWxE 2AўIG-"F@2,bQ{DZ,xυޗ!;yV;@p ^ DO<:AجNcbw޷c1<ݳ~7غ<:PCifHDOQ$ѐp3rsk3f7/βqG\=C5 o7:=6b[+wDk]MS`Clyvתz4yU:z{$"CUf ®zg9mѶGZ;x x@:hgHf3["٬_!oUF A K1‘B.T1BhY ص[;yw\s f9bvk=5396أI:zF pV6iY2EmD#Em|xvT YmrѢ|%Z*HۏثlM=3#QjZ#HWvHh0#qq ,kڀH8`\l jV* g=od:ze3ΔAfnMp^kXחo3NhĶKp-ٓ} 2͖*!%N?_F׮<03dv&TbNroܺ}!soiRݙ誛j'y_Km4yDŽNY燶 :co.=m?Q' {hFXө<(]TՑ{{ %L_}CZk-NՉ 8֘B#Mƺ)"?G`#3.jVDVYe洴ƽV7rU' {M3l{ƒLshܾ1]\\\x6/HD~К?`hD]5Nלity?u;}wd K0foRSR[GZ|SEÍcsMNW}V2+޹HcfU^^__^{m*:h'$mtg6Zt=uzH@u ޵9~^+7&GFfkm.lsjm/@4F f%8;~](NG bBw4M Z:ƚjg]q [釄 P4 A|\LP!f5:[T Vں I Z{?T8Z$s Q+lV6Ft1$s~m}so;lSl=qyiAk%}E{B πiM2.&DH4YUW:m$dIf-GoޣK6kKE֟Ԉ<Ռ,ՂLu q@MBYe.VA]vO<ӷatR30n)QsJ.o"dvoPZD;@/Dѿa(f};`kvJ"mp@[<tM<J4~.Q8n&QE) v|'qrpAPrp4SZ{#-0bԥojUDx"~x!6z0ӻNx !m[]0@Y!_ڱ#S702jaۨn!6ÓT%]yق[h}ö́z@[8"uf }pVPmKԦ1K_lbz륚UKq1VJخp@ ê5Sne]6$ t ]^Y8y|q}orNކ[u,RnQnMӥ<"hp}-ysˡmAuɖtWVk1<\_q!w0:ߨ;(Pw6z?D(QPDgvJ av4^sߞED ,S~Mv^i|L:353v[us{Db,ӳZ,BZf `c352athҰ58ڱ#Z[NQ}PJ_.z6֧ȭ+;m{f%``]hVbx-v}N\ v@bo>L{NU`@I3[d Gv}K{(b0rz[6- ykݠyH錷1Tt{{z xhثqoh7`wD'h9RaA+wՆjw{B{7N؍gHQEl35&1ߣA&vHB1qVov/5.H.]`0tk܇N)4 >0BERdd_cߕ&w@X%Ly}9jvZΎ iB}fSSTlC)' 8[{[īۆNI``(Hn^Yuw?`/wހ&6+rz>6"4v歠1umIʰAtmԅnH뜙zVVuFFRh!@ IFko-QCvAvvΔZ1݃~L4 l:8Mse_mɯENOZz3xW'RSHUu615q#9Ewkg9?0@h}G5ԋӉ;ٴ*@] lv5"!5'A78`~{Su6vBp U[}QN o PǔNgMMUiNb̖kaB|~ߘ^йD!>ɴ[3t-)a_64D&Evw 6A gtMU[Eum;D G7S` uI$Oem3rfkՋRaN^r[jS 1xr?tV0V$gڐVN -0bo=FJĢop?y8_ϟT0#3ZfGZ!a)eZO`X.04 T@)!ׅJ!&f)1!R`X*L2) s"&fÇWٳ3z6 +ZS r!I1/Ip$LͤAT%@LPPoVSN4 ƔƧ|RRxU4=XGtqrtv~T> 1VkSTL1T],&T뵪Vi]TM"rH0MJB)R~uCW'?"LH/.VᣣÓ{Y)D`q|(塔 ƼTŋߤ!I lZyX,TLR&f" 8::d&SZz_(1boʫ8uyzZT_y%$-﷦55́oW0悎>Douc!J8^C >Rզ½ٮ>Pj;wN/pxK/ >SWպ:2#Rk3@RZ$Z񍧟Qd8DTfuj=bH)/Wy@ EkZ*1#jr cJY-${{r_SN,Uݼ^MSJ"*Uj K04ӿWTrӸʣi*92 DLY)'"e^,y˽+WjrRFg~֭>wuggr9WU`(q'1nG Jclc`FOm}CΰXU?߹{l*/3/<uzgg"b-DVRk> wRFH0MB7E^]EϧiZW-RU+sSy0˕C愈ZS0bLӪJ2M -4-{QIs[ STq Y=Ϧ/~b^K"rttp_o*#t41AEI>7p!0!#!wQQ IDATZPT8<՘ Sq(abDBB&_HLt{{ѵrJ8$Zz !Ӝ2Yi>[%Jh)Tz}.9e&4RQ՚H4dE0aJ33eC BǑG~D; ~J=}| `:xC܈(['cۻQrLom혻M믦 41zB t{Sy{Rk3<5 "11-FZV"Gf&0w㉈|1 *8DH8 ^fBDTJElh9"34%"L$FLt\9 [c:[.zr !TVQx>Y,"f 30LTQ13J"բD@DRlDa"1|y:? ypxg@t8 @+٘'zuS{ <6+k Jh3kt_N@|HL h42N(Rhji.{Kyg}`8M0 O=0$)yKNJ3L>DZ \JLdfLLHR DÐaƁ qvH* `Z_^\^V?6>'sCqG")!aJl{$Grd .,rH6GfGdWveG`(۽۽͙%]7P23"LUA,,2b1F D^"]MU=Ge%<㐤!(!8F2K) R,)^ʄ/k j*XW9. #A`T"%R_ooJ1~~׿UڑF+M6A9S`j V.K,Mu9zuWDf]\fPJO?})UE!FNľPD8& D->0313n6#QLs T#w}~Lye50P0숢y: ? D0rvyzbuYSLbbV , ) bCP:8(3b  P|)"LhjQb ay9&Ue y6]^)uɤ5ɵ5Xgz_*t؆ކKٛ&UbmlWl8;U^|5O=ů8C?f,²"%  T-Qc!vٌv)raPVT| օ<&65S P LΌ o-"㱔K}(r8ͳgO MpFĢL@B L 23i2J,K13fL)q`w$a[1!Z`1z7Kn8у{_DZyҧ~m3RH S 88!aHC1"cl8)ES)9*""I)BD!rH&".ckYg"fD! z0"w"ŋ-Kb]c A0!IQ<31&K)"È0#aC9/)b U)0r*CUJ?="!?/~tǵ=W8N,@fhM0{5t=YQ'8g)@J)!RQ3Eg{dSSEђZI!1º' Aë!k VU"fVk /%D63 h_*W_ID~3"W_~8oT^;mѶCm-iI#4!~ޞc48={* +6X}\_z9Mo?g}lBRa."P1 D*2ϳNjLK.cl͕TtUJVQ+Ґ a1shb.jXJ^bbf H@8 D")Ƶ{ 1HeY\\z3|h!002߁̤a[jZ.bMļ@4R]$A@bORL_|2,Ͽy7DX!V9ݳi5IFK L>6Bc]ic1'DQ:wˢ"]w8|٧ÐE U+y)v ga6H2"JЏRB RV1(ҩQ W)1 !oH!FS H` )e2!SC!@BO=m+&6pC^SU.EID*Z* (1ZyM`\cĈ`h`R"FU0]\c>$vJ)tnnb>R̮C`泖|םۥTe]#dvڡ&OW0t֟Zk/{Nk7@yY/nA4w~531J @b )Ey5pW|C9@S@)~=T˪]7D}p4D4DHK)FL}!EDTTE4ϟ!gϮW'OL a8\/m%|\DU̘ W%TX#""\ /9QC"~+Su F<̪'f@B@ؖԜV,n#B LsiV@(`@FH:D mZ-"*˼$j,3%- s8 @!F?ɗo- GsS ~ۿi24y| b〡ZϝBv3vcfk]aMHkBm@: Y*Ī%wׯoE*߆qQ ؊/KfqL+^!ĘRj*v)j%B%DbyN"Ðdq4QH`99!b- DqU!ȀLy)"Ts{9zv͈Ucf^!p̅BQ$ @V1TyQQ@ǖAT!G xE7?vAJwCJ)Ԫ֨L"> b4=4Ezv{Ijv+n^镶TWŬjQZ;|q{{[4t! 7^J1A)b`!o!y@<"U=/9e-φN.W_iZZ鄅_RBww8q:(""_|՟>}GOahMRJ+=%΅ni1Y^@J!pw1h1S h!q!X!(Si Bbf@K^ `yY%|ys8ݎWf}9"9xJ+O P!މ8P)j\OSS( p5VPSG8׷et:/x,rŘ\V¤Rۺ56 LXMN$R.4wd8ѡS[TY@s.Y7~}/R'8T#B#f0Bl7}d벞4U/hUQ !0t 9DTΧK)_4!1s6Rh3Df"$כQU5>/~Ͽ Rtṿ:2 ZWӴbh,ѱjh}mZt9\c^`Y4zK4|uww,nYO)?/_wϞ=3%)k6Dtl}PTV0FD}0Ky~aTfRP 'N|5T1(j<bB1"2˗ȉ1<}d^_Sd"U p;ŋ+~LAkmDL,ET Y9+؄*"R;f` 8NG"a])6LoKߜ.lqdi)_t r)ay ~@31/^~W'CD'7L6x1cED f3l69=AC̾E+c:EB^MHL1D)grD$)G9r!=}vﮮ^~ǜ~?y!2}]J]t}L`^oX碬BDrhʗVFǵW_oq=dȖyd.Χ)>u8Ps z8"]0ԟrT:,_|y{{~_wI DޯdD 1mLَ&$9ɝT5Gu68",nj6)8^xӿ*-jE~c&q0F&j Bu0E!0,QUQb߬e 9 f"HT$wO̦iq@c)?~mC(M[fC.X|ٜ#pT0sVf$?Ry1~ϟ?rH\ӎYBuT ѐ6WfTJjJd 5yz1@`.b`SUU.M4,s)?Q!c^NϞ=կ~1 i۪2^Vv2뤘n288Q43-1bYq:3Px-p8|sU˹NNf0~aQml- v`rѴv;0j5,16AN˯VNZVfT &6ƨj_jj:t,AYT֭xoBϲ]*m|ZFL*rի"neָ,rw9?gO^x_ƈai*gΌ#p߆g=90sy50D8M<͏2ff"ѯvF^KTځozOiOICG.r,ww&?o0nf_ŃuavDEv+%m6]2L#EEz!gϞ04͗Pez)=']$bj|%!t|}\y1-D<ͩ@וr`o f}ҫ8[oOYpg":>^tD1>BY~}ןny7@-^`{ioΩ?p"? Sӿ"%#n|olm4M669 ޏ6DLD۷5x* ;vMy9.m'}wyA`{ūW!p>>>>>>>>>>>>>>>>>>>ޫ_ J9gx}xϯJW/ZCr^V=T vb{z0LG3/x$#'`RG#~#6 ,|R0 SٹȈ b9gbU[ <#vE'>pg*3uWboR{m~gn_}2]=>o }hFx ͪ[ϡp-&Uc MD}Lmu%92-Ҫ 80DbP_R q1UbJ6hY`Z,⫝:}#Uo~/TE$8MR "yr3t:){"0!&U,Rţ6C n⪤fz6p;B@WZD(˲R\]]tiZE֤ZC $ W]u昢W"`q0;iTJ%w=iȵ2o>0,+Ŭt4"A qH%b)HCFlKQExYo$0 iH&pn700Sk/.W4")f1t:^QOӲ, 3Sw1?zG&q?Q8q d[Whw77w߫9mU=ƘRH)]_]tHɽnLIӔ37;`VUO\r.9/󼘙!QJ%npJ) )"Qf3!m7ab!N zRLrcFN<0qa)xH*Vuq*^Q,x9<+1B]5Z=s)^)L IDAT1~S)i8=Ps^Nt:I}U6]JC\.Of-jJQcݲޢGe?bΣ73)F}=ݽ~Zč|tn7C8,ˬb",y.XRȁ 9Dq׷i4M, !~Sqtar`q=k^_.舥i/qGn~n |8@c)> "D1b fR?1w?y9O9g AGDbL؈EdU B)FoJY_j)L90!"! U9 bDdy7 Lt^TPqf)Tf?Tkl0 -ʥѸ2]<r.n_rB1k?<~p80FC֪Mʫc+SsYy^2iy }X S!6cJ{O2Mo}cksvnǫ0$܋d6DR-HnNZvqgb9B c+ޫ5XO>7BƦYO +yRJRl 0PAetRYKĜ<-%貈:G`ƪv9@D]mGTh5mJ&(rMӲ=3쓏 CJ)H Gvn{ijft\&40U$W_5DQs3)e &\UՈ`%VӒ'LϿzDw[c48l6#?yrm2?I:GMmk@5ݒ;*F X?HDzjY߄N* bU.Ԭk( @ a aѥkyZ5''CA9KPT[BL3Kc8|Ze9.KƔ8̮Oi={RI8TIX+NѬpz;oUC)f3^]b?Gg?"FfVA5͹ۻòi;#w卋m6ҁĸNt`Tu$ w2+M@9e^JyOiYR\(ɍpgϮCfw{Sjdb){f :tF͆'TΞ%zD$hul$pUӊJ'zs«'bZ\R,wIr)3]NTg?tͭ!ƫ.䭺`"둲>%zR@vaۜ~}0gG1Á0O4]LJIM}$/ŵN)p^NBIlvۍZ?8WW\?"nnnt6M| ؈̃C55{"82m|;$H+z`-j=kgY7~Vջyr^[|Ec^;]_?{jXgGw*cer)]`utu,=:pY93i9/yBL)øَXJyc2%7]aԽV#V \qifs9)&bEt\m:?Vl:6}ۄ5 U?5䨷}vAxܹ*$q3v uRqLhDxXk5j`6n~MTrD1FN E4˒>^ՄT,R!zf>6ԳwS7իW4xYTU0m#!A&]器H㧁wۂgvҩBʚS]"f|w8Z^ۛۜLvԙczڟh5%>\ܪ#vvTF+hgv J޾rq=o̺~'oD|C;("wwDՕO, U!h:ʍ8@AU3'Tw!boDC8`c6\է^0MӫW}90{Xx4tFKu3ZwL|Vn7C.혋5B^$lDMd-эQk|y^yID ,E$B,R;uh)mb}$ Ü3\Ts)YiQKs)+E̶?l6^n0k-MK9 ?s:/bR(Ni99!U9F,qj7C&.bE-lqllj_rJ`eZ1!T%DK)&bl6JLj @k%va{i0ണl.cbZ58"Bb ˲T6yt{wJUӲܞNK)ə511zZip:_|U!aL1WwSvꈓRly^[>z$DRLU^mݟ~hf2yČDicйtӶ\iNGuS. q}ϴO}jB=n8n{11ˤuIqAʰ;b&cJ8YV;l#YJ)di^륰WX/;an1 3=CB\aXYk̥nI)ŔƔDx3 2ݸy'f |!\u9QX34,&f\ *Rr<׳|mW"1%wTTm4uxi:77?p|v3ƔgUhy3f3M[0稵c  BfuM7Je) ڒKe%RTt:NyYW"N<s IaF٥gi%jwUjGX4^u2ح\"m jI1|s:-U̙ٳ'e)u[bB8Rs1N7h]ig[V;ϬZ:n0/ Hx8yK~4w3 ilYwo1EiKk\=!qPo_Zę93pZ0q@BvRcO >aeQ:'KH"j"s$R_}Y?m:mkABݾ={ Nޭ 5r&{DYun># 3S>('t:uct/Ѻn@gf4ͪiX|գdv%e^D֩[g!eLe媊 hdB4òd+R5|C|n80W _F S5C)h1Q8*ȱGԬdqe̜gQMH" a1u`*^̜*Cn"8Y*jVuLmݗ͡=7a?= {nmz79U\/_^!nqAAsέ4/SrI*= kq@ՋU{Zw+}.St!K RV!JLf_ .ܯ|G9o7<xV`oD#.L!vei![q厮e:[\Naڵ̳zk 1&D>{wI0+nZ3A@ Qe#w>9, 5q{hvT: Ľqz n=x3w}RR(vus 1 _boSw3?.r~8'_^fn+c4SsԼ azC/ bQy' ۥa7NoEy۰˴u̮4Dt5~v/q{"绯a70xp*ZYBMnG G~d趡uFjU] Cl a}:?.u`<51}y2t/-E٥ێL(^..˳VX7iTﯽNwk5Z&{ }9? _~DžDPz?-=D?yʺ>ޘ*+m>Q*Vy^lt7ŷD2>:XwIGBFFћ>>?w搷Dk3{ujr/ٳ"a'mXM_IDAT}1 IENDB`DarkRadiant-2.14.0/install/bitmaps/logo_old.bmp000066400000000000000000001354761413722237400214120ustar00rootroot00000000000000BM>6(~~  ě̛כқ⛛샃[[llዋnn\\䋋샃[[llΑhhh___???aaaKKKEEEAAA WW//j]W##bBBwWWW[UUWW]WWWAAw++hW""aWWAAwWWW\TTWW33mW _BBxW!!`ttXWWWhhh!!!!!! KKKAAA WW//jddWWzzWWMMܯ''dWW,,hW[GG|WW""aWWWWNNܮ''dWW33mW _BBxW!!` `W""atthhh篯%%%???wwwUUUKKKCCCAAA WW//j]W""aWWWWXW__""aW""aWWWWWW33mW _BBxW!!`WWWWhhh  KKK鋋"""<<<~~~WW,,hGG|WW##bW `oo\\WWWW99rW""aWW""aW!!`oo\\WW33mW_BBxW!!`WW]]hhh;;;<<<$$$KKK WWX!!`YWZiiEEz]WWWWWWW77pW""aWWDDz]WWWWW33mW[??vW!!`WW]]hhhTTTrrrKKK 333WWX!!` `YY[[䋋WWYWQQ^W""aWW䉉WW33mWX//jW))fWW]]hhh<<< ///MMMKKK̫ZZZWW,,h蘘ZW[[||rrǙ44nW^::rWX]]22lWW""aWWzzssǘ44nW^33mWW""aggKK~WWOOUUWW++h````hhhRRR 222KKKXXX...AAAZZZWW//j!!`W%%ciiXWWWW]''dWWYYY22lW""aWWggXWWWW]33mW^uu[WW!!`WWWWWWsshhh氰'''AAA###KKK222AAACCCTTTWW--i[W$$c鰰ƒ闗==tW""a쮮Ů鯯ƒͮŲՉWWDDyŮhhh!!!###### KKK--- AAAFFFTTTWWY//j//k]WWPP==tW""a⃃WW]]hhhaaaqqqPPPKKKAAAKKKNNNWWWWWW!!aVV==tW""aWW??v??v{{ƞߟ㞞ооопiiII}TTII}II}MMM ,,,xx@CCCCCCCCCCCCCCCE,,, MMM444tt NYYYYYYYYYYYYYYYYYJ444444wwLYYYYYYYYYYYYYYYYYYXJ444444uu NYYYYYYYYYYYYYYYYYYYYXK444444vvLYYYYYYYYYYYYYYYYYYYYYYXJ444444ww NYYYYYYYYYYYYYYYYYYYYYYYYXK444444uuLYYYYYYYYYYYYYYYYYYYYYYYYYYXJ444444yy NYYYYYYYYYYYYYYYYYYYYYYYYYYYYXJ444444ssMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXI444444zzNYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXJ444444rrMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYI444444zzMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXI444CCCssMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYJCCC;;;zzMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXI;;;砠uu NYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXJyyLYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXJ΃ IYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYX//NllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&LMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&LMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&LEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEZZMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&LZZEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllllYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY""kMYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&&L""kYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYllEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEZZ GYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW;;VZZEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE HYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW((NKYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW//RkkkgggGYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW%%Kgggkkkhhh```KYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW//R```hhhhhhgggGYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW&&Lggghhhhhh```KYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW..R```hhhhhhggg HYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW))Nggghhhhhhggg KYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYW--Qggghhhhhh IYYYYYYYYYYYYYYYYYYYYYYYYYYYYW++Phhhhhh JYYYYYYYYYYYYYYYYYYYYYYYYYYW,,Qhhhhhh JYYYYYYYYYYYYYYYYYYYYYYYYW,,Q hhhhhh IYYYYYYYYYYYYYYYYYYYYYYW**Ohhhhhh KYYYYYYYYYYYYYYYYYYYYW--Q hhhhhh HYYYYYYYYYYYYYYYYYYW((NhhhhhhKYYYYYYYYYYYYYYYYW..Qhhhhhh3555555555555555##DhhhDarkRadiant-2.14.0/install/bitmaps/loop.png000066400000000000000000000003721413722237400205550ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME/ sIDAT8œQ 0 CBlKC@f1BQ Jt Zk؞I$fEUQU,}䁫j<ϒ z @Q9+/Aچ^ FiE'7hݿiwEIENDB`DarkRadiant-2.14.0/install/bitmaps/make_visportal.png000066400000000000000000000014071413722237400226240ustar00rootroot00000000000000PNG  IHDRh6bKGD pHYs  tIME6IDAT(MoGwޙެ8 )PB[Jp墳K8H*ikwgvfgC^]՗?yqv2o]`Ώo6cNq}8`X7 T iy$ܮ$ф΅(M4Epw6u'|Mt^ [(>|Y#?>qL([Iw>RN$X7)-1r?.VGQoxr@u*{Gsu`xVhNHb?gNV\?tsq.'|u# [VQ6cZ/%0ryT"1uUtȎVd,FxQx/Lyri7(w~sO-E|m"k -T#~ް.ӝ{vMVVn>pqFj/ 8jYdaogNyPK+ǀaٚüv+Ҁ^  D cmc)>"Xh)"X\%F ݵH\KٙfV-,`k5 ;5cS>6}qp}^/O/9V֯!-i^22բ1tӈ-,N+ALzi pF%TPwW2KI@ "?I (/aJPA('!EktZ V7z梨VwMypsyg> }ܫI{qZFƚKIENDB`DarkRadiant-2.14.0/install/bitmaps/media-playback-start-ltr.png000066400000000000000000000003441413722237400244000ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<qIDAT8ӻ 0 Eg/b.,DNacpHPza-!HB `B@2Om^0\UBaa5/􎦡IENDB`DarkRadiant-2.14.0/install/bitmaps/media-playback-stop.png000066400000000000000000000002301413722237400234230ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<%IDAT8c`02000g`OfF&J]0jP ͨF<IENDB`DarkRadiant-2.14.0/install/bitmaps/merge_arrow.png000066400000000000000000000012661413722237400221200ustar00rootroot00000000000000PNG  IHDR' *weiCCPICC profile(}=H@_S";:Yq*Bi+`r4iHR\ׂUg]\AIEJ_Rhq?{ܽffjN\~U}EaŨL=Ys|׻>P &|" xxf9XYRω #e8xfȦCb.feC%&(FBegZg{ J4H` I BFTa!FF4=#?E.\0r,ݚũI7)/zwVömu+5O-r nM.w']2$GE) kno}>Yj88J=(ro=bKGD pHYs.#.#x?vtIMESbtEXtCommentCreated with GIMPWIDAT81 1Foq;Ľx/-6B$V&0 1'V8bޑcӟYɚrd]a%W<ΩŭSl.siJB~"ej2!B~$0IENDB`DarkRadiant-2.14.0/install/bitmaps/merge_fork.png000066400000000000000000000025351413722237400217270ustar00rootroot00000000000000PNG  IHDR ^ iCCPICC profile(}=H@_S";:Yq*Bi+`r4iHR\ׂUg]\AIEJ_Rhq?{ܽffjN\~U}EaŨL=Ys|׻>P &|" xxf9XYRω #e8xfȦCb.feC%&(FBegZg{ J4H` I BFTa!FF4=#?E.\0r,ݚũI7)/zwVömu+5O-r nM.w']2$GE) kno}>Yj88J=(ro=bKGD pHYs.#.#x?vtIME ]6tEXtCommentCreated with GIMPW5IDATxKTQ#"&-$ASG3A OEnW~e!BhBDL:3L6ǽ ww>>)p/w1W97XNVLi|6##,|9:9&-jm6PϞKMcDp_h.P~ Q^/S&W<[?g]Tl0 ̴d[OLGu^ qmH(p&yhyfef!@ˡh۞jzI.BjusneitqkF5D3G;>(p1$_S ,(8G6$υqI$>5mJkzl[Gu'HhDI9jJ#k®p%βD P1$zF%Ȧ)'<v) ӪIY$KLOH >,hE_wWR$)ɳ[u6yrM=j5+-|88s8;FFnoOY?H102@,(Ir\"T'<ٔdD \N)dgK@F Owr)萨OԋZ^bR~Oݤ@ @Rs 0aF90D 0I2<jd'|!q(ECQcYEz U&͉p)43vƄ^dq_]Ғ ҧK()U*ΉjZS͍R[hiK-wZǮ=|FfKTjLjx5͠;q(桙Ur͐nhfcWxJ?ĩ4Nv8#xW ~C93{WVצX1S V0)ߤyK4ٚ@?e> ?cR.v@ostS=ӳ CwC\b88-@Zs 5Mߵ++en󀷏2.2EkW$[-MJ1"=o73tۢҪZs 2cܶO%q 3;"3$}9)2s%ٮ 3|vH|̼6~+ҫק򹏟5 >iCCPICC profilex}=H@_S";:Yq*Bi+`r4iHR\ׂUg]\AIEJ_Rhq?{ܽffjN\~U}EaŨL=Ys|׻>P &|" xxf9XYRω #e8xfȦCb.feC%&(FBegZg{ J4H` I BFTa!FF4=#?E.\0r,ݚũI7)/zwVömu+5O-r nM.w']2$GE) kno}>Yj88J=(rqiTXtXML:com.adobe.xmp ygbKGD pHYs  tIME%/!IDAT(c`02000L0?. `'t*å!lܹ@&BND?I`Ȇ0x0C(x !ڎ] 0ZSM1!9o<10&N0IENDB`DarkRadiant-2.14.0/install/bitmaps/model16green.png000066400000000000000000000005541413722237400220760ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<IDAT8K@ B'n|R 0 pM.d>bWi .K}EbC*N0VnIPez7 쀸>BFMOZ0~6@:MI)(TggM@K>d!K{U2K WHkSp8Dg/R9S›U_VRcrzMs)]|':IENDB`DarkRadiant-2.14.0/install/bitmaps/model16red.png000066400000000000000000000013301413722237400215410ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIMEGeIDAT8}kalLĦbҪUB1x"V< BAPAtKBg2}DI/مsc b,q.09/b`bĥ֧IHL;kAiiV$<)EAD%j? DʔߏIddb1d Hx JDmڹicۨZh6Kfbfu;uuk^3 a S˥xaP@ a[H+ ,- XcczS^J<# @o%C;$an`\.]K>R[y/q |XDmls]+ǫ+F K\Ҙqзmt A {4V[}:D{Yl\%7H*"TD+I8r&qKϻd9s7#*F|b٠$eЋ x؃%b߸œfT^IENDB`DarkRadiant-2.14.0/install/bitmaps/modify_faces.png000066400000000000000000000003701413722237400222320ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIMEGIDAT(S w/QN [h=$]D8"BI2;o^ĭd9Skir3TRc[g2ihm VapǤmA1~7xzGDIENDB`DarkRadiant-2.14.0/install/bitmaps/modify_vertices.png000066400000000000000000000003501413722237400227730ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME0uIDAT(S :} !#=.z'e&p+$yzv+dwV-wnZKTrI6^2),bl?mp4ɠ6d7 f^%IENDB`DarkRadiant-2.14.0/install/bitmaps/monsterclip16.png000066400000000000000000000004011413722237400223030ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME0IDAT8˭S &:08B?jZ#}!EVȈ5C=dĵ+TO1EW.P4y̬S)y9% Hw ,k F0swMFm{l-|h3wj#FHYIENDB`DarkRadiant-2.14.0/install/bitmaps/noFalloff.bmp000066400000000000000000000030701413722237400215020ustar00rootroot00000000000000BM86(@  DarkRadiant-2.14.0/install/bitmaps/notex.bmp000066400000000000000000000103301413722237400207260ustar00rootroot00000000000000BM(@@  (( 00@@PPXXaaqquuutttqqqaaaPPP@@@===000 #%#%#%   "!&&'  "%     ##&#   ###   ###      #'& "&###$#####$####% %   ## #  &&#    &##   ####%'###&&##&##%'###   # #&&&     !!##''     ##   !##& #    &####    "##&!!     &##'   ##&#'&###'###%###%DarkRadiant-2.14.0/install/bitmaps/objectives16.png000066400000000000000000000007121413722237400221060ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIMENWIDAT8˥?KBaϹ&5 BKߡ)ڄ ̴DMA-B j 47 h7= qE3T/s=<%^ _?&x\n7~,D5W>$ r]}5W~Uk 9|7 0eQ<5O?t3|֟bik' XX0jwMkx3-U횑!5'hϊt; ulny@rT n)M,'d[I-4lhY %3sP1kGU":7&mˤnV-%mR'yp{"IENDB`DarkRadiant-2.14.0/install/bitmaps/offset_clone.png000066400000000000000000000003761413722237400222560ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIMENIDAT8˝ CesxH !@)Rvn# bXrL;X5eQ)I qtɧbJ)g͘99S/ĒJOU_CTS4nЉ[hRuC=<@7#43jVX?Qӏ)Qí!<"'Nb LEm! L%#zfJ'iZ"ڮ_{YGHB7"G} jM6U16PcaP6x&'ݹ UGty4SK͖^K`2@;;fDEq^Ө=80jLQ$2jDR=r!|EllP5aVB[ nL#'(;HjcH* JGs32+FX OܻpMqIٔ\[V70o y^%91`FIQ4DNJZ9)CefcIH T$'-/w%eD3b`Dg$BD^?NKP$GQf">%q:*f]LvMӃwՏAcݧӉFёH}Qg:N}DH(:o4Djѵ(:o4D>Pt$Rh7EG"FQKDtG}nh7Ew+UKw+n"uQt7jn"uQt7"M4&RW-M4&RWDԕFQKDԕFDN{{۷{{ZO~D?(ɏ}K?ɏ=XZ2Vhf\`]. sDMydMڙ``Yn#rrX=f%ud#[EM[YiEnKRVQYR$bʬjmfE064-Td, 5-ⶕ4Vv>CJ@EjZխuff ,pXShxo>O.*ӹWtDTFKn }A8xisu9\~ܙ|V5',ftKJE*IpcY2|N:㌊͈dtbJt٦2XV O}2j88Ɗ=rr~7iTXtXML:com.adobe.xmp RbKGD pHYs  tIME#!AIDAT8c`dXu!,aza 6 XlQ-LF 5hPj ,IENDB`DarkRadiant-2.14.0/install/bitmaps/package.png000066400000000000000000000127701413722237400212040ustar00rootroot00000000000000PNG  IHDRazTXtRaw profile type exifxڭW[( *f C,8gv0˟¯NķM Dġ߿%R.\M땗'ۗiMzOHku7'=ZfHb$'%iWV@F @F'SBFEF#dJ]dFʼ@Wd˕>7p׮v/Q_ѧ[ ]):"StOx,5mwu/4[Rg]`%oݖHG*ʐj9źN")s7SnG NAr&O3⾩Jn? `.u%-t2DiCCPICC profilex}=H@ߦJE+ vqP,Hq*Bi+`r4iHR\ׂ?Ug]\AIEJ.)ޗQa5 e11[ (3Dz1u"<˻ѯMD9̦s'OtAG.q.:,̐IbJJ bKGD pHYs  tIME ;]IDAT8c`02000'GsY`F100000Qꅁ7ܾ`{!SrEf8 UnL(u: ;IENDB`DarkRadiant-2.14.0/install/bitmaps/particle16.png000066400000000000000000000006051413722237400215550ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIMEن~/IDAT8˕=N@g"!)RNIJQD%pMz4Bd(kY$p^Ѻ_ť̪R@75mB. u@pc%SYeHLf(ES~>ZՁNP0W{avb"4Rm'1R;~*.ܳ)& B@vJ I a'-ppF|c5a6΁7W6t\PQIENDB`DarkRadiant-2.14.0/install/bitmaps/patch_bend.bmp000066400000000000000000000003561413722237400216670ustar00rootroot00000000000000BMv("""""""""""""""""3"#"""3332""#"#""#""""#"" "32" "#""""" """ """"""" """""""DarkRadiant-2.14.0/install/bitmaps/patch_drilldown.bmp000066400000000000000000000003561413722237400227550ustar00rootroot00000000000000BMv(#"##"#21"!21DarkRadiant-2.14.0/install/bitmaps/patch_insdel.bmp000066400000000000000000000003561413722237400222350ustar00rootroot00000000000000BMv("" "#""""""33""" "##"""""""#""#3"""32"331"#3"#"32""""32"""""#33""""""#"""""""#""""3333"""""""""""""""""""""""""""DarkRadiant-2.14.0/install/bitmaps/patch_showboundingbox.bmp000066400000000000000000000003561413722237400241760ustar00rootroot00000000000000BMv(""""""""  111111  1  1  1  1  111111 """"""""DarkRadiant-2.14.0/install/bitmaps/patch_weld.bmp000066400000000000000000000003561413722237400217120ustar00rootroot00000000000000BMv(""""""""!""""""""""""!!""" """"""""!$""""""!"!2""""$#3$""!"#3""""!"2"""""$"B""""""""""!""""""!"""""""DarkRadiant-2.14.0/install/bitmaps/patch_wireframe.bmp000066400000000000000000000003561413722237400227400ustar00rootroot00000000000000BMv(""""""""" """"""""" """" """ """""""" """""""""""" """""""""""""""""""""""""""DarkRadiant-2.14.0/install/bitmaps/player_start16.png000066400000000000000000000005361413722237400224660ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIMEن~/IDAT8ˍ0 ?q! 5,D Хt.;P(9Hϲ*Sߋ^TQW"I-u%+L5`wyM7K=P4iMX y[sAX#-C`k*F R)&#*1$U]GĖiՌ5x LoIf#Ig;@14.<1ԌyRIENDB`DarkRadiant-2.14.0/install/bitmaps/pointLight32.png000066400000000000000000000013171413722237400220720ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs  ~tIME@/\IDATXMhAYöqĘv#X(V{ APB MT/z̧"/1*͑(z+HC99ī,ӅuȼY +}Dْd0z‰>`cۚ5wg;Gmh NqQ[wHں^A5Q  5aw2ai`\:E©= _ɍcR۶5pvsodso/޼_mOsQ( ձ,ZX](*&ruIENDB`DarkRadiant-2.14.0/install/bitmaps/pointfile16.png000066400000000000000000000010341413722237400217400ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME@/IDAT8ˍJQ7Q.@.)tэ.J6]u'tս[Ap 7n Q=$\s3d?.r>zYhIYԕf!IT<]TW2E/y@5+4N{TuC| \] /h$hɥ cZv~㏅m YԜQ@n ll-岰m| &S) !L h/ t狏_4pUが@z"d^,M P7"^g\lC;A6Bg`&te(Q-T{3]t*nxW `)R2ad cd#l'r?:* G12+AR\~ViKcAF(RZHYd| 㭮BK[¬` |瞅<{ޟ9RXsFn!%ެ*V: E$ ^LIENDB`DarkRadiant-2.14.0/install/bitmaps/projLight32.png000066400000000000000000000010021413722237400217020ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs  ~tIME7IDATXW=O0}gc;3xDÀԽbŠ`BTT:|(NlǎC(l{ -I0I/ܑMnB ֑&;^!` 12{羅mhxX3`#|dDxZK5.F1u'+/Xhuq GV$.2,ƻ`_߫4.]gF*> B k2zQ``d:4D9lw`(\| qpYY%,w="ix]UÔ@u! {\BH?z[/Ls[m@pv}fYnQ%˛t)T>;,o-RL"[+wPVއ_1IENDB`DarkRadiant-2.14.0/install/bitmaps/recprop.png000066400000000000000000000003561413722237400212600ustar00rootroot00000000000000PNG  IHDR Vu\bKGD pHYs  tIME7!iTXtCommentCreated with The GIMPmNIDAT(ϵA @)qzbʄ0T&:CDZ ~^%:t_K` "eLIENDB`DarkRadiant-2.14.0/install/bitmaps/refresh.png000066400000000000000000000014431413722237400212420ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME*RiTXtCommentCreated with GIMPd.eIDAT8˥YHTqwQ1" (h$!"Q02 %0C$)26rLELTpmv/cs8||gny@a?}$?aռΑ"鎗Mg8 ZIbW"kpwؕ#b D(@ٙ{1;? ~Çݑhk{ݾTXt>gO7 pIIГjMs#+2!=$IԖ360Q"ri^iK8JE)3#|N͵ZSœ^&Jf4g @=1mf}Xe@PbEpLJZ#-}%,Tūۻi{Ūu 0. 9kvvcU \s_P'F&,ՙʴ2:Pbr<9;IB!mב~z\\=4j`v]YlX H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATximYv~s5{sGdRRIT@`p,0T\%qx0 6`k2NFd{/^sskY?\̳ȈHe*eD4{5לo3csm͵܂͵6&l͵6gsm͵6gsm͵ 8ksm͵ 8ksmM\ksm\ksm\kp6\kp6\6͵6͵6&l͵6&l͵6gsm͵ 8ksm͵ 8ksmM\ksmM\ksm\kp6\kp6\6\6͵6&l͵6&l͵6gsm͵6gsm͵ 8ksm͵ 8ksmM\ksm\ksm\kp6\kp6\6~}_ϖnM\_aϑXZ*{$Q6gp6W3Wښ)&ȟA,Ӧ&-yÿIؒ`3Ы)ÉdN$МȟxWОد,vkԂ &~H)yN=m{?} "2K;"cQ| "fNDKdx5IDdL9$f6\H $ ̐{~ y晿ব#ߢCge:[]_o6Ee?NQ_c x p]T _~`9?×/O$\ "ZL5NsLurZ9)/A'k@x's]Gʣ_Bfe܀F>C)Y;U@J9(e8\bIս恓*?#8p"fx;Шnf 0So|NyN%؜p_Kя⇾cDo-` fLB Ar8c`NN\cd' &!7R!BF~̰ $u~}Iy|?i˔,2uKwMkĽdR:Y0k=cF%`#?;c#yɻ!aac,w5ڔɐ51ŔRdYsC!:!!`0yB 0H19C/ 7X,f qr DD0R41Sb%NQ!dB@L L@? <-*8I;ˏO_/9|g|0 8 ܁ c%X8 65J#YU%0 oL]ڐ$8 RF^70x z/>H)/]or]ɤsMSG 15PJ)%&2d% L 81% Ҳ1"kyl@0bXp0039[Iǔ0:|RZkwހ~tjSuR^ 8cHZx_'pxx{XS%0@Ͽ}߱woփ)b a ŋ1/`A;0 }Gua ֠zXG' byduBuC|@#[)XNSCG)9 3@# r"$l9kׯi*>nN`~͞Qs{Oޏl ~{odd7D$Q T4DUJ *Ks@) лޅWE !/]!S'o~"w_7w\'c#$G?-91Dx(#CbH1#yXCDqpps00vaC̀sP{\t.'FbFJ@#bbXcጇs&sĔ'|`'SH~iww翿r?S/_8 )aF À-Σs]6M Dc`RJ`f8k}C@H#)z!bH!y l Pb8GSc``b%2am.bSw:r&9bH>_]zؗP6Xʨ 6c{s~4o-?& f 6lR2A(cVj$fJYFNɔNQNwEZ߾k_@_}8:O\pthMoO2Gۿ?/K \tӭ-0 DYYb&Ylt#u)Zw}a!;:cs81DD)&k]9\޹c@<\0kZ! ᩧ"O{[Ѿdke?/~wYcrPXtF?INH1: q 06rθ|<_b b0oTIʦTt2H D!^f؜u9C0Ƃ` 8 9=%ʥ8Q}a1L+/~W)%__&Mf{>} U0d7ˮQeK*?_TFDQ^ lL JSļ̆v3p _ƍ_ʚïw?Vg-p> (8%P{ 8pd8lbF bZyey?/e1!S8Otk͍뻮>Y\xy8g%ț6Ā$?1X8 yjoZpYս̸yk/vvqe;{Ϳ'>gO- 4={{;; )ak2}}ƣtPIm?`S\ʪu1ApPS*yM[TGn:E𖭭 ̏_],*L_B@ .ox[y6 Fu0C@J \#j];1qe]uY1YqΚOll2&C6!":xLҀAs ΢{txk!"BZt}ӆ2ȨvLX,+WKB2<܋#30ʹ.)8ZdҿZG}}/T d3?ZR9Žwz'¹/ۦ\.bXgʜjK9G|`-!̔[0SJ11ldFuV}9/"η΃w<ʭk|C ~ܟ{{W}K"o ,%Hxה@KbwQEj&SUS+f~hZ}f租N1!o!^?:Vt=X{Νg?{~+qWn[9s\Ar0f#Su1!!$|q00 _:1P~(4FpcN6KQͬ$ d %c b M [I^㈔ 9欌qr2+\E&<pYNt]rSMn,-9BlZ2 !1𝇥49d.Ƃ lFC]N % vpJrsr'l؆LHΓIJ\L3!7oazᡇ{p<ϼWyN6\gs۶5عrr%W"*_dr1Ɯ"Sա@s՟.{uIߣJkӝߺ޲ zq>MYh>/?޹}kW_ ocDd"F8P.iR~JNc Kuũp-UBc0+y;+ ^u00Ω0*7,dD;1!^xElmMBx_ p$wOeN+`9BS\kؚ$.(GLd jۧ529)7d#6cHLeDkQ=ߔiȲK/m,1.t'iprbJSm͟_\xoo~| ONoܸN`]MG;{=2md+WC^aVe #`TnJ +M p (M T3Yed7*Cb:n:E}t3_șΉtZJ6SUB9c?~~_዗.[o1 yC1dJH4 .`$Î) $T7l^_"ὓL;[R*߿ܸ!%};a :o5? QJ Uu[U"8Ú3ClE\9Pix&vwwqpp+\_/ܴ0?voo{,Cf) K-+ -sJtRXzrdPb͕ !"V: /;#,5h|'g)Ӏed.֘, N|@?dG{O>%&)~9uw;cGGa}#BQnDF+S6*J6dUK]F"Qs* ӭ-Lwv0B]/.zi"?ʥ'F\~z 18ٔFTM׶0e!Γ1TIa`$!e3G{}(}Xc~UfY9zgxYLI쏜d|K#!W0IʷRU͛7q>_=c'̭lbOlv.\#6/@Z8Jif*3ZV+.ۥUZ*dM跷33xh:}+M=go{͛pMT6CcApJzȌ(y}YkajpJHbX]`y8k0N0L0Ls3ƺC!.n5r`IB4_ 1R|/Bq1U97yr0#c-Wqtx+/_~Y͉p vikkD4•+]Fƥ6dd>g3 t2fA5ڴ`$wV(F@ ~%h9*$3ʯGdp^N%֯_6@BZhw -SK”1{dX xq|t)=8~<^l?_ 1%mL.\X~> p^dS6nj!<ê,5A-܊9YJV* \g m#pxp:}}L$QҝmmMO}6^q 7nW\ҘF^fX0CE9:7hHR*9F[ۻN{/? $P(F`OL'a8 XbJ:_Lm1D]a2˃ 13,㨶cLAk׮c1_SчuiAp~vwwأ{_ 1cf;gu]"+~Xd@㐀 R+28cD!dQ1{Γ Fڎ(k ȹ~fPnv,}T9RS7nī7n;<#7cc9y:pz ܹB^)iBj2n +@0y[G'*jxrVqm*XRsΕF])tUtm,0zSJ ҃G~;mWN8<:1 2k|L(+4LfdiZ [[St]~{WV_b]e1B#"BK0>]٘%<--uCtQ XCK/fsx73pt{9dG{dyQ32K+L\+|Ӎ1ҩ*h;I)"P@5p̆k@p,H[XІj]<˜k3XSQ@[guMInD>aT[\a>_^DG|oعԞ[ފ(`ҫQRS)j:Nh4ݨ,n;ONY;#ђmL $F?Frxʚ`G- +k}[R#/ ck2??Xdԉ2Bz~m]G!1(LLH14y_&?C0~ٹ cc}! " \d ϋ/,e[7C~<#\T8a)< rr~Pe廵vI;-#U[}6vw~Ƿ^^]Sk *pPl")@e?vx0muR$YIx~MWTE"@hRCΚU \1%uc 9@׽0?-??c`@zUܾ}{K w!:od,a23.&v>dmkS$w@p²L}F*pr2w zDln^GLL9ޣȎb8&}ago]1NKg[++I\"+ @_xE:?'Ӓᬐ?\ɤ$)0%wX]vbpݬp1cBΣ%Y} RYYK=!RB6u7e>l c¼0 y+$-lkc-K4ZW1[ã]6/#2#3βӔKJ83wҬ`S$Q]j[ P2up-pm)<µWop2a Ÿ)-]ܱq.o쒵[C"3X1`l gaF0r/r& Y]^&宒1TDNpZ,k@#ZƂMZ@3? E@DH6W^ŋc\|O &S)DJ9]ٸDj9I5嶸-JɑZvR0zDz8`ܒESzw| YILmw[d28Fq#TFT@0.31 ,jC̸b:5 C~_k&f3|Oǟ F0)8|JMWZʇ&)dY3%̣'Q,@ȅeX4'B'P| D0 .xhn(Y ]bu.m/b<>78s勸v:sdl:Xg9`):1fY'UBE#.b2.|:qf` Pk]a2`>9#TM AX29몐XA1kU較z3! d$-$V#wȋ"gH`bHUb!X+cIc SҌC{\zpK+!av)qRJH 7@pd˙A/+-efb>`6!I/CH^g9C&1!{^Q-cL^01F2r:'䬚f-XMyT6dQ3{1WVۺ@Q`H1gKQlQfy&Z#is\@ct\Dl}("%IH*K",8 !Ie3V 61J,+!gXX~yc9 M,YJBW$[0\DdJ}lLƹEXN"001@}H` }ReR >֘Fg3L<+,0G.])5(T,Sc?3gAŠX~׫Y2 qo3 a'q•aqtE2(sr2@qf,ٔ*segtRs8u;ku^CC =kPxoX4F6 D:SV$b'DXSzʸ]yzoaCKQ01BbȂV",招S(H))[, d y6KPV&(k.ń%l1We+lFX|ŕFV8BJ![؜u%GOs$`dcfFϮgXH_ ^Z.:5!U?O|*g&΁S:ӻ-/7 Tt&68&<:hB*"ldX%P%_0 v*{ZhԂ=PJ}#ӭq@Oܴ ,E^e<.(1pNfs]Iy9.uF~NJVvKQaGIΰǐy^geH1Z)bK1 Q(zh!Tg Y:D]L9 /{#}*Y[zݝL&s ^vdEK8V 7 Ȝh1Ro8MYkSH$d;(Υј%3*(ॢ>ǒ[ muS;+%UnYLZd'n7s=hw (Kkߍ"œrHa%N+o+15|dLwr/"0+ttOڅRGS>L2.PcRy.lW1y,J]ZdoN'|ܝNsz@dEw ٘",LFgcH.@dd?٪+Ή6s.gG'1%w!U8t7n߼yY %38CZR8[ʗH'|j7K`JfΨ1dsΊ!LaRFД=٨+Jٶ$8LMxȖ*UpHUl ՘+ǢNZ~rR2d- 3#!RU&a5F-ɘJTuXەaR%Y7c#:E ^ fuwLʸfIRD,\tO? pӟEJw߇n{ 4Zȡd9 ('q2"&Ӊ8Y^dqYJ] KOZrNNfuK1c. ȱ: */тY:!٪*`Zz`H%@$ | G]{;˗.8S͕YqEr9'߻ A0(\ԥ>6]EWN3'ZKd]yXښwِ=sښn `̪B -]2f]T0BNY[FBÈO> 6vw2iSeFl|-ӂd@X0QiCuZC$ 7r2ig@aZdHk55SӨ,u?*yC;GcLV3sONBu 7nbmoC7S6riO/f5s6/0,ƪcײ! 5/fw0{T}u}cHPrkS&/CR K [B)N  r@ۢ˕bŅDZfn߆59cR>QnWw.I0慜 K5]a:?1,~6Fm%@Z%5R2jlRٻ .Yk3xڐ2:˱F>Rpq^`FSg+щ $z3':{1gE<9|Q~"!å%>F1%flaǐ ߆l=\yX`옪,`#m 46s8  */&ҏ'wj"gb rQWX!pzn# # 4!q^޻\d!,0X$9S5˝,/qĹs6zKSyt}"ԣ'HSA]a+5} cGc3A͊KY- )a9Fx{j.}MM(3ba\ "yŏ%K4)wRdm `J`5̦&[υQDEreofs,NOz@8Ft 8G^~,%;#U26DNDf=3i .Nf4.x@!55ATɘdaMΤ<;3U˿&9ɍGf8J[Hsp3?ðqcD xDZbd\sƻj8 Cms;xgky~2{ $FU^Th>FpOz0da2&1^$qū(@4F2v:dl!Fc}nNl'ƘrʸjLC|ķX"WpҪ.YR}pe'{EP!2'O#]BY6gXqΉ́[6w!g |s[d,S_ pCv=/ԮVͭTTf:sNcT CZig7V_DBYrO"7E%dHm3Q L-*-,L3K+fSS-RBp]G⋠C|sLgzKZsQF)Ӥg”Sڪ ܫRcKH8Sx]}YˢcE3K@pgm͉1(orVAT.C/LT&tHi];}D|1dD2QK~Uӭ !\r:ޘjRP|lL1 RJぜ9ɢny$_jD+|b\H(X,fINmD]?nף~X&U* =AAe>̨B+Vɬ'cAY iiKz.]ٳ̨ZewIXE8ﲫBaWWJP}~;iڕRDݽ]h P5kLēڄ|{Kd #6 ]N7Nh6^$m,AGG@Ƹ~y/rϻ헶*~=,ۅ 4ZR vY_^n,}=H'7o}o=}/S>ҧ0 k{vBe9KaJ!můLoFvKYT6;PeO.AЪ0 @kT9$HUa=Nf5òJɆ5`4j|ʤ'?Y:>ƂypMܖ=_!+b yMqUƿ[ {y~^ 8A% Ds$jPtVY< ôk). .AƩUZi@W+KPf\j`hsӦPM+#aeޕ/k0ҙ^V}ص3C8P! 8k<Ȝ>s/Kƃt~ui xV edNEĖDWp12ҠBm؜LRʕƱ%LI_.U2Zd}nk RĨOW{ ~@ /])fLAhj0@nۀf,mĥh6PX*K65ZFv۱x}4uCuu˃SdU@mҕWٸߑrCBkCJ: =z}hhc35jn) )4,? JeqZKaJZO՝<:ԍ;e+>꟬Nڠ2 CzV-Z:,J{jaS6[ߺCtE*ne۽K P*сC8*7dSg II}SfTR=W[:@,@NakM\R׎m(s%IhiWfBin|(hЀk&t{j؝j1w+[ROFIzRC\)5t_H)?w i֨˦1g-S^σKTQV-mV_1U-N֮<R7^>ߐRbJw-k}ũ@T= 9ncxq^W22?S(QLtF0ABvPU~WuF٥:+au@120K $URImխ =EW f/O SuLӞ^4ъ XAd͂7*XV}4ڋ/+t]橒Ϊ6v!MC۴ :ϚԬ11~[Sbk>ho }kGg,zYa )zn%CҨ?fxvS|ĿJ[7-:ͫ(uZÑ QLY&pߕO&m֟,_&ԁLYCF &PvTM)7RA3mє9ŮljC64AC~#-jܤڡimkHI}hԈFtF|lJҪZW0ڊb7R!BȤ2}:"L4v=֧Kv(T/PSr1~R .^5l )4Y6̛TYJAc10x˼ T QBJȌ^fRkJ"ݮ]םV] NFGIdVm kNnjе$b"]8(PյZnj0%h֞S׸ 5@=^e KTvx;|tfeq42)vcjo]6>4KɆ=N΁` dUNE5gǹ:k dbQ5YsƔ¾R̺V|Xe,+-R :#hx5V \Rt`sKIaͪEC*u+ь0P{%5T3 .5j;;JW|Z:]jNoz؛.|2jQpSI\tYW5Ѷ*0 Poba@ĜP~(XeE,;Ԕ Լ&2"F Ѻ.]J5Yִ+AjPY#5 MUe(~ M[Π!j3ץ zXխLҁZΘCf80&f77xO]Ӫ֪/DZ+ j|&Ә`+oEe)~K}80?cʗE»1D{Fɯy9~3cT x,T~ܴ5?ϫ9O+ t4ך]UCf,ogbdXwiMV*uN.u&jϚ T9ĈEJ gPp 8AT(,2wqdsFw`] 5QU t@<$Xk -7EJL{<%0=!ZqhF#<Ըڦ5L ٺw4XϮ>'Dd 2œ]N8ܻ6{a695S22܃EVAeEG03V&T;4@n&WP] &8 \7:*A(H-:)‹0ќda:Qe0KkSnO !0+[]a>ԜvJkNau2Ċg5V?0/BC6*;xW >__}p<4SlFlOqzrqz3;M&k &.{n7mD6 ?E`9[gAZj\[n$ e6WPj~V"Sg;MT kBԀn1|?TWe/J_4jFefZ*<#漼p{Yky|14N_oqN5LԤ˲H-0|< nZ\TdXC꩙ՒȰ\q|1110ߌQG!%WBtl{ڀªS'/58iTDhSfz_>*iFV'#@mQc5#7Jw ) ahk"fjl'.-;cc!r#s_sPbJtBV­uD!R%I Kk@P 8=BH_h-JTw"#yIDŗ{`%g 7;~n.:XVeߕ4l*><}r3GE ]"G^+l4?z50U` 1Q!0LhD,Xh{]K}UEdd"gdMŰ$RɟXS{yJ4mw,)#k!ňǮ\s1'%gafF1SQc N/OJ)ac+qLk~%`reZ, (ڒID͛8ϧ1E,!')TgwxccܘWj2 XUږjC^uGI Ů[m;:թ`ShN1/8 P Xm)Ŋ,5_լVR0\zWFn=01vVRiUT`_*(qrzm(UL$j:hTyf__5أ9 [2uk*Nl̶V. k+ >S~ v 4N49T,!D/1Vlk`2hOhgy5"7S@Mnu!5NPLzJWPmRi$c4SR8QY3!1%~Du݊Zgq\щ5)56x.J){VOtPX::n"iKRo_2vƼ}WT%ՄigcsWyqSE\`%+i6ܩ$ ڱ/w;D+/E`N}Hs-R?n,Ӽ(Fʨ2W@Xsc1Z -fr+}UrAMk ZE-w1)m[ɜjsԇK9RDcy92u#餮#F=EuW( S皱g7/ZjHʤ|8c[ΘK1:UR}IS\<| Nhф9m=Yeۦӂum3y6xhw*D=7rE=0W6!U3xnN%ٕ QaVg}LlmϪgPQCԣYPU7IMF4na#4'ժ{P8m7 jeFSj-5ejgNk MW+8l6qj?נ@Lyp!=WS=7IKo]uYkDv*څnk5QAs]fZ 4{`xXt(ZȪ9N&Q{џ}E"f9K a-f[vmHz[\_2Vlg$EoJe2&@}*SX%ӭKtq:l=~* Wg'5<7YLP%k5( oK5L7]>7^Dqlq{!H:[ ^1*Q6u^!5%@RǚhI47e5`J]p< jrڱtԄLRQ'jRiNrAJY ԋ6ԜЅZ[ EU-k{Zp DQ}7jI[ܖAcuܮ$+ŵ-gnBߏS-v.KBt^sqƼݪtI5 "zE6㦌ƔWfK@ ͊ͼv&cr1 4B@VS7hgfndܔz"jإDM)EJOk#U]2s3:/ʩQ6G5שN1>ʀFٮ0fsL0ݚcF:fUE{Zkqִ[dVJ{ݜ0]y<.p7!@%3nvt[]0~z#kWCF4A 4:+]Gvft4ܨթMtpҼuĵ(VgvTGj6h&,Vu"k)ú5 fZXyZeE_c'A*{Ul^mGMrTXh@1MF~-f7%*hAn9֖!-<5 vS; Bb ^y!b0f$_$}[Ζ7ew32^s#=K8OD95ח%`D[* ]`yŹ 3L3yl훟 -Q߉K3p G&[n:s3s(NQE.rMb\@FvQm hn&_7@t@QK3f VsdWa(m&NX6)q`uBQWSdd.(/a (M4b(m$+g`"%8ާ&j{T^%3$w^O)NsWZ>sgܸU\Cn ϸ[uC6QiNMjoJM)^9шjVtjVHʹ`u&7S E{hn*6gq@g֌mw^O [0ܖ=pjGutxFk됋1k˛pVs9 871ql wXEHX2*RZNewS]nxE"MUq+i NkB~DrC6nl(:`ZZȒZ]sqQ[pcI*?/ͅ\ܖsTgٻ˦@qnȴhk(LS_W;+n8qɉJ \,XN F31To7'McNMGʀK ֭vt&i)@q5mnYڦ[ GEۈ"Q2yQT?'p|h %Pݩ{+C|M<3qKG :S(޽^qӕছEq]$ոJ3MV5eZ}? 7ٌ}i+M&MBT6VRרn+1XQt<·Q%PJJC$~ νFۯb N"P@kjAc4L6,ŪL!RӦ5*{9shf+Q4S;E:MҺiGEviJdGT8Afީ`n:n?n𛯥`mW}YЅ&@${ISA7>PdNTg8ִ8JgEъU=Ѩ[76EH$"VIgUUm@e KKưi]Q2yK}7jC|,GO8__pYnlvq}-cdŒ%3*l=ۿ[bXk-c 3.!Ry3a {_Ō80, b<-w# B` s8QR0&L&=ccUPw=B sd Rr҂3`07nՃkG/9'[[wvkUGxmIʊXR[3ӰF[U?C heNōҞ%]ܧ:r(cw*" )vʶ&n39HNe11">_\qħ_|"}g!?W.O?3?s.G'3 c1Cb>t@1&79|@0)ƬaFJ8\t m#!ipwyc1#aa3@86w͌02Ofl|Œ0b1H!y{ 0Xf09D6Ib ? JiuגNjp_J~cooc\`CGEN'ؿIa:1aΡz.]>)| k :?|-p{#zd'38o5݂F$!qX:CYxo%Y"f#f'S`:Q,RL`3w}=ٯ*7l_ n,Hޱ^jO223>AzQF=4V"Q{ c!4#@17l N9Of|rۻS ÈyCr6O2jÈ%L`oL3c :1G ]b BVcȇsoc81ޘ&07{;>I}w?2g6gtk8<<-BLYt^V XkO= sAXr0yG 1D$_<#&08$ ?']8 ŮsKr4'yx.(6 ͯ&x;efW+\91*ݭBX3}F)0~5(n2MfjmfEUNkFlC7oc8ފ ƀtɴ_+ 12e kCŴB ʥ8=Rb`0s ũ2e Kdr&Xka,pIAH1埍I8$D4#$F: "@;Q?0@%2&t@1U~j=ge2Hr ,bJ|Gw 8zu]1ؘu!aɂ8T,!=s4.3up[:Ȁaga@-9=5{c BYg˯s=̰N 0.༅s>o\C8 Pk-XI3n0t:8$/G{)%`CJSny0м 35RYejjy1FcDeOIu0u[[΁",9A $#a%%2{_aGG'0ׯT;R xp:ɤǢ;}ɴ%IIi`JrJdc2A:s{X,S8b{L]Ғ,Hg l^*4OMg!SqƋJ, +wk9YAk-ӭzտ[A85UC-GTSU|H OߺC}WꁕR¤q+R\k-D@bbxg*Vy֡rH`N@M`E؏lƙuX'+ g+1ypɼwA=HIŐar WR#8r<6gk}?Wb1G0 /g. 0B(^ C2i4/KWCYB Y<`opޱ-Zi6Ίlev[1i}ܛvc;Q=Ҭ2V z6Vnܨ$#uFg*[RlWW|>}?߬%٥2nϟl!' xKB|꽔/dltF)f–ls>oU%H EF -9k%[0LrY$KX ؚb1 I-lg1`.Wc x"rsaID}_d_ x-pd<q>@mNAR~ԋe'TjkGIfDS[y#8x S8i)fNs$D\VY3)E$/G1,W0c1|k;9;)H mMsYird&!ňs} x?UFt+|RJ#vP}b9+\,tH-!F<.%;ssu^x޶]R{Feeu(j1/x5aom ֠] V'o(i33Er$-r݋0=;IK5rBXQzKRfjL&YXTP5`auiry?eB*U(bB T;fBƇ,LM 0Z39&@@|hǘX,2a]a;{lcsgwas{!];;lKa P5.r}aaYMk-X"{\IJH2&2nĢJ۰0cAEiv25-V•ɀp(y\iɜ0Lq 9cB>Ν;a4p1u鏍~j%h0kF;NInM͍7hf:Ь{¡) ?a{/|v/}u=ŋc9#O- U#9ݼy)S3{}_{vvs43kTLj:"4D"@S}d&)S萊:6g6 JڠR:UҔg SO2'ȴSIb휰1!'B228d Wj†!&ߛR-&^zMA'0Mf~g"Ӗw0#1v5|@Z)ƾT#smR3",QҊVgj;Ny5*ê/ Oegd'sNOW |ʭb[S}d[ Yg!;K!  Abz% ܛJ\0q_Rj~ 30 ,yRE$Ҋ@h)s sΐaiJ\;iÐl4YsYtwUKv.swyX`)MbFŘr&-ji;+=H)bGؼ_1>NLjhs?M.iHdŢ%`SaBJfV(^hF<7K1S~O2P8beDUxB^%m`~m-dۖr9׼OcP3x^x qګa # I7oKN!!z_7݊z[A@?5S/Sclux6:Na:ܩ1Vg 7;g9'HS3Φ|Ǹ5`yJ} 6eAvcFǜ xǀOO<=}r2/g/Ͱ/'FmDCK%h8QkۖB:X5S-MX1zg3et7ukx)Il>z&U!{W/~Q|x꫷p|| 6=[{y{{ .JɑjۯoQ`՞MӔ*bYcd?oɠZR ̅1 BGX)IweX9JG 1J־%:W}/8Ӈ?B'f4mTR2Зj[LtiM)kěh~Ԍ~AQZzgf.e!1N47+B:+OC.Dz&_Q+]uuǔSJ/}u)sO= nݺ˗.ag{K\. !fyVNa\sf͇,RΘb)f91`k:;فhl-_kp%%}TZJ{!|1꼓,\l6I)kۀmy+jFJ${Xe4FDTeJp(zbQ:[g*8VN92 ^OK&U@ ŧ8VհY4Ւq%" }I|c|1OX~C(6A9Wʫ1m)Y܎NkjiMF,+ , FKJG"=KȌ'' 6!Y7WZb11_t]k_ϿtK. I.V~I|J#b`.a {X'_ `Fݝi͎ec!_|q1UwS]ICVTe3S)o\&JWƐw)F,p_RJ)m]r'%'C"w-YS)&q{WdGs),g Ya}&~Y 0XFXѿB&@}*.9 ce,)UJj[~B{?oHd] w4f:/&0=|ul*0R3iMP R#uH]qY\gS=ZNy];>&0_xJ&e[)a O 1fwg1 |>L&Q\!~]e )a1uV2A5⛜%i,fE48RBHorAdCp[c*87y ]Xi'Ar5FQT>c$+&p+Wy.ҩC5w^|\x*`3#ri2+OtˬD.}|(|E"_$~!H|:2U{Kr4H;Xb )(c+RL f$愧 ~#0|*9TYM½AxIZm# :ޟba@Gڬ-R; +vӴl-Ϭ+/+GG!&2ߚ |\2NRAG31'w֞xŗwnVecIR.ꈊ*5K"&)I|8j}a-U~Xދy(﬘9:8T,\ o%f~F6@K4{=~NJ2,޵ 4fDzuW#o@cg+݁jIϰNfUi}K uK̿* 6:ulc& y>_\:o;/Wgj)XKwD_̸2`4Krl}E+,!-oZ%V U \ b˹Y$ϸ`H􅓔Dly۷YnxWT)bsVjUб`#54U٤_P5#VIUߩABEԋ/ iR/SizocX Og׳0I:f3 )SCHtY$bNb^e޷ b-C%0iDN%Ƶ\2|dg:Q7^*K5~u>_|9"*g\+\͕^khYG+'NīAP1Ac"BX0z=V f߆q@[Xkdng9@+b}>wP!0(H[ F!N)+Gԇc<:pt12/$47jΠobV.vn/ǶxN7Y՚DNJTwlՓ;DUjQPq)13g'e"s9e7z0<8PoơD u{Q̴Yy|S_x}h\.yc̻^N3Fv?˪ZXCĸ{$s@߭Qʛo@j̸p~hjI:tƜz5%ͺD]M"N-k(oqC]Tt>猈n?8E+_g̖y A<׻p4@MN, 7נS:Z55idz]V>.S , C-LI/ (N/kC{ؗZ(qmPӥr&ZF75ϤIyQe幔8gԍ 3r]sYb>1DI|/ yK[Vbޠ`F={֭U,g/zobw՗A[-D7a3Y05LxߔT8ج`eUڇ+ԯ/tz <%KS+uAJwoTd _fs :V'T?[.LM\_y`S|Hsm͵6\ksm͵6\ksmuk9sEb$WK܀o}o9dJӳ{3ɤ_S{ K?厂)p[e|ӗ~;n:K:@_YsAwk=rp̚.녫k(O^J^/xVw㹤fW*ڲq*J{^toS_: 8 wxJYSn[lb 8jo̧;Cto[YfjÿQgxVhP7ӗSFdҿsAhaNkNoo2߂%k;X b&Xê㈥9k:kANTyp괌cL#2]Ϥ̓N6&=?LA ) dU:m ":yayVwRrq,NcN䯢dݞzSN{F6pΟ??ÿms}Cz韗;q8j 8>*G{Ksg7'5Mw5s@VT)X~P!D:өz{FaZzػ+{-6~G];}3oΐݺ]1e|DsMF;)ܨCzZٳ8M8'DKV~v1{]x=]y[{7'>/<^sO5KXZ3֮-d3[(,iVp2JMT5Ƹװ͚Jg%m޴cնbn&up >@y}گE=ڴ)3Ӫ'0SwLw%oo?z֟~ܗu}yk= &NI2IR"QvJ"EUDr9UNpHS);(]HI BA$@;׻ǼyVMqy믿wˏo\nAxu e;+'=1vrO %`۪AfUsouGojiFҤSB{EyUUc}B~ xI)G~E6#&ToQfAjg/'Pt{wssF  bOGwP2D͛O3cL>A,}J8>VT4JI])egVW/b,`Ib<ܣiCIRJ[%hxdJȿ}k~_1nCx"@k)GQqk72{!s"أX{t{vk'M[)705wC c(K+cȱ1ͦGEy}J)8}}bbb/L|Kś/&xLkZWn޺ zE{5hy_>om6* Z p]66rPp|%kDCƑqpmeEo Mv'ܝJ=^H#[/\)"NO򱸪Qt\Qz$e4ƢԬZJq ecxDYiAAMaJH?#DkeӼH8P1EI!{Z?M}| )ʡ]?ae,lm ;DTuB}0_D"~'(t4MՒ gaE76G}1H,fUUU[rǭT*F9U(,o{; ;ʅẠY0\XooϞh4X]]m,->gl%qPIzGF'!+q^?CD#4m<㺮gcGbtsip޶k :PzzR=H)b h433@;ͦRY8Jq&;Y(Ff yЧ !"GEmu)0[b5meG'+jbJq W͉#?UuTcS?XKކ403K(LJXƸkdΡ9-7A,R~G2$1 jYl_o阮c#I҈WeӜnuZ,z$9V&a DZO~6:@^`Qe0ʥ3~Zf$mP@SẌNAPT*u( ,;p/=ijx\쁇j1j`UUGuY?!~=Ccn?~2XKmky\~?xBrFU˲‚i{*MIhŴc{oq¥1&a}4AnFƐMirt$rhg<~"i1֩][϶Jwz׆a VD{$zLQw@$d7ggT2y`<G>q-@hՃ݇y%)LO8kNaib znpDUU}Ǐl6m" ŢĶ -I`e@)\s3K1#$6?(q%~P]ULnIJl0SO=YUUP#hk"]Be;\m j w7)wH[M :W2tV_O&ZMx n @! c0]Msll{ۣ$z5-86 ӳ x c#vFn" eBUS\ICͶo_X+sow,nZ=_dgM ekjZ%IBR(K˅yݖe_s뺫$IR!I$&^]Vk2BG$VMai,F;fݶ:0!l`"f&bqf>=ILQFeGlJ6QtB4YY,J0:AHIm,y1Bfi ؂vt>z[sK?`v>Ju=eEg@e(K .~CZ7 J$.\|\g`'?;E.HDOFtO\JAL&pa311y̙p]oȦRɯrAC " ^jf]׭(D~㊢ I djv26~Iza?^wg$IMra2:=O~zQvRx3/OOw*%L%={Or}h4*I!m綼 #2x"ϊ Fwm; ?'1Diځݻuhhx<$$yigmZӃ/F3n/~Nx+ ͺ8iHYZH L']d ';t]fnnUҪXwi;?'lާ@݀1D%!ؕL[n4^-‡PݻKKS'$nc IFGw왝7B:(lo'G>e`Yjecn&ށ7VVcy1I~F&\?&{zRO?Ihv4-Zljض]Oc,aй[e`z|,ڔ`Q+hBb{J{^w*1l(c0Sz,$s <QQ,^(pIR O']+rWWK)V cNC1rA ݲC7Fw'>Hc\.;G1Fԩ3_x'A1 ѣ~]Qd,-ܙzM"x٧?1C&cI)5梦iQX 8zt!$(oHUc)kW^*W=A$I|jͥ{ihSYșw ,mo@/1 'd_JjB2ƐV,\}Au$gǸKc*E\egSZTig+6qnL|~P*]mJaW2yp<-F3\CjNz?6MG,˂ё=e.GvMLfP$"h4g/|gexβeOp 덲RBOO2G>VZCKwI=L&z/_i.08(h;g$OaETXeA2FTw D"bTB$GTdlYKKK/gX]PEn2FZ&XLQBͮs PluLz./PԠaZdͲ&|[жX1n'tbҩSg?EBH;&òlسgu~ܹ wAA`DU΃c!Scb4x# vN4U|3_T`Br=>́EuZ-L>F4-˒r`[yv3`#, RrD`P ORv(HdwroV82!Pl6gfgp`-n'ȻT_;CmĊ1Hj (!ԓt=bNmԥ]l~,f4YAU`_\\f\U7*IǩBp:k'[cX\PNo}gDвlػw!۶tһ_4QPp*CE)UU'xݹ349I"F:=@6ܐ999Ҿ}~"FF.dZ.Wcf$$(cGaP>zB=]X_-ץm͆1?~o߾}gVkL`}qEQP|]N{Þan|)|F&jӓrq;~ȗa'&&_$,n .ڊ@%RQ,uP店 Yt; {RD⹘A$2gƀ(yoV3hZRVX!\  nǨ0YVe2_}}f}w!8xѿWaB}SS3 #G~ضFhֲ׃n0!PYᴨzʕ7op+">#8|O߿`}:ߣ&Sg~krr$I(2rʯ~R9a,!o?Ydz=zFڵ/`AQ6mZ.LO'OnhƢ].:!RUc,s/X淁P¶i91qO/_ƨ7v \#?d&Z 71jnLZbn*X0:Ah4kE"r/@qj%ӼP[wtIM/0>DX-_4ApvIv P cL+ K/ykrꠁ1["<-p9Sft9+yse2gd2ُ4b89?xPX9'rbxxuI6+w6?zdDUr e^CR)/..=77wƶ\.X4RJp1lexPXIlgyK42<;TDj߀ MR 4Ԅ1aL07ibf~3"̿)ZSg;8᝜6$R` ذ( (~Zh6y2"#KV?7Qᒍ (Nvb1Q٨MoUXO&Vc>Kl@'DVOF79{;h? [(!kwbi!Vq0 WMt|떝.FDp56HQذq9?a-}wq?YxGK7d.UbҠBzAH,׿43۟O)mf4ڻaǖEY.sZGbu|֫J{iQ0'hVO0~wbQy4f!!|xu6×)}/İUN0@xkNg:ttڣ n3(4úRƤ?U`6IENDB`DarkRadiant-2.14.0/install/bitmaps/rotate_ccw.png000066400000000000000000000014701413722237400217360ustar00rootroot00000000000000PNG  IHDRa pHYs  iCCPPhotoshop ICC profilexڕ=hS{QZKK3T|Ct *Q %D& !t\ ~,V\uup77'E)qH EsOۊށ$~7FR9j!9^{S{[nIBmDw}8G:ެTX*|D:ߐnKeBHw iD}OǛ݄2]#,tFL;o#%9WZhj[NŒ5U-M%[Mmr7^Ѧ, ?N0sp ϼjO[$32X͋zw8SV@ ag,8#n㾧(ls r)ϙ1?fr cHRMz%u0`:o_F'IDATxڤӱ/CQ_ 5X% V fRA'ja3X &td :h"R亪8˻|[v~CmWDmt0mO1 (~!PV4c=bP:caK*0Sl` x{ bju[dpQysB)D. 'W)6ܽ=1g;a }M&Wb6c_QvvLbJpb>t&$iWϑgJ'*bŰgz^0]Ώ b:ud#L1]HG(kQT$iXy=P|ALu\k :z.f;ArV[YCLcxS~PM(YIENDB`DarkRadiant-2.14.0/install/bitmaps/select_mousescale.png000066400000000000000000000003331413722237400233000ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIMEI9chIDAT(ϵQ C[ýN^?Dfؒ( ;$CJ?8 FĂ$i#tU@Ip=fksA^34=d q6Viϟ;IENDB`DarkRadiant-2.14.0/install/bitmaps/select_mousetranslate.png000066400000000000000000000005451413722237400242130ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<IDAT81 @Eߦ(vx;%6V Ven C;"]W˟3g !aϓdF-Oby?Ы1k QET$U[ zHz?'(.7`ה;:0΀=amVn[.T6 Xɣ ːȤe#~U3M,d%x/S3<NcIENDB`DarkRadiant-2.14.0/install/bitmaps/selection_csgmerge.png000066400000000000000000000003731413722237400234460ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIMEZƋIDAT(ϥ 0 CYf̜@M?QN*q <,UVls,8[qks%iY>mbU >mtk\E% i$"]. [ypfckNTbIENDB`DarkRadiant-2.14.0/install/bitmaps/selection_csgsubtract.png000066400000000000000000000003711413722237400241740ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs+tIMEZƋIDAT(œ!CO7/f/ >؄it@T&u|7$ e; T"~D%Z^zM27jF) ݰu,PUB: } gq=e)JڌQ&2_;*ףIENDB`DarkRadiant-2.14.0/install/bitmaps/selection_makehollow.png000066400000000000000000000003171413722237400240120ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs+tIME]\IDAT( 0 TduJhK [6[o%U(`-xi24lG!rGg=)Q"5;`V@IENDB`DarkRadiant-2.14.0/install/bitmaps/selection_makeroom.png000066400000000000000000000003071413722237400234610ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs+tIME9S1TIDAT(퓱 0O O]( >y6M&H 4 ߀\ jfB]'~۽"tIENDB`DarkRadiant-2.14.0/install/bitmaps/selection_selectcompletetall.png000066400000000000000000000003371413722237400255370ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME[lIDAT(ϵQ ! K:ڍf/ qBAm4)HPQ5 'f-@)廻{XsOˆu #KTD &n$[jlZ]!I:A1\@ ^NIENDB`DarkRadiant-2.14.0/install/bitmaps/selection_selectinside.png000066400000000000000000000003461413722237400243250ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME[sIDAT(ϥ D85ί6r})VuDk@KH= 1޵B.}j""2Y](AʀcZVMzNzFU.i\ENIENDB`DarkRadiant-2.14.0/install/bitmaps/selection_selectpartialtall.png000066400000000000000000000004201413722237400253540ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs  tIME\RIDAT(ύQ GӃq4ԄRxdS5H"J9fg1/ncf , (kI#+?{AS確S*M,gX^;;RO'@IENDB`DarkRadiant-2.14.0/install/bitmaps/snap_rotation_pivot.png000066400000000000000000000007361413722237400237110ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME-kIDAT8˕JA]($B!bӈOUv}},RV!;Q3ǿ=sg;{梪H_UY"RWU"]dmłA%wK!"*"BDU*'ݎR UU׃K9UeSj$wLFdD&w FMEt?fV i[uF,ظCl=l@bi]~v??"US{ uQPر>*&{L< Qkm)/O}͕R<B: M]"f~@1wOsy-OIENDB`DarkRadiant-2.14.0/install/bitmaps/solidMode16.png000066400000000000000000000004421413722237400216700ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<IDAT8ݓ 0 F_b[`^& Mi*Qn|%K ̜1&q1~qw{lBеBj]mB[HY}R:g`{hGU[4s--f'\큧|4@Cy+IENDB`DarkRadiant-2.14.0/install/bitmaps/soundmap.png000066400000000000000000000105171413722237400214340ustar00rootroot00000000000000PNG  IHDRL\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FzIDATx-p:1 hBnҥ- LaЁ2TgFci}=^I͗?~D]@@P@E@P@E@P@E@PGW~g_mg+J.}b3cP3(>Iad'( sgg>0X"3"~&ؖB28P@9PIk}>Iqu]`(؋ pxt 1~dྛrvpfD)5cZ\wQ5Ϙ;Y繵Z۶~w%sg6f'Oh4pgoC݅ on6q4^] l6///xBL)N Pm'=Ɓax*4G& s*5xUU}? "I,Ũnq]˦z"+8I6plQ0$I4q80 F FPi`/.iVo#F@P@E@P@E@P@E@P@E@P7MP3ZGIENDB`DarkRadiant-2.14.0/install/bitmaps/soundmap_wave.png000066400000000000000000000177041413722237400224630ustar00rootroot00000000000000PNG  IHDRL\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx\[Pl.d,Ĭ5@Ebk2hLL_|ӗog>tTJQT4Q XHِ&Y8?~@ {>|]4_} M```0X0,   ```Jy s$%A sL&8q333/ºW F#I͛7 f:Gs`t:m6%Iz})﹔"( d2#³Ԕ`裏2k L){ƍ'Dee%099Fyh4Z"RpEEAD"!B) Zm??`?$)"A/th4bYe5M)ߙJϜ9S|Y,r/QTrbbK433<˲+OOOCi_ fEk @6X,===>o||P|qE<?yro]QQQt#kxEEqEݼy3N~$i%S% qhZIӴ(lx+@Duu5k@._NR$\.0q8E@2UbfffR@___$ /,K% q hAfI4\.ɨF 4A.J RB*!1 066zӧ"4bgϦ( lZV$L&@8uhTrj4Y!H$I8NgC(o߆_jٳgoذABU&555ZG"/R)ATFE={eeeeee( oܸQ?w^)  ,+I vٳ$i4$hNөTJEad2L&|8K.Zd2If#z]=Pi J*ʿGGGO> t722FFF؟={oJiDža;99d2$I `Q$qHD$Hdbb$Ivy3d|>@Ӵi0{$) N!=nZt)0׮]{nR\.zʕ+fs$FJr8*vJ$@BG$@1 -&&&$Iؽ{42hSS=0 c0J${rrrjj yݻwޕzcTC ?sfff7nP]ˏt:hL& Zd2, V+AF唬?߿hܹSWWz/_fAjlaX,aÆѲ`0(EMIdU>`㸑ɔNi^r3gm6F}6G0܈rϏ?g^ܹ#",K$d2CNtGinnf&H[F+߿?wl6p8.] 2 aܹs\ru5 (fϞ}9^o|>___h |/ eN_O>AP(4<<%Ir8$I澾e˖-_رc[n9wܢE.]   V'"6 ~{lիW{{{wItoo5kΟ?p8Ν;'_y̙իW5JoV4a$IfoٲҥK~0~aOOϼy ˲;w fuuuNZtEO?ITYYk׮Pܻwo"?>#A 544t:)(j||r1 t:z=N2L h4fh4BBoUWW[Vip8͛g,nv_0(6a g͚%_ p8NSS竫nݺ|}}=ȿb:`03==fX/ݻwou>uj4ti޼yϲ,\t\k׮UW˲,q4M3 rCq~8˲4M8p@%/yĉpW񴶶m 7/ϙk׫t)tTSqx x< رC U] 8Nu;>oǎtny^/lG 1 ڊ1|>uttpCeѣGWHեꃪ<;vwwCx!+XP W;H[[^ V҃J7o,?Brr8s\y0 qv9~n`.9]Jz ޕD*vZ*9Axr4=˲%K{(H 펦i!umy. @k`}==O X(<#/{H(Yz`/ [S> ;>x=" ͛Cy^%7Tsz'aY7t'GR XqB%_P,BRbJ !mmmPNA4uh}`(t= " C PGPx<*8p[J/irZ[[QC$NM!OaYm3@ M֠Wi---hP7(ˣEO  K `tNy[=4 Ԑ#mCb+#۷ѣ6iՙj[lnGGh Ѐ;#L0#N_\.ۭP(Uƥ0lRa> .\.҅,EQ;wPMQ?hr577Qmiig!/477C _,% ,X```0X0,   ```0X0,   HߦռIENDB`DarkRadiant-2.14.0/install/bitmaps/sphere.png000066400000000000000000000035641413722237400211000ustar00rootroot00000000000000PNG  IHDRw= pHYs  iCCPPhotoshop ICC profilexڕ=hS{Q+ "] *Q %D& !t\ ~,V\uup77'E)qH AsOӎS$AEr%*%W~werў-jޏ "\M5#oTqW*W>"So4K !dzE 挮xEtꄥ MxrgzXwŊU%-Xj%dSC\fo9=ޔαhsw~?v̫4ORS/ۼx=jxy#^6||o9t}m-C7Ygsfr‚ cHRMz%u0`:o_FcIDATxڤVMhSY}%MbRVEBB!t[""TPgM#r"(Shu.`A 3`eJm1%Xi~3Wɀ?9prww]o,;t9N,O0P(wݲBx<aD 0;63gΘmmm͛7W\޿/B!J$,ҧOR~윢(QJ"$̌~"X,fLMMDN+w!EQ,f<(GDHy= G0-㖪&nޮ(ǏY@8q,Q2HG1+ J.FkOo@^E"ٳg] ^(par`@>'hpUUUsO1˲m$xj+ ˗/|yy΢X,19ך0m/ Msrrp8>lOSSSrwwwСC54==xIìir\.uUOhll!J\}/b`߾}vSSL&#\.Abo5ϥRL^XXhuuU z1_xddJy(8^zmZ__*8޽ mFQszz Ξ$TUո{4Mc"F%ޮ9 ѣ$2555ْ$5ϷrUT^-0IENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_communication.png000066400000000000000000000004631413722237400241660ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME 6^IDAT8˥ 0EE4iP :̃<(+@2N"p-=Xk9S_@i3(K}+r$ΣߩUͭ \"$B`pdO }IPհ쬴k&]XiJGۺ7`^)`{ J]-DLIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_damage.png000066400000000000000000000006701413722237400225370ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME ]8?EIDAT8}1j@EA t .|cI&8)ܤt!m|)Ʃ\MH !ZɳaFg>_H⤏+#9WS& A5_306KdEi?CXH{L" +c\ƁfҦ+R ;-=~bwL Hm\p+Kw/mu crBPt$ܐv Ɔ,VXaPcM14^XaT0B6 |@H![%$Xk DZ0G/t JkZZϲ lVST 44FՖEL*N&z`)^Y3[[׊[ J ̅(-6|J@mN%o o+2SN7px%a!L 1ymx-GDhatMwœ$IENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_healing.png000066400000000000000000000005711413722237400227300ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME͇"`IDAT8˽N@=)P,  AޡH|۱ngvnt&.W[D2rELrcj@e'oE"0 (/Yݱ51_Acf#\faTnܚ+UDR L;ol.U_IvU?u[VRdssV ޛ#zu[gquVC?q b0c^dM,e Y8HC| ^RIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_holy.png000066400000000000000000000004541413722237400222740ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIMETsIDAT8= @F߬AV=,sCyj+ai!Kq: o]7IzCamB o‘d ]-|K` c9=IENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_invite.png000066400000000000000000000004041413722237400226120ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME#CLIDAT8 0 Dݠ+d`V`2B WqRs,?ىDgt.Iuiw Q!E{V.`6]YTG(5d~WjQKY\/~UIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_kill.png000066400000000000000000000016331413722237400222540ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME#CL(IDAT8}S=Hsg={o~nALoᶽ~PLqhK7vh(ꐩ|P tB-Z, X͐k4Cgz8TUkpΡ:Z\*l4:Fn'pJO`0!puuu;<(7?rD&y$ŏT"zz[%|{qppkZ~F4h0(w&pTD" ",y/ 1i1c |{{;;;H BBឮBr|{{{XYY(HZz83vd2|zzX 1Zbrr۶?B4l8h45{""۶$E[a|jZ$U{PR$I/ ͑,M˲ !tc8'K9op o]OcmUU;$ImIΒ' @$9?+8ӍPP(bwɲd T Db:W Ø DRt~~>onnar6/ @Gs)N/2hD"|}aaWVUuRUl~WӴ$~"޶r.u*c?v@Y7mu]8˲eavv[[[p]w4_Ɛf!8<x( "Rǿ}*LHIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_knockout.png000066400000000000000000000005131413722237400231520ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME;_0IDAT8˽ @ `@}d@G  pA}]B/Ӵѿ*sւk6` "`\7P४$< @n2U%-d@cz= g59e>;@렅{/'Gc<&t9A].V[#8R+,VG .ݛXLr~vkr NIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_light.png000066400000000000000000000013611413722237400224260ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME:o~IDAT8˥[HQ?.:ּ,fV- FEUEaD>cЫ/F 1؍FBDNk2˞>9=Bvu 6oaߧQϮ6PX,깏];O<0 Bê ` s isژ .Gҟ$b7B2cz7`R2o_'͙#Bvu 10{;~UwtMw=gXh#o)[X~j0 ޟDH%\٩'o+,CRtriKX6#d^,v/Krj4ր0ĕZTFR>ALϐ3#'T-(t U@s*Tӧ>dzxu4jmyukRY6!.4&~U=?(cnyMEA"ѴoΕ8~>fGJ`&G i.+u ]e/˒ly(_I,{vas/J (q@oU?!j}EJ)>`JIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_magic.png000066400000000000000000000017671413722237400224110ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME9b>IDAT8M=leﻳ>?qlvq4uBQ!A`@TT  3bbAR$*JHڤU%UHH:]}x?!zH.{e!A>)i|iɛH0o l o׋F,E-']#SWuaP C"fChc F =C>8*2/>y2 K, $`X)RŪKX𺆪(A6D][♑μe]vn_} :6R>4IBr]W4DIRh%SKUViwıyXO G/Xp$KhU^0.Ԇ)h(gۇKy>4 ƒeگ2S7x#A+BCtmxyZ Eʰe' ”e;Ƚx$RBty!e! [KǹW[{agwɟCފ%9@MipIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_random.png000066400000000000000000000017441413722237400226040ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME8qIDAT8UOw-UJ ԉ$K `𰐘prz1vi!Xb̃\fܐ& #b 0‡-ҷv{< #R$LuHfGG4f3 Ȳ(uɅ#{:h[M_iVn+Wz=g 5h|ggAi2ߪDGŘ%O!6!B~W}sׯ_woRQQdȚFA)noFuwS\^|֭/ mrp.?~RWg/nf ٌ9!H|K$j:;+^ܵoa-C!7oH4^%!D!TU:$''tX%%ixT*"j}=nTLI܉NJx,'gx׮{3Ҁ!I~xEd2;v) _SAB@S8Ǥ(D,+S%gKK=X X%P#Lr9RUtFbq@^_܌ S6K6҂ 耖ˑZq{a'Y7ntdY 9BK&ݻwC Fv}}W E}4>c?Xvg:ܹslMOSgRM{Ƨ;Ȳ7ijζ76mܔiR]=Eſ 0CAIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_readable.png000066400000000000000000000005701413722237400230570ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME8IDAT8˕1r0E3i\Ґj]JC8 JqrC vF3jK.!3TU+B u7MeMs%,Ndi>U+]%ȩHy)|n,{Q4$DHFހf\FF;] 7Q~xHzS&vɺ"xH7> :;F;DfypyG&ঐiu~a'UIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_restore.png000066400000000000000000000005561413722237400230070ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME7BIDAT8˥ӱQ1w C.*e /Tf t;u t7lFhkwT\+IֱfIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_shield.png000066400000000000000000000006571413722237400225760ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME6E#r8.AUGC ~ˆB9\\\`ii mmm( zE(f`P7럶߹-Vpyy ^$1?? q&&& ~gL& A P.aZR܌.(JJ# 9|v {!> uh >~?=FZ/Y90!:...◽=z}[;(`n H,:?ǠC0F$ƃmuw ǧ?:יzM]\a^ % ya) N=ryil٥s!$|u v+^_%7sUj4ﵖQ,w{h'SphqcehNKQ.|#v(%NFcoacY;İPTxp++iu>yaxWot].Yb4BG-K.&45\wtN>|hux;vE4MK!RJ Aa<8NZ6'ady֝(Ųc+P9'/?(Y+4a/NN(⌟t:rF\o4iLD H)!O3)j+=q>^@9_sz#̍M%C[X˨@W?l393֯rXkL nBt1ypjK+ (ub~}ˎV -`L85p̟S1}1<%L1\+84C@u0;=ݵ,`' A\gzH|FY[ 8Y?h&x"H/r"JS0MF)`1 2byGN{{OaH ە{Ǣ8鴭>kf[}uJLlІ!O)N^xkrv| cNμd:ˇbhBy.Z?ˉI[FT >5z/ -6Z'H)9|3)-?9r__oɦYX,3Xc?ڿyFױ VD@OW>/~fT36OHۜfFiiHbxxt\-'0jWH2'aB-^CC׊Zآ" $z8׳&LnjX^ǶL\6{ 鲽UlrlG9{Wݣn߽W>x|xa<}Q5--_c~ڼo3Eh-۷Q+*k\lVo54!8:4L*e137ß JPDsIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_trigger.png000066400000000000000000000003501413722237400227570ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME2(uIDAT8 D_S2[!I3^qmZm!DHO X 7!wpĪ\A"NntUqz Bv"cIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_visual.png000066400000000000000000000017621413722237400226270ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME1l!.IDAT8˥Mk"g3f2!D&Agc4Xaa =B/K!BB4"lquq^ P2mY1gggzH$+EQV)^b!<$2M E"^|cFEa= IRr|_Mff&y>>>~h4qnzuQWA6nxuuC*kFLfc|ajv_41 8n ?///^A"`}:.bl`0x||IQ4|>ea$Ma~F ('''˲ӓ4\. bEAA(zJRc,q;ߖJD,@QNPVC:aid2J^Ks\y8::V<(eEQ "P!$28.//p$@ 4Mض E p88XZZ.kaXd<7`IUչ$IdvR) @|>LBEKQ\TfX}noo`/5n{kXz8db2<;4M35MS~ DOTTCZuB!`04Ma>\.W4k4نa ~:˲Y4BEfGI>J%54M{h4{˝Nl6|ww kYքt::KY&L:ߒe$9j(d]TL&`۶aXdm۶`HcY1n$ @c?ot+IIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_icon_water.png000066400000000000000000000010761413722237400224440ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME IyD7IDAT8˕OA?o;;ݲK%\4LثFk=w/41 ^8phA Jڭv˲C B}73̼U墰 " gP"UZ]a3(7 pH*@ <@ʧX׼Ù!YmcRſ8XJCs{;\N+PDc`b SXbcHGQy ҆bZq T^oGC@6 c0 .cIK.e[~3e8!4x B[p2EnS,|ޜ9NER_v7 MqUآk<1! A̙K r R3>a?Q=^oe%CH";q~g9 ` Y 9aNtXC(boBHflshx+jWr;sUgIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_response.png000066400000000000000000000007601413722237400221470ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME0&}IDAT8˝KBQ?&`!)4C(6ʖj[Zt4p MBo@܂Ԩ9=s%m@HQ $r] ԁEx>p =גlOMt`d?QSY(ɢu*aˍJc`XАzk W:F<#)^ )`L*E9iQU#P G29Xc`pRsBqxawާ>ƓI&mpeoh]I8l":^ԖsmIس?SG*s"jweݲp ,+ {)*`o"*=6k(dCY VIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_response_inactive.png000066400000000000000000000014211413722237400240240ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME/.MIDAT8}[HTQ}̙:1C22* zD#)@P$ƼDVPDC`Q RST"C LK2 fDg:g^6-wx[b`-3@KSh b* %ZېKg,7"icvs]twɂ35ٻq==$L2ۦ-]5`aI^H,\GLy2X`;?j<$M*K&qnDeb8DgU MF&6a=m[d D%W) `_˅]\)m0rQ͑q.bHlX{gd[2;:o*hz5;Yֆ==?(N L5GMma`T2azC}3j%z>VWc B4j*6!Z=8 W/C:(i؎9K:4 {s>1$&X veT)1TBA^NQgvej9Ͼ8,yd5ABab!%%}p6Rΰ&"oR3U3'JI#`,h@ /^wIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_response_inherited.png000066400000000000000000000007361413722237400242050ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME/.MkIDAT8˕1HQpp.5DMuB.;kSKAm $-9 4ymK gB;9S}s|2 D4P&˞<nu)c1b1'@%(jDESUPEYwq݃?c8# 偺$ zs̔nbځ7?$$ @4S)(a^%X?-%/2_Wogr$!'V:(% ڼ~ ̍q5%!<`=`gm۫!P /\-K(C ,Q\5/t{s}v\ _ǏOIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_response_inherited_inactive.png000066400000000000000000000014501413722237400260610ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME-x aIDAT8}[HTAgκ=n遵r3IB/iAAUvÇ_)eBa%QTEEv3Ֆ5n֖)ճjf0fjyQytX d׽@Ph7c ՀpGqlw@jA U_L,J5 XFS~9bX w}af;5yDd`:݉QAWJN%Ù1f!"8+PA©z \mu[gƶd Yn7&[L!n-_o&B $t`1Tqη:Sx#+.$H0_ PW3%?[[<}Ə&5l6W*E2A*vdףh w>E( Yn7}fV4۶-N'o }1e%% f^/NG _ uC#7o XkP4pg'i@-X~K3d9L('ow.}Bfťoϳ~>ZFSkmti!V_ \gA3!hYJ?l$s֑պL5ߚ-`sQbSE_/IDhb}h-&ń@h$aCg:JzTƒw=J9>IDAT8˝/aw_sJJ䐐HHX_t70H,1u)itrz AУ|߹^DĻ|ɛ}yvL2WNC( B FU ts@FxXր>`TOtxL;k"5`ݐP^:FݷU*ra\;(>8vp&BhXC&L2Jgѐ&B4pySt'FH*n_䦺Mu῾c; +uzeH%'b:֠\eB%cȅj\!4Rk4KP,=*hY b~6X;BhvA=Q{ O id3IdVԽ"]А.Hqrv5l2#lDU(( ,^E۲&vǤKJ>OM( fIENDB`DarkRadiant-2.14.0/install/bitmaps/sr_stim_inherited_inactive.png000066400000000000000000000014301413722237400251750ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME >9>IDAT8ˍ]HSa9s4t"mY'}Ѕa(H" `aA]`QACe3pH+Jt73wօfxs{W }`ry;O`ƁvR$ :u3ԩ/u`[Lla!?g/"ndC\v|FKIXEE4r y0Lh~)fg6KV=Ӆ<FXF/M`¦u*֩jm%`xOJcÊR}ileVu<Ɛ>&󪴔QF5۝pXJSL4rnziG19h5 v'IN^<޳(/nfo%,c. vO*RS`[g'fx_7]$-X֬Gy:B$WEϒ]_bdIS=Ԁ$#2L [R$y+l)ٰ?2z>&Hd-)!m<5%A@0=r|쩽c(v3 "!9ݾ)*c1B=]فVz ^l5Ǒƿgn`'"gD.ZeileK,=Gl\_|Ʀ|tu ! aSMY@,#E,/S8IENDB`DarkRadiant-2.14.0/install/bitmaps/stimresponse.png000066400000000000000000000007231413722237400223370ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME\`IDAT8˥NAh3 Fyh4&&*Ac$`<-lF bC19!!M&?~~_V`O/&@ϷO9UjDAU'"NGtL{Ngz_IDAT8 0 C_o/ ba͛ڄH⭀՗sɊf<$P{|qjemg;f{,0'6r$ewIENDB`DarkRadiant-2.14.0/install/bitmaps/textool_facescale_pivot.png000066400000000000000000000004121413722237400245040ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME ZIDAT8˵R #a>KGw`H$@`3ǔP݉z`^.-af]"M^RRT;Nb̷\rsK21v:Aj`f IkFi&M"F43^2pIENDB`DarkRadiant-2.14.0/install/bitmaps/textool_merge.png000066400000000000000000000005461413722237400224640ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIMEA5IDAT8cŌH@"@7 `? ?,H5`5jo8Kb5w/_v2T'_JzT/ 3 48 /Tbg,`PM '`Y;L׈2?;$9Fgbnʚkq];&E_[;;K\P _ Y;wv2O#AnHe@ٖbu Kv[m74Z<*ҕ!弙NlyFʻ'NWtrI ƭp/f<ʇO_fz|1ŝѷ!iu[ZXDJiM[ʙܸྖ+\%5LdL<$US V9|u޼NW0qc1@33䙝Z/A7&cQX5*Uf[6K=f Z10D;Vp5pdD3t4)0d^ KpLx&:Vl8"h4L`q!~7P |!,PFC1yɧbJRNԼȲ,Yq8sʖs.X.x`@),%,qI-y)S} 5TjIӆsŖJP꾇{s/6tFiȣԘ6uj|&+90hJ7<0x4 e2s Mt˂]^ $_Mnh r4=!jmmSZ m8EuAE ? OG[UDffxyp'zjOuPU{rGe~.{|{b<Fo%@u4* W.օGÇeKF'ͮJM:zǒI%%=cu]^uu]^uG`O|O7oDT}XҏB: 2p !N@EiCCPICC profilex}=H@_SR*"vqP,8J`Zu0 4$).kŪ "%/)=BTkP5Hcb6*v"c\bH/f9]gys*y>xEAj88F=VrHO^iTXtXML:com.adobe.xmp 4@bKGD pHYs  ~tIME IDAT8ݑ0 E|,B!@KVt )S2CVd` \;Cv 8_G7-Q&t@^GpVz!i6\q6F1f`V$|fur Zj5yB1:'q|&!~IENDB`DarkRadiant-2.14.0/install/bitmaps/textool_select_related.png000066400000000000000000000004601413722237400243370ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME ZIDAT8˥S !}s88tۼ~aHLP|| #s>r -|lT у"2G$Ks&o R)" >m[\ .ZZw+I*kPUv/!,*Lm\7߁sp3ɟx}ò=vIENDB`DarkRadiant-2.14.0/install/bitmaps/textureApplyToSelection16.png000066400000000000000000000005011413722237400246240ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIMEqIDAT8˥ 0BY%50E` zmꄖ2"Kv%N;CC8Uq  VJG).8sf96G'9ƒe\A1@B|caV뗑&%[N|f̸`gL}/l$EPM- FH Lñ( ~jDIENDB`DarkRadiant-2.14.0/install/bitmaps/textureLoadInTexWindow16.png000066400000000000000000000004601413722237400244110ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIMEqIDAT8˕10w#W_"ǢN TyY],R &{) FOR3ϵ\@._pnw%b,=xX`!V: xAWd]'pm{lbq?^i~/xg3 r\5B2#4\H }GIENDB`DarkRadiant-2.14.0/install/bitmaps/textureMode16.png000066400000000000000000000005131413722237400222550ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<IDAT80 DO|::҅`0TEKQ||wra߱ 4(NVp={x&|<cFZ[g$ /UvL Hė- k7ue|R46B)&OMwkd`Nw ;#~FީTIENDB`DarkRadiant-2.14.0/install/bitmaps/texture_pick.png000066400000000000000000000006331413722237400223120ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME37S(IDAT8˥?N0?! *Ëށ ba "'%RNP. bEL1DHV}ғl=ǶQUѮ@jQcDu]kVUT_V\DTU 4}?3^ gz D$t!EN1K&!k: xA""t(.byǓ>^BZ`9)80IGUW+ewᜣ{ݕYy.^7$׳?SYo̾7/IENDB`DarkRadiant-2.14.0/install/bitmaps/textures_popup.bmp000066400000000000000000000003561413722237400227060ustar00rootroot00000000000000BMv("""""" 3"""#" 3""310" #33""1AAA30""433"AAA330"4330"SAAA30"CA30"4U0"5C30"SSQ0"#C3""#R 2"""DarkRadiant-2.14.0/install/bitmaps/texwindow_findandreplace.png000066400000000000000000000003621413722237400246520ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME 9TIDAT8c?%BMYg$FF`biU$.  G )?G j`"Ov"IENDB`DarkRadiant-2.14.0/install/bitmaps/texwindow_flushandreload.png000066400000000000000000000006431413722237400247100ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME 0IDAT8˝AJ@)dSЅG, =GP,x v5Fc3M'$j޼FlNqV,U T_`*<ݷ$Ee |?/S,K<CeSU}X "(s*MH&~=8X1f''1a?nJul7l&:%R;ڑt^kzzpoA[oWn7d#Iֺc)/~esy7GIENDB`DarkRadiant-2.14.0/install/bitmaps/texwindow_hideunused.png000066400000000000000000000004211413722237400240440ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIMEIDAT8˥б 0ȡsR`5<SgCDg+>ED:}\~i,mqpi)1(|R;oٝ󧷉΅Hdω95>'({[G)޷P^Rme+\OF\I9 41r |ooRxo:hGoY2]=XM7Dtfȧ1 CɵdɦCaL'4uYü!^\#5#f2-WDsk+2Y! z^~䗂Į Qӷď2esGm:#F &J:S1t4ڀqy&5x/Y`#!>T{|g_ .B ~%袏!Ƙb%O!ŔTʩd-s1s),Zta@)T[]5XS͵4ܧ[h%r+tz^pÏ0H#2qi~gyմfVӗ̲ hZċͰqGmfG%YbbX m=-b7ܿ,t唘}պ];Z0cHT]kٸ;|~D"%g5SՃI&Qf9R;?SOuYfL|K6nyW"b/̪U`%T䪶46Hi tt**cm7c /FPh0wӋHBuCqdqRLǷcaӗ>3ܙ eJsԮ_PMnKt-o%E U"aili]Je5[!>=B^ 8Hcj/R65>ڠvdlJ>9rk#'g \{:+/H^9+w'aQɜ @I=E>"_&JјLZϪ$1k TL~ux&iĴPsñA7 9B Kp7Xm[kB%% 1ƯFPqұqc/ۉS!X- JL/շ0m{ u$2_&:b]4D8:,Mڇ}X;K?wxB|3S1A],Tm@o1,3qhlP#Hr3vU;,v8)4_Za07cڌ;I\YŠ 'u&9sb)M_TKe*Yɪ9!?ǙÕG[ w.A. K!&k_VRlY[avz!ɽ{¨XmeM +In\vk*[P<}MPFZGZK$ⷼ,Vgv^,ZS_oQ,6$8YEvhz$.$2E.14چ-ԓ-$hkg>qT{ jBd_&NE-YQ++ sjbADKX6Zf1i+qzNNE+^<2*ǦH z#me9辐cwj>P͓%` m_y%Sv hW +"gϊ"BmXE)"U("BUDRPED 3 <=fаsiU!-E,fz<(w>wqL4ׂ,tb~xq;opՠ/h ܽQ$СrCe N"J MT׭pեֵY3| a1GIRkeu1!CC1ah]v*_pO\Vi@tx'x][m"#DܓpN}Z<#Ruor*ܪ[gs>tإ fUx6˼@/:ÒGt+2K:o+/siͩ:st)GlI@h"ل]7ԥEqHpUɱӼߞ1mс3r%yTsh. ˶k9lz)=RE!y<(uH-eԫ`ZH@K.v}!%sLX=[!I$?Nud`Froxy}QyIߔ_KU(ӂk;YᢂԆKqxVBSgm~Q?(6T]F}~Z)IZ~ >YV ;׿7[oTWnƏVx.2 oTQHp"j9 ;P~! 1-?I,['A꧎#6,[Q zZuIaOS_oJ/x ^:2}HA1fGђGTe4KKZ'#BqPu!R]峯$"l:!u[ۥ]<{G5֘ZogvXn]svv[W"ޯ5ՑUjeY}$DG=z?РxW:kE/mm\5Fl0ٳs ˾SC~@i̼|UOIC dS7MgpVslm~v^Ns`-f処z̚@*@v8D3oyc+%RwJ@ B"eЮ9RB MI$Lݻ!V2hP6L$Gbg58f3?m /5?V=+אBH qw 4(rǪz3!Va*Jnͩ)+鲄d 4;<^ }}/ԙr3I/cRoⶺߗÄݲ\cV|@B(n}Q}lQyӭH}"LNSB[\V{e%'-*!wuK]Z@UF3C$|!BȕU*PYDQ$!~ݞqmve8jacpc\LnskŐW D&U@%'F\I$Tiy;gah՛VșPwAkg2ʛ.1b$yY?vFI3iCCPPhotoshop ICC profilex}=H@_S"A+8d.Zq*Bi+`r4iHR\ׂUg]\AIEJ_Rhq?{ܽzfjELvU Six{zY=JdO$caolZ:}+J 9A$~ z&;.#i <~Fߔo5>N4u|^xwW{oiar"iTXtXML:com.adobe.xmp .iCCPPhotoshop ICC profile(}=H@_S"A+8d.Zq*Bi+`r4iHR\ׂUg]\AIEJ_Rhq?{ܽzfjELvU Six{zY=JdO$caolZ:}+J 9A$~ z&;.#i <~Fߔo5>N4u|^xwW{oiarGȜbKGD pHYs  tIME qIDATHՕjA^ 0, +m.yw&BȨ \0K;&Z<"8 g=gsVo@pP |m۟jaFTJB2V+v?:K^~" 빴vO 60 B$ *~ &:7 JLu*;V.O<>>2<M&E3prrrv|wwpa*ޭ鎿x~$pvvF|~~FkM ƘOB:?\n/0`<b<\tJso* 5J)-ADyq+xxx TUZWfAkŅǬc;7_i?Zifjֳl6C)ETt:%NOOm\.2.bMBDRJϦ5Z'6_% IENDB`DarkRadiant-2.14.0/install/bitmaps/treeView16.png000066400000000000000000000020131413722237400215370ustar00rootroot00000000000000PNG  IHDRaKzTXtRaw profile type exifxŖk& k]`3A߃훛Mқr0I_N9J,HMehWt*ϧzO<`ezagu߿9{s՘tu,A_Ӡ,>,:~{kA͡1†ڸɑ;qɃ;l qX&eu)4(k\UPH*_x_5X3 c2Ɛ+=J+%8J+ϓ BW`mOsF5ltb*X +j83G @F@ͤI l2t1y+&G; &u)Z+F~@Nh ;: N؅+Aq72n׽MjZzc/ }!94CEC>t:PK)͎䍚\z(|ȥ7KtGA=FjVGuY#Z ͷ(c8enk~DO]W!_J ~<=<޴<ſmao;Mx-] Z@|Z6#KV*bKGDC pHYsodtIME(4[AIDAT8c< b`d 0xp@1`?53.8=>h 20elM5sIENDB`DarkRadiant-2.14.0/install/bitmaps/two_way_merge.png000066400000000000000000000013521413722237400224530ustar00rootroot00000000000000PNG  IHDR szziCCPICC profile(}=H@ߦjE*vqR,8J`Zu04$).kŪ "%~Zxq}wP/3T2ɮWt3xj1 u"<˻ѫLD9̦s'tAG.q.8,̐NBm̊J |.Z wfAI43`{0ЃϦ@ +5gƛ,Rx@X$8ؙp n"1Lc݋[ĩ=(g_tFI2Y#I-\H!+eUIENDB`DarkRadiant-2.14.0/install/bitmaps/unrecprop.png000066400000000000000000000004131413722237400216150ustar00rootroot00000000000000PNG  IHDR Vu\bKGD pHYs  tIME!iTXtCommentCreated with The GIMPmkIDAT(ϵѱ @DrF#J p(El\=@#KBfw4C`B #oNOlG.4=Ys=g<o "x} 1IENDB`DarkRadiant-2.14.0/install/bitmaps/videomap.png000066400000000000000000000101331413722237400214040ustar00rootroot00000000000000PNG  IHDRL\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx읯0ǹYIee+#ɿvڕHV"EVȬ<̛¶Rf_qm|yqܟ8=       =|wkz$ ZU1Rʽy9eYZk1b>?0YP8ckck  (0 DZʷ~$9WgSUX,̛%cLQeY^oq% ˲^^v\諾d(Z,~0xp`ak֚\"Un(%'?N RzZuM*cf$]rpPxE܌0 0Ls:hU(55l'˲4M&,"sc#Y nYѲϋRMݮTiv;z-`p.DǙ^k 4M)<9f>b贁0 isg;?4Av (73@f<'km΄~kZ5fݟ!OT)^C?nV2ƃz˜τ:j$޽ѱAͤd9kVR6B0įa я&Ǭ6 :I |>뺾2=ڍ$ήQܙ.Qd18t)zI7> oߩs 9a$ \rFcbWK?mg_o_c툵BϿS||)zI2xz}$=cSAOEfHpY,wSzZ,8t{o(51]sZG@̔ 4o?̵^Y_4炼˻dvk-RcQfn9ER1VnB 3Z-leYg@]k?Ƅ~4n߷ā+ W(r#wO)u\Wl?爜;xs\͙<˲lKQJKtn4q7\3Rrp8t~ȉw3zH{i:[Z$}ܷ4XO\,<2d芢h3zSsg}@@@@@@n<<nIENDB`DarkRadiant-2.14.0/install/bitmaps/view_cameratoggle.bmp000066400000000000000000000003561413722237400232640ustar00rootroot00000000000000BMv(""5S""""" US""""0GUU2"""GfeS"""DEfU2""DDGVeS""DDtufU"#DGGwVU2 DtwwvUR0DwwwwuRDwwwwt2DtwwwwD"GwDwww2"wwws""""ws"""""DarkRadiant-2.14.0/install/bitmaps/view_cameraupdate.bmp000066400000000000000000000003561413722237400232650ustar00rootroot00000000000000BMv(""""" 2"""""" 2"""""#033""""""""" 2""%R"" 2"#US" "" fU""""$DEfS"""$DwVU"""$DwwU"""4Gwwu"""GGwwD"""Gtww2"""s""""""DarkRadiant-2.14.0/install/bitmaps/view_change.png000066400000000000000000000003321413722237400220570ustar00rootroot00000000000000PNG  IHDRsO/bKGD pHYs+tIME,gIDAT(ϭ Cw'9 -U$]'es(KI  ITx@E;]+I1o%DR 8>1Rj5IENDB`DarkRadiant-2.14.0/install/bitmaps/view_clipper.png000066400000000000000000000007101413722237400222700ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<EIDAT8œJQwJ3D8T 'ցVz=Ad`"B7cDml25\tVwqι}Vm1\$ܽ!=|T"4 ~ЭR{u?;ᯢ?NQoeQCW9/,TޟۼF$l+Ro҇: uwnCӷMy;*޲F^/Qѵൽnyn/VdZ>^Kձ<| 1 u3Ps!幎bzC7ua+2FJ}-7=M{;ܞ>y)MKK>mtUmoly| S|?ۺ8|7r m|(i;:h<ν{͜_t<R擶y~}U*k-( iCCPICC profilex}=H@_S"A+8d.Zq*Bi+`r4iHR\ׂUg]\AIEJ_Rhq?{ܽzfjELvU Six{zY=JdO$caolZ:}+J 9A$~ z&;.#i <~Fߔo5>N4u|^xwW{oiar(‹iTXtXML:com.adobe.xmp )bKGD pHYsodtIME9ث`xIDAT8푱JaosQ_A!bca) pv XZ bR} wkar"vف9`w~6PvEXVű >PIS0Xr~3+q@ʭv-ิt$PU ĺhTFnX dġ`.j@dY Y!Kn 7}TaW٤!72ZZCXK?D8v9\lcQnS ogMO FI9n>3[^Ǩ NW3WjM=NKqy;ʷk-[ GV(E=#HoTҲ x\l``9ZCW/<7Y_]%GiyIENDB`DarkRadiant-2.14.0/install/bitmaps/vscale_up.png000066400000000000000000000006371413722237400215710ustar00rootroot00000000000000PNG  IHDRa pHYsodtEXtSoftwarewww.inkscape.org<,IDAT8=KAEϛMD [+mRe2&M -,4):i&AlvY|&˼7B\WnԐgfoJTF| ;-`nyO ^ i; }Rjҋ &ZZ4!K`-M-z*Qxz_HURkrŰ*w9յ(/%‰W 3BYR$qMPzKPזx:|rOVQ.nn̩|ˀuz ,+&V8;0 Ō,(^:dB$^~B#C`&ݰq?0_w.#07g:_Z*\hoa8Voo!&ImY-0&:&Rsxq?pyů[q8K Q<{D7ɀa2dЏձ 2ޥTǘsށ3F +O0{X]@>N19;k;eS%XL8 $g4oR{AAR𼠈ap|v0?$yN@IENDB`DarkRadiant-2.14.0/install/bitmaps/wireframeMode16.png000066400000000000000000000004151413722237400225370ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org<IDAT8I 0 E{tە.IIpa9{L۠08xW /5Z,Tü܎qH*UV2ɰ~й$ .N`ijk_IENDB`DarkRadiant-2.14.0/install/colours.xml000066400000000000000000000237701413722237400176560ustar00rootroot00000000000000 DarkRadiant-2.14.0/install/commandsystem.xml000066400000000000000000000146111413722237400210450ustar00rootroot00000000000000 DarkRadiant-2.14.0/install/darkradiant.desktop.in000066400000000000000000000011041413722237400217150ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Name=DarkRadiant GenericName=Level editor Keywords=doom;doom3;idtech;level;map;the dark mod;game development; Comment=3D level editor for Doom 3 and the Dark Mod Comment[de]=3D Level Editor für Doom 3 und The Dark Mod Icon=@CMAKE_INSTALL_PREFIX@/share/darkradiant/bitmaps/darkradiant_icon_64x64.png # The %f means a single, local, absolute file. Remote files will be # first copied in a local temp location and then given to the program: Exec=@CMAKE_INSTALL_PREFIX@/bin/darkradiant %f Terminal=false Type=Application Categories=Game;3DGraphics; DarkRadiant-2.14.0/install/debug.xml000066400000000000000000000052541413722237400172530ustar00rootroot00000000000000 DarkRadiant-2.14.0/install/games/000077500000000000000000000000001413722237400165315ustar00rootroot00000000000000DarkRadiant-2.14.0/install/games/darkmod.game000066400000000000000000000356301413722237400210140ustar00rootroot00000000000000 tga jpg dds materials mtr fonts dat 2 The origin of this object in 3D space The classname of this entity. This must be a recognised class defined in one of the DEF files, and governs the overall behaviour of the entity The displayed name of this entity. This can be arbitrary, but must be unique across the entire map The direction this entity initially faces. Generally applied to AI or player_start entities. The displayed model or particle system for this entity. For a func_static or other entity type which can have brushes as children, this key must be set to the same value as "name" if brushes are used The model or particle system to be used when this entity is lit (i.e. for torches). The model or particle system to be used when this torch entity is extinguished. lights fogs Easy Medium Difficult DarkRadiant-2.14.0/install/games/doom3-demo.game000066400000000000000000000323371413722237400213370ustar00rootroot00000000000000 tga jpg dds materials mtr fonts dat 2 The origin of this object in 3D space The classname of this entity. This must be a recognised class defined in one of the DEF files, and governs the overall behaviour of the entity The displayed name of this entity. This can be arbitrary, but must be unique across the entire map The displayed model or particle system for this entity. For a func_static or other entity type which can have brushes as children, this key must be set to the same value as "name" if brushes are used The model or particle system to be used when this entity is lit (i.e. for torches). The model or particle system to be used when this torch entity is extinguished. lights fogs DarkRadiant-2.14.0/install/games/doom3.game000066400000000000000000000337421413722237400204160ustar00rootroot00000000000000 tga jpg dds materials mtr fonts dat 2 The origin of this object in 3D space The classname of this entity. This must be a recognised class defined in one of the DEF files, and governs the overall behaviour of the entity The displayed name of this entity. This can be arbitrary, but must be unique across the entire map The direction this entity initially faces. Generally applied to AI or player_start entities. The displayed model or particle system for this entity. For a func_static or other entity type which can have brushes as children, this key must be set to the same value as "name" if brushes are used The model or particle system to be used when this entity is lit (i.e. for torches). The model or particle system to be used when this torch entity is extinguished. lights fogs DarkRadiant-2.14.0/install/games/prey.game000066400000000000000000000231261413722237400203470ustar00rootroot00000000000000 tga jpg dds materials mtr fonts dat 2 The origin of this object in 3D space The classname of this entity. This must be a recognised class defined in one of the DEF files, and governs the overall behaviour of the entity The displayed name of this entity. This can be arbitrary, but must be unique across the entire map The direction this entity initially faces. Generally applied to AI or player_start entities. The displayed model or particle system for this entity. For a func_static or other entity type which can have brushes as children, this key must be set to the same value as "name" if brushes are used The model or particle system to be used when this entity is lit (i.e. for torches). The model or particle system to be used when this torch entity is extinguished. lights fogs DarkRadiant-2.14.0/install/games/quake3.game000066400000000000000000000230211413722237400205530ustar00rootroot00000000000000 tga jpg dds materials mtr fonts dat 2 The origin of this object in 3D space The classname of this entity. This must be a recognised class defined in one of the DEF files, and governs the overall behaviour of the entity The displayed name of this entity. This can be arbitrary, but must be unique across the entire map The direction this entity initially faces. Generally applied to AI or player_start entities. The displayed model or particle system for this entity. For a func_static or other entity type which can have brushes as children, this key must be set to the same value as "name" if brushes are used The model or particle system to be used when this entity is lit (i.e. for torches). The model or particle system to be used when this torch entity is extinguished. lights fogs DarkRadiant-2.14.0/install/games/quake4.game000066400000000000000000000231541413722237400205630ustar00rootroot00000000000000 tga jpg dds materials mtr fonts dat 2 The origin of this object in 3D space The classname of this entity. This must be a recognised class defined in one of the DEF files, and governs the overall behaviour of the entity The displayed name of this entity. This can be arbitrary, but must be unique across the entire map The direction this entity initially faces. Generally applied to AI or player_start entities. The displayed model or particle system for this entity. For a func_static or other entity type which can have brushes as children, this key must be set to the same value as "name" if brushes are used The model or particle system to be used when this entity is lit (i.e. for torches). The model or particle system to be used when this torch entity is extinguished. lights fogs DarkRadiant-2.14.0/install/games/xreal.game000066400000000000000000000332751413722237400205110ustar00rootroot00000000000000 tga png jpg dds materials mtr fonts dat 1 The origin of this object in 3D space The classname of this entity. This must be a recognised class defined in one of the DEF files, and governs the overall behaviour of the entity The displayed name of this entity. This can be arbitrary, but must be unique across the entire map The direction this entity initially faces. Generally applied to AI or player_start entities. The displayed model or particle system for this entity. For a func_static or other entity type which can have brushes as children, this key must be set to the same value as "name" if brushes are used The model or particle system to be used when this entity is lit (i.e. for torches). The model or particle system to be used when this torch entity is extinguished. lights fogs DarkRadiant-2.14.0/install/gl/000077500000000000000000000000001413722237400160375ustar00rootroot00000000000000DarkRadiant-2.14.0/install/gl/interaction_fp.glsl000066400000000000000000000063071413722237400217340ustar00rootroot00000000000000/// ============================================================================ /* Copyright (C) 2004 Robert Beckebans Please see the file "CONTRIBUTORS" for a list of contributors This program 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 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /// ============================================================================ uniform sampler2D u_diffusemap; uniform sampler2D u_bumpmap; uniform sampler2D u_specularmap; uniform sampler2D u_attenuationmap_xy; uniform sampler2D u_attenuationmap_z; uniform vec3 u_view_origin; uniform vec3 u_light_origin; uniform vec3 u_light_color; uniform float u_light_scale; // Invert vertex colour uniform bool uInvertVCol; // Activate ambient light mode (brightness unaffected by direction) uniform bool uAmbientLight; varying vec3 var_vertex; varying vec4 var_tex_diffuse_bump; varying vec2 var_tex_specular; varying vec4 var_tex_atten_xy_z; varying mat3 var_mat_os2ts; void main() { // compute view direction in tangent space vec3 V = normalize(var_mat_os2ts * (u_view_origin - var_vertex)); // compute light direction in tangent space vec3 L = normalize(var_mat_os2ts * (u_light_origin - var_vertex)); // compute half angle in tangent space vec3 H = normalize(L + V); // compute normal in tangent space from bumpmap vec2 normalRG = texture2D(u_bumpmap, var_tex_diffuse_bump.pq).rg; float normalB = sqrt(1.0 - pow(normalRG.r, 2.0) - pow(normalRG.g, 2.0)); vec3 N = 2.0 * (vec3(normalRG, normalB) - 0.5); N = normalize(N); // compute the diffuse term vec4 diffuse = texture2D(u_diffusemap, var_tex_diffuse_bump.st); float lightBrightness = uAmbientLight ? 1.0 : clamp(dot(N, L), 0.0, 1.0); diffuse.rgb *= u_light_color * u_light_scale * lightBrightness; // compute the specular term float specIntensity = clamp(dot(N, H), 0.0, 1.0); specIntensity = pow(specIntensity, 32.0); vec3 specular = texture2D(u_specularmap, var_tex_specular.xy).rgb * u_light_color * specIntensity; // compute attenuation vec3 attenuation_xy = vec3(0.0, 0.0, 0.0); if (var_tex_atten_xy_z.w > 0.0) attenuation_xy = texture2DProj( u_attenuationmap_xy, var_tex_atten_xy_z.xyw ).rgb; vec3 attenuation_z = texture2D( u_attenuationmap_z, vec2(var_tex_atten_xy_z.z, 0.5) ).rgb; // compute final color gl_FragColor = diffuse * (uInvertVCol ? vec4(1.0, 1.0, 1.0, 1.0) - gl_Color : gl_Color); if (!uAmbientLight) gl_FragColor.rgb += specular; gl_FragColor.rgb *= attenuation_xy; gl_FragColor.rgb *= attenuation_z; } DarkRadiant-2.14.0/install/gl/interaction_vp.glsl000066400000000000000000000043101413722237400217440ustar00rootroot00000000000000/// ============================================================================ /* Copyright (C) 2004 Robert Beckebans Please see the file "CONTRIBUTORS" for a list of contributors This program 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 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /// ============================================================================ attribute vec4 attr_TexCoord0; attribute vec3 attr_Tangent; attribute vec3 attr_Bitangent; attribute vec3 attr_Normal; varying vec3 var_vertex; varying vec4 var_tex_diffuse_bump; varying vec2 var_tex_specular; varying vec4 var_tex_atten_xy_z; varying mat3 var_mat_os2ts; void main() { // transform vertex position into homogenous clip-space gl_Position = ftransform(); // assign position in object space var_vertex = gl_Vertex.xyz; // transform texcoords into diffusemap texture space var_tex_diffuse_bump.st = (gl_TextureMatrix[0] * attr_TexCoord0).st; // transform texcoords into bumpmap texture space var_tex_diffuse_bump.pq = (gl_TextureMatrix[1] * attr_TexCoord0).st; // transform texcoords into specularmap texture space var_tex_specular = (gl_TextureMatrix[2] * attr_TexCoord0).st; // calc light xy,z attenuation in light space var_tex_atten_xy_z = gl_TextureMatrix[3] * gl_Vertex; // construct object-space-to-tangent-space 3x3 matrix var_mat_os2ts = mat3( attr_Tangent.x, attr_Bitangent.x, attr_Normal.x, attr_Tangent.y, attr_Bitangent.y, attr_Normal.y, attr_Tangent.z, attr_Bitangent.z, attr_Normal.z ); // Pass through vertex colour gl_FrontColor = gl_Color; } DarkRadiant-2.14.0/install/gl/zfill_alpha_fp.glsl000066400000000000000000000006631413722237400217010ustar00rootroot00000000000000#version 120 uniform sampler2D u_diffuse; uniform float u_alpha_test; varying vec2 var_tex_diffuse; void main() { if (u_alpha_test < 0) { gl_FragColor.a = 1.0; gl_FragColor.rgb = vec3(1.0, 1.0, 0.0); } else { vec4 tex = texture2D(u_diffuse, var_tex_diffuse); if (tex.a <= u_alpha_test) { discard; } gl_FragColor = tex; } } DarkRadiant-2.14.0/install/gl/zfill_fp.glsl000066400000000000000000000020701413722237400205260ustar00rootroot00000000000000/// ============================================================================ /* Copyright (C) 2004 Robert Beckebans Please see the file "CONTRIBUTORS" for a list of contributors This program 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 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /// ============================================================================ void main() { gl_FragColor.a = 1.0; gl_FragColor.rgb = vec3(1.0, 1.0, 0.0); } DarkRadiant-2.14.0/install/gl/zfill_vp.glsl000066400000000000000000000024231413722237400205500ustar00rootroot00000000000000/// ============================================================================ /* Copyright (C) 2004 Robert Beckebans Please see the file "CONTRIBUTORS" for a list of contributors This program 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 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /// ============================================================================ attribute vec4 attr_TexCoord0; varying vec2 var_tex_diffuse; void main() { // transform vertex position into homogenous clip-space gl_Position = ftransform(); // transform texcoords var_tex_diffuse = (gl_TextureMatrix[0] * attr_TexCoord0).st; // assign color gl_FrontColor = gl_Color; } DarkRadiant-2.14.0/install/i18n/000077500000000000000000000000001413722237400162145ustar00rootroot00000000000000DarkRadiant-2.14.0/install/i18n/LINGUAS000066400000000000000000000000031413722237400172320ustar00rootroot00000000000000de DarkRadiant-2.14.0/install/i18n/Makefile.in.in000066400000000000000000000426151413722237400206760ustar00rootroot00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # # Origin: gettext-0.19.8 GETTEXT_MACRO_VERSION = 0.19 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SED = @SED@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ # When building gettext-tools, we prefer to use the built programs # rather than installed programs. However, we can't do that when we # are cross compiling. CROSS_COMPILING = @CROSS_COMPILING@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot POFILESDEPS_yes = $(POFILESDEPS_) POFILESDEPS_no = POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) DISTFILESDEPS_ = update-po DISTFILESDEPS_yes = $(DISTFILESDEPS_) DISTFILESDEPS_no = DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. CHECK_MACRO_VERSION = \ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in package_gnu="$(PACKAGE_GNU)"; \ test -n "$$package_gnu" || { \ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \ -size -10000000c -exec grep 'GNU @PACKAGE@' \ /dev/null '{}' ';' 2>/dev/null; \ else \ LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ fi; \ } | grep -v 'libtool:' >/dev/null; then \ package_gnu=yes; \ else \ package_gnu=no; \ fi; \ }; \ if test "$$package_gnu" = "yes"; then \ package_prefix='GNU '; \ else \ package_prefix=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_prefix}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot-header; then \ sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \ cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po; \ rm -f $(DOMAIN).1po; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ cat < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ cat < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(POFILESDEPS) gather-po-files @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done # Custom target added to gather the .po files in the top-level directory and # with the correct names. The Win32 gettext implementation keeps them next to # the .mo files. gather-po-files: for dir in *; do \ if test -d $${dir}; then \ cp $${dir}/LC_MESSAGES/darkradiant.po $${dir}.po; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile gather-po-files $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: DarkRadiant-2.14.0/install/i18n/Makevars000066400000000000000000000034721413722237400177160ustar00rootroot00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = install/i18n top_builddir = ../.. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --qt # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = The Dark Mod Team and contributors # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = http://thedarkmod.com # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = DarkRadiant-2.14.0/install/i18n/POTFILES.in000066400000000000000000000171021413722237400177720ustar00rootroot00000000000000radiant/textool/TexTool.cpp radiant/settings/GameManager.cpp radiant/settings/LanguageManager.cpp radiant/modulesystem/ModuleRegistry.cpp radiant/brushmanip.cpp radiant/patchmanip.cpp radiant/selection/shaderclipboard/ShaderClipboard.cpp radiant/selection/algorithm/Shader.cpp radiant/selection/algorithm/Curves.cpp radiant/selection/algorithm/Entity.cpp radiant/selection/algorithm/Group.cpp radiant/selection/algorithm/Primitives.cpp radiant/selection/algorithm/Transformation.cpp radiant/selection/selectionset/SelectionSetToolmenu.cpp radiant/clipper/Clipper.cpp radiant/entity.cpp radiant/mainframe_old.cpp radiant/layers/LayerSystem.cpp radiant/map/FindMapElements.cpp radiant/map/MapResource.cpp radiant/map/CounterManager.cpp radiant/map/RegionManager.cpp radiant/map/PointFile.cpp radiant/map/AutoSaver.cpp radiant/map/MapFileChooserPreview.cpp radiant/map/Map.cpp radiant/camera/CameraSettings.cpp radiant/camera/FloatingCamWnd.cpp radiant/xyview/GlobalXYWnd.cpp radiant/xyview/XYWnd.cpp radiant/referencecache/ModelCache.cpp radiant/ui/about/AboutDialog.cpp radiant/ui/overlay/OverlayDialog.cpp radiant/ui/mru/MRU.cpp radiant/ui/ortho/OrthoContextMenu.cpp radiant/ui/common/ShaderChooser.cpp radiant/ui/common/EntityChooser.cpp radiant/ui/common/SoundShaderPreview.cpp radiant/ui/common/TexturePreviewCombo.cpp radiant/ui/common/SoundChooser.cpp radiant/ui/common/CommandEntry.cpp radiant/ui/common/ShaderSelector.cpp radiant/ui/common/ShaderDefinitionView.cpp radiant/ui/commandlist/ShortcutChooser.cpp radiant/ui/commandlist/CommandList.cpp radiant/ui/einspector/SoundPropertyEditor.cpp radiant/ui/einspector/ClassnamePropertyEditor.cpp radiant/ui/einspector/AddPropertyDialog.cpp radiant/ui/einspector/ModelPropertyEditor.cpp radiant/ui/einspector/SkinChooser.cpp radiant/ui/einspector/TexturePropertyEditor.cpp radiant/ui/einspector/EntityPropertyEditor.cpp radiant/ui/einspector/Vector3PropertyEditor.cpp radiant/ui/einspector/EntityInspector.cpp radiant/ui/einspector/SkinPropertyEditor.cpp radiant/ui/einspector/LightTextureChooser.cpp radiant/ui/mapinfo/ShaderInfoTab.cpp radiant/ui/mapinfo/MapInfoDialog.cpp radiant/ui/mapinfo/EntityInfoTab.cpp radiant/ui/mapinfo/ModelInfoTab.cpp radiant/ui/mainframe/EmbeddedLayout.cpp radiant/ui/mainframe/SplitPaneLayout.cpp radiant/ui/mainframe/LayoutCommand.h radiant/ui/mainframe/FloatingLayout.cpp radiant/ui/mainframe/MainFrame.cpp radiant/ui/entitychooser/EntityClassChooser.cpp radiant/ui/menu/FiltersMenu.cpp radiant/ui/prefdialog/PrefDialog.cpp radiant/ui/lightinspector/LightInspector.cpp radiant/ui/findshader/FindShader.cpp radiant/ui/particles/ParticlesChooser.cpp radiant/ui/layers/LayerControl.cpp radiant/ui/layers/LayerControlDialog.cpp radiant/ui/mediabrowser/MediaBrowser.cpp radiant/ui/mediabrowser/TextureDirectoryLoader.h radiant/ui/texturebrowser/TextureBrowser.cpp radiant/ui/surfaceinspector/SurfaceInspector.cpp radiant/ui/modelselector/ModelSelector.cpp radiant/ui/modelselector/ModelFileFunctor.h radiant/ui/brush/QuerySidesDialog.cpp radiant/ui/transform/TransformDialog.cpp radiant/ui/patch/PatchThickenDialog.cpp radiant/ui/patch/BulgePatchDialog.cpp radiant/ui/patch/PatchInspector.cpp radiant/ui/patch/PatchCreateDialog.cpp radiant/ui/patch/CapDialog.cpp radiant/ui/filterdialog/FilterEditor.cpp radiant/ui/filterdialog/FilterDialog.cpp radiant/main.cpp radiant/brush/BrushModule.cpp radiant/brush/csg/CSG.cpp radiant/patch/PatchCreators.h radiant/patch/Patch.cpp include/i18n.h libs/gtkutil/ModalProgressDialog.cpp libs/gtkutil/IConv.h libs/gtkutil/FileChooser.cpp libs/gtkutil/dialog/MessageBox.cpp libs/gtkutil/ConsoleView.cpp libs/gtkutil/PathEntry.cpp libs/pivot.h libs/radiant_jpeglib.h libs/picomodel/pm_lwo.c libs/picomodel/lwo/lwo2.h libs/picomodel/lwo/lwob.c plugins/eclasstree/plugin.cpp plugins/eclasstree/EClassTree.cpp plugins/entity/EntityCreator.cpp plugins/dm.conversation/plugin.cpp plugins/dm.conversation/ConversationEntityFinder.h plugins/dm.conversation/CommandEditor.cpp plugins/dm.conversation/ConversationDialog.cpp plugins/dm.conversation/ConversationEntity.cpp plugins/dm.conversation/ConversationKeyExtractor.cpp plugins/dm.conversation/ConversationEditor.cpp plugins/fonts/FontLoader.cpp plugins/eventmanager/MouseEvents.cpp plugins/eventmanager/Modifiers.cpp plugins/mapdoom3/NodeImporter.cpp plugins/mapdoom3/Doom3PrefabFormat.cpp plugins/mapdoom3/primitiveparsers/BrushDef.cpp plugins/mapdoom3/primitiveparsers/BrushDef3.cpp plugins/mapdoom3/InfoFile.cpp plugins/mapdoom3/Doom3MapFormat.cpp plugins/dm.gui/plugin.cpp plugins/dm.gui/XDataSelector.cpp plugins/dm.gui/ReadableReloader.h plugins/dm.gui/GuiSelector.cpp plugins/dm.gui/XData.h plugins/dm.gui/ReadablePopulator.h plugins/dm.gui/ReadableEditorDialog.cpp plugins/dm.gui/XData.cpp plugins/dm.gui/XdFileChooserDialog.cpp plugins/dm.stimresponse/ResponseEffect.cpp plugins/dm.stimresponse/EffectEditor.cpp plugins/dm.stimresponse/plugin.cpp plugins/dm.stimresponse/StimEditor.cpp plugins/dm.stimresponse/SRPropertyRemover.cpp plugins/dm.stimresponse/CustomStimEditor.cpp plugins/dm.stimresponse/StimResponseEditor.cpp plugins/dm.stimresponse/StimTypes.cpp plugins/dm.stimresponse/ResponseEditor.cpp plugins/dm.stimresponse/SRPropertyLoader.cpp plugins/dm.stimresponse/ClassEditor.cpp plugins/dm.difficulty/plugin.cpp plugins/dm.difficulty/DifficultyDialog.cpp plugins/dm.difficulty/Setting.cpp plugins/dm.difficulty/DifficultyEditor.cpp plugins/filetypes/FileTypeRegistry.cpp plugins/entitylist/EntityList.cpp plugins/dm.objectives/ObjectivesEditor.cpp plugins/dm.objectives/Specifier.cpp plugins/dm.objectives/ObjectiveEntityFinder.h plugins/dm.objectives/LogicEditor.cpp plugins/dm.objectives/ComponentType.cpp plugins/dm.objectives/ObjectiveKeyExtractor.cpp plugins/dm.objectives/objectives.cpp plugins/dm.objectives/MissionLogicDialog.cpp plugins/dm.objectives/SpecifierType.cpp plugins/dm.objectives/ce/LocationComponentEditor.cpp plugins/dm.objectives/ce/DistanceComponentEditor.cpp plugins/dm.objectives/ce/ItemComponentEditor.cpp plugins/dm.objectives/ce/InfoLocationComponentEditor.cpp plugins/dm.objectives/ce/AIFindItemComponentEditor.cpp plugins/dm.objectives/ce/ReadableOpenedComponentEditor.cpp plugins/dm.objectives/ce/CustomComponentEditor.cpp plugins/dm.objectives/ce/DestroyComponentEditor.cpp plugins/dm.objectives/ce/ReadableClosedComponentEditor.cpp plugins/dm.objectives/ce/ReadablePageReachedComponentEditor.cpp plugins/dm.objectives/ce/AlertComponentEditor.cpp plugins/dm.objectives/ce/PickpocketComponentEditor.cpp plugins/dm.objectives/ce/CustomClockedComponentEditor.cpp plugins/dm.objectives/ce/KillComponentEditor.cpp plugins/dm.objectives/ce/KnockoutComponentEditor.cpp plugins/dm.objectives/ce/AIFindBodyComponentEditor.cpp plugins/dm.objectives/ComponentsDialog.cpp plugins/dm.objectives/ObjectiveEntity.cpp plugins/dm.objectives/DifficultyPanel.cpp plugins/dm.editing/plugin.cpp plugins/dm.editing/AIVocalSetPropertyEditor.cpp plugins/dm.editing/AIHeadPropertyEditor.cpp plugins/dm.editing/AIHeadChooserDialog.cpp plugins/dm.editing/FixupMapDialog.cpp plugins/dm.editing/AIVocalSetPreview.cpp plugins/dm.editing/AIVocalSetChooserDialog.cpp plugins/dm.editing/FixupMap.cpp plugins/image/jpeg.cpp plugins/script/ScriptWindow.cpp plugins/script/ScriptMenu.cpp plugins/script/ScriptingSystem.cpp plugins/uimanager/colourscheme/ColourSchemeEditor.cpp plugins/uimanager/FilterMenu.cpp plugins/uimanager/ParticlePreview.cpp plugins/uimanager/ToolbarManager.cpp plugins/uimanager/GroupDialog.cpp plugins/uimanager/MenuItem.cpp plugins/undo/UndoSystem.cpp plugins/grid/Grid.cpp plugins/wavefront/WaveFrontModule.cpp install/ui/ObjectivesEditor.glade install/ui/EntityClassChooser.glade install/ui/CamWnd.glade install/ui/AddPropertyDialog.glade DarkRadiant-2.14.0/install/i18n/darkradiant.pot000066400000000000000000003631631413722237400212400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: greebo@angua.at\n" "POT-Creation-Date: 2021-01-24 05:36+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ..\..\radiant\camera\CameraSettings.cpp:57 msgid "Settings/Camera" msgstr "" #: ..\..\radiant\camera\CameraSettings.cpp:60 msgid "Movement Speed (game units)" msgstr "" #: ..\..\radiant\camera\CameraSettings.cpp:61 msgid "Rotation Speed" msgstr "" #: ..\..\radiant\camera\CameraSettings.cpp:64 msgid "Freelook mode can be toggled" msgstr "" #: ..\..\radiant\camera\CameraSettings.cpp:65 msgid "Discrete movement (non-freelook mode)" msgstr "" #: ..\..\radiant\camera\CameraSettings.cpp:66 msgid "Enable far-clip plane (hides distant objects)" msgstr "" #: ..\..\radiant\camera\CameraSettings.cpp:69 msgid "Invert mouse vertical axis (freelook mode)" msgstr "" #: ..\..\radiant\camera\CameraSettings.cpp:72 msgid "Solid selection boxes" msgstr "" #: ..\..\radiant\camera\CameraSettings.cpp:75 msgid "Show camera toolbar" msgstr "" #: ..\..\radiant\camera\FloatingCamWnd.cpp:18 xml_file_content.cpp:68 msgid "Camera" msgstr "" #: ..\..\radiant\camera\tools\FreeMoveTool.h:23 msgid "Freemove Mode" msgstr "" #: ..\..\radiant\camera\tools\JumpToObjectTool.h:27 msgid "Jump to Object" msgstr "" #: ..\..\radiant\camera\tools\PanViewTool.h:23 msgid "Pan Camera View" msgstr "" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:116 msgid "Pick Shader" msgstr "" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:139 msgid "Paste Shader Projected" msgstr "" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:158 msgid "Paste Shader Natural" msgstr "" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:177 msgid "Paste Texture Coordinates" msgstr "" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:196 msgid "Paste Shader to all Brush Faces" msgstr "" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:215 msgid "Paste Shader Name" msgstr "" #: ..\..\radiant\eventmanager\MouseToolGroup.cpp:23 msgid "XY View" msgstr "" #: ..\..\radiant\eventmanager\MouseToolGroup.cpp:25 xml_file_content.cpp:56 msgid "Camera View" msgstr "" #: ..\..\radiant\eventmanager\MouseToolGroup.cpp:27 msgid "Unknown" msgstr "" #: ..\..\radiant\map\AutoSaver.cpp:205 msgid "" "The snapshots saved for this map are exceeding the configured size limit.\n" "Consider cleaning up the folder {0}" msgstr "" #: ..\..\radiant\map\AutoSaver.cpp:318 msgid "Settings/Autosave" msgstr "" #: ..\..\radiant\map\AutoSaver.cpp:321 msgid "Enable Autosave" msgstr "" #: ..\..\radiant\map\AutoSaver.cpp:322 msgid "Autosave Interval (in minutes)" msgstr "" #: ..\..\radiant\map\AutoSaver.cpp:324 msgid "Save Snapshots" msgstr "" #: ..\..\radiant\map\AutoSaver.cpp:325 msgid "Snapshot folder (relative to map folder)" msgstr "" #: ..\..\radiant\map\AutoSaver.cpp:326 msgid "Max total Snapshot size per map (MB)" msgstr "" #: ..\..\radiant\RadiantApp.cpp:118 msgid "Disable sound for this session." msgstr "" #: ..\..\radiant\RadiantApp.cpp:119 msgid "Verbose logging." msgstr "" #: ..\..\radiant\selection\ManipulateMouseTool.cpp:37 msgid "Manipulate" msgstr "" #: ..\..\radiant\selection\SelectionMouseTools.cpp:58 msgid "Select" msgstr "" #: ..\..\radiant\selection\SelectionMouseTools.cpp:194 xml_file_content.cpp:3 msgid "Select Faces" msgstr "" #: ..\..\radiant\selection\SelectionMouseTools.cpp:213 msgid "Cycle Selection" msgstr "" #: ..\..\radiant\selection\SelectionMouseTools.cpp:273 msgid "Cycle Face Selection" msgstr "" #: ..\..\radiant\settings\LocalisationModule.cpp:51 msgid "Settings/Language" msgstr "" #: ..\..\radiant\settings\LocalisationModule.cpp:52 msgid "Language" msgstr "" #: ..\..\radiant\settings\LocalisationModule.cpp:54 msgid "" "Note: You'll need to restart DarkRadiant\n" "after changing the language setting." msgstr "" #: ..\..\radiant\settings\LocalisationProvider.cpp:145 msgid "English" msgstr "" #: ..\..\radiant\settings\LocalisationProvider.cpp:146 msgid "German" msgstr "" #: ..\..\radiant\textool\TexTool.cpp:33 msgid "Texture Tool" msgstr "" #: ..\..\radiant\ui\aas\AasControl.cpp:34 msgid "Reload AAS File" msgstr "" #: ..\..\radiant\ui\aas\AasControlDialog.cpp:29 msgid "AAS Viewer" msgstr "" #: ..\..\radiant\ui\aas\AasControlDialog.cpp:79 msgid "Search for AAS Files" msgstr "" #: ..\..\radiant\ui\aas\AasControlDialog.cpp:83 msgid "Show Area Numbers" msgstr "" #: ..\..\radiant\ui\aas\AasControlDialog.cpp:86 msgid "Hide distant Areas" msgstr "" #: ..\..\radiant\ui\about\AboutDialog.cpp:25 msgid "About DarkRadiant" msgstr "" #: ..\..\radiant\ui\about\AboutDialog.cpp:60 msgid "Build date: {0}" msgstr "" #: ..\..\radiant\ui\about\AboutDialog.cpp:69 msgid "Version: {0:d}.{1:d}.{2:d}" msgstr "" #: ..\..\radiant\ui\about\AboutDialog.cpp:79 msgid "Vendor: {0}" msgstr "" #: ..\..\radiant\ui\about\AboutDialog.cpp:80 msgid "Version: {0}" msgstr "" #: ..\..\radiant\ui\about\AboutDialog.cpp:81 msgid "Renderer: {0}" msgstr "" #: ..\..\radiant\ui\brush\FindBrush.cpp:13 msgid "Find Brush" msgstr "" #: ..\..\radiant\ui\brush\FindBrush.cpp:15 msgid "Entity Number:" msgstr "" #: ..\..\radiant\ui\brush\FindBrush.cpp:16 msgid "Brush Number:" msgstr "" #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:18 msgid "Enter Number of Sides" msgstr "" #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:41 msgid "Number of sides: " msgstr "" #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:60 msgid "At least one brush must be selected for this operation." msgstr "" #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:105 #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:122 msgid "Unknown brush type ID: {0}" msgstr "" #: ..\..\radiant\ui\commandlist\CommandList.cpp:20 msgid "Shortcut List" msgstr "" #: ..\..\radiant\ui\commandlist\CommandList.cpp:60 #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:123 #: xml_file_content.cpp:2 msgid "Command" msgstr "" #: ..\..\radiant\ui\commandlist\CommandList.cpp:62 #: ..\..\libs\wxutil\dataview\KeyValueTable.cpp:41 msgid "Key" msgstr "" #: ..\..\radiant\ui\commandlist\CommandList.cpp:95 msgid "Reset to Default" msgstr "" #: ..\..\radiant\ui\commandlist\CommandList.cpp:128 msgid "Enter new Shortcut" msgstr "" #: ..\..\radiant\ui\commandlist\CommandList.cpp:179 #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:185 msgid "Reset to default?" msgstr "" #: ..\..\radiant\ui\commandlist\CommandList.cpp:180 #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:186 msgid "" "Really clear all bindings and reload\n" "them from the default settings?" msgstr "" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:38 msgid "Note: This shortcut is already assigned to:" msgstr "" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:48 #: ..\..\radiant\ui\script\ScriptWindow.cpp:85 xml_file_content.cpp:11 #: xml_file_content.cpp:3 xml_file_content.cpp:7 xml_file_content.cpp:12 #: xml_file_content.cpp:18 xml_file_content.cpp:8 xml_file_content.cpp:6 #: xml_file_content.cpp:14 xml_file_content.cpp:15 xml_file_content.cpp:39 msgid "OK" msgstr "" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:51 #: ..\..\radiant\ui\mapselector\MapSelector.cpp:42 xml_file_content.cpp:2 #: xml_file_content.cpp:6 xml_file_content.cpp:11 xml_file_content.cpp:17 #: xml_file_content.cpp:4 xml_file_content.cpp:10 xml_file_content.cpp:9 #: xml_file_content.cpp:14 xml_file_content.cpp:5 xml_file_content.cpp:13 #: xml_file_content.cpp:20 xml_file_content.cpp:40 msgid "Cancel" msgstr "" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:130 msgid "" "The specified shortcut is already assigned to {0}\n" "Overwrite the current setting and assign this shortcut to {1} instead?" msgstr "" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:136 msgid "Overwrite existing shortcut?" msgstr "" #: ..\..\radiant\ui\common\CommandEntry.cpp:26 msgid "Go" msgstr "" #: ..\..\radiant\ui\common\DefinitionView.cpp:26 #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:103 #: xml_file_content.cpp:2 msgid "Name:" msgstr "" #: ..\..\radiant\ui\common\DefinitionView.cpp:27 xml_file_content.cpp:1 msgid "Defined in:" msgstr "" #: ..\..\radiant\ui\common\DefinitionView.cpp:44 msgid "Definition:" msgstr "" #: ..\..\radiant\ui\common\EntityChooser.cpp:16 msgid "Select Entity" msgstr "" #: ..\..\radiant\ui\common\MaterialDefinitionView.cpp:10 msgid "View Shader Definition" msgstr "" #: ..\..\radiant\ui\common\ShaderChooser.cpp:15 msgid "Choose Shader" msgstr "" #: ..\..\radiant\ui\common\ShaderSelector.cpp:172 #: ..\..\radiant\ui\common\ShaderSelector.cpp:202 #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:148 #: ..\..\radiant\ui\einspector\EntityInspector.cpp:463 #: ..\..\libs\wxutil\dataview\KeyValueTable.cpp:44 msgid "Value" msgstr "" #: ..\..\radiant\ui\common\ShaderSelector.cpp:200 msgid "Attribute" msgstr "" #: ..\..\radiant\ui\common\ShaderSelector.cpp:338 #: ..\..\radiant\ui\common\TexturePreviewCombo.cpp:80 #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:60 #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:232 #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:50 #: xml_file_content.cpp:14 msgid "Shader" msgstr "" #: ..\..\radiant\ui\common\ShaderSelector.cpp:339 #: ..\..\radiant\ui\common\ShaderSelector.cpp:357 #: ..\..\radiant\ui\common\TexturePreviewCombo.cpp:81 #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:258 msgid "Defined in" msgstr "" #: ..\..\radiant\ui\common\ShaderSelector.cpp:340 #: ..\..\radiant\ui\common\ShaderSelector.cpp:373 #: ..\..\radiant\ui\common\TexturePreviewCombo.cpp:82 #: ..\..\plugins\dm.editing\AIVocalSetChooserDialog.cpp:56 #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:133 xml_file_content.cpp:1 msgid "Description" msgstr "" #: ..\..\radiant\ui\common\ShaderSelector.cpp:348 #: ..\..\plugins\dm.conversation\CommandEditor.cpp:222 msgid "None" msgstr "" #: ..\..\radiant\ui\common\ShaderSelector.cpp:356 msgid "Image map" msgstr "" #: ..\..\radiant\ui\common\ShaderSelector.cpp:370 msgid "Light flags" msgstr "" #: ..\..\radiant\ui\common\SoundShaderDefinitionView.cpp:10 msgid "View Sound Shader Definition" msgstr "" #: ..\..\radiant\ui\common\TexturePreviewCombo.cpp:44 msgid "Copy shader name" msgstr "" #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:23 msgid "Entity Class Tree" msgstr "" #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:43 msgid "Loading, please wait..." msgstr "" #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:132 #: ..\..\libs\wxutil\EntityClassChooser.cpp:311 msgid "Classname" msgstr "" #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:145 #: ..\..\radiant\ui\einspector\AddPropertyDialog.cpp:76 #: ..\..\radiant\ui\einspector\EntityInspector.cpp:458 msgid "Property" msgstr "" #: ..\..\radiant\ui\einspector\AddPropertyDialog.cpp:27 msgid "Add property" msgstr "" #: ..\..\radiant\ui\einspector\AddPropertyDialog.cpp:31 msgid "Custom properties defined for this entity class, if any" msgstr "" #: ..\..\radiant\ui\einspector\ClassnamePropertyEditor.cpp:26 msgid "Choose entity class..." msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:83 msgid "Show inherited properties" msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:88 msgid "Show help" msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:301 msgid "Add property..." msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:306 msgid "Delete property" msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:314 msgid "Copy Spawnarg(s)" msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:319 msgid "Cut Spawnarg(s)" msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:324 msgid "Paste Spawnarg(s)" msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:336 #: ..\..\radiant\ui\einspector\EntityInspector.cpp:339 #: ..\..\radiant\uimanager\GroupDialog.cpp:30 msgid "Entity" msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:1192 msgid "Entity {0}" msgstr "" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:1204 msgid "Entity {0}, Primitive {1}" msgstr "" #: ..\..\radiant\ui\einspector\EntityPropertyEditor.cpp:31 msgid "Choose target entity..." msgstr "" #: ..\..\radiant\ui\einspector\FloatPropertyEditor.cpp:70 #: ..\..\radiant\ui\einspector\Vector3PropertyEditor.cpp:69 msgid "Apply..." msgstr "" #: ..\..\radiant\ui\einspector\LightTextureChooser.cpp:48 msgid "Choose texture" msgstr "" #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:42 msgid "Choose model..." msgstr "" #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:46 #: ..\..\radiant\ui\einspector\SkinPropertyEditor.cpp:23 #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:110 msgid "Choose skin..." msgstr "" #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:51 msgid "Choose particle..." msgstr "" #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:87 msgid "Warning: " msgstr "" #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:88 msgid "" "Changing this entity's model to the selected value will\n" "remove all child primitives from it:\n" msgstr "" #: ..\..\radiant\ui\einspector\SkinChooser.cpp:26 msgid "Choose Skin" msgstr "" #: ..\..\radiant\ui\einspector\SkinChooser.cpp:81 msgid "Skin" msgstr "" #: ..\..\radiant\ui\einspector\SkinChooser.cpp:154 msgid "Matching skins" msgstr "" #: ..\..\radiant\ui\einspector\SkinChooser.cpp:174 msgid "All skins" msgstr "" #: ..\..\radiant\ui\einspector\SoundPropertyEditor.cpp:23 msgid "Choose sound..." msgstr "" #: ..\..\radiant\ui\einspector\TexturePropertyEditor.cpp:23 msgid "Choose texture..." msgstr "" #: ..\..\radiant\ui\einspector\Vector3PropertyEditor.cpp:61 msgid "X: " msgstr "" #: ..\..\radiant\ui\einspector\Vector3PropertyEditor.cpp:63 msgid " Y: " msgstr "" #: ..\..\radiant\ui\einspector\Vector3PropertyEditor.cpp:65 msgid " Z: " msgstr "" #: ..\..\radiant\ui\entitylist\EntityList.cpp:23 xml_file_content.cpp:66 msgid "Entity List" msgstr "" #: ..\..\radiant\ui\entitylist\EntityList.cpp:72 #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:172 #: ..\..\plugins\dm.conversation\ConversationDialog.cpp:86 #: xml_file_content.cpp:1 msgid "Name" msgstr "" #: ..\..\radiant\ui\entitylist\EntityList.cpp:86 msgid "Focus camera on selected entity" msgstr "" #: ..\..\radiant\ui\entitylist\EntityList.cpp:87 msgid "List visible nodes only" msgstr "" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:25 #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:29 msgid "Apply to selection" msgstr "" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:28 #: ..\..\libs\wxutil\dataview\ResourceTreeView.cpp:16 msgid "Remove from Favourites" msgstr "" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:100 msgid "Materials" msgstr "" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:105 #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:15 msgid "Models" msgstr "" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:110 msgid "EntityDefs" msgstr "" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:115 msgid "Sound Shaders" msgstr "" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:134 msgid "Show full Path" msgstr "" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:256 #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:259 msgid "Favourites" msgstr "" #: ..\..\radiant\ui\FileOverwriteConfirmationHandler.h:35 msgid "Confirm overwrite" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:21 msgid "Filter Settings" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:128 msgid "enabled" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:128 msgid "disabled" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:175 msgid "State" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:255 msgid "NewFilter" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:273 #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:343 msgid "Empty Filter" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:274 msgid "No rules defined for this filter, cannot insert." msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:287 msgid "Name Conflict" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:288 msgid "Cannot add, filter with same name already exists." msgstr "" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:344 msgid "No rules defined for this filter. Delete it?" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:16 msgid "Edit Filter" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:17 msgid "View Filter" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:116 #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:173 #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:326 msgid "show" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:116 #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:174 msgid "hide" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:142 msgid "Index" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:156 #: ..\..\plugins\dm.objectives\ComponentsDialog.cpp:119 #: ..\..\plugins\dm.stimresponse\ClassEditor.cpp:58 #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:88 #: xml_file_content.cpp:19 msgid "Type" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:164 msgid "Entity Key" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:168 msgid "Match" msgstr "" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:181 msgid "Action" msgstr "" #: ..\..\radiant\ui\filters\FiltersMainMenu.cpp:45 msgid "Activate &all Filters" msgstr "" #: ..\..\radiant\ui\filters\FiltersMainMenu.cpp:46 msgid "&Deactivate all Filters" msgstr "" #: ..\..\radiant\ui\filters\FiltersMainMenu.cpp:49 msgid "Edit Filters..." msgstr "" #: ..\..\radiant\ui\findshader\FindShader.cpp:27 msgid "Find & Replace Shader" msgstr "" #: ..\..\radiant\ui\findshader\FindShader.cpp:28 msgid "{0:d} shader(s) replaced." msgstr "" #: ..\..\radiant\ui\findshader\FindShader.cpp:34 msgid "" "When picking texture names, click the pick button and use {0}\n" "in the camera view to pick a material name. The picked texture will be\n" "filled in the entry box next to the activated button." msgstr "" #: ..\..\radiant\ui\findshader\FindShader.cpp:137 msgid "Picking Texures" msgstr "" #: ..\..\radiant\ui\grid\GridUserInterface.cpp:49 msgid "Current Grid Size" msgstr "" #: ..\..\radiant\ui\layers\CreateLayerDialog.cpp:40 #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1537 msgid "Enter Name" msgstr "" #: ..\..\radiant\ui\layers\CreateLayerDialog.cpp:41 msgid "Enter Layer Name" msgstr "" #: ..\..\radiant\ui\layers\CreateLayerDialog.cpp:55 msgid "Cannot create layer with empty name." msgstr "" #: ..\..\radiant\ui\layers\CreateLayerDialog.cpp:71 msgid "This name already exists." msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:56 msgid "" "Indicates whether anything among the current selection is part of this layer." msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:76 msgid "" "Click to select all in layer, hold SHIFT to deselect, hold CTRL to set as " "active layer." msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:77 msgid "Rename this layer" msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:78 msgid "Delete this layer" msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:79 msgid "Toggle layer visibility" msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:171 msgid "Do you really want to delete this layer?" msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:175 msgid "Confirm Layer Deletion" msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:202 msgid "Rename Layer" msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:203 msgid "Enter new Layer Name" msgstr "" #: ..\..\radiant\ui\layers\LayerControl.cpp:225 msgid "Could not rename layer, please try again." msgstr "" #: ..\..\radiant\ui\layers\LayerControlDialog.cpp:35 #: ..\..\radiant\ui\mapinfo\LayerInfoTab.cpp:21 xml_file_content.cpp:57 msgid "Layers" msgstr "" #: ..\..\radiant\ui\layers\LayerControlDialog.cpp:76 msgid "Show all" msgstr "" #: ..\..\radiant\ui\layers\LayerControlDialog.cpp:77 msgid "Hide all" msgstr "" #: ..\..\radiant\ui\layers\LayerControlDialog.cpp:83 xml_file_content.cpp:2 msgid "New" msgstr "" #: ..\..\radiant\ui\lightinspector\LightInspector.cpp:32 msgid "Light properties" msgstr "" #: ..\..\radiant\ui\LongRunningOperationHandler.cpp:33 msgid "...crunching..." msgstr "" #: ..\..\radiant\ui\LongRunningOperationHandler.cpp:45 #: ..\..\radiant\ui\MapFileProgressHandler.cpp:89 #: ..\..\radiant\ui\UserInterfaceModule.cpp:344 msgid "Processing..." msgstr "" #: ..\..\radiant\ui\mainframe\EmbeddedLayout.cpp:74 #: ..\..\radiant\ui\mainframe\FloatingLayout.cpp:59 #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:111 xml_file_content.cpp:59 msgid "Texture Browser" msgstr "" #: ..\..\radiant\ui\mainframe\EmbeddedLayout.cpp:77 #: ..\..\radiant\ui\mainframe\FloatingLayout.cpp:62 #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:114 msgid "Textures" msgstr "" #: ..\..\radiant\ui\mainframe\LayoutCommand.h:55 msgid "Window Layout" msgstr "" #: ..\..\radiant\ui\mainframe\LayoutCommand.h:78 msgid "Restart required" msgstr "" #: ..\..\radiant\ui\mainframe\LayoutCommand.h:79 msgid "Restart DarkRadiant to apply changes" msgstr "" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:85 msgid "Settings/Multi Monitor" msgstr "" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:104 msgid "Start DarkRadiant on monitor" msgstr "" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:124 msgid "Settings/Compatibility" msgstr "" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:126 msgid "Disable Windows Desktop Composition" msgstr "" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:456 #: ..\..\radiant\ui\mainframe\MainFrame.cpp:459 msgid "Console" msgstr "" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:145 msgid "Camera Position" msgstr "" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:148 msgid "Top Left" msgstr "" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:150 msgid "Top Right" msgstr "" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:152 msgid "Bottom Left" msgstr "" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:154 msgid "Bottom Right" msgstr "" #: ..\..\radiant\ui\MapFileProgressHandler.cpp:80 msgid "Writing map" msgstr "" #: ..\..\radiant\ui\MapFileProgressHandler.cpp:80 msgid "Loading map" msgstr "" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:17 msgid "Entities" msgstr "" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:48 msgid "Entity Class" msgstr "" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:51 #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:67 msgid "Count" msgstr "" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:68 msgid "Brushes:" msgstr "" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:69 msgid "Patches:" msgstr "" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:70 msgid "Entities:" msgstr "" #: ..\..\radiant\ui\mapinfo\LayerInfoTab.cpp:52 msgid "Layer" msgstr "" #: ..\..\radiant\ui\mapinfo\LayerInfoTab.cpp:55 msgid "Node Count" msgstr "" #: ..\..\radiant\ui\mapinfo\MapInfoDialog.cpp:23 msgid "Map Info" msgstr "" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:17 msgid "Select entities using this model" msgstr "" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:18 msgid "Deselect entities using this model" msgstr "" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:61 msgid "Model" msgstr "" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:64 msgid "Polys" msgstr "" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:70 msgid "Skins" msgstr "" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:91 msgid "Models used:" msgstr "" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:92 msgid "Named Skins used:" msgstr "" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:18 msgid "Shaders" msgstr "" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:20 #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:35 msgid "Select elements using this shader" msgstr "" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:21 #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:36 msgid "Deselect elements using this shader" msgstr "" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:63 msgid "Faces" msgstr "" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:66 msgid "Patches" msgstr "" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:84 msgid "Shaders used:" msgstr "" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:18 msgid "Choose Map File" msgstr "" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:43 msgid "Open" msgstr "" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:44 xml_file_content.cpp:3 msgid "Refresh" msgstr "" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:144 #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:139 msgid "Browse mod resources" msgstr "" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:147 msgid "Browse custom PAK:" msgstr "" #: ..\..\radiant\ui\mediabrowser\MediaBrowser.cpp:98 #: ..\..\radiant\ui\mediabrowser\MediaBrowser.cpp:101 msgid "Media" msgstr "" #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:24 msgid "Other Materials" msgstr "" #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:26 msgid "Load in Textures view" msgstr "" #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:32 #: ..\..\radiant\uimanager\SoundChooser.cpp:34 msgid "Show Shader Definition" msgstr "" #: ..\..\radiant\ui\mediabrowser\TextureDirectoryLoader.h:35 msgid "Loading textures" msgstr "" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:34 msgid "Model Export" msgstr "" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:178 msgid "Empty Filename" msgstr "" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:178 msgid "No filename specified, cannot run exporter" msgstr "" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:184 msgid "Confirm Replacement" msgstr "" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:185 msgid "" "The file {0} already exists.\n" "Replace this file?" msgstr "" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:213 msgid "Export failed" msgstr "" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:305 msgid "Empty Selection" msgstr "" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:305 msgid "Nothing selected, cannot run exporter" msgstr "" #: ..\..\radiant\ui\modelexport\ExportCollisionModelDialog.cpp:18 msgid "" "Can't export, create and select a func_* entity\t\t\t\tcontaining the " "collision hull primitives." msgstr "" #: ..\..\radiant\ui\modelselector\MaterialsList.cpp:45 msgid "Material" msgstr "" #: ..\..\radiant\ui\modelselector\MaterialsList.cpp:47 xml_file_content.cpp:8 msgid "Visible" msgstr "" #: ..\..\radiant\ui\modelselector\ModelPopulator.h:89 msgid "Building tree..." msgstr "" #: ..\..\radiant\ui\modelselector\ModelPopulator.h:95 msgid "Adding Model Definitions..." msgstr "" #: ..\..\radiant\ui\modelselector\ModelPopulator.h:98 msgid "modelDefs" msgstr "" #: ..\..\radiant\ui\modelselector\ModelPopulator.h:166 #: ..\..\radiant\ui\modelselector\ModelPopulator.h:173 msgid "{0:d} models loaded" msgstr "" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:38 msgid "Choose Model" msgstr "" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:245 msgid "Model name" msgstr "" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:246 msgid "Skin name" msgstr "" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:247 msgid "Total vertices" msgstr "" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:248 msgid "Total polys" msgstr "" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:249 msgid "Material surfaces" msgstr "" #: ..\..\radiant\ui\modelselector\ModelTreeView.cpp:14 msgid "Model Path" msgstr "" #: ..\..\radiant\ui\mousetool\BindToolDialog.cpp:16 msgid "Select new Binding: {0}" msgstr "" #: ..\..\radiant\ui\mousetool\BindToolDialog.cpp:44 msgid "" "Please select a new button/modifier combination\n" "by clicking on the area below." msgstr "" #: ..\..\radiant\ui\mousetool\BindToolDialog.cpp:51 msgid "Click here to assign" msgstr "" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:23 msgid "Edit Mouse Bindings" msgstr "" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:50 msgid "Reset all mappings to default" msgstr "" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:72 msgid "Double click row to edit a binding" msgstr "" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:122 msgid "Tool" msgstr "" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:125 msgid "Modifier" msgstr "" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:128 msgid "Button" msgstr "" #: ..\..\radiant\ui\mru\MRUMenu.h:17 msgid "Recently used Maps" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:53 msgid "Create entity..." msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:55 msgid "Create player start here" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:57 msgid "Move player start here" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:59 msgid "Create model..." msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:61 msgid "Surround with monsterclip" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:63 msgid "Create light..." msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:65 msgid "Insert prefab..." msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:67 msgid "Create speaker..." msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:69 msgid "Convert to func_static" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:71 msgid "Reparent primitives" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:72 msgid "Revert to worldspawn" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:73 msgid "Revert part to worldspawn" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:76 msgid "Merge Entities" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:77 xml_file_content.cpp:165 msgid "Make Visportal" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:328 msgid "Unable to create light: {0}" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:396 msgid "Unable to create speaker: {0}" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:440 msgid "Unable to create model: {0}" msgstr "" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:446 msgid "Nothing must be selected for model creation" msgstr "" #: ..\..\radiant\ui\overlay\OverlayDialog.cpp:25 msgid "Background image" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:43 msgid "Particle Editor" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:158 #: ..\..\radiant\ui\particles\ParticlesChooser.cpp:57 msgid "Particle" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:207 msgid "Stage" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1033 msgid "Note: changes will be written to the file {0}" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1340 msgid "Save Changes" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1341 msgid "" "Do you want to save the changes\n" "you made to the particle {0}?" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1374 msgid "" "Error saving particle definition:\n" "{0}" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1504 msgid "Select .prt file" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1538 msgid "Enter Particle Name" msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1552 msgid "Cannot create particle with an empty name." msgstr "" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1567 msgid "This name is already in use." msgstr "" #: ..\..\radiant\ui\particles\ParticlesChooser.cpp:22 msgid "Choose Particle" msgstr "" #: ..\..\radiant\ui\patch\BulgePatchDialog.cpp:11 msgid "Bulge Patch" msgstr "" #: ..\..\radiant\ui\patch\BulgePatchDialog.cpp:12 msgid "Noise:" msgstr "" #: ..\..\radiant\ui\patch\BulgePatchDialog.cpp:49 msgid "Cannot bulge patch. No patches selected." msgstr "" #: ..\..\radiant\ui\patch\CapDialog.cpp:21 msgid "Create Cap Patch" msgstr "" #: ..\..\radiant\ui\patch\CapDialog.cpp:27 msgid "Bevel" msgstr "" #: ..\..\radiant\ui\patch\CapDialog.cpp:28 msgid "End Cap" msgstr "" #: ..\..\radiant\ui\patch\CapDialog.cpp:29 msgid "Inverted Bevel" msgstr "" #: ..\..\radiant\ui\patch\CapDialog.cpp:30 msgid "Inverted Endcap" msgstr "" #: ..\..\radiant\ui\patch\CapDialog.cpp:31 msgid "Cylinder" msgstr "" #: ..\..\radiant\ui\patch\CapDialog.cpp:102 msgid "Cannot create caps, no patches selected." msgstr "" #: ..\..\radiant\ui\patch\PatchCreateDialog.cpp:13 msgid "Create Flat Patch Mesh" msgstr "" #: ..\..\radiant\ui\patch\PatchInspector.cpp:28 msgid "Patch Inspector" msgstr "" #: ..\..\radiant\ui\patch\PatchInspector.cpp:29 #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:55 #: ..\..\radiant\ui\transform\TransformDialog.cpp:38 msgid "Step:" msgstr "" #: ..\..\radiant\ui\patch\PatchThickenDialog.cpp:16 msgid "Patch Thicken" msgstr "" #: ..\..\radiant\ui\patch\PatchThickenDialog.cpp:67 msgid "Cannot thicken patch. Nothing selected." msgstr "" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:41 msgid "Choose Prefab" msgstr "" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:99 msgid "Rescan Prefab Folders" msgstr "" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:104 msgid "Create Group out of Prefab parts" msgstr "" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:142 msgid "Select recently used path:" msgstr "" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:144 msgid "Browse custom path:" msgstr "" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:469 msgid "" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:20 msgid "Game Setup" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:32 msgid "Game Type:" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:135 #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:151 msgid "Invalid Settings" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:136 msgid "Please select a game type" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:149 msgid "" "Warning:\n" "{0}\n" "Do you want to correct these settings?" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:38 msgid "Engine Path" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:43 msgid "Mod (fs_game)" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:48 msgid "Mod Base (fs_game_base)" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:71 #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:202 msgid "Engine path \"{0}\" does not exist.\n" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:78 msgid "The mod base path \"{0}\" does not exist.\n" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:85 msgid "The mod path \"{0}\" does not exist.\n" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:81 msgid "DarkMod Path" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:89 msgid "This is the path where your TheDarkMod.exe is located." msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:93 msgid "" "The FM folder name of the mission you want to work on, e.g. 'saintlucia'." msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:95 msgid "Mission" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:142 msgid "" "The mission path {0} doesn't exist.\n" "Do you intend to start a new mission and create that folder?" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:145 msgid "Start a new Mission named {0}?" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:154 msgid "Could not create directory" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:154 msgid "Failed to create the folder {0}" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:242 msgid "The engine executable(s) could not be found in the specified folder.\n" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:250 msgid "The mission path \"{0}\" does not exist.\n" msgstr "" #: ..\..\radiant\ui\prefdialog\PrefDialog.cpp:22 msgid "DarkRadiant Preferences" msgstr "" #: ..\..\radiant\ui\prefdialog\PrefDialog.cpp:116 msgid "Settings/" msgstr "" #: ..\..\radiant\ui\prefdialog\PrefDialog.cpp:181 msgid "Game" msgstr "" #: ..\..\radiant\ui\script\ScriptMenu.cpp:59 msgid "No scripts available" msgstr "" #: ..\..\radiant\ui\script\ScriptUserInterfaceModule.cpp:54 msgid "Reload Scripts" msgstr "" #: ..\..\radiant\ui\script\ScriptUserInterfaceModule.cpp:88 #: ..\..\radiant\ui\script\ScriptUserInterfaceModule.cpp:91 msgid "Script" msgstr "" #: ..\..\radiant\ui\script\ScriptWindow.cpp:37 msgid "Python Script Input" msgstr "" #: ..\..\radiant\ui\script\ScriptWindow.cpp:39 msgid "Run Script" msgstr "" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:24 msgid "" "Enter a name and hit ENTER to save a set.\n" "\n" "Select an item from the dropdown list to restore the selection.\n" "\n" "Hold SHIFT when opening the dropdown list and selecting the item to de-" "select the set." msgstr "" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:43 msgid "Selection Set: " msgstr "" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:59 msgid "Clear Selection Sets" msgstr "" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:189 msgid "Cannot create selection set" msgstr "" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:190 msgid "" "Cannot create a selection set, there is nothing selected in the current " "scene." msgstr "" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:259 msgid "Delete all selection sets?" msgstr "" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:260 msgid "" "This will delete all set definitions. The actual map objects will not be " "affected by this step.\n" "\n" "Continue with that operation?" msgstr "" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:27 msgid "The name of the shader in the clipboard" msgstr "" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:46 msgid "Face" msgstr "" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:48 msgid "Patch" msgstr "" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:63 msgid "ShaderClipboard: {0} ({1})" msgstr "" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:68 msgid "ShaderClipboard is empty." msgstr "" #: ..\..\radiant\ui\statusbar\EditingStopwatchStatus.cpp:32 msgid "Time spent on this map" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:38 msgid "Surface Inspector" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:39 msgid "Texture Properties" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:40 msgid "Texture Operations" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:48 msgid "Horiz. Shift:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:49 msgid "Vert. Shift:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:50 msgid "Horiz. Scale:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:51 msgid "Vert. Scale:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:52 msgid "Rotation:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:53 #: xml_file_content.cpp:15 msgid "Shader:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:57 msgid "Fit Texture:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:58 msgid "Fit" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:60 msgid "Align Texture:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:61 msgid "Top" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:62 msgid "Bottom" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:63 #: xml_file_content.cpp:16 msgid "Right" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:64 #: xml_file_content.cpp:15 msgid "Left" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:66 msgid "Flip Texture:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:67 msgid "Flip Horizontal" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:68 msgid "Flip Vertical" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:70 msgid "Modify Texture:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:71 msgid "Natural" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:72 msgid "Normalise" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:74 msgid "Default Scale:" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:75 #: xml_file_content.cpp:8 msgid "Texture Lock" msgstr "" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:614 msgid "Both fit values must be > 0." msgstr "" #: ..\..\radiant\ui\texturebrowser\TextureBrowser.cpp:44 msgid "Seek in Media Browser" msgstr "" #: ..\..\radiant\ui\texturebrowser\TextureBrowser.cpp:243 #: ..\..\radiant\ui\texturebrowser\TextureBrowser.cpp:814 msgid "No shader" msgstr "" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:63 msgid "Settings/Texture Browser" msgstr "" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:65 msgid "Uniform texture thumbnail size (pixels)" msgstr "" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:66 msgid "Texture scrollbar" msgstr "" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:67 msgid "Mousewheel Increment" msgstr "" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:68 msgid "Max shadername length" msgstr "" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:70 msgid "Show Texture Filter" msgstr "" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:71 msgid "Show \"Other Materials\"" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:26 msgid "Arbitrary Transformation" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:27 msgid "Rotation" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:28 msgid "Scale" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:30 msgid "X-Axis Rotate:" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:31 msgid "Y-Axis Rotate:" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:32 msgid "Z-Axis Rotate:" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:34 msgid "X-Axis Scale:" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:35 msgid "Y-Axis Scale:" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:36 msgid "Z-Axis Scale:" msgstr "" #: ..\..\radiant\ui\transform\TransformDialog.cpp:311 msgid "Cannot scale by zero or near-zero values" msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:72 msgid "Create Layer..." msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:74 msgid "Add to Layer..." msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:75 msgid "Move to Layer..." msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:76 msgid "Remove from Layer..." msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:78 msgid "Select by Filter..." msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:79 msgid "Deselect by Filter..." msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:174 xml_file_content.cpp:34 msgid "Group Selection" msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:180 xml_file_content.cpp:35 msgid "Ungroup Selection" msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:268 msgid "Notification" msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:273 msgid "Warning" msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:278 msgid "Error" msgstr "" #: ..\..\radiant\ui\UserInterfaceModule.cpp:344 msgid "Loading Shaders" msgstr "" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:16 #: xml_file_content.cpp:147 msgid "MD5 Animation Viewer" msgstr "" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:83 #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:103 msgid "Model Definition" msgstr "" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:86 msgid "Available Animations" msgstr "" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:125 msgid "Animation" msgstr "" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:127 #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:104 #: ..\..\libs\wxutil\fsview\FileSystemView.cpp:50 msgid "File" msgstr "" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:27 msgid "Edit Colour Schemes" msgstr "" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:65 #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:53 #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:434 #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:449 #: ..\..\plugins\dm.stimresponse\StimEditor.cpp:439 xml_file_content.cpp:189 #: xml_file_content.cpp:3 xml_file_content.cpp:9 xml_file_content.cpp:16 #: xml_file_content.cpp:2 xml_file_content.cpp:5 xml_file_content.cpp:6 #: xml_file_content.cpp:18 msgid "Delete" msgstr "" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:66 #: xml_file_content.cpp:4 msgid "Copy" msgstr "" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:84 msgid "Override light volume colour" msgstr "" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:87 msgid "" "Render all light volumes in a single colour set by the colour scheme, rather " "than a per-entity colour controlled by the _color spawnarg" msgstr "" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:115 msgid "Colour scheme" msgstr "" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:295 msgid "Copy Colour Scheme" msgstr "" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:295 msgid "Enter a name for the new scheme:" msgstr "" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:305 msgid "A Scheme with that name already exists." msgstr "" #: ..\..\radiant\uimanager\SoundChooser.cpp:144 msgid "Choose sound" msgstr "" #: ..\..\radiant\uimanager\SoundChooser.cpp:151 xml_file_content.cpp:22 msgid "Reload Sounds" msgstr "" #: ..\..\radiant\uimanager\SoundChooser.cpp:182 msgid "Soundshader" msgstr "" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:40 msgid "Sound Files" msgstr "" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:42 msgid "Duration" msgstr "" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:57 msgid "Sound Shader " msgstr "" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:59 msgid " defined in " msgstr "" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:91 msgid "Play" msgstr "" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:94 msgid "Play and loop" msgstr "" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:97 msgid "Stop" msgstr "" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:259 msgid "Error: File not found." msgstr "" #: ..\..\radiant\uimanager\UIManager.cpp:122 msgid "Describes available Mouse Commands" msgstr "" #: ..\..\radiant\uimanager\UIManager.cpp:130 msgid "" "Number of brushes/patches/entities in this map\n" "(Number of selected items shown in parentheses)" msgstr "" #: ..\..\radiant\uimanager\UIManager.cpp:168 msgid "Brushes: {0:d} ({1:d}) Patches: {2:d} ({3:d}) Entities: {4:d} ({5:d})" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:186 msgid "Settings/Orthoview" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:188 msgid "View chases Mouse Cursor during Drags" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:189 msgid "Maximum Chase Mouse Speed" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:190 msgid "Update Views on Camera Movement" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:191 msgid "Show Crosshairs" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:192 msgid "Show Grid" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:193 msgid "Show Size Info" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:194 msgid "Show Entity Angle Arrow" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:195 msgid "Show Entity Names" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:196 xml_file_content.cpp:87 msgid "Show Blocks" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:197 msgid "Show Coordinates" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:198 xml_file_content.cpp:90 msgid "Show Axes" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:199 xml_file_content.cpp:89 msgid "Show Window Outline" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:200 xml_file_content.cpp:91 msgid "Show Workzone" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:201 msgid "Translate Manipulator always constrained to Axis" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:202 msgid "Higher Selection Priority for Entities" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:203 msgid "Font Style" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:204 msgid "Font Size" msgstr "" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:708 msgid "Shows the mouse position in the orthoview" msgstr "" #: ..\..\radiant\xyview\tools\BrushCreatorTool.cpp:24 msgid "Drag-create Brush" msgstr "" #: ..\..\radiant\xyview\tools\CameraAngleTool.h:28 msgid "Point Camera" msgstr "" #: ..\..\radiant\xyview\tools\CameraMoveTool.h:27 msgid "Drag Camera" msgstr "" #: ..\..\radiant\xyview\tools\ClipperTool.cpp:25 xml_file_content.cpp:159 #: xml_file_content.cpp:13 xml_file_content.cpp:17 msgid "Clipper" msgstr "" #: ..\..\radiant\xyview\tools\MeasurementTool.cpp:28 msgid "Measure" msgstr "" #: ..\..\radiant\xyview\tools\MoveViewTool.h:27 msgid "Drag View" msgstr "" #: ..\..\radiant\xyview\tools\ZoomTool.h:30 msgid "Zoom View" msgstr "" #: ..\..\radiant\xyview\XYWnd.cpp:247 msgid "XY Top" msgstr "" #: ..\..\radiant\xyview\XYWnd.cpp:250 msgid "XZ Front" msgstr "" #: ..\..\radiant\xyview\XYWnd.cpp:253 msgid "YZ Side" msgstr "" #: ..\..\radiant\xyview\XYWnd.cpp:526 msgid "x: {0:6.1f} y: {1:6.1f} z: {2:6.1f}" msgstr "" #: ..\..\plugins\dm.conversation\CommandArgumentItem.cpp:118 #: ..\..\plugins\dm.conversation\CommandEditor.cpp:40 msgid "Actor {0:d} ({1})" msgstr "" #: ..\..\plugins\dm.conversation\CommandArgumentItem.cpp:158 msgid "Browse Sound Shaders" msgstr "" #: ..\..\plugins\dm.conversation\CommandArgumentItem.cpp:215 msgid "Browse Animations" msgstr "" #: ..\..\plugins\dm.conversation\CommandEditor.cpp:24 msgid "Edit Command" msgstr "" #: ..\..\plugins\dm.conversation\ConversationDialog.cpp:30 msgid "Conversation Editor" msgstr "" #: ..\..\plugins\dm.conversation\ConversationDialog.cpp:298 msgid "Unable to create conversation Entity: class '{0}' not found." msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:27 msgid "Edit Conversation" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:92 msgid "Actor (click to edit)" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:121 #: xml_file_content.cpp:1 msgid "Actor" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:125 msgid "Wait" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:232 msgid "Actor {0:d}" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:234 #: ..\..\plugins\dm.stimresponse\ResponseEffect.cpp:206 msgid "yes" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:234 #: ..\..\plugins\dm.stimresponse\ResponseEffect.cpp:206 msgid "no" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:403 msgid "New Actor" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:455 msgid "The actor {0} cannot be found in the current map." msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:462 msgid "Actors missing" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:466 msgid "All actors are correctly referring to entities in the map." msgstr "" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:467 msgid "Actors OK" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEntity.cpp:70 msgid "New Conversation" msgstr "" #: ..\..\plugins\dm.conversation\ConversationEntityFinder.h:78 #: ..\..\plugins\dm.objectives\ObjectiveEntityFinder.cpp:36 msgid "{0} at [ {1} ]" msgstr "" #: ..\..\plugins\dm.conversation\plugin.cpp:48 msgid "Conversations..." msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyDialog.cpp:28 msgid "Difficulty Editor" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyDialog.cpp:118 msgid "Difficulty name" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyDialog.cpp:118 msgid "New name:" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:55 xml_file_content.cpp:4 msgid "Setting" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:74 msgid "Assign" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:75 #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:51 xml_file_content.cpp:2 #: xml_file_content.cpp:5 xml_file_content.cpp:8 xml_file_content.cpp:12 #: xml_file_content.cpp:1 xml_file_content.cpp:3 xml_file_content.cpp:17 #: xml_file_content.cpp:6 xml_file_content.cpp:31 msgid "Add" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:76 msgid "Multiply" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:77 msgid "Ignore" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:145 msgid "This default setting is overridden, cannot edit." msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:216 msgid "Classname cannot be left empty" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:225 msgid "Spawnarg name and value cannot be left empty" msgstr "" #: ..\..\plugins\dm.difficulty\DifficultySettings.cpp:168 msgid " (overridden)" msgstr "" #: ..\..\plugins\dm.difficulty\plugin.cpp:56 msgid "Difficulty..." msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:60 msgid "Can operate Doors" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:61 msgid "Can light Torches" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:62 msgid "Can operate Switch Lights" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:63 msgid "Can operate Elevators" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:64 msgid "Can greet others" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:65 msgid "Can search" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:66 msgid "AI is civilian" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:67 msgid "Start sleeping" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:68 msgid "Lay down to the left" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:69 msgid "Start sitting" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:70 msgid "Patrol" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:71 msgid "Animal Patrol Mode" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:72 msgid "Start in Alert Idle State" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:73 msgid "Disable Alert Idle State" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:74 msgid "Drunk" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:75 msgid "Body is shoulderable" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:76 msgid "AI doesn't think outside the player PVS" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:78 msgid "AI can drown" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:81 msgid "AI can be flatfooted" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:82 msgid "AI is immune to KOs at high alert levels" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:83 msgid "AI is immune to KOs" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:84 msgid "AI is immune to Gas" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:86 msgid "Team" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:87 msgid "Rank" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:88 msgid "Sitting Angle" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:89 msgid "Drunk Acuity Factor" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:90 msgid "Visual Acuity" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:91 msgid "Audio Acuity" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:93 msgid "Horizontal FOV" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:94 msgid "Vertical FOV" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:96 msgid "Min. Interleave Distance" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:97 msgid "Max. Interleave Distance" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:99 msgid "Health" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:100 msgid "Critical Health" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:101 msgid "Melee Range" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:105 msgid "Appearance" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:110 msgid "Skin: " msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:111 msgid "Head: " msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:111 #: ..\..\plugins\dm.editing\AIHeadPropertyEditor.cpp:31 msgid "Choose AI head..." msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:112 msgid "Vocal Set: " msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:112 msgid "Choose Vocal Set..." msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:117 msgid "Behaviour" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:163 msgid "Abilities" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:178 msgid "Optimization" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:190 msgid "Health / Combat" msgstr "" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:272 #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:275 msgid "AI" msgstr "" #: ..\..\plugins\dm.editing\AIHeadChooserDialog.cpp:18 msgid "Choose AI Head" msgstr "" #: ..\..\plugins\dm.editing\AIVocalSetChooserDialog.cpp:19 msgid "Choose AI Vocal Set" msgstr "" #: ..\..\plugins\dm.editing\AIVocalSetChooserDialog.cpp:47 msgid "Available Sets" msgstr "" #: ..\..\plugins\dm.editing\AIVocalSetPreview.cpp:114 msgid "Error: File not found." msgstr "" #: ..\..\plugins\dm.editing\AIVocalSetPropertyEditor.cpp:31 msgid "Select Vocal Set..." msgstr "" #: ..\..\plugins\dm.editing\DarkmodTxt.cpp:131 msgid "Order of the elements Title/Description/Author/etc. is incorrect" msgstr "" #: ..\..\plugins\dm.editing\FixupMap.cpp:26 msgid "Fixup in progress" msgstr "" #: ..\..\plugins\dm.editing\FixupMap.cpp:60 msgid "Processing line {0}..." msgstr "" #: ..\..\plugins\dm.editing\FixupMap.cpp:65 msgid "Fixup cancelled" msgstr "" #: ..\..\plugins\dm.editing\FixupMap.cpp:71 msgid "Completed" msgstr "" #: ..\..\plugins\dm.editing\FixupMap.cpp:155 #: ..\..\plugins\dm.editing\FixupMap.cpp:166 msgid "File not readable" msgstr "" #: ..\..\plugins\dm.editing\FixupMap.cpp:156 msgid "The specified file doesn't exist." msgstr "" #: ..\..\plugins\dm.editing\FixupMap.cpp:167 msgid "The specified file can't be opened." msgstr "" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:15 msgid "Fixup Map" msgstr "" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:16 msgid "Fixup File" msgstr "" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:47 msgid "{0} shaders replaced." msgstr "" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:48 msgid "{0} entities replaced." msgstr "" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:49 msgid "{0} models replaced." msgstr "" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:50 msgid "{0} spawnargs replaced." msgstr "" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:55 msgid "Errors occurred:" msgstr "" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:61 msgid "(Line {0}): {1}" msgstr "" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:66 msgid "Fixup Results" msgstr "" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:25 msgid "Mission Info Editor (darkmod.txt)" msgstr "" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:44 msgid "" "Failed to parse darkmod.txt:\n" "{0}" msgstr "" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:109 msgid "#" msgstr "" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:112 #: xml_file_content.cpp:17 msgid "Title" msgstr "" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:140 msgid "Add Title" msgstr "" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:145 msgid "Delete Title" msgstr "" #: ..\..\plugins\dm.editing\MissionInfoTextFile.cpp:43 msgid "" "Could not write {0} contents:\n" "{1}" msgstr "" #: ..\..\plugins\dm.editing\MissionReadmeDialog.cpp:23 msgid "Mission Readme Editor (readme.txt)" msgstr "" #: ..\..\plugins\dm.editing\MissionReadmeDialog.cpp:41 msgid "" "Failed to parse readme.txt:\n" "{0}" msgstr "" #: ..\..\plugins\dm.editing\plugin.cpp:62 msgid "Fixup Map..." msgstr "" #: ..\..\plugins\dm.editing\plugin.cpp:71 msgid "Edit Package Info (darkmod.txt)..." msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:144 msgid "Game connection error" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:168 #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:176 msgid "Failed to connect to game process" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:271 msgid "Connection" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:274 msgid "Game position follows DarkRadiant camera" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:276 #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:324 msgid "Move camera to current game position" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:280 msgid "Game reloads .map file on save" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:282 msgid "Tell game to reload .map file now" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:286 msgid "Update entities on every change" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:288 msgid "Update entities now" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:292 msgid "Pause game" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:294 msgid "Respawn selected entities" msgstr "" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:318 msgid "Enable game camera sync with DarkRadiant camera" msgstr "" #: ..\..\plugins\dm.gui\GuiSelector.cpp:22 msgid "Choose a Gui Definition..." msgstr "" #: ..\..\plugins\dm.gui\GuiSelector.cpp:142 #: ..\..\plugins\dm.gui\GuiSelector.cpp:152 msgid "Gui Path" msgstr "" #: ..\..\plugins\dm.gui\GuiSelector.cpp:147 msgid "One-Sided Readable Guis" msgstr "" #: ..\..\plugins\dm.gui\GuiSelector.cpp:157 msgid "Two-Sided Readable Guis" msgstr "" #: ..\..\plugins\dm.gui\plugin.cpp:86 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:43 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:542 msgid "Readable Editor" msgstr "" #: ..\..\plugins\dm.gui\plugin.cpp:93 msgid "Reload Readable Guis" msgstr "" #: ..\..\plugins\dm.gui\plugin.cpp:103 msgid "Settings/Readable Editor" msgstr "" #: ..\..\plugins\dm.gui\plugin.cpp:107 msgid "Mod/xdata" msgstr "" #: ..\..\plugins\dm.gui\plugin.cpp:108 msgid "Mod Base/xdata" msgstr "" #: ..\..\plugins\dm.gui\plugin.cpp:109 ..\..\plugins\dm.gui\plugin.cpp:113 msgid "Custom Folder" msgstr "" #: ..\..\plugins\dm.gui\plugin.cpp:111 msgid "XData Storage Folder" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:45 msgid "" "Cannot run Readable Editor on this selection.\n" "Please select a single XData entity." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:227 msgid "Insert whole Page" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:228 msgid "Insert on left Side" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:229 msgid "Insert on right Side" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:235 msgid "Delete whole Page" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:236 msgid "Delete on left Side" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:237 msgid "Delete on right Side" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:243 msgid "Append Page" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:248 msgid "Prepend Page" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:253 msgid "Show last XData import summary" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:254 msgid "Show duplicated definitions" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:255 msgid "Show Gui import summary" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:292 msgid "" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:317 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:644 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1398 msgid "Failed to import {0}." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:319 msgid "Creating a new XData definition..." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:321 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:646 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:665 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:716 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1400 #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:62 msgid "Do you want to open the import summary?" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:323 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:648 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:667 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:718 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1402 #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:79 msgid "Import failed" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:379 msgid "" "You have imported an XData definition that is contained in a PK4, which " "can't be accessed for saving." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:381 msgid "" "Please rename your XData definition, so that it is stored under a different " "filename." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:398 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:419 msgid "Failed to open {0} for saving." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:405 msgid "" "Merging failed, because the length of the definition to be overwritten could " "not be retrieved." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:443 msgid "Mod path not defined. Using Base path..." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:456 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:474 msgid "Mod Base path not defined, neither is Mod path. Using Engine path..." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:461 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:479 msgid "Mod Base path not defined. Using Mod path..." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:505 msgid "" "{0}{1} already exists in another path.\n" "\n" "XData will be stored in {2}{3}!" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:663 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:714 msgid "Failed to load gui definition {0}." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:834 msgid "Import definition?" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:835 msgid "The definition {0} already exists. Should it be imported?" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:859 msgid "Import failed:" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:862 msgid "Consult the import summary for further information." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:885 msgid "" "To avoid duplicated XData definitions the current definition has been " "renamed to {0}." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:889 msgid "XData has been renamed." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1157 msgid "The specified gui definition is not a readable." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1162 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1174 msgid "" "The specified gui definition is not suitable for the currently chosen page-" "layout." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1184 msgid "Failure during import." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1187 msgid "The specified Definition does not exist." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1195 msgid "Not a suitable Gui Definition!" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1196 msgid "Start the Gui Browser?" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1230 msgid "Switching to default Gui..." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1231 msgid "You didn't choose a Gui. Using the default Gui now." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1248 msgid "" "No import summary available. An XData definition has to be imported first..." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1260 msgid "XData import summary" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1268 msgid "No import summary available. Browse Gui Definitions first." msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1279 msgid "Gui import summary" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1345 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1363 msgid "Please specify an XData name first!" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1552 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1578 msgid "Duplicated XData definitions" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1553 msgid "There are no duplicated definitions!" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1572 msgid "{0} has been defined in:" msgstr "" #: ..\..\plugins\dm.gui\ReadablePopulator.h:35 msgid "Analysing Guis" msgstr "" #: ..\..\plugins\dm.gui\ReadableReloader.h:30 msgid "Reloading Guis" msgstr "" #: ..\..\plugins\dm.gui\XData.cpp:257 ..\..\plugins\dm.gui\XData.cpp:285 #: ..\..\plugins\dm.gui\XData.cpp:367 ..\..\plugins\dm.gui\XData.cpp:382 msgid "Page Index out of bounds." msgstr "" #: ..\..\plugins\dm.gui\XData.h:118 ..\..\plugins\dm.gui\XData.h:125 msgid "GUI Page Index out of bounds." msgstr "" #: ..\..\plugins\dm.gui\XDataSelector.cpp:17 msgid "Choose an XData Definition..." msgstr "" #: ..\..\plugins\dm.gui\XDataSelector.cpp:48 msgid "Xdata Path" msgstr "" #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:20 msgid "Choose a file..." msgstr "" #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:60 msgid "{0} successfully imported." msgstr "" #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:64 msgid "Problems during import" msgstr "" #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:99 msgid "" "The requested definition has been found in multiple Files. Choose the file:" msgstr "" #: ..\..\plugins\dm.objectives\ce\AIFindBodyComponentEditor.cpp:31 msgid "Body:" msgstr "" #: ..\..\plugins\dm.objectives\ce\AIFindBodyComponentEditor.cpp:36 #: ..\..\plugins\dm.objectives\ce\AlertComponentEditor.cpp:43 #: ..\..\plugins\dm.objectives\ce\DestroyComponentEditor.cpp:37 #: ..\..\plugins\dm.objectives\ce\ItemComponentEditor.cpp:37 #: ..\..\plugins\dm.objectives\ce\KillComponentEditor.cpp:38 #: ..\..\plugins\dm.objectives\ce\KnockoutComponentEditor.cpp:38 #: ..\..\plugins\dm.objectives\ce\PickpocketComponentEditor.cpp:37 msgid "Amount:" msgstr "" #: ..\..\plugins\dm.objectives\ce\AIFindItemComponentEditor.cpp:23 #: ..\..\plugins\dm.objectives\ce\DestroyComponentEditor.cpp:31 #: ..\..\plugins\dm.objectives\ce\ItemComponentEditor.cpp:31 #: ..\..\plugins\dm.objectives\ce\PickpocketComponentEditor.cpp:31 msgid "Item:" msgstr "" #: ..\..\plugins\dm.objectives\ce\AlertComponentEditor.cpp:37 msgid "AI:" msgstr "" #: ..\..\plugins\dm.objectives\ce\AlertComponentEditor.cpp:46 msgid "Minimum Alert Level:" msgstr "" #: ..\..\plugins\dm.objectives\ce\CustomClockedComponentEditor.cpp:36 msgid "Script Function:" msgstr "" #: ..\..\plugins\dm.objectives\ce\CustomClockedComponentEditor.cpp:42 #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:68 msgid "Clock interval:" msgstr "" #: ..\..\plugins\dm.objectives\ce\CustomClockedComponentEditor.cpp:48 #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:70 msgid "seconds:" msgstr "" #: ..\..\plugins\dm.objectives\ce\CustomComponentEditor.cpp:17 msgid "" "A custom component requires no specifiers,\n" "the state of this component is manually controlled \n" "(i.e. by scripts or triggers)." msgstr "" #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:50 #: ..\..\plugins\dm.objectives\ce\InfoLocationComponentEditor.cpp:24 #: ..\..\plugins\dm.objectives\ce\LocationComponentEditor.cpp:24 msgid "Entity:" msgstr "" #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:56 msgid "Location Entity:" msgstr "" #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:62 msgid "Distance:" msgstr "" #: ..\..\plugins\dm.objectives\ce\InfoLocationComponentEditor.cpp:30 #: ..\..\plugins\dm.objectives\ce\LocationComponentEditor.cpp:30 msgid "Location:" msgstr "" #: ..\..\plugins\dm.objectives\ce\KillComponentEditor.cpp:32 msgid "Kill target:" msgstr "" #: ..\..\plugins\dm.objectives\ce\KnockoutComponentEditor.cpp:32 msgid "Knockout target:" msgstr "" #: ..\..\plugins\dm.objectives\ce\ReadableClosedComponentEditor.cpp:22 #: ..\..\plugins\dm.objectives\ce\ReadableOpenedComponentEditor.cpp:22 #: ..\..\plugins\dm.objectives\ce\ReadablePageReachedComponentEditor.cpp:31 msgid "Readable:" msgstr "" #: ..\..\plugins\dm.objectives\ce\ReadablePageReachedComponentEditor.cpp:37 msgid "Page Number:" msgstr "" #: ..\..\plugins\dm.objectives\ComponentsDialog.cpp:28 msgid "Edit Objective" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:22 msgid "AI is killed" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:27 msgid "AI is knocked out" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:32 msgid "AI finds an item" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:37 msgid "AI finds a body" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:42 msgid "AI is alerted" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:47 msgid "Object is destroyed" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:52 msgid "Player possesses item" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:57 msgid "Player pickpockets AI" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:62 msgid "Item is in location" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:67 msgid "Item is in info_location" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:72 msgid "Custom script" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:78 msgid "Custom script queried periodically" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:85 msgid "Two entities are within a radius of each other" msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:93 msgid "Readable is opened." msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:101 msgid "Readable is closed." msgstr "" #: ..\..\plugins\dm.objectives\ComponentType.cpp:109 msgid "A certain page of a readable is reached." msgstr "" #: ..\..\plugins\dm.objectives\DifficultyPanel.cpp:21 msgid "All Levels" msgstr "" #: ..\..\plugins\dm.objectives\DifficultyPanel.cpp:30 msgid "Level 1: Easy" msgstr "" #: ..\..\plugins\dm.objectives\DifficultyPanel.cpp:31 msgid "Level 2: Hard" msgstr "" #: ..\..\plugins\dm.objectives\DifficultyPanel.cpp:32 msgid "Level 3: Expert" msgstr "" #: ..\..\plugins\dm.objectives\LogicEditor.cpp:24 msgid "Success Logic:" msgstr "" #: ..\..\plugins\dm.objectives\LogicEditor.cpp:25 msgid "Failure Logic:" msgstr "" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:18 msgid "Edit Mission Logic" msgstr "" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:21 msgid "This is the standard logic for all difficulty levels" msgstr "" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:24 msgid "" "These logics override the standard logic for the given difficulty level\n" "if the logic string is non-empty." msgstr "" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:45 msgid "Default Logic" msgstr "" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:57 msgid "Difficulty-specific Logic" msgstr "" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:66 msgid "Logic for Difficulty Level {0:d}" msgstr "" #: ..\..\plugins\dm.objectives\Objective.h:73 msgid "INCOMPLETE" msgstr "" #: ..\..\plugins\dm.objectives\Objective.h:74 msgid "COMPLETE" msgstr "" #: ..\..\plugins\dm.objectives\Objective.h:75 msgid "FAILED" msgstr "" #: ..\..\plugins\dm.objectives\Objective.h:76 msgid "INVALID" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:24 #: xml_file_content.cpp:13 msgid "Edit Objective Conditions" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:145 msgid "Change Objective State" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:147 msgid "Change Visibility" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:149 msgid "Change Mandatory Flag" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:211 #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:212 #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:213 #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:214 msgid "Set state to {0}" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:225 msgid "Set Invisible" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:226 msgid "Set Visible" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:237 msgid "Clear mandatory flag" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:238 msgid "Set mandatory flag" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:463 msgid "Condition affecting objective {0:d}" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:493 msgid "If Objective {0} in Mission {1} is in state '{2}' do the following: " msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:504 msgid "Set State on Objective {0} to {1}" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:511 msgid "Make Objective {0} visible" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:515 msgid "Make Objective {0} invisible" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:522 msgid "Make Objective {0} mandatory" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:526 msgid "Make Objective {0} not mandatory" msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:537 msgid "This condition is not valid or complete yet." msgstr "" #: ..\..\plugins\dm.objectives\ObjectiveEntity.cpp:281 msgid "New objective {0:d}" msgstr "" #: ..\..\plugins\dm.objectives\objectives.cpp:66 msgid "Objectives..." msgstr "" #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:33 msgid "Mission Objectives" msgstr "" #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:97 msgid "Start" msgstr "" #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:135 msgid "Diff." msgstr "" #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:270 msgid "Exception occurred: " msgstr "" #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:460 msgid "Unable to create Objective Entity: classes not defined in registry." msgstr "" #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:489 msgid "Unable to create Objective Entity: class '{0}' not found." msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:20 msgid "entity" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:20 msgid "entities" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:43 msgid "" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:46 msgid "entity " msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:54 msgid "{0:d} loot in gold" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:57 msgid "{0:d} loot in goods" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:60 msgid "{0:d} loot in jewels" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:63 msgid "{0:d} loot" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:66 msgid "{0:d} of \"{1}\"" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:70 msgid "{0} of type {1}" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:73 msgid "{0} of spawnclass {1}" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:76 msgid "{0} AI of type {1}" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:79 msgid "{0} AI of team {1}" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:82 msgid "{0} AI of {1}" msgstr "" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:16 msgid "No specifier" msgstr "" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:20 msgid "Name of single entity" msgstr "" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:24 msgid "Overall (component-specific)" msgstr "" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:29 msgid "Group identifier (component-specific)" msgstr "" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:34 msgid "Any entity of specified class" msgstr "" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:39 msgid "Any entity with SDK-level spawnclass" msgstr "" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:44 msgid "Any AI of specified type" msgstr "" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:48 msgid "Any AI on specified team" msgstr "" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:53 msgid "Any AI with specified combat status" msgstr "" #: ..\..\plugins\dm.stimresponse\ClassEditor.cpp:54 msgid "S/R" msgstr "" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:114 msgid "" "Note: Please beware that deleting custom stims may\n" "affect other entities as well. So check before you delete." msgstr "" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:126 msgid "Add Stim Type" msgstr "" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:127 msgid "Remove Stim Type" msgstr "" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:182 #: ..\..\plugins\dm.stimresponse\StimTypes.cpp:294 msgid "Custom Stim" msgstr "" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:205 msgid "Delete Custom Stim" msgstr "" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:206 msgid "" "Beware that other entities might still be using this stim type.\n" "Do you really want to delete this custom stim?" msgstr "" #: ..\..\plugins\dm.stimresponse\EffectEditor.cpp:22 msgid "Edit Response Effect" msgstr "" #: ..\..\plugins\dm.stimresponse\EffectEditor.cpp:108 msgid "Effect:" msgstr "" #: ..\..\plugins\dm.stimresponse\EffectEditor.cpp:115 xml_file_content.cpp:5 #: xml_file_content.cpp:34 msgid "Active" msgstr "" #: ..\..\plugins\dm.stimresponse\EffectEditor.cpp:120 msgid "Arguments" msgstr "" #: ..\..\plugins\dm.stimresponse\plugin.cpp:57 msgid "Stim/Response..." msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:268 msgid "Effect" msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:271 msgid "Details (double-click to edit)" msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:428 #: ..\..\plugins\dm.stimresponse\StimEditor.cpp:433 msgid "Activate" msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:430 #: ..\..\plugins\dm.stimresponse\StimEditor.cpp:435 msgid "Deactivate" msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:432 #: ..\..\plugins\dm.stimresponse\StimEditor.cpp:437 xml_file_content.cpp:11 msgid "Duplicate" msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:439 msgid "Add new Effect" msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:441 xml_file_content.cpp:6 #: xml_file_content.cpp:13 xml_file_content.cpp:4 xml_file_content.cpp:8 msgid "Edit" msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:444 xml_file_content.cpp:7 #: xml_file_content.cpp:4 msgid "Move Up" msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:446 xml_file_content.cpp:8 #: xml_file_content.cpp:5 msgid "Move Down" msgstr "" #: ..\..\plugins\dm.stimresponse\ResponseEffect.cpp:195 msgid "Error: eclass pointer invalid." msgstr "" #: ..\..\plugins\dm.stimresponse\StimResponseEditor.cpp:27 msgid "Stim/Response Editor" msgstr "" #: ..\..\plugins\dm.stimresponse\StimResponseEditor.cpp:32 msgid "A single entity must be selected to edit Stim/Response properties." msgstr "" #: ..\..\libs\scene\Group.h:34 ..\..\libs\scene\Group.h:109 msgid "No map loaded" msgstr "" #: ..\..\libs\scene\Group.h:40 msgid "Groups can be formed in Primitive and Group Part selection mode only" msgstr "" #: ..\..\libs\scene\Group.h:45 msgid "Nothing selected, cannot group anything" msgstr "" #: ..\..\libs\scene\Group.h:50 msgid "Select more than one element to form a group" msgstr "" #: ..\..\libs\scene\Group.h:76 msgid "The selected elements already form a group" msgstr "" #: ..\..\libs\scene\Group.h:115 msgid "Groups can be dissolved in Primitive and Group Part selection mode only" msgstr "" #: ..\..\libs\scene\Group.h:120 msgid "Nothing selected, cannot un-group anything" msgstr "" #: ..\..\libs\scene\Group.h:140 msgid "The selected elements aren't part of any group" msgstr "" #: ..\..\libs\stream\ExportStream.h:49 msgid "Path is not absolute: {0}" msgstr "" #: ..\..\libs\stream\ExportStream.h:62 msgid "Cannot open file for writing: {0}" msgstr "" #: ..\..\libs\stream\ExportStream.h:93 msgid "Could not rename the existing file to .bak: {0}" msgstr "" #: ..\..\libs\stream\ExportStream.h:107 msgid "Could not rename the temporary file: {0}" msgstr "" #: ..\..\libs\wxutil\dataview\ResourceTreeView.cpp:15 msgid "Add to Favourites" msgstr "" #: ..\..\libs\wxutil\dataview\ResourceTreeView.cpp:131 msgid "No favourites added so far" msgstr "" #: ..\..\libs\wxutil\dataview\ResourceTreeView.cpp:378 msgid "Loading resources..." msgstr "" #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:28 msgid "Show All" msgstr "" #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:29 msgid "Show Favourites" msgstr "" #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:46 msgid "" "Enter search text to filter the tree,\n" "use arrow keys to navigate" msgstr "" #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:57 #: ..\..\libs\wxutil\dataview\TreeView.cpp:299 msgid "Go to next match" msgstr "" #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:58 #: ..\..\libs\wxutil\dataview\TreeView.cpp:300 msgid "Go to previous match" msgstr "" #: ..\..\libs\wxutil\dataview\TreeView.cpp:286 msgid "Find: " msgstr "" #: ..\..\libs\wxutil\dialog\MessageBox.cpp:20 xml_file_content.cpp:8 #: xml_file_content.cpp:10 xml_file_content.cpp:13 xml_file_content.cpp:4 #: xml_file_content.cpp:3 xml_file_content.cpp:21 msgid "Save" msgstr "" #: ..\..\libs\wxutil\dialog\MessageBox.cpp:20 msgid "Close without saving" msgstr "" #: ..\..\libs\wxutil\EntityClassChooser.cpp:29 msgid "Create entity" msgstr "" #: ..\..\libs\wxutil\FileChooser.cpp:64 msgid "Open File" msgstr "" #: ..\..\libs\wxutil\FileChooser.cpp:64 msgid "Save File" msgstr "" #: ..\..\libs\wxutil\FileChooser.cpp:83 msgid "All Files (*.*)" msgstr "" #: ..\..\libs\wxutil\fsview\FileSystemView.cpp:52 msgid "Location" msgstr "" #: ..\..\libs\wxutil\fsview\FileSystemView.cpp:54 msgid "Size" msgstr "" #: ..\..\libs\wxutil\fsview\FileSystemView.cpp:120 msgid "Loading..." msgstr "" #: ..\..\libs\wxutil\fsview\Populator.cpp:94 msgid "[in {0}]" msgstr "" #: ..\..\libs\wxutil\ModalProgressDialog.cpp:19 #: ..\..\libs\wxutil\ModalProgressDialog.cpp:41 #: ..\..\libs\wxutil\ModalProgressDialog.cpp:51 msgid "Operation cancelled by user" msgstr "" #: ..\..\libs\wxutil\Modifier.h:146 msgid "Alt" msgstr "" #: ..\..\libs\wxutil\Modifier.h:147 msgid "Ctrl" msgstr "" #: ..\..\libs\wxutil\Modifier.h:148 msgid "Shift" msgstr "" #: ..\..\libs\wxutil\PathEntry.cpp:104 msgid "Choose File" msgstr "" #: ..\..\libs\wxutil\PathEntry.cpp:142 msgid "Choose Directory" msgstr "" #: ..\..\libs\wxutil\preview\ModelPreview.cpp:115 #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:182 msgid "" "Unable to setup the preview,\n" "could not find the entity class {0}" msgstr "" #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:51 msgid "Show coordinate axes" msgstr "" #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:57 msgid "Show wireframe" msgstr "" #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:61 #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:63 msgid "Auto Loop" msgstr "" #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:67 msgid "Reload Particle Defs" msgstr "" #: ..\..\libs\wxutil\preview\RenderPreview.cpp:104 #: ..\..\libs\wxutil\preview\RenderPreview.cpp:106 xml_file_content.cpp:1 msgid "Filters" msgstr "" #: xml_file_content.cpp:1 msgid "&File" msgstr "" #: xml_file_content.cpp:2 msgid "&New Map" msgstr "" #: xml_file_content.cpp:3 msgid "&Open..." msgstr "" #: xml_file_content.cpp:4 msgid "&Open Map from Project..." msgstr "" #: xml_file_content.cpp:5 msgid "&Import map..." msgstr "" #: xml_file_content.cpp:6 msgid "Import &prefab..." msgstr "" #: xml_file_content.cpp:7 msgid "&Save" msgstr "" #: xml_file_content.cpp:8 msgid "Save &as..." msgstr "" #: xml_file_content.cpp:9 msgid "Save © as..." msgstr "" #: xml_file_content.cpp:10 msgid "&Export Map..." msgstr "" #: xml_file_content.cpp:11 msgid "&Export selected as Map..." msgstr "" #: xml_file_content.cpp:12 msgid "&Export selected as Prefab..." msgstr "" #: xml_file_content.cpp:13 msgid "&Export selected as Model..." msgstr "" #: xml_file_content.cpp:14 msgid "Export selected as Collision Model..." msgstr "" #: xml_file_content.cpp:15 msgid "Export &Region..." msgstr "" #: xml_file_content.cpp:16 msgid "&Reload Models" msgstr "" #: xml_file_content.cpp:17 msgid "Reload Selected Models" msgstr "" #: xml_file_content.cpp:18 msgid "Reload S&kins" msgstr "" #: xml_file_content.cpp:19 xml_file_content.cpp:28 msgid "Reload Materials" msgstr "" #: xml_file_content.cpp:20 msgid "Reload Defs" msgstr "" #: xml_file_content.cpp:21 msgid "Reload Particles" msgstr "" #: xml_file_content.cpp:23 msgid "&Game/Project Setup..." msgstr "" #: xml_file_content.cpp:24 msgid "&Pointfile" msgstr "" #: xml_file_content.cpp:25 msgid "E&xit" msgstr "" #: xml_file_content.cpp:26 msgid "&Edit" msgstr "" #: xml_file_content.cpp:27 msgid "&Undo" msgstr "" #: xml_file_content.cpp:28 msgid "&Redo" msgstr "" #: xml_file_content.cpp:29 msgid "&Copy" msgstr "" #: xml_file_content.cpp:30 msgid "&Paste" msgstr "" #: xml_file_content.cpp:31 msgid "Paste to Camera" msgstr "" #: xml_file_content.cpp:32 msgid "&Duplicate" msgstr "" #: xml_file_content.cpp:33 msgid "D&elete" msgstr "" #: xml_file_content.cpp:36 msgid "Rep&arent Primitives" msgstr "" #: xml_file_content.cpp:37 msgid "Reparent Primitives to &Worldspawn" msgstr "" #: xml_file_content.cpp:38 msgid "Merge selected Entities" msgstr "" #: xml_file_content.cpp:39 msgid "Copy Shader" msgstr "" #: xml_file_content.cpp:40 msgid "Paste Shader" msgstr "" #: xml_file_content.cpp:41 msgid "Paste Shader (Natural)" msgstr "" #: xml_file_content.cpp:42 msgid "C&lear selection" msgstr "" #: xml_file_content.cpp:43 msgid "&Invert selection" msgstr "" #: xml_file_content.cpp:44 msgid "Select complete t&all" msgstr "" #: xml_file_content.cpp:45 msgid "Select i&nside" msgstr "" #: xml_file_content.cpp:46 msgid "Select &touching" msgstr "" #: xml_file_content.cpp:47 msgid "Select Children" msgstr "" #: xml_file_content.cpp:48 msgid "Select Parent Entities" msgstr "" #: xml_file_content.cpp:49 msgid "Expand selection to all Siblings" msgstr "" #: xml_file_content.cpp:50 msgid "Select all of type" msgstr "" #: xml_file_content.cpp:51 msgid "Keyboard Shortcuts..." msgstr "" #: xml_file_content.cpp:52 msgid "Mouse Bindings..." msgstr "" #: xml_file_content.cpp:53 msgid "Pre&ferences..." msgstr "" #: xml_file_content.cpp:54 msgid "V&iew" msgstr "" #: xml_file_content.cpp:55 msgid "New XY view" msgstr "" #: xml_file_content.cpp:58 msgid "Console View" msgstr "" #: xml_file_content.cpp:60 msgid "Media Browser" msgstr "" #: xml_file_content.cpp:61 msgid "Entity Inspector" msgstr "" #: xml_file_content.cpp:62 msgid "&Light Inspector" msgstr "" #: xml_file_content.cpp:63 msgid "&Surface Inspector" msgstr "" #: xml_file_content.cpp:64 msgid "&Patch Inspector" msgstr "" #: xml_file_content.cpp:65 msgid "&Texture Tool" msgstr "" #: xml_file_content.cpp:67 msgid "AAS Area Viewer" msgstr "" #: xml_file_content.cpp:69 msgid "&Center" msgstr "" #: xml_file_content.cpp:70 msgid "&Up Floor" msgstr "" #: xml_file_content.cpp:71 msgid "&Down Floor" msgstr "" #: xml_file_content.cpp:72 msgid "Far Clip Plane In" msgstr "" #: xml_file_content.cpp:73 msgid "Far Clip Plane Out" msgstr "" #: xml_file_content.cpp:74 msgid "Next leak spot" msgstr "" #: xml_file_content.cpp:75 msgid "Previous leak spot" msgstr "" #: xml_file_content.cpp:76 msgid "Orthographic" msgstr "" #: xml_file_content.cpp:77 msgid "Next (XY, XZ, YZ)" msgstr "" #: xml_file_content.cpp:78 msgid "XY (Top)" msgstr "" #: xml_file_content.cpp:79 msgid "YZ" msgstr "" #: xml_file_content.cpp:80 msgid "XZ" msgstr "" #: xml_file_content.cpp:81 msgid "&XY 100%" msgstr "" #: xml_file_content.cpp:82 msgid "&XY Zoom In" msgstr "" #: xml_file_content.cpp:83 msgid "&XY Zoom Out" msgstr "" #: xml_file_content.cpp:84 msgid "Show" msgstr "" #: xml_file_content.cpp:85 msgid "Show &Angles" msgstr "" #: xml_file_content.cpp:86 msgid "Show &Names" msgstr "" #: xml_file_content.cpp:88 msgid "Show C&oordinates" msgstr "" #: xml_file_content.cpp:92 msgid "Show size info" msgstr "" #: xml_file_content.cpp:93 msgid "Hide/Show" msgstr "" #: xml_file_content.cpp:94 msgid "Hide Selected" msgstr "" #: xml_file_content.cpp:95 msgid "Hide Deselected" msgstr "" #: xml_file_content.cpp:96 msgid "Show hidden" msgstr "" #: xml_file_content.cpp:97 msgid "Region" msgstr "" #: xml_file_content.cpp:98 msgid "&Switch off" msgstr "" #: xml_file_content.cpp:99 msgid "Set from &XY view" msgstr "" #: xml_file_content.cpp:100 msgid "Set from &Brush" msgstr "" #: xml_file_content.cpp:101 msgid "Set from Se&lection" msgstr "" #: xml_file_content.cpp:102 msgid "Colours..." msgstr "" #: xml_file_content.cpp:103 msgid "Background Image..." msgstr "" #: xml_file_content.cpp:104 msgid "Mo&dify" msgstr "" #: xml_file_content.cpp:105 xml_file_content.cpp:16 msgid "Components" msgstr "" #: xml_file_content.cpp:106 msgid "&Edges" msgstr "" #: xml_file_content.cpp:107 msgid "&Vertices" msgstr "" #: xml_file_content.cpp:108 msgid "&Faces" msgstr "" #: xml_file_content.cpp:109 msgid "En&tities" msgstr "" #: xml_file_content.cpp:110 msgid "Nudge" msgstr "" #: xml_file_content.cpp:111 msgid "Nudge Left" msgstr "" #: xml_file_content.cpp:112 msgid "Nudge Right" msgstr "" #: xml_file_content.cpp:113 msgid "Nudge Up" msgstr "" #: xml_file_content.cpp:114 msgid "Nudge Down" msgstr "" #: xml_file_content.cpp:115 xml_file_content.cpp:15 msgid "Rotate" msgstr "" #: xml_file_content.cpp:116 msgid "Rotate X" msgstr "" #: xml_file_content.cpp:117 msgid "Rotate Y" msgstr "" #: xml_file_content.cpp:118 msgid "Rotate Z" msgstr "" #: xml_file_content.cpp:119 msgid "Mirror" msgstr "" #: xml_file_content.cpp:120 msgid "Mirror &X" msgstr "" #: xml_file_content.cpp:121 msgid "Mirror &Y" msgstr "" #: xml_file_content.cpp:122 msgid "Mirror &Z" msgstr "" #: xml_file_content.cpp:123 xml_file_content.cpp:9 msgid "Rotate Objects independently" msgstr "" #: xml_file_content.cpp:124 msgid "Rotate and scale..." msgstr "" #: xml_file_content.cpp:125 msgid "&Grid" msgstr "" #: xml_file_content.cpp:126 msgid "Snap selected to grid" msgstr "" #: xml_file_content.cpp:127 msgid "Grid0.125" msgstr "" #: xml_file_content.cpp:128 msgid "Grid0.25" msgstr "" #: xml_file_content.cpp:129 msgid "Grid0.5" msgstr "" #: xml_file_content.cpp:130 msgid "Grid1" msgstr "" #: xml_file_content.cpp:131 msgid "Grid2" msgstr "" #: xml_file_content.cpp:132 msgid "Grid4" msgstr "" #: xml_file_content.cpp:133 msgid "Grid8" msgstr "" #: xml_file_content.cpp:134 msgid "Grid16" msgstr "" #: xml_file_content.cpp:135 msgid "Grid32" msgstr "" #: xml_file_content.cpp:136 msgid "Grid64" msgstr "" #: xml_file_content.cpp:137 msgid "Grid128" msgstr "" #: xml_file_content.cpp:138 msgid "Grid256" msgstr "" #: xml_file_content.cpp:139 msgid "M&ap" msgstr "" #: xml_file_content.cpp:140 msgid "Find brush..." msgstr "" #: xml_file_content.cpp:141 msgid "Find and replace textures..." msgstr "" #: xml_file_content.cpp:142 msgid "Map info..." msgstr "" #: xml_file_content.cpp:143 msgid "E&ntity" msgstr "" #: xml_file_content.cpp:144 msgid "&Revert group to worldspawn" msgstr "" #: xml_file_content.cpp:145 msgid "&Connect selected entities" msgstr "" #: xml_file_content.cpp:146 msgid "&Bind selected entities" msgstr "" #: xml_file_content.cpp:148 msgid "Entity Class Tree..." msgstr "" #: xml_file_content.cpp:149 msgid "Particle Editor..." msgstr "" #: xml_file_content.cpp:150 msgid "B&rush" msgstr "" #: xml_file_content.cpp:151 msgid "Prism..." msgstr "" #: xml_file_content.cpp:152 msgid "Cone..." msgstr "" #: xml_file_content.cpp:153 msgid "Sphere..." msgstr "" #: xml_file_content.cpp:154 msgid "CSG" msgstr "" #: xml_file_content.cpp:155 msgid "Make &Hollow" msgstr "" #: xml_file_content.cpp:156 msgid "Make &Room" msgstr "" #: xml_file_content.cpp:157 msgid "CSG &Subtract" msgstr "" #: xml_file_content.cpp:158 msgid "CSG &Merge" msgstr "" #: xml_file_content.cpp:160 msgid "Clip Selection" msgstr "" #: xml_file_content.cpp:161 msgid "Split Selection" msgstr "" #: xml_file_content.cpp:162 msgid "Flip Clip Orientation" msgstr "" #: xml_file_content.cpp:163 msgid "Texture lock" msgstr "" #: xml_file_content.cpp:164 msgid "Create Decal Patches" msgstr "" #: xml_file_content.cpp:166 msgid "Make Detail" msgstr "" #: xml_file_content.cpp:167 msgid "Make Structural" msgstr "" #: xml_file_content.cpp:168 msgid "&Patch" msgstr "" #: xml_file_content.cpp:169 msgid "Create Simple Patch Mesh" msgstr "" #: xml_file_content.cpp:170 msgid "Create End cap" msgstr "" #: xml_file_content.cpp:171 msgid "Create Bevel" msgstr "" #: xml_file_content.cpp:172 msgid "Create Cone" msgstr "" #: xml_file_content.cpp:173 msgid "Create Cylinder" msgstr "" #: xml_file_content.cpp:174 msgid "Create Sphere" msgstr "" #: xml_file_content.cpp:175 msgid "More cylinders" msgstr "" #: xml_file_content.cpp:176 msgid "Create Dense Cylinder" msgstr "" #: xml_file_content.cpp:177 msgid "Create Very Dense Cylinder" msgstr "" #: xml_file_content.cpp:178 msgid "Create Square Cylinder" msgstr "" #: xml_file_content.cpp:179 msgid "Insert" msgstr "" #: xml_file_content.cpp:180 msgid "Insert 2 Columns at the beginning" msgstr "" #: xml_file_content.cpp:181 msgid "Insert 2 Columns at the end" msgstr "" #: xml_file_content.cpp:182 msgid "Insert 2 Rows at the beginning" msgstr "" #: xml_file_content.cpp:183 msgid "Insert 2 Rows at the end" msgstr "" #: xml_file_content.cpp:184 msgid "Append" msgstr "" #: xml_file_content.cpp:185 msgid "Append 2 columns at the beginning" msgstr "" #: xml_file_content.cpp:186 msgid "Append 2 columns at the end" msgstr "" #: xml_file_content.cpp:187 msgid "Append 2 rows at the beginning" msgstr "" #: xml_file_content.cpp:188 msgid "Append 2 rows at the end" msgstr "" #: xml_file_content.cpp:190 msgid "Delete 2 columns from the beginning" msgstr "" #: xml_file_content.cpp:191 msgid "Delete 2 columns from the end" msgstr "" #: xml_file_content.cpp:192 msgid "Delete 2 rows from the beginning" msgstr "" #: xml_file_content.cpp:193 msgid "Delete 2 rows from the end" msgstr "" #: xml_file_content.cpp:194 msgid "Matrix" msgstr "" #: xml_file_content.cpp:195 msgid "Invert" msgstr "" #: xml_file_content.cpp:196 msgid "Re-disperse" msgstr "" #: xml_file_content.cpp:197 msgid "Rows" msgstr "" #: xml_file_content.cpp:198 msgid "Columns" msgstr "" #: xml_file_content.cpp:199 msgid "Transpose" msgstr "" #: xml_file_content.cpp:200 msgid "Thicken Selected Patches..." msgstr "" #: xml_file_content.cpp:201 msgid "Cap Selection..." msgstr "" #: xml_file_content.cpp:202 msgid "Stitch Patch Textures" msgstr "" #: xml_file_content.cpp:203 msgid "Bulge Patch..." msgstr "" #: xml_file_content.cpp:204 msgid "Weld/Merge Patches" msgstr "" #: xml_file_content.cpp:205 msgid "&Curve" msgstr "" #: xml_file_content.cpp:206 msgid "Create NURBS Curve" msgstr "" #: xml_file_content.cpp:207 msgid "Create CatmullRom Curve" msgstr "" #: xml_file_content.cpp:208 msgid "Convert NURBS <-> CatmullRom" msgstr "" #: xml_file_content.cpp:209 msgid "Append Curve Control Point" msgstr "" #: xml_file_content.cpp:210 msgid "Insert Curve Control Points" msgstr "" #: xml_file_content.cpp:211 msgid "Remove Curve Control Points" msgstr "" #: xml_file_content.cpp:212 msgid "&Help" msgstr "" #: xml_file_content.cpp:213 msgid "&About" msgstr "" #: xml_file_content.cpp:214 msgid "&User Guide" msgstr "" #: xml_file_content.cpp:1 msgid "Texture Background" msgstr "" #: xml_file_content.cpp:2 msgid "Grid Background" msgstr "" #: xml_file_content.cpp:3 msgid "Grid Major" msgstr "" #: xml_file_content.cpp:4 msgid "Grid Minor" msgstr "" #: xml_file_content.cpp:5 msgid "Grid Text" msgstr "" #: xml_file_content.cpp:6 msgid "Grid Block" msgstr "" #: xml_file_content.cpp:7 msgid "Brushes" msgstr "" #: xml_file_content.cpp:8 msgid "Entities (default)" msgstr "" #: xml_file_content.cpp:9 msgid "Camera Background" msgstr "" #: xml_file_content.cpp:10 msgid "Selected Items" msgstr "" #: xml_file_content.cpp:11 msgid "Selected Group Items" msgstr "" #: xml_file_content.cpp:12 msgid "Selected Items (Camera)" msgstr "" #: xml_file_content.cpp:14 msgid "Active View Name" msgstr "" #: xml_file_content.cpp:15 msgid "X-Axis" msgstr "" #: xml_file_content.cpp:16 msgid "Y-Axis" msgstr "" #: xml_file_content.cpp:17 msgid "Z-Axis" msgstr "" #: xml_file_content.cpp:18 msgid "Workzone" msgstr "" #: xml_file_content.cpp:19 msgid "Camera Icon" msgstr "" #: xml_file_content.cpp:20 msgid "Brush Size Info" msgstr "" #: xml_file_content.cpp:21 msgid "Light Volumes" msgstr "" #: xml_file_content.cpp:22 msgid "Brush Vertices" msgstr "" #: xml_file_content.cpp:23 msgid "Patch Inner Vertex" msgstr "" #: xml_file_content.cpp:24 msgid "Patch Corner Vertex" msgstr "" #: xml_file_content.cpp:25 msgid "Light Vertices (deselected)" msgstr "" #: xml_file_content.cpp:26 msgid "Light Vertices (selected)" msgstr "" #: xml_file_content.cpp:27 msgid "Light Vertices (normal)" msgstr "" #: xml_file_content.cpp:28 msgid "Light Start/End (selected)" msgstr "" #: xml_file_content.cpp:29 msgid "Light Start/End (deselected)" msgstr "" #: xml_file_content.cpp:30 msgid "XYView Crosshairs" msgstr "" #: xml_file_content.cpp:31 msgid "Drag-Selection Box" msgstr "" #: xml_file_content.cpp:1 msgid "Open a map file" msgstr "" #: xml_file_content.cpp:2 msgid "Save the current map" msgstr "" #: xml_file_content.cpp:3 msgid "Change views" msgstr "" #: xml_file_content.cpp:4 msgid "Select complete tall" msgstr "" #: xml_file_content.cpp:5 msgid "Select touching" msgstr "" #: xml_file_content.cpp:6 msgid "Select inside" msgstr "" #: xml_file_content.cpp:7 msgid "Create Decals for selected Faces" msgstr "" #: xml_file_content.cpp:8 msgid "x-axis Mirror" msgstr "" #: xml_file_content.cpp:9 msgid "x-axis Rotate" msgstr "" #: xml_file_content.cpp:10 msgid "y-axis Mirror" msgstr "" #: xml_file_content.cpp:11 msgid "y-axis Rotate" msgstr "" #: xml_file_content.cpp:12 msgid "z-axis Mirror" msgstr "" #: xml_file_content.cpp:13 msgid "z-axis Rotate" msgstr "" #: xml_file_content.cpp:14 msgid "Snap selection to grid" msgstr "" #: xml_file_content.cpp:15 msgid "Floor selection" msgstr "" #: xml_file_content.cpp:16 msgid "CSG Subtract" msgstr "" #: xml_file_content.cpp:17 msgid "CSG Merge" msgstr "" #: xml_file_content.cpp:18 msgid "Hollow" msgstr "" #: xml_file_content.cpp:19 msgid "Make Room" msgstr "" #: xml_file_content.cpp:20 msgid "Group selected items" msgstr "" #: xml_file_content.cpp:21 msgid "Ungroup selected items" msgstr "" #: xml_file_content.cpp:22 msgid "Put caps on the current patch" msgstr "" #: xml_file_content.cpp:23 msgid "Creates a NURBS curve" msgstr "" #: xml_file_content.cpp:24 msgid "Convert the selected curve (NURBS <-> CatmullRom)" msgstr "" #: xml_file_content.cpp:25 msgid "Appends a control point to the selected curves" msgstr "" #: xml_file_content.cpp:26 msgid "Inserts a curve control point before the selected ones" msgstr "" #: xml_file_content.cpp:27 msgid "Removes the selected curve control points" msgstr "" #: xml_file_content.cpp:29 msgid "Find & Replace" msgstr "" #: xml_file_content.cpp:30 msgid "Decrease Grid Size" msgstr "" #: xml_file_content.cpp:31 msgid "Increase Grid Size" msgstr "" #: xml_file_content.cpp:32 msgid "Snap to Grid" msgstr "" #: xml_file_content.cpp:33 msgid "Merge Selection" msgstr "" #: xml_file_content.cpp:34 msgid "Flip Selection Horiz (S-Axis)" msgstr "" #: xml_file_content.cpp:35 msgid "Flip Selection Vertical (T-Axis)" msgstr "" #: xml_file_content.cpp:36 msgid "Select Related Items" msgstr "" #: xml_file_content.cpp:1 msgid "Select Vertices" msgstr "" #: xml_file_content.cpp:2 msgid "Select Edges" msgstr "" #: xml_file_content.cpp:4 msgid "Select Entities" msgstr "" #: xml_file_content.cpp:5 msgid "Select Group Parts" msgstr "" #: xml_file_content.cpp:6 msgid "Show/hide all light volumes" msgstr "" #: xml_file_content.cpp:7 msgid "Show/hide all speaker volumes" msgstr "" #: xml_file_content.cpp:10 msgid "Rotate func_* Entities around origin" msgstr "" #: xml_file_content.cpp:11 msgid "Snap Rotation Pivot to Grid" msgstr "" #: xml_file_content.cpp:12 msgid "Drag-resize entities symmetrically (leave origin unchanged)" msgstr "" #: xml_file_content.cpp:13 msgid "Offset cloned objects by one grid unit to the right and downwards." msgstr "" #: xml_file_content.cpp:14 msgid "Translate" msgstr "" #: xml_file_content.cpp:16 msgid "Resize" msgstr "" #: xml_file_content.cpp:18 msgid "Model Scaler" msgstr "" #: xml_file_content.cpp:19 msgid "Hide Unused" msgstr "" #: xml_file_content.cpp:20 msgid "Show Favourites only" msgstr "" #: xml_file_content.cpp:21 msgid "Toggle Grid" msgstr "" #: xml_file_content.cpp:22 msgid "Center Pivot when scaling faces" msgstr "" #: xml_file_content.cpp:1 msgid "DarkRadiant x.y.z" msgstr "" #: xml_file_content.cpp:2 msgid "Build date: 2014-08-04" msgstr "" #: xml_file_content.cpp:3 msgid "" "https://www.darkradiant.net/\n" "\n" "This product contains software technology\n" "from id Software, Inc. ('id Technology').\n" "id Technology 2000 id Software,Inc.\n" "DarkRadiant is originally based \n" "on the GPL version of GtkRadiant.\n" "\n" "The Dark Mod (www.thedarkmod.com)" msgstr "" #: xml_file_content.cpp:4 msgid "wxWidgets Properties" msgstr "" #: xml_file_content.cpp:5 xml_file_content.cpp:8 msgid "Version:" msgstr "" #: xml_file_content.cpp:6 msgid "OpenGL Properties" msgstr "" #: xml_file_content.cpp:7 msgid "Vendor:" msgstr "" #: xml_file_content.cpp:9 msgid "Renderer:" msgstr "" #: xml_file_content.cpp:10 msgid "OpenGL Extensions" msgstr "" #: xml_file_content.cpp:1 msgid "wireframeBtn" msgstr "" #: xml_file_content.cpp:2 msgid "flatShadeBtn" msgstr "" #: xml_file_content.cpp:3 msgid "texturedBtn" msgstr "" #: xml_file_content.cpp:4 msgid "lightingBtn" msgstr "" #: xml_file_content.cpp:5 xml_file_content.cpp:1 msgid "startTimeButton" msgstr "" #: xml_file_content.cpp:6 xml_file_content.cpp:3 msgid "stopTimeButton" msgstr "" #: xml_file_content.cpp:7 msgid "clipPlaneToggleButton" msgstr "" #: xml_file_content.cpp:8 msgid "clipPlaneInButton" msgstr "" #: xml_file_content.cpp:9 msgid "clipPlaneOutButton" msgstr "" #: xml_file_content.cpp:3 msgid "Command Arguments" msgstr "" #: xml_file_content.cpp:4 msgid "Command Properties" msgstr "" #: xml_file_content.cpp:5 msgid "Wait until finished" msgstr "" #: xml_file_content.cpp:1 msgid "Conversation Entities" msgstr "" #: xml_file_content.cpp:4 msgid "Conversations" msgstr "" #: xml_file_content.cpp:10 xml_file_content.cpp:7 msgid "Clear" msgstr "" #: xml_file_content.cpp:1 msgid "Properties" msgstr "" #: xml_file_content.cpp:3 msgid "Actors must be within talk distance" msgstr "" #: xml_file_content.cpp:4 msgid "Actors always face each other while talking" msgstr "" #: xml_file_content.cpp:5 msgid "Let this conversation play" msgstr "" #: xml_file_content.cpp:6 msgid "times at maximum" msgstr "" #: xml_file_content.cpp:7 msgid "Actors" msgstr "" #: xml_file_content.cpp:10 msgid "Validate all" msgstr "" #: xml_file_content.cpp:11 msgid "Commands" msgstr "" #: xml_file_content.cpp:14 xml_file_content.cpp:9 msgid "Move up" msgstr "" #: xml_file_content.cpp:15 xml_file_content.cpp:10 msgid "Move down" msgstr "" #: xml_file_content.cpp:5 msgid "Classname:" msgstr "" #: xml_file_content.cpp:6 msgid "Spawnarg:" msgstr "" #: xml_file_content.cpp:7 msgid "Argument:" msgstr "" #: xml_file_content.cpp:2 xml_file_content.cpp:12 msgid "-" msgstr "" #: xml_file_content.cpp:3 xml_file_content.cpp:4 msgid "Description:" msgstr "" #: xml_file_content.cpp:1 msgid "Output File" msgstr "" #: xml_file_content.cpp:2 msgid "Output Format:" msgstr "" #: xml_file_content.cpp:3 msgid "File Path:" msgstr "" #: xml_file_content.cpp:4 msgid "Export Options" msgstr "" #: xml_file_content.cpp:5 msgid "Center Objects around Origin" msgstr "" #: xml_file_content.cpp:6 msgid "Skip Surfaces textured with Caulk" msgstr "" #: xml_file_content.cpp:7 msgid "Replace Selection with exported Model" msgstr "" #: xml_file_content.cpp:8 msgid "Use Entity Origin as export Origin" msgstr "" #: xml_file_content.cpp:9 msgid "Export Lights as Objects (small octahedrons)" msgstr "" #: xml_file_content.cpp:11 msgid "Export" msgstr "" #: xml_file_content.cpp:3 xml_file_content.cpp:68 msgid "View" msgstr "" #: xml_file_content.cpp:2 msgid "Rules" msgstr "" #: xml_file_content.cpp:7 msgid "" "Filter rules are applied in the shown order.\n" "\"Match\" is accepting regular expressions.\n" "\"Object\"-type filters can be used to match \"patch\" or \"brush\"." msgstr "" #: xml_file_content.cpp:1 msgid "Find:" msgstr "" #: xml_file_content.cpp:2 msgid "Replace:" msgstr "" #: xml_file_content.cpp:3 msgid "Search current selection only" msgstr "" #: xml_file_content.cpp:4 msgid "x shader(s) replaced." msgstr "" #: xml_file_content.cpp:5 msgid "Find and Replace" msgstr "" #: xml_file_content.cpp:6 xml_file_content.cpp:13 xml_file_content.cpp:88 msgid "Close" msgstr "" #: xml_file_content.cpp:1 msgid "Light Volume" msgstr "" #: xml_file_content.cpp:2 msgid "Omnidirectional" msgstr "" #: xml_file_content.cpp:3 msgid "Projected" msgstr "" #: xml_file_content.cpp:4 msgid "Use start/end" msgstr "" #: xml_file_content.cpp:5 msgid "Colour" msgstr "" #: xml_file_content.cpp:6 xml_file_content.cpp:9 msgid "Options" msgstr "" #: xml_file_content.cpp:7 msgid "Parallel" msgstr "" #: xml_file_content.cpp:8 msgid "Do not cast shadows (fast)" msgstr "" #: xml_file_content.cpp:9 msgid "Skip specular lighting" msgstr "" #: xml_file_content.cpp:10 msgid "Skip diffuse lighting" msgstr "" #: xml_file_content.cpp:11 msgid "Affects Lightgem and AI" msgstr "" #: xml_file_content.cpp:12 msgid "Light Texture" msgstr "" #: xml_file_content.cpp:1 msgid "Mission Info" msgstr "" #: xml_file_content.cpp:2 msgid "Title:" msgstr "" #: xml_file_content.cpp:3 msgid "Author:" msgstr "" #: xml_file_content.cpp:6 msgid "Required TDM Version:" msgstr "" #: xml_file_content.cpp:7 msgid "(optional, e.g. \"2.03\")" msgstr "" #: xml_file_content.cpp:8 msgid "Mission Titles:" msgstr "" #: xml_file_content.cpp:9 msgid "" "Optional. Fill in if this \n" "package is a campaign \n" "containing several maps" msgstr "" #: xml_file_content.cpp:10 xml_file_content.cpp:2 msgid "Output Path:" msgstr "" #: xml_file_content.cpp:11 xml_file_content.cpp:3 msgid "C:GamesDarkmodfmsgathers" msgstr "" #: xml_file_content.cpp:12 msgid "Edit readme.txt..." msgstr "" #: xml_file_content.cpp:1 msgid "Mission Readme" msgstr "" #: xml_file_content.cpp:1 msgid "Options:" msgstr "" #: xml_file_content.cpp:2 msgid "Surround with monsterclip brush" msgstr "" #: xml_file_content.cpp:3 msgid "Reload Skins" msgstr "" #: xml_file_content.cpp:4 msgid "Reload Models" msgstr "" #: xml_file_content.cpp:2 msgid "Difficulty" msgstr "" #: xml_file_content.cpp:3 msgid "Initial State" msgstr "" #: xml_file_content.cpp:4 xml_file_content.cpp:20 msgid "Flags" msgstr "" #: xml_file_content.cpp:5 msgid "Mandatory" msgstr "" #: xml_file_content.cpp:6 msgid "Ongoing" msgstr "" #: xml_file_content.cpp:7 xml_file_content.cpp:22 msgid "Irreversible" msgstr "" #: xml_file_content.cpp:9 msgid "Enabling Objectives" msgstr "" #: xml_file_content.cpp:10 xml_file_content.cpp:11 msgid "Success Logic" msgstr "" #: xml_file_content.cpp:11 msgid "Failure Logic" msgstr "" #: xml_file_content.cpp:12 msgid "Completion Script" msgstr "" #: xml_file_content.cpp:13 msgid "Failure Script" msgstr "" #: xml_file_content.cpp:14 msgid "Completion Target" msgstr "" #: xml_file_content.cpp:15 msgid "Failure Target" msgstr "" #: xml_file_content.cpp:21 msgid "Satisfied at start" msgstr "" #: xml_file_content.cpp:23 msgid "Boolean NOT" msgstr "" #: xml_file_content.cpp:24 msgid "Player responsible" msgstr "" #: xml_file_content.cpp:25 msgid "&OK" msgstr "" #: xml_file_content.cpp:26 msgid "&Cancel" msgstr "" #: xml_file_content.cpp:1 msgid "Objective Conditions" msgstr "" #: xml_file_content.cpp:4 msgid "Condition" msgstr "" #: xml_file_content.cpp:5 msgid "Source Mission:" msgstr "" #: xml_file_content.cpp:6 msgid "Source Objective:" msgstr "" #: xml_file_content.cpp:7 msgid "Source Objective State:" msgstr "" #: xml_file_content.cpp:8 msgid "Target Objective:" msgstr "" #: xml_file_content.cpp:9 msgid "Action:" msgstr "" #: xml_file_content.cpp:10 msgid "Action Value:" msgstr "" #: xml_file_content.cpp:11 msgid "Sentence" msgstr "" #: xml_file_content.cpp:1 msgid "Objective Entities" msgstr "" #: xml_file_content.cpp:4 msgid "Objectives" msgstr "" #: xml_file_content.cpp:12 msgid "Edit Mission Success Logic" msgstr "" #: xml_file_content.cpp:1 msgid "Use background image" msgstr "" #: xml_file_content.cpp:2 msgid "Image file" msgstr "" #: xml_file_content.cpp:3 msgid "Transparency" msgstr "" #: xml_file_content.cpp:4 msgid "transparent" msgstr "" #: xml_file_content.cpp:5 msgid "opaque" msgstr "" #: xml_file_content.cpp:6 msgid "Image scale" msgstr "" #: xml_file_content.cpp:7 msgid "Horizontal offset" msgstr "" #: xml_file_content.cpp:8 msgid "Vertical offset" msgstr "" #: xml_file_content.cpp:10 msgid "Keep aspect ratio" msgstr "" #: xml_file_content.cpp:11 msgid "Zoom image with viewport" msgstr "" #: xml_file_content.cpp:12 msgid "Pan image with viewport" msgstr "" #: xml_file_content.cpp:1 msgid "Particle Definitions" msgstr "" #: xml_file_content.cpp:5 msgid "Particle Stages" msgstr "" #: xml_file_content.cpp:7 xml_file_content.cpp:3 xml_file_content.cpp:32 msgid "Remove" msgstr "" #: xml_file_content.cpp:8 msgid "Toggle Visibility" msgstr "" #: xml_file_content.cpp:9 msgid "Up" msgstr "" #: xml_file_content.cpp:10 msgid "Down" msgstr "" #: xml_file_content.cpp:12 msgid "Depth Hack:" msgstr "" #: xml_file_content.cpp:13 msgid "Stage Settings" msgstr "" #: xml_file_content.cpp:16 msgid "Colour:" msgstr "" #: xml_file_content.cpp:17 msgid "Fade Colour:" msgstr "" #: xml_file_content.cpp:18 msgid "Use Entity Colour" msgstr "" #: xml_file_content.cpp:19 msgid "Fade In Fraction:" msgstr "" #: xml_file_content.cpp:20 msgid "Fade Out Fraction:" msgstr "" #: xml_file_content.cpp:21 msgid "Fade Index Fraction:" msgstr "" #: xml_file_content.cpp:22 msgid "Animation:" msgstr "" #: xml_file_content.cpp:23 msgid "Frames:" msgstr "" #: xml_file_content.cpp:24 msgid "Rate:" msgstr "" #: xml_file_content.cpp:25 msgid "FPS" msgstr "" #: xml_file_content.cpp:26 msgid "Count / Time" msgstr "" #: xml_file_content.cpp:27 msgid "Count:" msgstr "" #: xml_file_content.cpp:28 msgid "Duration / sec:" msgstr "" #: xml_file_content.cpp:29 msgid "Bunching:" msgstr "" #: xml_file_content.cpp:30 msgid "Cycles:" msgstr "" #: xml_file_content.cpp:31 msgid "Time Offset / sec:" msgstr "" #: xml_file_content.cpp:32 msgid "Dead Time / sec:" msgstr "" #: xml_file_content.cpp:33 msgid "Size / Speed" msgstr "" #: xml_file_content.cpp:34 msgid "Speed:" msgstr "" #: xml_file_content.cpp:35 xml_file_content.cpp:38 xml_file_content.cpp:41 #: xml_file_content.cpp:44 msgid "From:" msgstr "" #: xml_file_content.cpp:36 xml_file_content.cpp:39 xml_file_content.cpp:42 #: xml_file_content.cpp:45 msgid "To:" msgstr "" #: xml_file_content.cpp:37 msgid "Size:" msgstr "" #: xml_file_content.cpp:40 msgid "Rotation Speed:" msgstr "" #: xml_file_content.cpp:43 msgid "Aspect Ratio:" msgstr "" #: xml_file_content.cpp:46 msgid "Gravity:" msgstr "" #: xml_file_content.cpp:47 msgid "Use World Gravity" msgstr "" #: xml_file_content.cpp:48 msgid "Bounds Expansion:" msgstr "" #: xml_file_content.cpp:49 msgid "Distribution" msgstr "" #: xml_file_content.cpp:50 msgid "Shape:" msgstr "" #: xml_file_content.cpp:51 msgid "Rectangular" msgstr "" #: xml_file_content.cpp:52 msgid "Cylindric" msgstr "" #: xml_file_content.cpp:53 msgid "Spherical" msgstr "" #: xml_file_content.cpp:54 msgid "X Size:" msgstr "" #: xml_file_content.cpp:55 msgid "Y Size:" msgstr "" #: xml_file_content.cpp:56 msgid "Z Size:" msgstr "" #: xml_file_content.cpp:57 msgid "Ring Size:" msgstr "" #: xml_file_content.cpp:58 msgid "Offset:" msgstr "" #: xml_file_content.cpp:59 msgid "Randomness:" msgstr "" #: xml_file_content.cpp:60 msgid "Distribute Particles randomly within Volume" msgstr "" #: xml_file_content.cpp:61 msgid "Direction / Orientation" msgstr "" #: xml_file_content.cpp:62 msgid "Direction:" msgstr "" #: xml_file_content.cpp:63 msgid "Cone" msgstr "" #: xml_file_content.cpp:64 msgid "Outward" msgstr "" #: xml_file_content.cpp:65 msgid "Cone Angle:" msgstr "" #: xml_file_content.cpp:66 msgid "Upward Bias:" msgstr "" #: xml_file_content.cpp:67 msgid "Orientation:" msgstr "" #: xml_file_content.cpp:69 msgid "Aimed" msgstr "" #: xml_file_content.cpp:70 msgid "X" msgstr "" #: xml_file_content.cpp:71 msgid "Y" msgstr "" #: xml_file_content.cpp:72 msgid "Z" msgstr "" #: xml_file_content.cpp:73 msgid "Trails:" msgstr "" #: xml_file_content.cpp:74 msgid "Time:" msgstr "" #: xml_file_content.cpp:75 msgid "Initial Angle:" msgstr "" #: xml_file_content.cpp:76 msgid "Path" msgstr "" #: xml_file_content.cpp:77 msgid "Path Type:" msgstr "" #: xml_file_content.cpp:78 msgid "Standard" msgstr "" #: xml_file_content.cpp:79 msgid "Flies" msgstr "" #: xml_file_content.cpp:80 msgid "Helix" msgstr "" #: xml_file_content.cpp:81 msgid "Radial Speed:" msgstr "" #: xml_file_content.cpp:82 msgid "Axial Speed:" msgstr "" #: xml_file_content.cpp:83 msgid "Sphere Radius:" msgstr "" #: xml_file_content.cpp:84 msgid "Cylinder Size X:" msgstr "" #: xml_file_content.cpp:85 msgid "Cylinder Size Y:" msgstr "" #: xml_file_content.cpp:86 msgid "Cylinder Size Z:" msgstr "" #: xml_file_content.cpp:87 msgid "Note: changes will be written to the file ....." msgstr "" #: xml_file_content.cpp:1 msgid "Create simple Patch Mesh" msgstr "" #: xml_file_content.cpp:2 msgid "Width:" msgstr "" #: xml_file_content.cpp:3 msgid "Height:" msgstr "" #: xml_file_content.cpp:4 msgid "Remove selected Brush" msgstr "" #: xml_file_content.cpp:1 msgid "Patch Control Vertices" msgstr "" #: xml_file_content.cpp:2 msgid "Row:" msgstr "" #: xml_file_content.cpp:3 msgid "Column:" msgstr "" #: xml_file_content.cpp:4 msgid "Coordinates" msgstr "" #: xml_file_content.cpp:5 msgid "Patch Tesselation" msgstr "" #: xml_file_content.cpp:6 msgid "Fixed Subdivisions" msgstr "" #: xml_file_content.cpp:7 msgid "Horizontal:" msgstr "" #: xml_file_content.cpp:8 msgid "Vertical:" msgstr "" #: xml_file_content.cpp:1 msgid "Thicken selected Patches" msgstr "" #: xml_file_content.cpp:2 msgid "Extrude along Vertex Normals" msgstr "" #: xml_file_content.cpp:3 msgid "Extrude along X-Axis" msgstr "" #: xml_file_content.cpp:4 msgid "Extrude along Y-Axis" msgstr "" #: xml_file_content.cpp:5 msgid "Extrude along Z-Axis" msgstr "" #: xml_file_content.cpp:6 msgid "Thickness (units):" msgstr "" #: xml_file_content.cpp:7 msgid "Create Seams (\"side walls\")" msgstr "" #: xml_file_content.cpp:1 msgid "General Properties" msgstr "" #: xml_file_content.cpp:2 msgid "Inventory Name:" msgstr "" #: xml_file_content.cpp:3 msgid "XData Name:" msgstr "" #: xml_file_content.cpp:4 msgid "Number of Pages:" msgstr "" #: xml_file_content.cpp:5 msgid "Layout:" msgstr "" #: xml_file_content.cpp:6 msgid "One-sided" msgstr "" #: xml_file_content.cpp:7 msgid "Two-sided" msgstr "" #: xml_file_content.cpp:8 msgid "Pageturn Sound:" msgstr "" #: xml_file_content.cpp:9 msgid "Page Editing" msgstr "" #: xml_file_content.cpp:10 msgid "Insert Page" msgstr "" #: xml_file_content.cpp:11 msgid "Current Page:" msgstr "" #: xml_file_content.cpp:12 msgid "1" msgstr "" #: xml_file_content.cpp:13 msgid "Remove Page" msgstr "" #: xml_file_content.cpp:14 msgid "GUI Definition:" msgstr "" #: xml_file_content.cpp:18 msgid "Body" msgstr "" #: xml_file_content.cpp:19 msgid "Tools" msgstr "" #: xml_file_content.cpp:22 msgid "Save and Close" msgstr "" #: xml_file_content.cpp:2 msgid "pauseTimeButton" msgstr "" #: xml_file_content.cpp:4 msgid "prevButton" msgstr "" #: xml_file_content.cpp:5 msgid "nextButton" msgstr "" #: xml_file_content.cpp:6 msgid "texturedModeButton" msgstr "" #: xml_file_content.cpp:7 msgid "lightingModeButton" msgstr "" #: xml_file_content.cpp:8 msgid "gridButton" msgstr "" #: xml_file_content.cpp:1 msgid "Stims" msgstr "" #: xml_file_content.cpp:4 xml_file_content.cpp:33 msgid "Type:" msgstr "" #: xml_file_content.cpp:6 msgid "Activation Timer:" msgstr "" #: xml_file_content.cpp:7 msgid "h" msgstr "" #: xml_file_content.cpp:8 msgid "m" msgstr "" #: xml_file_content.cpp:9 msgid "s" msgstr "" #: xml_file_content.cpp:10 xml_file_content.cpp:16 xml_file_content.cpp:18 msgid "ms" msgstr "" #: xml_file_content.cpp:11 msgid "Timer restarts after firing" msgstr "" #: xml_file_content.cpp:12 msgid "Timer reloads" msgstr "" #: xml_file_content.cpp:13 msgid "times" msgstr "" #: xml_file_content.cpp:14 msgid "Timer waits for start (when disabled: starts at spawn time)" msgstr "" #: xml_file_content.cpp:15 msgid "Time interval:" msgstr "" #: xml_file_content.cpp:17 msgid "Duration:" msgstr "" #: xml_file_content.cpp:19 msgid "Radius" msgstr "" #: xml_file_content.cpp:20 msgid "Use bounds" msgstr "" #: xml_file_content.cpp:21 msgid "Radius changes over time to:" msgstr "" #: xml_file_content.cpp:22 msgid "Magnitude:" msgstr "" #: xml_file_content.cpp:23 msgid "Falloff Exponent:" msgstr "" #: xml_file_content.cpp:24 msgid "Max Fire Count:" msgstr "" #: xml_file_content.cpp:25 xml_file_content.cpp:35 msgid "Chance:" msgstr "" #: xml_file_content.cpp:26 msgid "Velocity:" msgstr "" #: xml_file_content.cpp:27 msgid "Bounds:" msgstr "" #: xml_file_content.cpp:28 msgid "Min:" msgstr "" #: xml_file_content.cpp:29 msgid "Max:" msgstr "" #: xml_file_content.cpp:30 msgid "Responses" msgstr "" #: xml_file_content.cpp:36 msgid "Random Effects:" msgstr "" #: xml_file_content.cpp:37 msgid "Response Effects" msgstr "" #: xml_file_content.cpp:38 msgid "Custom Stims" msgstr "" DarkRadiant-2.14.0/install/i18n/de/000077500000000000000000000000001413722237400166045ustar00rootroot00000000000000DarkRadiant-2.14.0/install/i18n/de/LC_MESSAGES/000077500000000000000000000000001413722237400203715ustar00rootroot00000000000000DarkRadiant-2.14.0/install/i18n/de/LC_MESSAGES/darkradiant.mo000066400000000000000000002622551413722237400232260ustar00rootroot00000000000000fL+7|VXs Ysgsls qs~sssssssss s st tt"t=tZtxtttttttttttu uuu )u4u:uIueuku ~u uu u u uu u uuuv vv v(vTFvvv'v(v} wBww www x'x6xFx Wxextxx(x xxx xxy yy!y*y@yRyYyjypy yyy y+yy#yz z &z0z ?zLz\znz~zzzzz z:z {'{+{3{B{ U{ _{j{{#{{${ ||!|7|S|r|| |.|||| } } *}8}7?} w} }} }}}} }}} ~ ~&~n,~~~~ ~~~ ~ ~0EXl E, =I Xbiz ÀЀ׀  "4F\ v\ށ1(N@($*݂!$RF('ƒ8@Vm ]  0< LY i w х) 8EUm|  †Ȇ݆W_nv  ɇчه + = H#Rv { ̈׈ ߈3 4 JXi1 ωۉ !)</f(!   1=M b  8F] xЌ"4DI [ i w 7 ȍ"֍ .6?Pa r|  Ǝ׎    *#1U s Ϗ#5 G"S v #"ɐ .> Xf ~#Ƒ% + BO(j'=" ! -7J;\ ٓ   #0 BN^q"ɔ# 2? OY-i/Ǖە " +6L` #DY@l ɗӗ ڗ  *6 EPj r}%ߘ &-,?l {%̙  !.@U!h" # CQ`o~ ̛כ ܛ  ̜ל  $1 D O Y ftȝ  #3 S ]hp Ϟ Ԟ ߞ()H[bev ş ϟٟ !'%7]GrD")9AG W eqz & š ӡ  D!f m x  ТM7 FT![}ѣ  "36E|*Ϥޤ (.=OS iv ڥ # >Lh Ҧ 1B Zen   ħ ϧ ܧ  -N is  ¨Ѩڨ  $#Haf ǩ^ߩ>W\q x  !ͪ"" *8DP,«(ѫ   ( 3 @K R_hx $ ;D IWms  ­ ֭*LG: Ϯ0ݮ,; P Z gry ~m+/A4q+'Ұ%* KX ^ i t^ "7 J UBc ֲ + GIT@  & 5BJg  ȴմ 4DW gtɵ%+BViy  Զ ۶  +AUTNķ# 7DJ Zgz ɸԸݸ $A Q]b ht D ") 9E Vdy  Ӻ  ,=Ti) Ȼ P Zh"}%ڼ->PWq $½ܽ  &/8A$Uz  Ǿ˾޾  &5JPWhɿڿ   "5Laq!  ),7d| ! ,8HZn 2KRZt     &8IYq  &/CXt  )* Tb gtz ! .(;d z , & 5 ?IY_nw}  (9?U Zhw!+ ;H[ n {I19EY/'`(X#'K*.Dms(# !./PRx$Liq,#0P64~$ ; HNUU  " *04 e r.| 9C<V@*<'S{ "7I ^ iw }    '1 6BY%v 3 0  & 5C GSh  3eC (>GOX_ g t     .4 E Q^s #  #7L`o '7MeG! # -8 Xbh   !)/6T[ar    2= O[ kx $^?194T*=PSp)./^o   9FYa/q"4Oh!  C @KOWg  "#.( ,3`qz= ^ s @  ",>Vjz 9?W],f  * ERl{E) = GUf *AVj k ` 7k8<9=S 1s,X1 .%%9 _)E]{*Hey.@ U a (    -BJQg } ' '2:TB7< Uaj~ 8:1M% #/;k'%5D d %A\axE46k   /I [hx   #B"` $ ? LZ-s,% )(@i ('0C2L (.&)) S^qP &  + '7 _  e s z           8 U #e (         & !/ CQ 7    # " + @ O k  $   <  ) ;E LYl     1)&Gn!) +!%Ms *0([,'0/)Yo  *=Q&-? Xdv     (5;C^#o!& '3(; drw ),/HPTs      #*07=-N |RPAJd ju ' BM`u  B  !0D\rJ  >]}?Tm 5 ($ =I\ z  )3:-n "     ( ; [  r ~        $ !!! %!0!?!"T!%w!+! !!!""" 8"E"U"e"n"}"" ""","="0#J#O#m#t# z####%#j#d$~$$$$$$$ $$ %$%#4%X%h% y%%I%3%&/,& \&f&m& ~& && &&& &&&'$' C' N'&X' '!'' ','' (( (0(6(F(X( \(i({( (( ((((9)U:)P));)Q/** ** * ** **+2+<+C+2C,/v,.,4, - --4-J-a-v-]--...4. J.X.Gi.... ... / //1/F/ ]/Hi// /I/ 0 0 (0 60@0 O0 Y0!d0#0,000011(81a1j1s11111)11) 232!Q2s2222222 33.3>3F3O3 T3^3 z3333 33334^"44R4'45.575H5[5 p5z555 5 5 5"566.6)56_6s66 6 66"6 66E 7P7 h7 s7}777777778-8?8^8n88 888888 9+*9V9g9~9 : :-!:O:m:+: ::::;1;M;!];; ;5;;;<< "</<&6<]<n<<<'<<<< ===$= +=9=== X=b=t====== = >># >D>T> l>w>>>>>>>? ?;?Y?m?????*@)+@U@h@H{@ @$@ A A=ASA rA AA-AAAA B#B8B MBYB%hBBBBBB" C.CJCQCYC yCCCCCCCC C D D#D 8D EDSDeDwD"DDDD D-D%EI GITI ]IhIyIIIII I$IJJ2JGJOJXJmJ~JJJJJJJKK ;KIKNKkK K KKKK KKK>L9DLA~LVL@M)XMfM)M$N*8NbcN4N6N~2O*O1O%P54PZjPP+_QQ# R /RPR9lROR5R:,SgS&S}S*T=TLTkTqTTNTTT\TYU^UxUUU UU U UUUU V'V 7V CV=QVV VVVCV\WDcW!W!W#W:XKXaX8X XX X.XY+6YbYrY'Y"YYYZZZ/Z4Z EZQZaZwZZ ZZZZZ ZZ[[/[3N[[ [ [[*[[:[\!\3\ ] (]6] E]R] T]_]g]{]] ]$]]] ]] ^^*^-^ 6^A^ C^N^V^j^}^^B^P^_ _*_2_F_Y_#h_____ _ ____ _ `` ` !` -a9aLa NaXa [afa kaya aa aaaa aaaa a bb.b@bTb#hbbbbbb bbbc+cAcQcgc{cccccccdd*dBdO]d,,|.#lv6F ncXC+/`-<S87^L9b G H:\u'ss^VBA$U:UFw$g#^*+k,AGV-bee'a&5\-10:Gy_!9wA&1V^a Fss:)=1 4P3 dEr:PjKjz+I~ZJ.7-Q_26zL$O=LFHH"f0_BTg)I#pX)jB @ &"`mxM^; %Ur)Cu0~I(6q(h M~,5%ZzTW`8M6Q|!}c [lt 1$%tDc% oQ?o{SS[ Yf;P<9?`HkK5>_RN8y}r,V(@XwOGT^vl8&4H>#?E>mxbI\* 5}nD+ J@+Xr /P0 <ILpn*B-"X'0/{EO~K6Mu@&x/peJdG{nMo@u5YKeAEfjC|%pJD87cl:CiAaN>7W4hRcwJV3`=FEg;RSh7C;Rk[NeQ\2N2 oa.9p;3 ?K-wYYbv8tZR9a|v_Hf>Gm7 2i Qzdr\<Uu)!6knT [q3gL=o(*A!&/ dOh=[T '][ZUS\ia d~ydq<WqZx,v%M x"'gycW2| lZtCq.45WWB j?;f?0iFm Qy){OKO$Y! 2{N/R<(=hJ3# 1+49"`D'3e!*> #4}fP}b iT]..U]@"LzkPNsbtS]Y ]DEI1DX(*] B_V$m (overridden) Y: Z: defined in #&About&Bind selected entities&Cancel&Center&Connect selected entities&Copy&Curve&Deactivate all Filters&Down Floor&Duplicate&Edges&Edit&Export Map...&Export selected as Map...&Export selected as Model...&Export selected as Prefab...&Faces&File&Game/Project Setup...&Grid&Help&Import map...&Invert selection&Light Inspector&New Map&OK&Open Map from Project...&Open...&Paste&Patch&Patch Inspector&Pointfile&Redo&Reload Models&Revert group to worldspawn&Save&Surface Inspector&Switch off&Texture Tool&Undo&Up Floor&User Guide&Vertices&XY 100%&XY Zoom In&XY Zoom Out(Line {0}): {1}(optional, e.g. "2.03")-...crunching...1Error: File not found.Note: You'll need to restart DarkRadiant after changing the language setting.A Scheme with that name already exists.A certain page of a readable is reached.A custom component requires no specifiers, the state of this component is manually controlled (i.e. by scripts or triggers).A single entity must be selected to edit Stim/Response properties.AAS Area ViewerAAS ViewerAIAI can be flatfootedAI can drownAI doesn't think outside the player PVSAI finds a bodyAI finds an itemAI is alertedAI is civilianAI is immune to GasAI is immune to KOsAI is immune to KOs at high alert levelsAI is killedAI is knocked outAI:AbilitiesAbout DarkRadiantActionAction Value:Action:ActivateActivate &all FiltersActivation Timer:ActiveActive View NameActorActor (click to edit)Actor {0:d}Actor {0:d} ({1})ActorsActors OKActors always face each other while talkingActors missingActors must be within talk distanceAddAdd Stim TypeAdd TitleAdd new EffectAdd propertyAdd property...Add to FavouritesAdd to Layer...Adding Model Definitions...Affects Lightgem and AIAimedAlign Texture:All Files (*.*)All LevelsAll actors are correctly referring to entities in the map.All skinsAltAmount:Analysing GuisAnimal Patrol ModeAnimationAnimation:Any AI of specified typeAny AI on specified teamAny AI with specified combat statusAny entity of specified classAny entity with SDK-level spawnclassAppearanceAppendAppend 2 columns at the beginningAppend 2 columns at the endAppend 2 rows at the beginningAppend 2 rows at the endAppend Curve Control PointAppend PageAppends a control point to the selected curvesApply to selectionApply...Arbitrary TransformationArgument:ArgumentsAspect Ratio:AssignAt least one brush must be selected for this operation.AttributeAudio AcuityAuthor:Auto LoopAutosave Interval (in minutes)Available AnimationsAvailable SetsAxial Speed:B&rushBackground Image...Background imageBehaviourBevelBeware that other entities might still be using this stim type. Do you really want to delete this custom stim?BodyBody is shoulderableBody:Boolean NOTBoth fit values must be > 0.BottomBottom LeftBottom RightBounds Expansion:Bounds:Browse AnimationsBrowse Sound ShadersBrowse custom PAK:Browse custom path:Browse mod resourcesBrush Number:Brush Size InfoBrush VerticesBrushesBrushes:Brushes: {0:d} ({1:d}) Patches: {2:d} ({3:d}) Entities: {4:d} ({5:d})Build date: 2014-08-04Build date: {0}Building tree...Bulge PatchBulge Patch...Bunching:ButtonC&lear selectionC:GamesDarkmodfmsgathersCOMPLETECSGCSG &MergeCSG &SubtractCSG MergeCSG SubtractCameraCamera BackgroundCamera IconCamera PositionCamera ViewCan greet othersCan light TorchesCan operate DoorsCan operate ElevatorsCan operate Switch LightsCan searchCan't export, create and select a func_* entity containing the collision hull primitives.CancelCannot add, filter with same name already exists.Cannot bulge patch. No patches selected.Cannot create a selection set, there is nothing selected in the current scene.Cannot create caps, no patches selected.Cannot create layer with empty name.Cannot create particle with an empty name.Cannot create selection setCannot open file for writing: {0}Cannot run Readable Editor on this selection. Please select a single XData entity.Cannot scale by zero or near-zero valuesCannot thicken patch. Nothing selected.Cap Selection...Center Objects around OriginCenter Pivot when scaling facesChance:Change Mandatory FlagChange Objective StateChange VisibilityChange viewsChanging this entity's model to the selected value will remove all child primitives from it: Choose AI HeadChoose AI Vocal SetChoose AI head...Choose DirectoryChoose FileChoose Map FileChoose ModelChoose ParticleChoose PrefabChoose ShaderChoose SkinChoose Vocal Set...Choose a Gui Definition...Choose a file...Choose an XData Definition...Choose entity class...Choose model...Choose particle...Choose skin...Choose soundChoose sound...Choose target entity...Choose textureChoose texture...ClassnameClassname cannot be left emptyClassname:ClearClear Selection SetsClear mandatory flagClick here to assignClick to select all in layer, hold SHIFT to deselect, hold CTRL to set as active layer.Clip SelectionClipperClock interval:CloseClose without savingColourColour schemeColour:Colours...Column:ColumnsCommandCommand ArgumentsCommand PropertiesCommandsCompletedCompletion ScriptCompletion TargetComponentsConditionCondition affecting objective {0:d}ConeCone Angle:Cone...Confirm Layer DeletionConfirm ReplacementConfirm overwriteConnectionConsoleConsole ViewConsult the import summary for further information.Conversation EditorConversation EntitiesConversationsConversations...Convert NURBS <-> CatmullRomConvert the selected curve (NURBS <-> CatmullRom)Convert to func_staticCoordinatesCopyCopy Colour SchemeCopy ShaderCopy Spawnarg(s)Copy shader nameCould not create directoryCould not rename layer, please try again.Could not rename the existing file to .bak: {0}Could not rename the temporary file: {0}Could not write {0} contents: {1}CountCount / TimeCount:Create BevelCreate Cap PatchCreate CatmullRom CurveCreate ConeCreate CylinderCreate Decal PatchesCreate Decals for selected FacesCreate Dense CylinderCreate End capCreate Flat Patch MeshCreate Group out of Prefab partsCreate Layer...Create NURBS CurveCreate Seams ("side walls")Create Simple Patch MeshCreate SphereCreate Square CylinderCreate Very Dense CylinderCreate entityCreate entity...Create light...Create model...Create player start hereCreate simple Patch MeshCreate speaker...Creates a NURBS curveCreating a new XData definition...Critical HealthCtrlCurrent Grid SizeCurrent Page:Custom FolderCustom StimCustom StimsCustom properties defined for this entity class, if anyCustom scriptCustom script queried periodicallyCut Spawnarg(s)Cycle Face SelectionCycle SelectionCycles:CylinderCylinder Size X:Cylinder Size Y:Cylinder Size Z:CylindricD&eleteDarkMod PathDarkRadiant PreferencesDarkRadiant x.y.zDeactivateDead Time / sec:Decrease Grid SizeDefault LogicDefault Scale:Defined inDefined in:Definition:DeleteDelete 2 columns from the beginningDelete 2 columns from the endDelete 2 rows from the beginningDelete 2 rows from the endDelete Custom StimDelete TitleDelete all selection sets?Delete on left SideDelete on right SideDelete propertyDelete this layerDelete whole PageDepth Hack:Describes available Mouse CommandsDescriptionDescription:Deselect by Filter...Deselect elements using this shaderDeselect entities using this modelDetails (double-click to edit)Diff.DifficultyDifficulty EditorDifficulty nameDifficulty-specific LogicDifficulty...Direction / OrientationDirection:Disable Alert Idle StateDisable Windows Desktop CompositionDisable sound for this session.Discrete movement (non-freelook mode)Distance:Distribute Particles randomly within VolumeDistributionDo not cast shadows (fast)Do you really want to delete this layer?Do you want to open the import summary?Do you want to save the changes you made to the particle {0}?Double click row to edit a bindingDownDrag CameraDrag ViewDrag-Selection BoxDrag-create BrushDrag-resize entities symmetrically (leave origin unchanged)DrunkDrunk Acuity FactorDuplicateDuplicated XData definitionsDurationDuration / sec:Duration:E&ntityE&xitEditEdit Colour SchemesEdit CommandEdit ConversationEdit FilterEdit Filters...Edit Mission LogicEdit Mission Success LogicEdit Mouse BindingsEdit ObjectiveEdit Objective ConditionsEdit Package Info (darkmod.txt)...Edit Response EffectEdit readme.txt...EffectEffect:Empty FilenameEmpty FilterEmpty SelectionEn&titiesEnable AutosaveEnable far-clip plane (hides distant objects)Enable game camera sync with DarkRadiant cameraEnabling ObjectivesEnd CapEngine PathEngine path "{0}" does not exist. EnglishEnter Layer NameEnter NameEnter Number of SidesEnter Particle NameEnter a name and hit ENTER to save a set. Select an item from the dropdown list to restore the selection. Hold SHIFT when opening the dropdown list and selecting the item to de-select the set.Enter a name for the new scheme:Enter new Layer NameEnter new ShortcutEnter search text to filter the tree, use arrow keys to navigateEntitiesEntities (default)Entities:EntityEntity ClassEntity Class TreeEntity Class Tree...Entity InspectorEntity KeyEntity ListEntity Number:Entity {0}Entity {0}, Primitive {1}Entity:EntityDefsErrorError saving particle definition: {0}Error: File not found.Error: eclass pointer invalid.Errors occurred:Exception occurred: Expand selection to all SiblingsExportExport &Region...Export Lights as Objects (small octahedrons)Export OptionsExport failedExport selected as Collision Model...Extrude along Vertex NormalsExtrude along X-AxisExtrude along Y-AxisExtrude along Z-AxisFAILEDFPSFaceFacesFade Colour:Fade In Fraction:Fade Index Fraction:Fade Out Fraction:Failed to connect to game processFailed to create the folder {0}Failed to import {0}.Failed to load gui definition {0}.Failed to open {0} for saving.Failed to parse darkmod.txt: {0}Failed to parse readme.txt: {0}Failure LogicFailure Logic:Failure ScriptFailure TargetFailure during import.Falloff Exponent:Far Clip Plane InFar Clip Plane OutFavouritesFileFile Path:File not readableFilter SettingsFilter rules are applied in the shown order. "Match" is accepting regular expressions. "Object"-type filters can be used to match "patch" or "brush".FiltersFind & ReplaceFind & Replace ShaderFind BrushFind and ReplaceFind and replace textures...Find brush...Find:Find: FitFit Texture:Fixed SubdivisionsFixup FileFixup MapFixup Map...Fixup ResultsFixup cancelledFixup in progressFlagsFliesFlip Clip OrientationFlip HorizontalFlip Selection Horiz (S-Axis)Flip Selection Vertical (T-Axis)Flip Texture:Flip VerticalFloor selectionFocus camera on selected entityFont SizeFont StyleFrames:Freelook mode can be toggledFreemove ModeFrom:GUI Definition:GUI Page Index out of bounds.GameGame SetupGame Type:Game connection errorGame position follows DarkRadiant cameraGame reloads .map file on saveGeneral PropertiesGermanGoGo to next matchGo to previous matchGravity:Grid BackgroundGrid BlockGrid MajorGrid MinorGrid TextGrid0.125Grid0.25Grid0.5Grid1Grid128Grid16Grid2Grid256Grid32Grid4Grid64Grid8Group SelectionGroup identifier (component-specific)Group selected itemsGroups can be dissolved in Primitive and Group Part selection mode onlyGroups can be formed in Primitive and Group Part selection mode onlyGui PathGui import summaryHead: HealthHealth / CombatHeight:HelixHide DeselectedHide SelectedHide UnusedHide allHide distant AreasHide/ShowHigher Selection Priority for EntitiesHollowHoriz. Scale:Horiz. Shift:Horizontal FOVHorizontal offsetHorizontal:INCOMPLETEINVALIDIf Objective {0} in Mission {1} is in state '{2}' do the following: IgnoreImage fileImage mapImage scaleImport &prefab...Import definition?Import failedImport failed:Increase Grid SizeIndexIndicates whether anything among the current selection is part of this layer.Initial Angle:Initial StateInsertInsert 2 Columns at the beginningInsert 2 Columns at the endInsert 2 Rows at the beginningInsert 2 Rows at the endInsert Curve Control PointsInsert PageInsert on left SideInsert on right SideInsert prefab...Insert whole PageInserts a curve control point before the selected onesInvalid SettingsInventory Name:InvertInvert mouse vertical axis (freelook mode)Inverted BevelInverted EndcapIrreversibleItem is in info_locationItem is in locationItem:Jump to ObjectKeep aspect ratioKeyKeyboard Shortcuts...Kill target:Knockout target:LanguageLay down to the leftLayerLayersLayout:LeftLet this conversation playLevel 1: EasyLevel 2: HardLevel 3: ExpertLight Start/End (deselected)Light Start/End (selected)Light TextureLight Vertices (deselected)Light Vertices (normal)Light Vertices (selected)Light VolumeLight VolumesLight flagsLight propertiesList visible nodes onlyLoad in Textures viewLoading ShadersLoading mapLoading resources...Loading texturesLoading, please wait...Loading...LocationLocation Entity:Location:Logic for Difficulty Level {0:d}M&apMD5 Animation ViewerMagnitude:Make &HollowMake &RoomMake DetailMake Objective {0} invisibleMake Objective {0} mandatoryMake Objective {0} not mandatoryMake Objective {0} visibleMake RoomMake StructuralMake VisportalMandatoryManipulateMap InfoMap info...MatchMatching skinsMaterialMaterial surfacesMaterialsMatrixMax Fire Count:Max shadername lengthMax total Snapshot size per map (MB)Max. Interleave DistanceMax:Maximum Chase Mouse SpeedMeasureMediaMedia BrowserMelee RangeMerge EntitiesMerge SelectionMerge selected EntitiesMerging failed, because the length of the definition to be overwritten could not be retrieved.Min. Interleave DistanceMin:Minimum Alert Level:MirrorMirror &XMirror &YMirror &ZMissionMission InfoMission Info Editor (darkmod.txt)Mission ObjectivesMission ReadmeMission Readme Editor (readme.txt)Mission Titles:Mo&difyMod (fs_game)Mod Base (fs_game_base)Mod Base path not defined, neither is Mod path. Using Engine path...Mod Base path not defined. Using Mod path...Mod Base/xdataMod path not defined. Using Base path...Mod/xdataModelModel DefinitionModel ExportModel PathModel ScalerModel nameModelsModels used:ModifierModify Texture:More cylindersMouse Bindings...Mousewheel IncrementMove DownMove UpMove camera to current game positionMove downMove player start hereMove to Layer...Move upMovement Speed (game units)MultiplyNameName ConflictName of single entityName:Named Skins used:NaturalNewNew ActorNew ConversationNew XY viewNew name:New objective {0:d}NewFilterNext (XY, XZ, YZ)Next leak spotNo favourites added so farNo filename specified, cannot run exporterNo import summary available. An XData definition has to be imported first...No import summary available. Browse Gui Definitions first.No map loadedNo rules defined for this filter, cannot insert.No rules defined for this filter. Delete it?No scripts availableNo shaderNo specifierNode CountNoise:NoneNormaliseNot a suitable Gui Definition!Note: Please beware that deleting custom stims may affect other entities as well. So check before you delete.Note: This shortcut is already assigned to:Note: changes will be written to the file .....Note: changes will be written to the file {0}Nothing must be selected for model creationNothing selected, cannot group anythingNothing selected, cannot run exporterNothing selected, cannot un-group anythingNotificationNudgeNudge DownNudge LeftNudge RightNudge UpNumber of Pages:Number of brushes/patches/entities in this map (Number of selected items shown in parentheses)Number of sides: OKObject is destroyedObjective ConditionsObjective EntitiesObjectivesObjectives...Offset cloned objects by one grid unit to the right and downwards.Offset:OmnidirectionalOne-Sided Readable GuisOne-sidedOngoingOpenOpen FileOpen a map fileOpenGL ExtensionsOpenGL PropertiesOperation cancelled by userOptimizationOptional. Fill in if this package is a campaign containing several mapsOptionsOptions:Order of the elements Title/Description/Author/etc. is incorrectOrientation:OrthographicOther MaterialsOutput FileOutput Format:Output Path:OutwardOverall (component-specific)Override light volume colourOverwrite existing shortcut?Page EditingPage Index out of bounds.Page Number:Pageturn Sound:Pan Camera ViewPan image with viewportParallelParticleParticle DefinitionsParticle EditorParticle Editor...Particle StagesPaste ShaderPaste Shader (Natural)Paste Shader NamePaste Shader NaturalPaste Shader ProjectedPaste Shader to all Brush FacesPaste Spawnarg(s)Paste Texture CoordinatesPaste to CameraPatchPatch Control VerticesPatch Corner VertexPatch Inner VertexPatch InspectorPatch TesselationPatch ThickenPatchesPatches:PathPath Type:Path is not absolute: {0}PatrolPause gamePick ShaderPicking TexuresPlayPlay and loopPlayer pickpockets AIPlayer possesses itemPlayer responsiblePlease rename your XData definition, so that it is stored under a different filename.Please select a game typePlease select a new button/modifier combination by clicking on the area below.Please specify an XData name first!Point CameraPolysPre&ferences...Prepend PagePrevious leak spotPrism...Problems during importProcessing line {0}...Processing...ProjectedPropertiesPropertyPut caps on the current patchPython Script InputRadial Speed:RadiusRadius changes over time to:Random Effects:Randomness:RankRate:Re-disperseReadable EditorReadable is closed.Readable is opened.Readable:Really clear all bindings and reload them from the default settings?Recently used MapsRectangularRefreshRegionReload AAS FileReload DefsReload MaterialsReload ModelsReload Particle DefsReload ParticlesReload Readable GuisReload S&kinsReload ScriptsReload Selected ModelsReload SkinsReload SoundsReloading GuisRemoveRemove Curve Control PointsRemove PageRemove Stim TypeRemove from FavouritesRemove from Layer...Remove selected BrushRemoves the selected curve control pointsRename LayerRename this layerRender all light volumes in a single colour set by the colour scheme, rather than a per-entity colour controlled by the _color spawnargRenderer:Renderer: {0}Rep&arent PrimitivesReparent Primitives to &WorldspawnReparent primitivesReplace Selection with exported ModelReplace:Required TDM Version:Rescan Prefab FoldersReset all mappings to defaultReset to DefaultReset to default?ResizeRespawn selected entitiesResponse EffectsResponsesRestart DarkRadiant to apply changesRestart requiredRevert part to worldspawnRevert to worldspawnRightRing Size:RotateRotate Objects independentlyRotate XRotate YRotate ZRotate and scale...Rotate func_* Entities around originRotationRotation SpeedRotation Speed:Rotation:Row:RowsRulesRun ScriptS/RSatisfied at startSaveSave &as...Save © as...Save ChangesSave FileSave SnapshotsSave and CloseSave the current mapScaleScriptScript Function:Search current selection onlySearch for AAS FilesSeek in Media BrowserSelectSelect &touchingSelect .prt fileSelect ChildrenSelect EdgesSelect EntitiesSelect EntitySelect FacesSelect Group PartsSelect Parent EntitiesSelect Related ItemsSelect VerticesSelect Vocal Set...Select all of typeSelect by Filter...Select complete t&allSelect complete tallSelect elements using this shaderSelect entities using this modelSelect i&nsideSelect insideSelect more than one element to form a groupSelect new Binding: {0}Select recently used path:Select touchingSelected Group ItemsSelected ItemsSelected Items (Camera)Selection Set: SentenceSet InvisibleSet State on Objective {0} to {1}Set VisibleSet from &BrushSet from &XY viewSet from Se&lectionSet mandatory flagSet state to {0}SettingSettings/Settings/AutosaveSettings/CameraSettings/CompatibilitySettings/LanguageSettings/Multi MonitorSettings/OrthoviewSettings/Readable EditorSettings/Texture BrowserShaderShader:ShaderClipboard is empty.ShaderClipboard: {0} ({1})ShadersShaders used:Shape:ShiftShortcut ListShowShow "Other Materials"Show &AnglesShow &NamesShow AllShow Area NumbersShow AxesShow BlocksShow C&oordinatesShow CoordinatesShow CrosshairsShow Entity Angle ArrowShow Entity NamesShow FavouritesShow Favourites onlyShow GridShow Gui import summaryShow Shader DefinitionShow Size InfoShow Texture FilterShow Window OutlineShow WorkzoneShow allShow camera toolbarShow coordinate axesShow duplicated definitionsShow full PathShow helpShow hiddenShow inherited propertiesShow last XData import summaryShow size infoShow wireframeShow/hide all light volumesShow/hide all speaker volumesShows the mouse position in the orthoviewSitting AngleSizeSize / SpeedSize:SkinSkin nameSkin: SkinsSkip Surfaces textured with CaulkSkip diffuse lightingSkip specular lightingSnap Rotation Pivot to GridSnap selected to gridSnap selection to gridSnap to GridSnapshot folder (relative to map folder)Solid selection boxesSound FilesSound Shader Sound ShadersSoundshaderSource Mission:Source Objective State:Source Objective:Spawnarg name and value cannot be left emptySpawnarg:Speed:Sphere Radius:Sphere...SphericalSplit SelectionStageStage SettingsStandardStartStart DarkRadiant on monitorStart a new Mission named {0}?Start in Alert Idle StateStart sittingStart sleepingStart the Gui Browser?StateStep:Stim/Response EditorStim/Response...StimsStitch Patch TexturesStopSuccess LogicSuccess Logic:Surface InspectorSurround with monsterclipSurround with monsterclip brushSwitching to default Gui...Target Objective:TeamTell game to reload .map file nowTexture BackgroundTexture BrowserTexture LockTexture OperationsTexture PropertiesTexture ToolTexture lockTexture scrollbarTexturesThe FM folder name of the mission you want to work on, e.g. 'saintlucia'.The actor {0} cannot be found in the current map.The definition {0} already exists. Should it be imported?The engine executable(s) could not be found in the specified folder. The file {0} already exists. Replace this file?The mission path "{0}" does not exist. The mission path {0} doesn't exist. Do you intend to start a new mission and create that folder?The mod base path "{0}" does not exist. The mod path "{0}" does not exist. The name of the shader in the clipboardThe requested definition has been found in multiple Files. Choose the file:The selected elements already form a groupThe selected elements aren't part of any groupThe snapshots saved for this map are exceeding the configured size limit. Consider cleaning up the folder {0}The specified Definition does not exist.The specified file can't be opened.The specified file doesn't exist.The specified gui definition is not a readable.The specified gui definition is not suitable for the currently chosen page-layout.The specified shortcut is already assigned to {0} Overwrite the current setting and assign this shortcut to {1} instead?There are no duplicated definitions!These logics override the standard logic for the given difficulty level if the logic string is non-empty.Thicken Selected Patches...Thicken selected PatchesThickness (units):This condition is not valid or complete yet.This default setting is overridden, cannot edit.This is the path where your TheDarkMod.exe is located.This is the standard logic for all difficulty levelsThis name already exists.This name is already in use.This will delete all set definitions. The actual map objects will not be affected by this step. Continue with that operation?Time Offset / sec:Time interval:Time spent on this mapTime:Timer reloadsTimer restarts after firingTimer waits for start (when disabled: starts at spawn time)TitleTitle:To avoid duplicated XData definitions the current definition has been renamed to {0}.To:Toggle GridToggle VisibilityToggle layer visibilityToolToolsTopTop LeftTop RightTotal polysTotal verticesTrails:TranslateTranslate Manipulator always constrained to AxisTransparencyTransposeTwo entities are within a radius of each otherTwo-Sided Readable GuisTwo-sidedTypeType:Unable to create Objective Entity: class '{0}' not found.Unable to create Objective Entity: classes not defined in registry.Unable to create conversation Entity: class '{0}' not found.Unable to create light: {0}Unable to create model: {0}Unable to create speaker: {0}Unable to setup the preview, could not find the entity class {0}Ungroup SelectionUngroup selected itemsUniform texture thumbnail size (pixels)UnknownUnknown brush type ID: {0}UpUpdate Views on Camera MovementUpdate entities nowUpdate entities on every changeUpward Bias:Use Entity ColourUse Entity Origin as export OriginUse World GravityUse background imageUse boundsUse start/endV&iewValidate allValueVelocity:Vendor:Vendor: {0}Verbose logging.Version:Version: {0:d}.{1:d}.{2:d}Version: {0}Vert. Scale:Vert. Shift:Vertical FOVVertical offsetVertical:ViewView FilterView Shader DefinitionView Sound Shader DefinitionView chases Mouse Cursor during DragsVisibleVisual AcuityVocal Set: WaitWait until finishedWarningWarning: {0} Do you want to correct these settings?Warning: Weld/Merge PatchesWhen picking texture names, click the pick button and use {0} in the camera view to pick a material name. The picked texture will be filled in the entry box next to the activated button.Width:Window LayoutWorkzoneWriting mapXX Size:X-AxisX-Axis Rotate:X-Axis Scale:X: XData Name:XData Storage FolderXData has been renamed.XData import summaryXY (Top)XY TopXY ViewXYView CrosshairsXZXZ FrontXdata PathYY Size:Y-AxisY-Axis Rotate:Y-Axis Scale:YZYZ SideYou didn't choose a Gui. Using the default Gui now.You have imported an XData definition that is contained in a PK4, which can't be accessed for saving.ZZ Size:Z-AxisZ-Axis Rotate:Z-Axis Scale:Zoom ViewZoom image with viewport[in {0}]clipPlaneInButtonclipPlaneOutButtonclipPlaneToggleButtondisabledenabledentitiesentityentity flatShadeBtngridButtonhhidehttps://www.darkradiant.net/ This product contains software technology from id Software, Inc. ('id Technology'). id Technology 2000 id Software,Inc. DarkRadiant is originally based on the GPL version of GtkRadiant. The Dark Mod (www.thedarkmod.com)lightingBtnlightingModeButtonmmodelDefsmsnextButtonnoopaquepauseTimeButtonprevButtonsseconds:showstartTimeButtonstopTimeButtontexturedBtntexturedModeButtontimestimes at maximumtransparentwireframeBtnwxWidgets Propertiesx shader(s) replaced.x-axis Mirrorx-axis Rotatex: {0:6.1f} y: {1:6.1f} z: {2:6.1f}y-axis Mirrory-axis Rotateyesz-axis Mirrorz-axis Rotate{0:d} loot{0:d} loot in gold{0:d} loot in goods{0:d} loot in jewels{0:d} models loaded{0:d} of "{1}"{0:d} shader(s) replaced.{0} AI of team {1}{0} AI of type {1}{0} AI of {1}{0} at [ {1} ]{0} entities replaced.{0} has been defined in:{0} models replaced.{0} of spawnclass {1}{0} of type {1}{0} shaders replaced.{0} spawnargs replaced.{0} successfully imported.{0}{1} already exists in another path. XData will be stored in {2}{3}!Project-Id-Version: DarkRadiant Report-Msgid-Bugs-To: greebo@angua.at PO-Revision-Date: 2021-01-24 05:47+0100 Last-Translator: codereader Language-Team: The Dark Mod Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-KeywordsList: _;gettext;gettext_noop X-Poedit-Basepath: . X-Generator: Poedit 2.4.2 X-Poedit-SearchPath-0: ../../../../radiant X-Poedit-SearchPath-1: ../../../../libs X-Poedit-SearchPath-2: ../../../../plugins (außer Kraft)Y:Z: definiert in #Über DarkRadiantAusgewählte Entities verknüpfenAbbrechenZentrierenAusgewählte Entities verbinden&KopierenKurve&Deaktiviere alle FilterEin Stockwerk tiefer&DuplizierenEdgesBearbeiten&Exportiere Map...Auswahl als Map exportieren...Auswahl als Model exportieren...Auswahl als Prefab exportieren...Faces&DateiSpiel/Projekteinstellungen...RasterHilfe&Map importierenAuswahl umkehrenLight Inspector&Neue MapOKÖffne Map aus Projekt...&Öffnen&EinfügenPatchPatch InspectorPointfileWiede&rherstellen&Modelle neu ladenGruppe zu Worldspawn umwandeln&SpeichernSurface InspectorAusschaltenTextur-WerkzeugRückgängigEin Stockwerk höher&BenutzerhandbuchVerticesXY 100%XY EinzoomenXY Auszoomen(Zeile {0}): {1}(option, z.B. "2.03")-...berechne...1Fehler: Datei nicht gefunden.Hinweis: Du musst DarkRadiant neu starten, damit die neue Spracheinstellung aktiv wird.Es existiert bereits ein Schema mit diesem Namen.Eine bestimmte Seite eines Schriftstücks wird angezeigt.Eine benutzerdefinierte Komponente benötigt keine Spezifikatoren, der Zustand der Komponente wird anderweitig gesteuert (z.B. durch Skript oder einen Trigger).Um Stim/Response-Eigenschaften zu editieren muss genau eine Entity ausgewählt sein.AAS VisualisierungAAS VisualisierungAIAI kann kalt erwischt werdenAI kann ertrinkenAI außerhalb des Spieler-PVS denkt nichtAI findet einen KörperAI findet einen GegenstandAI wird alarmiertAI ist ZivilistAI ist immun gegen GasAI ist immun gegen KOsAI ist gegen KOs immun (auf hohem Alert-Level)AI wird getötetAI wird KO geschlagenAI:FähigkeitenÜber DarkRadiantAktionWert:Aktion:AktivierenAktiviere &alle FilterAktivierungs-Timer:AktivName der aktiven AnsichtAkteurAkteur (zum Bearbeiten klicken)Akteur {0:d}Akteur {0:d} ({1})AkteureAkteure sind OKAkteure sehen sich beim Sprechen gegenseitig anAkteure fehlenAkteur müssen in Sprechweite seinAddierenStimtyp hinzufügenTitel hinzufügen:Neuen Effekt hinzufügenEigenschaft hinzufügenEigenschaft hinzufügen...Zu Favoriten hinzufügenZu Layer hinzufügen...Füge Model-Definitionen hinzu...Beeinflusst Lightgem und KIAusgerichtetTextur ausrichten:Alle Dateien (*.*)All StufenAlle Akteure beziehen sich auf gültige Entities der aktuellen Map.Alle SkinsAltAnzahl:Analysiere GUIsPatrol-Modus für TiereAnimationAnimation:Irgendeine AI des angegebenen TypsIrgendeine AI des angegebenen TeamsIrgendeine AI mit dem angegebenen KampfzustandIrgendeine Entity der angegebenen KlasseIrgendeine Entity der angegebenen SDK KlasseErscheinungsbildAnfügenZwei Spalten am Anfang anfügenZwei Spalten am Ende anfügenZwei Zeilen am Anfang anfügenZwei Zeilen am Ende anfügenKurvenkontrollpunkt anfügenSeite anfügenEinen Kurvenkontrollpunkt zur ausgewählten Kurve hinzufügenAuf Auswahl anwendenAnwenden...Freie TransformationArgument:ArgumenteSeitenverhältnis:ZuweisenFür diese Operation muss mindestens ein Brush ausgewählt sein.AttributHörschärfeAutor:Auto LoopSpeicherintervallVerfügbare AnimationenVerfügbare Sätze:Axiale Geschw.:BrushHintergrundbild...HintergrundbildVerhaltenBogenBeachte, dass andere Entities diesen Stimtyp noch verwenden könnten. Möchtest du diesen benutzerdefinierten Stim wirklich löschen?Text:Kann geschultert werdenText:NegierenBeide Fit-Werte müssen größer als 0 sein.UntenUnten linksUnten rechtsBounds Expansion:Boundingbox:Animationen durchsuchenSound Shader durchsuchenPAK-File durchsuchen:Pfad durchsuchen:Mod-Ressourcen durchsuchenBrushnummer:Brush-GrößeninformationBrush-VerticesBrushesBrushes:Brushes: {0:d} ({1:d}) Patches: {2:d} ({3:d}) Entities: {4:d} ({5:d})Kompilierungsdatum: %sKompilierungsdatum: {0}Baue Hierarchie auf...Patch auswölbenPatch auswölben...Häufung:SchaltflächeAuswahl aufhebenC:\Games\Darkmod\fms\gathersERFÜLLTCSGCSG ZusammenfügenCSG SubtraktionCSG ZusammenfügenCSG SubtraktionKameraKamera-HintergrundKamera-SymbolKamera-PositionKameraKann andere grüßenKann Fackeln anzündenKann Türen bedienenKann Lifte bedienenKann Lichtschalter betätigenKann suchenExport nicht möglich, es muss eine func_* Entity ausgewählt sein welche die Hüllen-Primitive enthältAbbrechenKann diesen Filter nicht hinzufügen, ein weiterer Filter mit demselben Namen existiert bereits.Kann Patch nicht auswölben: keine Patches ausgewählt.Kann Auswahlsatz nicht anlegen, keine Auswahl vorhanden.Kann keine Caps erzeugen, da keine Patches ausgewählt sind.Es ist nicht möglich eine Ebene ohne Namen zu erstellen.Es ist nicht möglich einen Partikel ohne Namen zu erstellen.Kann Auswahlsatz nicht erstellenKann die Datei nicht im Schreibmodus öffnen: {0}Schriftstück-Editor kann für diese Auswahl nicht ausgeführt werden. Bitte eine einzelne XData-Entity auswählen.Kann nicht mit 0 (bzw. beinahe 0) skalieren.Nichts ausgewählt: kann Patch nicht extrudieren.Cap für Auswahl erstellen...Objekte um den Ursprung anordnenPivotpunkt beim Skalieren von Faces zentrierenWahrscheinlichkeit:Setze die 'obligatorisch'-EigenschaftSetze Status eines MissionszielsSetze Misionsziel auf sichtbar/unsichtbarAnsicht wechselnWenn die "model"-Eigenschaft dieser Entity auf den gewählten Wert festgelegt wird, werden alle ihr untergeordneten Primitive gelöscht: Kopf für AI auswählenSprachsatz für AI auswählenKopf für AI auswählen...Verzeichnis auswählenDatei auswählenMap-Datei auswählenModell auswählenPartikel auswählenPrefab wählenShader auswählenSkin auswählenSprachsatz für AI auswählenGUI-Definition auswählen...Datei auswählen...XData-Definition auswählen...Entityklasse auswählenModell auswählen...Partikel auswählen...Skin auswählen...Sound auswählenSound auswählen...Ziel-Entity auswählen...Textur auswählenTextur auswählen...KlassennameKlassenname darf nicht leer seinKlassenname:LöschenAuswahlsätze löschenNicht obligatorisch machenHier klicken um neue Belegung zuzuweisenKlicken um alles in der Ebene auszuwählen, UMSCHALT beim Klicken gedrückt halten um Auswahl aufzuheben, STRG halten um die Ebene als aktive Ebene festzulegen.Auswahl clippenClipperZeitintervall:SchließenSchließen ohne zu speichernFarbeFarbschemaFarbe:Farben...Spalte:SpaltenBefehlBefehlsargumenteBefehlseigenschaftenBefehleFertigSkript bei ErfüllungTarget bei ErfüllungKomponentenBedingungBedingung betreffend Missionsziel {0:d}KegelÖffnungswinkel:Kegel...Ebenenlöschung bestätigenErsetzen bestätigenÜberschreiben bestätigenVerbindungKonsoleKonsoleBitte sieh in der Import-Zusammenfassung nach, um weitere Informationen zu erhalten.Konversations-EditorKonversations-EntitiesKonversationenKonversationen...Konversion NURBS <-> CatmullRomKonvertiert die ausgewählte Kurve NURBS <-> CatmullRomIn func_static umwandelnKoordinatenKopierenFarbschema kopierenShader kopierenWertepaar(e) kopierenKopiere ShadernamenKonnte Verzeichnis nicht anlegenKonnte Ebene nicht umbenennen, bitte nochmals versuchen.Konnte die bestehende Datei nicht auf .bak umbenennen: {0}Konnte die temporäre Datei nicht umbenennen: {0}Konnte {0} Datei nicht speichern: {1}AnzahlAnzahl / ZeitAnzahl:Bogen erstellenPatch-Cap erzeugenCatmullRom-Kurve erstellenKegel erstellenZylinder erstellenDecal-Patches erstellenDecal-Patches für ausgewählte Faces erstellenErstelle "dichten" ZylinderEndcap erstellenNeuer flacher PatchEine Gruppe aus diesem Prefab erstellenNeuer Layer...NURBS-Kurve erstellenUmschließen (erzeuge "Seitenwände")Neuer einfacher PatchKugel erzeugenErstelle quadratischen ZylinderErstelle "sehr dichten" ZylinderNeue EntityNeue Entity...Neues Licht...Neues Modell...Erzeuge Spielerstartpunkt hierNeuer einfacher PatchNeuer Speaker...NURBS-Kurve erstellenErzeuge eine neue XData-Definition...Kritischer GesundheitswertStrgAktuelle RastergrößeAktuelle Seite:Benutzerdefinierter OrdnerBenutzerdefinierter StimBenutzerdefinierte StimsBenutzerdefinierte Eigenschaften dieser Entityklasse, falls definiertBenutzerdefiniertes SkriptBenutzerdefiniertes Skript wird periodisch abgefragtWertepaar(e) ausschneidenFace-Auswahl durchrotierenAuswahl durchrotierenDurchläufe:ZylinderZylindergröße X:Zylindergröße Y:Zylindergröße Z:Zylindrisch&LöschenDarkMod VerzeichnisDarkRadiant EinstellungenDarkRadiant x.y.zDeaktivierenTotzeit / Sek.:Rastergröße verkleinernStandard-LogikStandardskalierung:Definiert inDefiniert in:Definition:LöschenZwei Spalten am Anfang löschenZwei Spalten am Ende löschenZwei Zeilen am Anfang löschenZwei Spalten am Ende löschenBenutzerdefinierten Stim entfernenTitel löschenAlle Auswahlsätze löschen?Links löschenRechts löschenEigenschaft entfernenDiese Ebene löschenGanze Seite löschenDepth Hack:Listet verfügbare Mauskommandos aufBeschreibungBeschreibung:Nach Filter abwählen...Alle Elemente mit diesem Shader deselektierenAlle Entities mit diesem Model deselektierenDetails (doppelklicken zum Editieren)Schw.SchwierigkeitsgradSchwierigkeitsstufen-EditorSchwierigkeitsgradnameLogik für bestimmte SchwierigkeitsstufeSchwierigkeitsstufe...Richtung / OrientierungRichtung:"Alarmierter" Idle-Zustand nicht erlaubtDesktopgestaltung deaktivierenKeine Soundwiedergabe in dieser SessionSchrittweise Bewegung (freier Umsichtsmodus aus)Distanz:Verteile Polygone zufällig im angegebenen VolumenVerteilungWirft keine Schatten (schnell).Willst Du diese Ebene wirklich löschen?Willst Du die Import-Zusammenfassung anzeigen?Änderungen am Partikel {0} speichern?Doppelklicken um eine Belegung zu ändernNach untenKamera verschiebenAnsicht verschiebenAuswahl-RechteckErzeuge neue BrushSymmetrisches Verändern von Entities beim Ziehen (Ursprung bleibt unverändert)BetrunkenSinnesschärfen-Faktor bei TrunkenheitDuplizierenMehrfach vorkommende XData-DefinitionenDauerDauer / Sek.:Dauer:EntityB&eendenBearbeitenFarbschemas bearbeitenBefehl bearbeitenKonversation bearbeitenFilter bearbeitenFilter bearbeiten...Missions-Logik bearbeitenLogik für Erfüllung bearbeitenMaustastenbelegungen ändernZiel editieren:Missionsziel-Bedingungen bearbeitenMissions-Info editieren (darkmod.txt)...Response-Effekt editierenBearbeite readme.txt Datei...EffektEffekt:Leerer DateinameLeerer FilterKeine AuswahlEntitiesAktiviere automatisches SpeichernAktiviere hintere Clip-Ebene (ferne Objekte werden nicht angezeigt)Aktiviere Kamerasynchronisation von TDM und DarkRadiantVorausgesetzte ZieleDoppelbogenPfad zur EngineEngine-Pfad "{0}" existiert nicht. EnglischEbenennamen eingebenNamen eingebenAnzahl der Seiten festlegenPartikelnamen eingebenNamen eingaben und mit der EINGABETASTE bestätigen um einen neuen Satz anzulegen. Ein Element in der Liste auswählen um die entsprechende Auswahl wiederherzustellen. UMSCHALTTASTE gedrückt halten um die Auswahl der entsprechenden Elemente aufzuheben.Namen für das neue Schema eingeben:Neuen Ebenennamen eingebenNeue Tastenkombination festlegenText eingeben um zu filtern, Navigation mittels Pfeiltasten.EntitiesStandard-EntitiesEntities:EntityEntityklasseEntity-KlassenbaumEntity-Klassenbaum...Entity InspectorEntity KeyEntity-ListeEntitynummer:Entity {0}Entity {0}, Primitiv {1}Entity:EntityDefsFehlerFehler beim Speichern der Partikeldefinition: {0}Fehler: Datei nicht gefunden.Fehler: Entityklassenzeiger ungültig.Aufgetretene Fehler:Ausnahmefehler:Auswahl auf Geschwister ausweitenExportExportiere Region...Exportiere Lichter als Objekte (Oktaeder)Export-OptionenExport fehlgeschlagenAuswahl als Kollisionsmodell exportieren...Extrusion entlang der Vertex-NormalenExtrusion entlang der X-AchseExtrusion entlang der Y-AchseExtrusion entlang der Z-AchseFEHLGESCHLAGENFPSFaceFacesFade-FarbeFade In Fraction:Fade Index Fraction:Fade Out Fraction:Konnte keine Verbindung zum Spiel aufbauenKonnte das Verzeichnis {0} nicht anlegenImport von {0} fehlgeschlagen.Laden der GUI-Definition {0} fehlgeschlagen.Konnte {0} nicht zum Speichern öffnen.Import der darkmod.txt-Datei fehlgeschlagen: {0}Import der readme.txt-Datei fehlgeschlagen: {0}Logik für FehlschlagLogik für Fehlschlag:Skript bei FehlschlagTarget bei FehlschlagFehler beim Import.Falloff-Exponent:Entfernte Clip-Ebene heranEntfernte Clip-Ebene hinausFavoritenDateiDateipfad:Datei nicht lesbarFiltereinstellungenFilterregeln werden in der angegebenen Reihenfolge angewandt. Das Ausdruck-Feld akzeptiert reguläre Ausdrücke (RegEx). Für Filter vom Typ Objekt können die Schlüsselwörter patch oder brush verwendet werden.FilterSuchen & ErsetzenShader Suchen & ErsetzenSuche BrushSuchen & ErsetzenTexturen suchen & ersetzen...Brush suchen...Suchen:Finde:EinpassenTexture einpassen:Fixe TesselierungFixup-DateiMap-FixupMap-Fixup...Fixup ErgebnisseFixup abgebrochenFixup läuftFlagsFliegenClip-Orientierung umkehrenHorizonal kippenAuswahl Horizontal kippen (S-Achse)Auswahl vertikal kippen (T-Achse)Textur kippen:Vertikal kippenAuswahl auf den Boden setzenKamera auf ausgewählte Entity richtenSchriftgrößeSchriftstilFrames:Umschalten von/zu Umsichtsmodus erlaubenUmsichtsmodusVon:GUI-Definition:GUI-Seitenindex ungültigSpielSpiel-EinstellungenSpiel-Typ:VerbindungsfehlerSpiel-Kamera folgt der DarkRadiant-KameraSpiel lädt beim Speichern die Map-Datei neuAllgemeine EigenschaftenDeutschLosZur nächsten ÜbereinstimmungZur vorherigen ÜbereinstimmungSchwerkraft:RasterhintergrundRasterblockGrobes RasterFeines RasterRastertextGrid0.125Grid0.25Grid0.5Grid1Grid128Grid16Grid2Grid256Grid32Grid4Grid64Grid8Gruppe erstellenGruppenidentifizierer (komponentenspezifisch)Ausgewählte Elemente gruppierenGruppen können nur im Primitiv- und Gruppenteil-Selektionsmodus aufgelöst werdenGruppen können nur im Primitiv- und Gruppenteil-Selektionsmodus erstellt werdenGUI PfadGUI ImportzusammenfassungKopf:GesundheitGesundheit / KampfHöhe:HelixNicht ausgewähltes verbergenAuswahl verbergenNicht Benutztes verbergenAlle ausblendenWeit entfernte ausblendenVerbergen/ZeigenHöhere Auswahlpriorität für EntitiesAushöhlenHoriz. Skalierung:Horiz. Verschiebung:Horizontaler FOVHorizontale VerschiebungHorizontal:NICHT ERFÜLLTUNGÜLTIGWenn das Missionsziel {0} in Mission Nr. {1} den Status '{2}' hat:IgnorierenBilddateiBildBildskalierung&Prefab importierenDefinition importieren?Import fehlgeschlagenImport fehlgeschlagen:Rastergröße vergrößernIndexZeigt an, ob irgendetwas aus der momentanen Auswahl Teil dieser Ebene ist.Anfangswinkel:AnfangszustandEinfügenZwei Spalten am Anfang einfügenZwei Spalten am Ende einfügenZwei Zeilen am Anfang einfügenZwei Zeilen am Ende einfügenKurvenkontrollpunkt einfügenSeite einfügenLinks einfügenRechts einfügenPrefab einfügen...Ganze Seite einfügenFügt einen Kurvenkontrollpunkt vor dem ausgewählten Punkt einUngültige EinstellungenName im Inventory:InvertierenInvertiere vertikale Mausachse (freier Umsichtsmodus)Invertierter BogenInvertierter DoppelbogenIrreversibelGegenstand ist am/im Ort (info_location)Gegenstand ist am/im OrtGegenstand:Zu Objekt springenSeitenverhältnis beibehaltenSchlüsselTastenkombinationen...Tötungs-Ziel:KO-Ziel:SpracheNach links hinlegenEbeneEbenenLayout:LinksDiese Konversation wird maximalLevel 1: LeichtLevel 1: HartLevel 1: ExperteLicht-Anfangs- und End-Vertices (nicht ausgewählt)Licht-Anfangs- und End-Vertices (ausgewählt)LichttexturLicht-Vertices (nicht ausgewählt)Licht-Vertices (normal)Licht-Vertices (ausgewählt)LichtvoluminaLichtvoluminaLicht-FlagsLichteigenschaftenNur sichtbare Elemente anzeigenIn Texturbrowser ladenLade ShaderLade MapLade Ressourcen...Lade TexturenLade, bitte warten...Lade...OrtOrts-Entity:Ort:Logik für Schwierigkeitsstufe {0:d}MapMD5-AnimationsvorschauStärke:AushöhlenRaum erstellenAls Detail markierenMissionsziel {0} unsichtbar machenMissionsziel {0} obligatorisch machenMissionsziel {0} nicht obligatorisch machenMissionsziel {0} sichtbar machenRaum erstellenAls Struktur markierenErzeuge VisportalObgligatorisches ZielManipulierenMap-InformationMap-InformationAusdruckPassende SkinsMaterialAnzahl OberflächenMaterialienMatrixMax. Auslösevorgänge:Maximal dargestellte Länge für ShadernamenMaximale Grösse des Schnappschussverzeichnisses pro Map (MB)Max. Interleaving DistanzMax:Maximale FolgegeschwindigkeitMessenMediaMediabrowserReichweite für HandwaffenEntities zusammenführenAuswahl zusammenführenAusgewählte Entities zusammenführenFehler beim Zusammenführen. Die Länge der zu überschreibenden Definition konnte nicht abgerufen werden.Min. Interleaving DistanzMin:Minimale Alarmierungs-StufeSpiegelnSpiegeln um X-AchseSpiegeln um Y-AchseSpiegeln um Z-AchseMissionMissions-InfoMissions-Info (darkmod.txt)MissionszieleMissions-ReadmeMissions-Readme Editor (readme.txt)Missions-Titel:KomponentenmodusMod (fs_game)Mod Base (fs_game_base)Mod-Base-Pfad nicht definiert, Mod-Pfad auch nicht, verwende Base-Pfad...Mod-Base-Pfad nicht definiert, verwende Mod-Pfad...Mod Base/xdataMod-Pfad nicht definiert, verwende Base-Pfad...Mod/xdataModellModel-DefinitionModel-ExportModell-PfadModell-SkalierungModellnameModelleBenutzte Modelle:HilfstastenTexturierung bearbeiten:Mehr ZylinderartenMaustastenbelegungen...Bildlaufgeschwindgkeit beim ScrollenNach untenNach obenSetze Kamera auf die Position im SpielNach untenVerschiebe Spielerstartpunkt hierNach Layer verschieben...Nach obenBewegungsgeschwindigkeit (in Spieleinheiten)MultiplizierenNameNamenskonfliktName der EntityName:Benutzte Skins:Natürliche SkalaNeuNeuer AkteurNeue KonversationNeue XY-AnsichtNeuer Name:Neues Ziel {0:d}NeuerFilterNächste Ansicht (XY, XZ, YZ)Nächster Leak-SpotKeine Favoriten vorhandenKein Zieldateipfad angegeben, exportieren nicht möglich.Die Importzusammenfassung ist erst nach dem Import einer XData-Definition verfügbar.Die Importzusammenfassung ist erst nach dem Öffnen des GUI-Browsers verfügbar.Keine Map geladenKann diesen Filter nicht einfügen, keine Regeln definiert.Für diesen Filter sind keine Regeln definiert, soll der Filter gelöscht werden?Keine Skripts verfügbarKein ShaderKein SpezifikatorKnotenanzahlAmplitude:KeineNormalisierenKeine geeignete GUI-Definition!Hinweis: Bitte beachte, dass sich das Löschen benutzerdefinierter Stims auf andere Entities auswirken kann. Gehe deshalb sorgfältig vor.Hinweis: diese Kombination ist bereits zugeordnet:Hinweis: alle Änderungen werden in den File ... geschriebenHinweis: alle Änderungen werden in den File {0} geschriebenFür diese Operation darf nichts ausgewählt sein.Nichts ausgewählt, kann keine Gruppe erstellenNichts ausgewählt, exportieren nicht möglichNichts ausgewählt, kann keine Gruppierung auflösenHinweisVerschiebenVerschiebe nach untenVerschiebe nach linksVerschiebe nach rechtsVerschiebe nach obenAnzahl der Seiten:Anzahl der Brushes/Patches/Entities in der Map (Anzahl der selektierten Elemente in Klammern)Anzahl der Seitenflächen:OKObjekt wird zerstörtMissionsziel-BedingungenMissionsziel-EntitiesMissionszieleMissionsziele...Duplizierte Objekte um eine Rastereinheit nach rechts unten verschiebenAbstand:OmnidirektionalEinseitige Schriftstück-GUIsEinseitigLaufendÖffnenDatei öffnenMap öffnenOpenGL ErweiterungenOpenGL EigenschaftenAbbruch durch BenutzerOptimierungOptional. Nur ausfüllen bei Kampagnen bestehend aus mehreren Missionen.OptionenOptionen:Die Reihenfolge der Title/Description/Author/etc.-Elemente ist ungültig.Orientierung:2D-AnsichtAndere ShaderZieldateiExport-Format:Zielpfad:Auswärts Insgesamt (komponentenspezifisch)Erzwinge einheitliche LichterfarbenBestehende Tastenkombination überschreiben?TextbearbeitungSeitenindex ungültig.Seite:Sound beim Umblättern:Kamera-Ansicht verschiebenBild zusammen mit 2D-Ansicht verschiebenParallelPartikelPartikeldefinitionenPartikeleditorPartikeleditor...PartikelstufenShader einfügenShader einfügen (Natürliche Skalierung)Shadernamen einfügenShader einfügen (Natürliche Skalierung)Shader einfügen (Projektion)Shader einfügen (gesamter Brush)Wertepaar(e) einfügenTexturkoordinaten einfügenBei Kameraposition einfügenPatchPatch-KontrollpunktePatch-Vertices (Ecke)Patch-Vertices (innen)Patch InspectorPatch-TesselierungPatch-ExtrusionPatchesPatches:PfadPfad-Typ:Pfad ist nicht absolut: {0}PatroullierenSpiel pausierenShader auswählenTexturauswahl per MausklickAbspielenLoopenSpieler bestiehlt AISpieler besitzt GegenstandSpieler ist verantwortlichBitte benenne Deine XData-Definition um, so dass sie unter einem neuen Namen gespeichert wird.Bitte einen Spieltyp auswählenBitte eine neue Maus-/Tastenkombination durch Klick auf die Fläche unten wählen.Bitte zuerst einen XData-Namen angeben!Kamera ausrichtenPolygoneEinstellungen...Seite voranstellenVorheriger Leak-SpotPrisma...Fehler beim Import.Verarbeite Zeile {0}...Vorgang läuft...ProjektionEigenschaftenEigenschaftCap-Patches für Auswahl erstellenPython SkripteingabeRadiale Geschwindigkeit:RadiusRadius verändert sich über die Zeit zu:Zufällige Effekte:Zufälligkeit:RangAbspielrate:Neu verteilenSchriftstück-EditorEin Schriftstück wird geschlossenEin Schriftstück wird geöffnetSchriftstück:Wirklich alle Belegungen auf die Standardeinstellungen zurücksetzen?Zuletzt geöffnete MapsRechteckigNeu ladenRegionAAS File neu ladenDefs neu ladenMaterials neu ladenModelle neu ladenPartikel-Definitionen neu ladenPartikel neu ladenSchriftstück-GUIs neu ladenS&kins neu ladenSkripts neu ladenAusgewählte Modelle neu ladenSkins neu ladenSounds neu ladenNeuladen der GUIsEntfernenKurvenkontrollpunkt entfernenSeite EntfernenStimtyp entfernenAus Favoriten entfernenVon Layer entfernen...Entferne die ausgewählte BrushAusgewählte Kurvenkontrollpunkte entfernenEbene umbenennenDiese Ebene umbenennenAlle Lichter werden mit der Farbe aus dem aktiven Farbschema gerendert, nicht mit der Farbe die durch das _color Spawnarg festgelegt wird.Renderer:Renderer: {0}Primitive neu zuordnen (Elternknoten ändern)Primitive Worldspawn zuordnenPrimitive neu zuordnenAuswahl durch exportiertes Modelle ersetzenErsetzen:Erforderliche TDM-Version:Prefab-Ordner neu durchsuchenAlle Belegungen zurücksetzenAuf Standardwerte zurücksetzenAuf Standard zurücksetzen?Größe ändernAusgewählte Entities neu spawnenResponse-EffekteResponsesDarkRadiant neu starten um die Änderungen anzuwendenNeustart erforderlichTeil zu Worldspawn umwandelnZu Worldspawn umwandelnRechtsRinggröße:DrehenObjekte unabhängig voneinander drehenDrehe um X-AchseDrehe um Y-AchseDrehe um Z-AchseDrehen und skalieren...Drehe func_*-Entities um deren UrsprungRotationRotationsgeschwindigkeitRotationsgeschwindigkeit:Rotation:Reihe:ZeilenRegelnStarte SkriptS/RBei Missionsstart erfülltSpeichernSpeichern &als...&Kopie speichern als...Änderungen SpeichernDatei speichernSpeichere SchnappschüsseSpeichern & SchließenDie aktuelle Map speichernSkalierungSkriptSkriptfunktion:Durchsuche nur die aktuelle AuswahlSuche AAS FilesIn Media Browser zeigenAuswählenBerührtes auswählenEine .prt-Datei auswählenKinder auswählenKanten auswählenEntities auswählenEntity auswählenFaces auswählenTeile einer Gruppe auswähenEltern-Entities auswählenVerbundene Objekte auswählenVertices auswählenSprachsatz auswählen...Alles vom selben Typ auswählenNach Filter auswählen...Inneres auswählen (Projektion)Inneres auswählen (Projektion)Alle Elemente mit diesem Shader auswählenAlle Entities mit diesem Model auswählenInneres auswählenInneres auswählenUm eine Gruppe zu erstellen muss mehr als ein Element ausgewählt werdenNeue Tastenbelegung wählen: {0}Zuletzt geöffneten Pfad auswählen:Berührtes auswählenAusgewählte GruppenelementeAusgewählte ElementeAusgewählte Elemente (Kamera)Auswahlsatz: In WortenUnsichtbar machenSetze den Status von Missionsziel {0} auf {1}Sichtbar machenÜber Brush festlegenÜber XY-Ansicht festlegenÜber Auswahl festlegenObligatorisch machenSetze Status auf {0}EinstellungEinstellungen/Einstellungen/Automatisches SpeichernEinstellungen/KameraEinstellungen/KompatibilitätEinstellungen/SpracheEinstellungen/MultimonitorEinstellungen/2D-AnsichtEinstellungen/Schriftstück-EditorEinstellungen/TexturbrowserShaderShader:Shader-Zwischenablage ist leer.Shader-Zwischenablage: {0} ({1})ShaderBenutzte Shader:Form:UmschaltListe der TastenkombinationenZeigenZeige "Andere Shader"Zeige WinkelZeige NamenAlle anzeigenAAS-Nummern anzeigenZeige AchsenZeige BlöckeZeige KoordinatenZeige KoordinatenZeige FadenkreuzZeige Richtungspfeile der EntitiesZeige Namen der EntitiesFavoriten anzeigenFavoriten anzeigenZeige RasterZeige Zusammenfassung des letzten GUI-ImportsZeige ShaderdefinitionZeige GrößeninformationZeige Textur-FilterZeige FensterumrandungZeige ArbeitsbereichAlle anzeigenZeige Toolbar im Kamera-FensterZeige KoordinatenachsenZeige doppelte DefinitionenKompletten Pfad anzeigenZeige HilfeZeige VerborgenesZeige vererbte EigenschaftenZeige Zusammenfassung des letzten XData-ImportsZeige GrößeninformationZeige WireframeZeige/verberge alle LichtvoluminaZeige/verberge alle Speaker-VoluminaZeigt die aktuelle Position des Mauszeigers in der Ortho-AnsichtSitz-WinkelGrößeGröße / Geschw.Größe:SkinSkinnameSkin:SkinsCaulk-Flächen nicht exportierenKein Diffusemap-RenderingKein Specularmap-RenderingRotationspivot am Raster ausrichtenAuswahl am Raster ausrichtenAuswahl am Raster ausrichtenAm Raster ausrichtenSchnappschussverzeichniss (relativ zu map Verzeichniss)Feste AuswahlrahmenSounddateienSoundshaderSoundshaderSoundshaderQuellmission:Status des Quell-Missionsziels:Quell-Missionsziel:Weder Spawnarg-Name noch -Wert dürfen leer bleibenWertepaar:Geschw.:Kugelradius:Kugel...SphärischAuswahl splittenStufeStufeneinstellungenStandardStartStarte DarkRadiant auf MonitorNeue Mission namens {0} anlegen?Starte im "alarmierten" Idle-ZustandSitzt von anfang anSchläft von anfang anGUI-Browser öffnen?ZustandSchritt:Stim/Response-EditorStim/Response...StimsPatch-Texturen zusammenfügenStopLogik für Erfüllung:Logik für Erfüllung:Surface InspectorMit Monsterclip einhüllenMit Monsterclip einhüllenSchalte zu Standard-GUI um...Missionsziel:TeamMap-Datei im Spiel neu ladenTexturbrowser-HintergrundTexturbrowserTextur-LockTexturoperationenTextureigenschaftenTextur-WerkzeugTextur-LockTexturbrowser-ScrollbalkenTexturenDer Ordnername der zu editierenden Mission, z.B. 'saintlucia'.Der Akteur {0} wurde in der aktuellen Map nicht gefunden.Die Definition {0} existiert bereits, soll sie importiert werden?Die Dark Mod EXE-Datei(en) konnte(n) in dem angegebenen Ordner nicht gefunden werden. Die Datei {0} existiert bereits. Soll sie überschrieben werden?Der Missions-Pfad "{0}" existiert nicht. Der Missions-Ordner {0} existiert nicht. Willst Du eine neue Mission anfangen und den Ordner erzeugen?Der Mod-Base-Pfad "{0}" existiert nicht. Der Mod-Pfad "{0}" existiert nicht. Der Name des Shaders in der ZwischenablageDie angeforderte Definition wurde in mehreren Dateien gefunden, bitte die genaue Datei auswählen:Die selektierten Elemente bilden bereits eine GruppeKeines der selektierten Elemente ist Teil einer GruppeDie Schnappschüsse für diese Map überschreiten das eingestellte Limit. Es wäre vielleicht gut den Ordner {0} aufzuräumen.Die angegebene Definition existiert nicht.Die angegebene Datei kann nicht geöffnet werden.Die angegebene Datei existiert nicht.Die angegebene GUI-Definition ist kein Schriftstück.Die angegebene GUI-Definition ist für das momentan gewählte Seitenlayout nicht geeignet.Diese Tastenkombination ist bereits {0} zugeordnet. Soll diese Assoziation aufgehoben werden und die Tastenkombination stattdessen {1} zugeordnet werden?Es gibt keine mehrfachen XData-DefinitionenDiese Logik überschreibt die Standard-Logik für die angegebene Schwierigkeitsstufe wenn das Logik-Eingabefeld nicht leer ist.Ausgewählte Patches extrudieren...Ausgewählte Patches extrudierenTiefe (in Rastereinheiten):Diese Bedingung ist noch nicht gültig oder vollständig.Diese Standardeinstellung wurde außer Kraft gesetzt, Editieren nicht möglich.An dieser stelle sollte sich TheDarkMod.exe befinden.Das ist die Standard-Logik für alle Schwierigkeitsstufen.Dieser Name existiert bereitsDieser Name ist bereits in Verwendung.Dies entfernt alle vorhandenen Auswahlsätze. Die Objekte in der aktuellen Map werden dadurch nicht beeinflusst. Fortfahren?Zeitversatz / Sek.Zeitintervall:Mit dieser Map verbrachte ZeitZeit:Timer-NeustartsTimer startet neu nach AblaufTimer wartet auf Start (wenn Option deaktiviert: Timer startet zur Spawn-Zeit)Titel:Titel:Die aktuelle Definition wurde in {0} umbenannt, um doppelte XData-Definitionen zu vermeiden.Bis:Raster anzeigen/verbergenAnzeigen/VersteckenEbenensichtbarkeit umkehrenWerkzeugWerkzeugeObenOben linksOben rechtsGesamte PolygoneGesamte VerticesSpuren:TranslahierenTranslationen sind immer achsengebundenTransparenzTransponierenZwei Entities befinden sich innerhalb eines bestimmten RadiusZweiseitige Schriftstück-GUIsZweiseitigTypTyp:Kann Ziel-Entity nicht erzeugen: EntityKlasse '{0}' nicht gefunden.Kann Ziel-Entity nicht erzeugen: die Entityklassen sind nicht in der Registierung definiert.Kann Konversationsentity nicht anlegen, Klasse '{0}' nicht gefunden.Konnte Licht nicht erstellen: {0}Konnte Model nicht erstellen: {0}Konnte Speaker nicht erstellen: {0}Vorschau nicht möglich, Entityklasse {0} nicht vorhanden.Gruppierung auflösenGruppierte Elemente auflösenEinheitliche Größe der Texturvorschaubilder (in Pixel)UnbekanntUnbekannte Brush Typ-ID: {0}Nach obenAktualisiere 2D-Ansichten bei KamerabewegungenEntities jetzt aktualisieren Entities nach jeder Änderung aktualisierenAufwärtsdrift:Entity-Farbe verwendenVerwende den Entity-Origin als UrsprungWelt-Schwerkraftrichtung verwendenVerwende HintergrundbildBoundingbox benutzenVerwende Start/EndAnsichtAlle überprüfenWertGeschwindigkeit:Hersteller:Hersteller: {0}Detailliertes LoggingVersion:Version: {0:d}.{1:d}.{2:d}Version: {0}Vert. Skalierung:Vert. Verschiebung:Vertikaler FOVVertikale VerschiebungVertikal:AnsichtFilter anzeigenShaderdefinition ansehenSoundshader-Definition ansehenAnsicht folgt Mauszeiger bei Verschiebe-OperationenSichtbarSehschärfeSprachsatz:WartenWarten bis Befehl fertig ausgeführt wurdeWarnungWarnung: {0} Möchtest Du diese Einstellungen korrigieren?Achtung:Patches verbindenUm Texturen per Klick auszuwählen, aktiviere den "Auswählen"-Button und verwende {0} in der Kamera-Ansicht um den Materialnamen auszuwählen. Der gewählte Texturename wird dann in dem Textfeld neben dem gewählten Button eingetragen.Breite:FensterlayoutArbeitsbereichSchreibe MapXX-Größe:X-AchseRotation um X-AchseSkalierung X-AchseX:XData-Name:Ordner zum Ablegen der XData-DateienXData wurde umbenannt.XData ImportzusammenfassungXY (Oben)XY ObenXY-AnsichtFadenkreuz (XY-Ansicht)XZXZ VorneXdata-PfadYY-Größe:Y-AchseRotation um Y-AchseSkalierung Y-AchseYZYZ SeiteDu hast keine GUI ausgewählt. Es wird die Standard-GUI verwendet.Du hast eine XData-Definition importiert, die in einem PK4-File gespeichert ist.ZZ-Größe:Z-AchseRotation um Z-AchseSkalierung Z-AchseAnsicht zoomenBild zusammen mit 2D-Ansicht zoomen[in {0}]clipPlaneInButtonclipPlaneOutButtonclipPlaneToggleButtondeaktiviertaktiviertEntitiesEntityentityflatShadeBtngridButtonhversteckehttps://www.darkradiant.net/ Dieses Produkt enthält teilweise Software der Firma id Software, Inc. ('id Technology'). id Technology 2000 id Software,Inc. DarkRadiant basiert auf der GPL version von GtkRadiant (www.qeradiant.com) The Dark Mod (www.thedarkmod.com)lightingBtnlightingModeButtonmmodelDefsmsnextButtonNeinintransparentpauseTimeButtonprevButtonsSekunden:zeigestartTimeButtonstopTimeButtontexturedBtntexturedModeButtonMal(e)Mal(e) abgespielttransparentwireframeBtnwxWidgets Eigenschaftenx shader ersetzt.An X-Achse SpiegelnUm X-Achse rotierenx: {0:6.1f} y: {1:6.1f} z: {2:6.1f}An Y-Achse SpiegelnUm Y-Achse rotierenJaAn Z-Achse SpiegelnUm Z-Achse rotieren{0:d} Loot{0:d} Loot in Gold{0:d} Loot in Waren{0:d} Loot in Edelsteinen{0:d} Modelle geladen{0:d} von "{1}"{0:d} Shader ersetzt.{0} AI vom Team {1}{0} AI vom Typ {1}{0} AI von {1}{0} bei [ {1} ]{0} Entities ersetzt.{0} ist definiert in:{0} Modelle ersetzt.{0} der Spawnklasse {1}{0} vom Typ {1}{0} Shader ersetzt.{0} Wertepaare ersetzt.{0} erfolgreich importiert{0}{1} existiert bereits unter anderem Pfad. XData wird in {2}{3} gespeichert!DarkRadiant-2.14.0/install/i18n/de/LC_MESSAGES/darkradiant.po000066400000000000000000005676321413722237400232400ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: DarkRadiant\n" "Report-Msgid-Bugs-To: greebo@angua.at\n" "POT-Creation-Date: 2021-01-24 05:36+0100\n" "PO-Revision-Date: 2021-01-24 05:47+0100\n" "Last-Translator: codereader \n" "Language-Team: The Dark Mod\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-KeywordsList: _;gettext;gettext_noop\n" "X-Poedit-Basepath: .\n" "X-Generator: Poedit 2.4.2\n" "X-Poedit-SearchPath-0: ../../../../radiant\n" "X-Poedit-SearchPath-1: ../../../../libs\n" "X-Poedit-SearchPath-2: ../../../../plugins\n" #: ..\..\radiant\camera\CameraSettings.cpp:57 msgid "Settings/Camera" msgstr "Einstellungen/Kamera" #: ..\..\radiant\camera\CameraSettings.cpp:60 msgid "Movement Speed (game units)" msgstr "Bewegungsgeschwindigkeit (in Spieleinheiten)" #: ..\..\radiant\camera\CameraSettings.cpp:61 msgid "Rotation Speed" msgstr "Rotationsgeschwindigkeit" #: ..\..\radiant\camera\CameraSettings.cpp:64 msgid "Freelook mode can be toggled" msgstr "Umschalten von/zu Umsichtsmodus erlauben" #: ..\..\radiant\camera\CameraSettings.cpp:65 msgid "Discrete movement (non-freelook mode)" msgstr "Schrittweise Bewegung (freier Umsichtsmodus aus)" #: ..\..\radiant\camera\CameraSettings.cpp:66 msgid "Enable far-clip plane (hides distant objects)" msgstr "Aktiviere hintere Clip-Ebene (ferne Objekte werden nicht angezeigt)" #: ..\..\radiant\camera\CameraSettings.cpp:69 msgid "Invert mouse vertical axis (freelook mode)" msgstr "Invertiere vertikale Mausachse (freier Umsichtsmodus)" #: ..\..\radiant\camera\CameraSettings.cpp:72 msgid "Solid selection boxes" msgstr "Feste Auswahlrahmen" #: ..\..\radiant\camera\CameraSettings.cpp:75 msgid "Show camera toolbar" msgstr "Zeige Toolbar im Kamera-Fenster" #: ..\..\radiant\camera\FloatingCamWnd.cpp:18 xml_file_content.cpp:68 msgid "Camera" msgstr "Kamera" #: ..\..\radiant\camera\tools\FreeMoveTool.h:23 msgid "Freemove Mode" msgstr "Umsichtsmodus" #: ..\..\radiant\camera\tools\JumpToObjectTool.h:27 msgid "Jump to Object" msgstr "Zu Objekt springen" #: ..\..\radiant\camera\tools\PanViewTool.h:23 msgid "Pan Camera View" msgstr "Kamera-Ansicht verschieben" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:116 msgid "Pick Shader" msgstr "Shader auswählen" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:139 msgid "Paste Shader Projected" msgstr "Shader einfügen (Projektion)" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:158 msgid "Paste Shader Natural" msgstr "Shader einfügen (Natürliche Skalierung)" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:177 msgid "Paste Texture Coordinates" msgstr "Texturkoordinaten einfügen" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:196 msgid "Paste Shader to all Brush Faces" msgstr "Shader einfügen (gesamter Brush)" #: ..\..\radiant\camera\tools\ShaderClipboardTools.h:215 msgid "Paste Shader Name" msgstr "Shadernamen einfügen" #: ..\..\radiant\eventmanager\MouseToolGroup.cpp:23 msgid "XY View" msgstr "XY-Ansicht" #: ..\..\radiant\eventmanager\MouseToolGroup.cpp:25 xml_file_content.cpp:56 msgid "Camera View" msgstr "Kamera" #: ..\..\radiant\eventmanager\MouseToolGroup.cpp:27 msgid "Unknown" msgstr "Unbekannt" #: ..\..\radiant\map\AutoSaver.cpp:205 msgid "" "The snapshots saved for this map are exceeding the configured size limit.\n" "Consider cleaning up the folder {0}" msgstr "" "Die Schnappschüsse für diese Map überschreiten das eingestellte Limit.\n" "Es wäre vielleicht gut den Ordner {0} aufzuräumen." #: ..\..\radiant\map\AutoSaver.cpp:318 msgid "Settings/Autosave" msgstr "Einstellungen/Automatisches Speichern" #: ..\..\radiant\map\AutoSaver.cpp:321 msgid "Enable Autosave" msgstr "Aktiviere automatisches Speichern" #: ..\..\radiant\map\AutoSaver.cpp:322 msgid "Autosave Interval (in minutes)" msgstr "Speicherintervall" # Snapshots oder Schnappschüsse? #: ..\..\radiant\map\AutoSaver.cpp:324 msgid "Save Snapshots" msgstr "Speichere Schnappschüsse" # Snapshot oder Schnappschuss? #: ..\..\radiant\map\AutoSaver.cpp:325 msgid "Snapshot folder (relative to map folder)" msgstr "Schnappschussverzeichniss (relativ zu map Verzeichniss)" #: ..\..\radiant\map\AutoSaver.cpp:326 msgid "Max total Snapshot size per map (MB)" msgstr "Maximale Grösse des Schnappschussverzeichnisses pro Map (MB)" #: ..\..\radiant\RadiantApp.cpp:118 msgid "Disable sound for this session." msgstr "Keine Soundwiedergabe in dieser Session" #: ..\..\radiant\RadiantApp.cpp:119 msgid "Verbose logging." msgstr "Detailliertes Logging" #: ..\..\radiant\selection\ManipulateMouseTool.cpp:37 msgid "Manipulate" msgstr "Manipulieren" #: ..\..\radiant\selection\SelectionMouseTools.cpp:58 msgid "Select" msgstr "Auswählen" #: ..\..\radiant\selection\SelectionMouseTools.cpp:194 xml_file_content.cpp:3 msgid "Select Faces" msgstr "Faces auswählen" #: ..\..\radiant\selection\SelectionMouseTools.cpp:213 msgid "Cycle Selection" msgstr "Auswahl durchrotieren" #: ..\..\radiant\selection\SelectionMouseTools.cpp:273 msgid "Cycle Face Selection" msgstr "Face-Auswahl durchrotieren" #: ..\..\radiant\settings\LocalisationModule.cpp:51 msgid "Settings/Language" msgstr "Einstellungen/Sprache" #: ..\..\radiant\settings\LocalisationModule.cpp:52 msgid "Language" msgstr "Sprache" #: ..\..\radiant\settings\LocalisationModule.cpp:54 msgid "" "Note: You'll need to restart DarkRadiant\n" "after changing the language setting." msgstr "" "Hinweis: Du musst DarkRadiant neu starten,\n" "damit die neue Spracheinstellung aktiv wird." #: ..\..\radiant\settings\LocalisationProvider.cpp:145 msgid "English" msgstr "Englisch" #: ..\..\radiant\settings\LocalisationProvider.cpp:146 msgid "German" msgstr "Deutsch" #: ..\..\radiant\textool\TexTool.cpp:33 msgid "Texture Tool" msgstr "Textur-Werkzeug" #: ..\..\radiant\ui\aas\AasControl.cpp:34 msgid "Reload AAS File" msgstr "AAS File neu laden" #: ..\..\radiant\ui\aas\AasControlDialog.cpp:29 msgid "AAS Viewer" msgstr "AAS Visualisierung" #: ..\..\radiant\ui\aas\AasControlDialog.cpp:79 msgid "Search for AAS Files" msgstr "Suche AAS Files" #: ..\..\radiant\ui\aas\AasControlDialog.cpp:83 msgid "Show Area Numbers" msgstr "AAS-Nummern anzeigen" #: ..\..\radiant\ui\aas\AasControlDialog.cpp:86 msgid "Hide distant Areas" msgstr "Weit entfernte ausblenden" #: ..\..\radiant\ui\about\AboutDialog.cpp:25 msgid "About DarkRadiant" msgstr "Über DarkRadiant" #: ..\..\radiant\ui\about\AboutDialog.cpp:60 msgid "Build date: {0}" msgstr "Kompilierungsdatum: {0}" #: ..\..\radiant\ui\about\AboutDialog.cpp:69 msgid "Version: {0:d}.{1:d}.{2:d}" msgstr "Version: {0:d}.{1:d}.{2:d}" #: ..\..\radiant\ui\about\AboutDialog.cpp:79 msgid "Vendor: {0}" msgstr "Hersteller: {0}" #: ..\..\radiant\ui\about\AboutDialog.cpp:80 msgid "Version: {0}" msgstr "Version: {0}" #: ..\..\radiant\ui\about\AboutDialog.cpp:81 msgid "Renderer: {0}" msgstr "Renderer: {0}" #: ..\..\radiant\ui\brush\FindBrush.cpp:13 msgid "Find Brush" msgstr "Suche Brush" #: ..\..\radiant\ui\brush\FindBrush.cpp:15 msgid "Entity Number:" msgstr "Entitynummer:" #: ..\..\radiant\ui\brush\FindBrush.cpp:16 msgid "Brush Number:" msgstr "Brushnummer:" #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:18 msgid "Enter Number of Sides" msgstr "Anzahl der Seiten festlegen" #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:41 msgid "Number of sides: " msgstr "Anzahl der Seitenflächen:" #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:60 msgid "At least one brush must be selected for this operation." msgstr "Für diese Operation muss mindestens ein Brush ausgewählt sein." #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:105 #: ..\..\radiant\ui\brush\QuerySidesDialog.cpp:122 msgid "Unknown brush type ID: {0}" msgstr "Unbekannte Brush Typ-ID: {0}" #: ..\..\radiant\ui\commandlist\CommandList.cpp:20 msgid "Shortcut List" msgstr "Liste der Tastenkombinationen" #: ..\..\radiant\ui\commandlist\CommandList.cpp:60 #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:123 #: xml_file_content.cpp:2 msgid "Command" msgstr "Befehl" #: ..\..\radiant\ui\commandlist\CommandList.cpp:62 #: ..\..\libs\wxutil\dataview\KeyValueTable.cpp:41 msgid "Key" msgstr "Schlüssel" #: ..\..\radiant\ui\commandlist\CommandList.cpp:95 msgid "Reset to Default" msgstr "Auf Standardwerte zurücksetzen" #: ..\..\radiant\ui\commandlist\CommandList.cpp:128 msgid "Enter new Shortcut" msgstr "Neue Tastenkombination festlegen" #: ..\..\radiant\ui\commandlist\CommandList.cpp:179 #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:185 msgid "Reset to default?" msgstr "Auf Standard zurücksetzen?" #: ..\..\radiant\ui\commandlist\CommandList.cpp:180 #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:186 msgid "" "Really clear all bindings and reload\n" "them from the default settings?" msgstr "" "Wirklich alle Belegungen auf die\n" "Standardeinstellungen zurücksetzen?" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:38 msgid "Note: This shortcut is already assigned to:" msgstr "Hinweis: diese Kombination ist bereits zugeordnet:" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:48 #: ..\..\radiant\ui\script\ScriptWindow.cpp:85 xml_file_content.cpp:11 #: xml_file_content.cpp:3 xml_file_content.cpp:7 xml_file_content.cpp:12 #: xml_file_content.cpp:18 xml_file_content.cpp:8 xml_file_content.cpp:6 #: xml_file_content.cpp:14 xml_file_content.cpp:15 xml_file_content.cpp:39 msgid "OK" msgstr "OK" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:51 #: ..\..\radiant\ui\mapselector\MapSelector.cpp:42 xml_file_content.cpp:2 #: xml_file_content.cpp:6 xml_file_content.cpp:11 xml_file_content.cpp:17 #: xml_file_content.cpp:4 xml_file_content.cpp:10 xml_file_content.cpp:9 #: xml_file_content.cpp:14 xml_file_content.cpp:5 xml_file_content.cpp:13 #: xml_file_content.cpp:20 xml_file_content.cpp:40 msgid "Cancel" msgstr "Abbrechen" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:130 msgid "" "The specified shortcut is already assigned to {0}\n" "Overwrite the current setting and assign this shortcut to {1} instead?" msgstr "" "Diese Tastenkombination ist bereits {0} zugeordnet.\n" "Soll diese Assoziation aufgehoben werden und die Tastenkombination\n" "stattdessen {1} zugeordnet werden?" #: ..\..\radiant\ui\commandlist\ShortcutChooser.cpp:136 msgid "Overwrite existing shortcut?" msgstr "Bestehende Tastenkombination überschreiben?" #: ..\..\radiant\ui\common\CommandEntry.cpp:26 msgid "Go" msgstr "Los" #: ..\..\radiant\ui\common\DefinitionView.cpp:26 #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:103 #: xml_file_content.cpp:2 msgid "Name:" msgstr "Name:" #: ..\..\radiant\ui\common\DefinitionView.cpp:27 xml_file_content.cpp:1 msgid "Defined in:" msgstr "Definiert in:" #: ..\..\radiant\ui\common\DefinitionView.cpp:44 msgid "Definition:" msgstr "Definition:" #: ..\..\radiant\ui\common\EntityChooser.cpp:16 msgid "Select Entity" msgstr "Entity auswählen" #: ..\..\radiant\ui\common\MaterialDefinitionView.cpp:10 msgid "View Shader Definition" msgstr "Shaderdefinition ansehen" #: ..\..\radiant\ui\common\ShaderChooser.cpp:15 msgid "Choose Shader" msgstr "Shader auswählen" #: ..\..\radiant\ui\common\ShaderSelector.cpp:172 #: ..\..\radiant\ui\common\ShaderSelector.cpp:202 #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:148 #: ..\..\radiant\ui\einspector\EntityInspector.cpp:463 #: ..\..\libs\wxutil\dataview\KeyValueTable.cpp:44 msgid "Value" msgstr "Wert" #: ..\..\radiant\ui\common\ShaderSelector.cpp:200 msgid "Attribute" msgstr "Attribut" #: ..\..\radiant\ui\common\ShaderSelector.cpp:338 #: ..\..\radiant\ui\common\TexturePreviewCombo.cpp:80 #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:60 #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:232 #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:50 #: xml_file_content.cpp:14 msgid "Shader" msgstr "Shader" #: ..\..\radiant\ui\common\ShaderSelector.cpp:339 #: ..\..\radiant\ui\common\ShaderSelector.cpp:357 #: ..\..\radiant\ui\common\TexturePreviewCombo.cpp:81 #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:258 msgid "Defined in" msgstr "Definiert in" #: ..\..\radiant\ui\common\ShaderSelector.cpp:340 #: ..\..\radiant\ui\common\ShaderSelector.cpp:373 #: ..\..\radiant\ui\common\TexturePreviewCombo.cpp:82 #: ..\..\plugins\dm.editing\AIVocalSetChooserDialog.cpp:56 #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:133 xml_file_content.cpp:1 msgid "Description" msgstr "Beschreibung" #: ..\..\radiant\ui\common\ShaderSelector.cpp:348 #: ..\..\plugins\dm.conversation\CommandEditor.cpp:222 msgid "None" msgstr "Keine" #: ..\..\radiant\ui\common\ShaderSelector.cpp:356 msgid "Image map" msgstr "Bild" #: ..\..\radiant\ui\common\ShaderSelector.cpp:370 msgid "Light flags" msgstr "Licht-Flags" #: ..\..\radiant\ui\common\SoundShaderDefinitionView.cpp:10 msgid "View Sound Shader Definition" msgstr "Soundshader-Definition ansehen" #: ..\..\radiant\ui\common\TexturePreviewCombo.cpp:44 msgid "Copy shader name" msgstr "Kopiere Shadernamen" #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:23 msgid "Entity Class Tree" msgstr "Entity-Klassenbaum" #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:43 msgid "Loading, please wait..." msgstr "Lade, bitte warten..." #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:132 #: ..\..\libs\wxutil\EntityClassChooser.cpp:311 msgid "Classname" msgstr "Klassenname" #: ..\..\radiant\ui\eclasstree\EClassTree.cpp:145 #: ..\..\radiant\ui\einspector\AddPropertyDialog.cpp:76 #: ..\..\radiant\ui\einspector\EntityInspector.cpp:458 msgid "Property" msgstr "Eigenschaft" #: ..\..\radiant\ui\einspector\AddPropertyDialog.cpp:27 msgid "Add property" msgstr "Eigenschaft hinzufügen" #: ..\..\radiant\ui\einspector\AddPropertyDialog.cpp:31 msgid "Custom properties defined for this entity class, if any" msgstr "Benutzerdefinierte Eigenschaften dieser Entityklasse, falls definiert" #: ..\..\radiant\ui\einspector\ClassnamePropertyEditor.cpp:26 msgid "Choose entity class..." msgstr "Entityklasse auswählen" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:83 msgid "Show inherited properties" msgstr "Zeige vererbte Eigenschaften" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:88 msgid "Show help" msgstr "Zeige Hilfe" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:301 msgid "Add property..." msgstr "Eigenschaft hinzufügen..." #: ..\..\radiant\ui\einspector\EntityInspector.cpp:306 msgid "Delete property" msgstr "Eigenschaft entfernen" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:314 msgid "Copy Spawnarg(s)" msgstr "Wertepaar(e) kopieren" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:319 msgid "Cut Spawnarg(s)" msgstr "Wertepaar(e) ausschneiden" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:324 msgid "Paste Spawnarg(s)" msgstr "Wertepaar(e) einfügen" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:336 #: ..\..\radiant\ui\einspector\EntityInspector.cpp:339 #: ..\..\radiant\uimanager\GroupDialog.cpp:30 msgid "Entity" msgstr "Entity" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:1192 msgid "Entity {0}" msgstr "Entity {0}" #: ..\..\radiant\ui\einspector\EntityInspector.cpp:1204 msgid "Entity {0}, Primitive {1}" msgstr "Entity {0}, Primitiv {1}" #: ..\..\radiant\ui\einspector\EntityPropertyEditor.cpp:31 msgid "Choose target entity..." msgstr "Ziel-Entity auswählen..." #: ..\..\radiant\ui\einspector\FloatPropertyEditor.cpp:70 #: ..\..\radiant\ui\einspector\Vector3PropertyEditor.cpp:69 msgid "Apply..." msgstr "Anwenden..." #: ..\..\radiant\ui\einspector\LightTextureChooser.cpp:48 msgid "Choose texture" msgstr "Textur auswählen" #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:42 msgid "Choose model..." msgstr "Modell auswählen..." #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:46 #: ..\..\radiant\ui\einspector\SkinPropertyEditor.cpp:23 #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:110 msgid "Choose skin..." msgstr "Skin auswählen..." #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:51 msgid "Choose particle..." msgstr "Partikel auswählen..." #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:87 msgid "Warning: " msgstr "Achtung:" #: ..\..\radiant\ui\einspector\ModelPropertyEditor.cpp:88 msgid "" "Changing this entity's model to the selected value will\n" "remove all child primitives from it:\n" msgstr "" "Wenn die \"model\"-Eigenschaft dieser Entity auf den gewählten Wert\n" "festgelegt wird, werden alle ihr untergeordneten Primitive gelöscht:\n" #: ..\..\radiant\ui\einspector\SkinChooser.cpp:26 msgid "Choose Skin" msgstr "Skin auswählen" #: ..\..\radiant\ui\einspector\SkinChooser.cpp:81 msgid "Skin" msgstr "Skin" #: ..\..\radiant\ui\einspector\SkinChooser.cpp:154 msgid "Matching skins" msgstr "Passende Skins" #: ..\..\radiant\ui\einspector\SkinChooser.cpp:174 msgid "All skins" msgstr "Alle Skins" #: ..\..\radiant\ui\einspector\SoundPropertyEditor.cpp:23 msgid "Choose sound..." msgstr "Sound auswählen..." #: ..\..\radiant\ui\einspector\TexturePropertyEditor.cpp:23 msgid "Choose texture..." msgstr "Textur auswählen..." #: ..\..\radiant\ui\einspector\Vector3PropertyEditor.cpp:61 msgid "X: " msgstr "X:" #: ..\..\radiant\ui\einspector\Vector3PropertyEditor.cpp:63 msgid " Y: " msgstr "Y:" #: ..\..\radiant\ui\einspector\Vector3PropertyEditor.cpp:65 msgid " Z: " msgstr "Z:" #: ..\..\radiant\ui\entitylist\EntityList.cpp:23 xml_file_content.cpp:66 msgid "Entity List" msgstr "Entity-Liste" #: ..\..\radiant\ui\entitylist\EntityList.cpp:72 #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:172 #: ..\..\plugins\dm.conversation\ConversationDialog.cpp:86 #: xml_file_content.cpp:1 msgid "Name" msgstr "Name" #: ..\..\radiant\ui\entitylist\EntityList.cpp:86 msgid "Focus camera on selected entity" msgstr "Kamera auf ausgewählte Entity richten" #: ..\..\radiant\ui\entitylist\EntityList.cpp:87 msgid "List visible nodes only" msgstr "Nur sichtbare Elemente anzeigen" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:25 #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:29 msgid "Apply to selection" msgstr "Auf Auswahl anwenden" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:28 #: ..\..\libs\wxutil\dataview\ResourceTreeView.cpp:16 msgid "Remove from Favourites" msgstr "Aus Favoriten entfernen" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:100 msgid "Materials" msgstr "Materialien" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:105 #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:15 msgid "Models" msgstr "Modelle" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:110 msgid "EntityDefs" msgstr "EntityDefs" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:115 msgid "Sound Shaders" msgstr "Soundshader" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:134 msgid "Show full Path" msgstr "Kompletten Pfad anzeigen" #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:256 #: ..\..\radiant\ui\favourites\FavouritesBrowser.cpp:259 msgid "Favourites" msgstr "Favoriten" #: ..\..\radiant\ui\FileOverwriteConfirmationHandler.h:35 msgid "Confirm overwrite" msgstr "Überschreiben bestätigen" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:21 msgid "Filter Settings" msgstr "Filtereinstellungen" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:128 msgid "enabled" msgstr "aktiviert" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:128 msgid "disabled" msgstr "deaktiviert" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:175 msgid "State" msgstr "Zustand" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:255 msgid "NewFilter" msgstr "NeuerFilter" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:273 #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:343 msgid "Empty Filter" msgstr "Leerer Filter" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:274 msgid "No rules defined for this filter, cannot insert." msgstr "Kann diesen Filter nicht einfügen, keine Regeln definiert." #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:287 msgid "Name Conflict" msgstr "Namenskonflikt" #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:288 msgid "Cannot add, filter with same name already exists." msgstr "" "Kann diesen Filter nicht hinzufügen, ein weiterer Filter mit demselben Namen " "existiert bereits." #: ..\..\radiant\ui\filters\editor\FilterDialog.cpp:344 msgid "No rules defined for this filter. Delete it?" msgstr "" "Für diesen Filter sind keine Regeln definiert, soll der Filter gelöscht " "werden?" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:16 msgid "Edit Filter" msgstr "Filter bearbeiten" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:17 msgid "View Filter" msgstr "Filter anzeigen" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:116 #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:173 #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:326 msgid "show" msgstr "zeige" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:116 #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:174 msgid "hide" msgstr "verstecke" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:142 msgid "Index" msgstr "Index" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:156 #: ..\..\plugins\dm.objectives\ComponentsDialog.cpp:119 #: ..\..\plugins\dm.stimresponse\ClassEditor.cpp:58 #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:88 #: xml_file_content.cpp:19 msgid "Type" msgstr "Typ" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:164 msgid "Entity Key" msgstr "Entity Key" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:168 msgid "Match" msgstr "Ausdruck" #: ..\..\radiant\ui\filters\editor\FilterEditor.cpp:181 msgid "Action" msgstr "Aktion" #: ..\..\radiant\ui\filters\FiltersMainMenu.cpp:45 msgid "Activate &all Filters" msgstr "Aktiviere &alle Filter" #: ..\..\radiant\ui\filters\FiltersMainMenu.cpp:46 msgid "&Deactivate all Filters" msgstr "&Deaktiviere alle Filter" #: ..\..\radiant\ui\filters\FiltersMainMenu.cpp:49 msgid "Edit Filters..." msgstr "Filter bearbeiten..." #: ..\..\radiant\ui\findshader\FindShader.cpp:27 msgid "Find & Replace Shader" msgstr "Shader Suchen & Ersetzen" #: ..\..\radiant\ui\findshader\FindShader.cpp:28 msgid "{0:d} shader(s) replaced." msgstr "{0:d} Shader ersetzt." #: ..\..\radiant\ui\findshader\FindShader.cpp:34 msgid "" "When picking texture names, click the pick button and use {0}\n" "in the camera view to pick a material name. The picked texture will be\n" "filled in the entry box next to the activated button." msgstr "" "Um Texturen per Klick auszuwählen, aktiviere den \"Auswählen\"-Button\n" "und verwende {0} in der Kamera-Ansicht um den Materialnamen auszuwählen.\n" "Der gewählte Texturename wird dann in dem Textfeld\n" "neben dem gewählten Button eingetragen." #: ..\..\radiant\ui\findshader\FindShader.cpp:137 msgid "Picking Texures" msgstr "Texturauswahl per Mausklick" #: ..\..\radiant\ui\grid\GridUserInterface.cpp:49 msgid "Current Grid Size" msgstr "Aktuelle Rastergröße" #: ..\..\radiant\ui\layers\CreateLayerDialog.cpp:40 #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1537 msgid "Enter Name" msgstr "Namen eingeben" #: ..\..\radiant\ui\layers\CreateLayerDialog.cpp:41 msgid "Enter Layer Name" msgstr "Ebenennamen eingeben" #: ..\..\radiant\ui\layers\CreateLayerDialog.cpp:55 msgid "Cannot create layer with empty name." msgstr "Es ist nicht möglich eine Ebene ohne Namen zu erstellen." #: ..\..\radiant\ui\layers\CreateLayerDialog.cpp:71 msgid "This name already exists." msgstr "Dieser Name existiert bereits" #: ..\..\radiant\ui\layers\LayerControl.cpp:56 msgid "" "Indicates whether anything among the current selection is part of this layer." msgstr "" "Zeigt an, ob irgendetwas aus der momentanen Auswahl Teil dieser Ebene ist." #: ..\..\radiant\ui\layers\LayerControl.cpp:76 msgid "" "Click to select all in layer, hold SHIFT to deselect, hold CTRL to set as " "active layer." msgstr "" "Klicken um alles in der Ebene auszuwählen, UMSCHALT beim Klicken gedrückt " "halten um Auswahl aufzuheben, STRG halten um die Ebene als aktive Ebene " "festzulegen." #: ..\..\radiant\ui\layers\LayerControl.cpp:77 msgid "Rename this layer" msgstr "Diese Ebene umbenennen" #: ..\..\radiant\ui\layers\LayerControl.cpp:78 msgid "Delete this layer" msgstr "Diese Ebene löschen" #: ..\..\radiant\ui\layers\LayerControl.cpp:79 msgid "Toggle layer visibility" msgstr "Ebenensichtbarkeit umkehren" #: ..\..\radiant\ui\layers\LayerControl.cpp:171 msgid "Do you really want to delete this layer?" msgstr "Willst Du diese Ebene wirklich löschen?" #: ..\..\radiant\ui\layers\LayerControl.cpp:175 msgid "Confirm Layer Deletion" msgstr "Ebenenlöschung bestätigen" #: ..\..\radiant\ui\layers\LayerControl.cpp:202 msgid "Rename Layer" msgstr "Ebene umbenennen" #: ..\..\radiant\ui\layers\LayerControl.cpp:203 msgid "Enter new Layer Name" msgstr "Neuen Ebenennamen eingeben" #: ..\..\radiant\ui\layers\LayerControl.cpp:225 msgid "Could not rename layer, please try again." msgstr "Konnte Ebene nicht umbenennen, bitte nochmals versuchen." #: ..\..\radiant\ui\layers\LayerControlDialog.cpp:35 #: ..\..\radiant\ui\mapinfo\LayerInfoTab.cpp:21 xml_file_content.cpp:57 msgid "Layers" msgstr "Ebenen" #: ..\..\radiant\ui\layers\LayerControlDialog.cpp:76 msgid "Show all" msgstr "Alle anzeigen" #: ..\..\radiant\ui\layers\LayerControlDialog.cpp:77 msgid "Hide all" msgstr "Alle ausblenden" #: ..\..\radiant\ui\layers\LayerControlDialog.cpp:83 xml_file_content.cpp:2 msgid "New" msgstr "Neu" #: ..\..\radiant\ui\lightinspector\LightInspector.cpp:32 msgid "Light properties" msgstr "Lichteigenschaften" #: ..\..\radiant\ui\LongRunningOperationHandler.cpp:33 msgid "...crunching..." msgstr "...berechne..." #: ..\..\radiant\ui\LongRunningOperationHandler.cpp:45 #: ..\..\radiant\ui\MapFileProgressHandler.cpp:89 #: ..\..\radiant\ui\UserInterfaceModule.cpp:344 msgid "Processing..." msgstr "Vorgang läuft..." #: ..\..\radiant\ui\mainframe\EmbeddedLayout.cpp:74 #: ..\..\radiant\ui\mainframe\FloatingLayout.cpp:59 #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:111 xml_file_content.cpp:59 msgid "Texture Browser" msgstr "Texturbrowser" #: ..\..\radiant\ui\mainframe\EmbeddedLayout.cpp:77 #: ..\..\radiant\ui\mainframe\FloatingLayout.cpp:62 #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:114 msgid "Textures" msgstr "Texturen" #: ..\..\radiant\ui\mainframe\LayoutCommand.h:55 msgid "Window Layout" msgstr "Fensterlayout" #: ..\..\radiant\ui\mainframe\LayoutCommand.h:78 msgid "Restart required" msgstr "Neustart erforderlich" #: ..\..\radiant\ui\mainframe\LayoutCommand.h:79 msgid "Restart DarkRadiant to apply changes" msgstr "DarkRadiant neu starten um die Änderungen anzuwenden" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:85 msgid "Settings/Multi Monitor" msgstr "Einstellungen/Multimonitor" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:104 msgid "Start DarkRadiant on monitor" msgstr "Starte DarkRadiant auf Monitor" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:124 msgid "Settings/Compatibility" msgstr "Einstellungen/Kompatibilität" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:126 msgid "Disable Windows Desktop Composition" msgstr "Desktopgestaltung deaktivieren" #: ..\..\radiant\ui\mainframe\MainFrame.cpp:456 #: ..\..\radiant\ui\mainframe\MainFrame.cpp:459 msgid "Console" msgstr "Konsole" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:145 msgid "Camera Position" msgstr "Kamera-Position" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:148 msgid "Top Left" msgstr "Oben links" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:150 msgid "Top Right" msgstr "Oben rechts" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:152 msgid "Bottom Left" msgstr "Unten links" #: ..\..\radiant\ui\mainframe\SplitPaneLayout.cpp:154 msgid "Bottom Right" msgstr "Unten rechts" #: ..\..\radiant\ui\MapFileProgressHandler.cpp:80 msgid "Writing map" msgstr "Schreibe Map" #: ..\..\radiant\ui\MapFileProgressHandler.cpp:80 msgid "Loading map" msgstr "Lade Map" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:17 msgid "Entities" msgstr "Entities" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:48 msgid "Entity Class" msgstr "Entityklasse" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:51 #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:67 msgid "Count" msgstr "Anzahl" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:68 msgid "Brushes:" msgstr "Brushes:" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:69 msgid "Patches:" msgstr "Patches:" #: ..\..\radiant\ui\mapinfo\EntityInfoTab.cpp:70 msgid "Entities:" msgstr "Entities:" #: ..\..\radiant\ui\mapinfo\LayerInfoTab.cpp:52 msgid "Layer" msgstr "Ebene" #: ..\..\radiant\ui\mapinfo\LayerInfoTab.cpp:55 msgid "Node Count" msgstr "Knotenanzahl" #: ..\..\radiant\ui\mapinfo\MapInfoDialog.cpp:23 msgid "Map Info" msgstr "Map-Information" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:17 msgid "Select entities using this model" msgstr "Alle Entities mit diesem Model auswählen" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:18 msgid "Deselect entities using this model" msgstr "Alle Entities mit diesem Model deselektieren" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:61 msgid "Model" msgstr "Modell" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:64 msgid "Polys" msgstr "Polygone" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:70 msgid "Skins" msgstr "Skins" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:91 msgid "Models used:" msgstr "Benutzte Modelle:" #: ..\..\radiant\ui\mapinfo\ModelInfoTab.cpp:92 msgid "Named Skins used:" msgstr "Benutzte Skins:" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:18 msgid "Shaders" msgstr "Shader" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:20 #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:35 msgid "Select elements using this shader" msgstr "Alle Elemente mit diesem Shader auswählen" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:21 #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:36 msgid "Deselect elements using this shader" msgstr "Alle Elemente mit diesem Shader deselektieren" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:63 msgid "Faces" msgstr "Faces" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:66 msgid "Patches" msgstr "Patches" #: ..\..\radiant\ui\mapinfo\ShaderInfoTab.cpp:84 msgid "Shaders used:" msgstr "Benutzte Shader:" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:18 msgid "Choose Map File" msgstr "Map-Datei auswählen" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:43 msgid "Open" msgstr "Öffnen" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:44 xml_file_content.cpp:3 msgid "Refresh" msgstr "Neu laden" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:144 #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:139 msgid "Browse mod resources" msgstr "Mod-Ressourcen durchsuchen" #: ..\..\radiant\ui\mapselector\MapSelector.cpp:147 msgid "Browse custom PAK:" msgstr "PAK-File durchsuchen:" #: ..\..\radiant\ui\mediabrowser\MediaBrowser.cpp:98 #: ..\..\radiant\ui\mediabrowser\MediaBrowser.cpp:101 msgid "Media" msgstr "Media" #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:24 msgid "Other Materials" msgstr "Andere Shader" #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:26 msgid "Load in Textures view" msgstr "In Texturbrowser laden" #: ..\..\radiant\ui\mediabrowser\MediaBrowserTreeView.cpp:32 #: ..\..\radiant\uimanager\SoundChooser.cpp:34 msgid "Show Shader Definition" msgstr "Zeige Shaderdefinition" #: ..\..\radiant\ui\mediabrowser\TextureDirectoryLoader.h:35 msgid "Loading textures" msgstr "Lade Texturen" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:34 msgid "Model Export" msgstr "Model-Export" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:178 msgid "Empty Filename" msgstr "Leerer Dateiname" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:178 msgid "No filename specified, cannot run exporter" msgstr "Kein Zieldateipfad angegeben, exportieren nicht möglich." #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:184 msgid "Confirm Replacement" msgstr "Ersetzen bestätigen" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:185 msgid "" "The file {0} already exists.\n" "Replace this file?" msgstr "" "Die Datei {0} existiert bereits.\n" "Soll sie überschrieben werden?" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:213 msgid "Export failed" msgstr "Export fehlgeschlagen" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:305 msgid "Empty Selection" msgstr "Keine Auswahl" #: ..\..\radiant\ui\modelexport\ExportAsModelDialog.cpp:305 msgid "Nothing selected, cannot run exporter" msgstr "Nichts ausgewählt, exportieren nicht möglich" #: ..\..\radiant\ui\modelexport\ExportCollisionModelDialog.cpp:18 msgid "" "Can't export, create and select a func_* entity\t\t\t\tcontaining the " "collision hull primitives." msgstr "" "Export nicht möglich, es muss eine func_* Entity ausgewählt sein\t\t\t" "\twelche die Hüllen-Primitive enthält" #: ..\..\radiant\ui\modelselector\MaterialsList.cpp:45 msgid "Material" msgstr "Material" #: ..\..\radiant\ui\modelselector\MaterialsList.cpp:47 xml_file_content.cpp:8 msgid "Visible" msgstr "Sichtbar" #: ..\..\radiant\ui\modelselector\ModelPopulator.h:89 msgid "Building tree..." msgstr "Baue Hierarchie auf..." #: ..\..\radiant\ui\modelselector\ModelPopulator.h:95 msgid "Adding Model Definitions..." msgstr "Füge Model-Definitionen hinzu..." #: ..\..\radiant\ui\modelselector\ModelPopulator.h:98 msgid "modelDefs" msgstr "modelDefs" #: ..\..\radiant\ui\modelselector\ModelPopulator.h:166 #: ..\..\radiant\ui\modelselector\ModelPopulator.h:173 msgid "{0:d} models loaded" msgstr "{0:d} Modelle geladen" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:38 msgid "Choose Model" msgstr "Modell auswählen" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:245 msgid "Model name" msgstr "Modellname" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:246 msgid "Skin name" msgstr "Skinname" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:247 msgid "Total vertices" msgstr "Gesamte Vertices" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:248 msgid "Total polys" msgstr "Gesamte Polygone" #: ..\..\radiant\ui\modelselector\ModelSelector.cpp:249 msgid "Material surfaces" msgstr "Anzahl Oberflächen" #: ..\..\radiant\ui\modelselector\ModelTreeView.cpp:14 msgid "Model Path" msgstr "Modell-Pfad" #: ..\..\radiant\ui\mousetool\BindToolDialog.cpp:16 msgid "Select new Binding: {0}" msgstr "Neue Tastenbelegung wählen: {0}" #: ..\..\radiant\ui\mousetool\BindToolDialog.cpp:44 msgid "" "Please select a new button/modifier combination\n" "by clicking on the area below." msgstr "" "Bitte eine neue Maus-/Tastenkombination\n" "durch Klick auf die Fläche unten wählen." #: ..\..\radiant\ui\mousetool\BindToolDialog.cpp:51 msgid "Click here to assign" msgstr "" "Hier klicken um neue\n" "Belegung zuzuweisen" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:23 msgid "Edit Mouse Bindings" msgstr "Maustastenbelegungen ändern" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:50 msgid "Reset all mappings to default" msgstr "Alle Belegungen zurücksetzen" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:72 msgid "Double click row to edit a binding" msgstr "Doppelklicken um eine Belegung zu ändern" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:122 msgid "Tool" msgstr "Werkzeug" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:125 msgid "Modifier" msgstr "Hilfstasten" #: ..\..\radiant\ui\mousetool\ToolMappingDialog.cpp:128 msgid "Button" msgstr "Schaltfläche" #: ..\..\radiant\ui\mru\MRUMenu.h:17 msgid "Recently used Maps" msgstr "Zuletzt geöffnete Maps" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:53 msgid "Create entity..." msgstr "Neue Entity..." #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:55 msgid "Create player start here" msgstr "Erzeuge Spielerstartpunkt hier" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:57 msgid "Move player start here" msgstr "Verschiebe Spielerstartpunkt hier" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:59 msgid "Create model..." msgstr "Neues Modell..." #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:61 msgid "Surround with monsterclip" msgstr "Mit Monsterclip einhüllen" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:63 msgid "Create light..." msgstr "Neues Licht..." #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:65 msgid "Insert prefab..." msgstr "Prefab einfügen..." #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:67 msgid "Create speaker..." msgstr "Neuer Speaker..." #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:69 msgid "Convert to func_static" msgstr "In func_static umwandeln" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:71 msgid "Reparent primitives" msgstr "Primitive neu zuordnen" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:72 msgid "Revert to worldspawn" msgstr "Zu Worldspawn umwandeln" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:73 msgid "Revert part to worldspawn" msgstr "Teil zu Worldspawn umwandeln" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:76 msgid "Merge Entities" msgstr "Entities zusammenführen" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:77 xml_file_content.cpp:165 msgid "Make Visportal" msgstr "Erzeuge Visportal" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:328 msgid "Unable to create light: {0}" msgstr "Konnte Licht nicht erstellen: {0}" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:396 msgid "Unable to create speaker: {0}" msgstr "Konnte Speaker nicht erstellen: {0}" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:440 msgid "Unable to create model: {0}" msgstr "Konnte Model nicht erstellen: {0}" #: ..\..\radiant\ui\ortho\OrthoContextMenu.cpp:446 msgid "Nothing must be selected for model creation" msgstr "Für diese Operation darf nichts ausgewählt sein." #: ..\..\radiant\ui\overlay\OverlayDialog.cpp:25 msgid "Background image" msgstr "Hintergrundbild" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:43 msgid "Particle Editor" msgstr "Partikeleditor" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:158 #: ..\..\radiant\ui\particles\ParticlesChooser.cpp:57 msgid "Particle" msgstr "Partikel" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:207 msgid "Stage" msgstr "Stufe" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1033 msgid "Note: changes will be written to the file {0}" msgstr "Hinweis: alle Änderungen werden in den File {0} geschrieben" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1340 msgid "Save Changes" msgstr "Änderungen Speichern" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1341 msgid "" "Do you want to save the changes\n" "you made to the particle {0}?" msgstr "Änderungen am Partikel {0} speichern?" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1374 msgid "" "Error saving particle definition:\n" "{0}" msgstr "" "Fehler beim Speichern der Partikeldefinition:\n" "{0}" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1504 msgid "Select .prt file" msgstr "Eine .prt-Datei auswählen" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1538 msgid "Enter Particle Name" msgstr "Partikelnamen eingeben" #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1552 msgid "Cannot create particle with an empty name." msgstr "Es ist nicht möglich einen Partikel ohne Namen zu erstellen." #: ..\..\radiant\ui\particles\ParticleEditor.cpp:1567 msgid "This name is already in use." msgstr "Dieser Name ist bereits in Verwendung." #: ..\..\radiant\ui\particles\ParticlesChooser.cpp:22 msgid "Choose Particle" msgstr "Partikel auswählen" #: ..\..\radiant\ui\patch\BulgePatchDialog.cpp:11 msgid "Bulge Patch" msgstr "Patch auswölben" #: ..\..\radiant\ui\patch\BulgePatchDialog.cpp:12 msgid "Noise:" msgstr "Amplitude:" #: ..\..\radiant\ui\patch\BulgePatchDialog.cpp:49 msgid "Cannot bulge patch. No patches selected." msgstr "Kann Patch nicht auswölben: keine Patches ausgewählt." #: ..\..\radiant\ui\patch\CapDialog.cpp:21 msgid "Create Cap Patch" msgstr "Patch-Cap erzeugen" #: ..\..\radiant\ui\patch\CapDialog.cpp:27 msgid "Bevel" msgstr "Bogen" #: ..\..\radiant\ui\patch\CapDialog.cpp:28 msgid "End Cap" msgstr "Doppelbogen" #: ..\..\radiant\ui\patch\CapDialog.cpp:29 msgid "Inverted Bevel" msgstr "Invertierter Bogen" #: ..\..\radiant\ui\patch\CapDialog.cpp:30 msgid "Inverted Endcap" msgstr "Invertierter Doppelbogen" #: ..\..\radiant\ui\patch\CapDialog.cpp:31 msgid "Cylinder" msgstr "Zylinder" #: ..\..\radiant\ui\patch\CapDialog.cpp:102 msgid "Cannot create caps, no patches selected." msgstr "Kann keine Caps erzeugen, da keine Patches ausgewählt sind." #: ..\..\radiant\ui\patch\PatchCreateDialog.cpp:13 msgid "Create Flat Patch Mesh" msgstr "Neuer flacher Patch" #: ..\..\radiant\ui\patch\PatchInspector.cpp:28 msgid "Patch Inspector" msgstr "Patch Inspector" #: ..\..\radiant\ui\patch\PatchInspector.cpp:29 #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:55 #: ..\..\radiant\ui\transform\TransformDialog.cpp:38 msgid "Step:" msgstr "Schritt:" #: ..\..\radiant\ui\patch\PatchThickenDialog.cpp:16 msgid "Patch Thicken" msgstr "Patch-Extrusion" #: ..\..\radiant\ui\patch\PatchThickenDialog.cpp:67 msgid "Cannot thicken patch. Nothing selected." msgstr "Nichts ausgewählt: kann Patch nicht extrudieren." #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:41 msgid "Choose Prefab" msgstr "Prefab wählen" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:99 msgid "Rescan Prefab Folders" msgstr "Prefab-Ordner neu durchsuchen" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:104 msgid "Create Group out of Prefab parts" msgstr "Eine Gruppe aus diesem Prefab erstellen" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:142 msgid "Select recently used path:" msgstr "Zuletzt geöffneten Pfad auswählen:" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:144 msgid "Browse custom path:" msgstr "Pfad durchsuchen:" #: ..\..\radiant\ui\prefabselector\PrefabSelector.cpp:469 msgid "" msgstr "" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:20 msgid "Game Setup" msgstr "Spiel-Einstellungen" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:32 msgid "Game Type:" msgstr "Spiel-Typ:" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:135 #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:151 msgid "Invalid Settings" msgstr "Ungültige Einstellungen" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:136 msgid "Please select a game type" msgstr "Bitte einen Spieltyp auswählen" #: ..\..\radiant\ui\prefdialog\GameSetupDialog.cpp:149 msgid "" "Warning:\n" "{0}\n" "Do you want to correct these settings?" msgstr "" "Warnung:\n" "{0}\n" "Möchtest Du diese Einstellungen korrigieren?" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:38 msgid "Engine Path" msgstr "Pfad zur Engine" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:43 msgid "Mod (fs_game)" msgstr "Mod (fs_game)" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:48 msgid "Mod Base (fs_game_base)" msgstr "Mod Base (fs_game_base)" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:71 #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:202 msgid "Engine path \"{0}\" does not exist.\n" msgstr "Engine-Pfad \"{0}\" existiert nicht.\n" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:78 msgid "The mod base path \"{0}\" does not exist.\n" msgstr "Der Mod-Base-Pfad \"{0}\" existiert nicht.\n" #: ..\..\radiant\ui\prefdialog\GameSetupPageIdTech.cpp:85 msgid "The mod path \"{0}\" does not exist.\n" msgstr "Der Mod-Pfad \"{0}\" existiert nicht.\n" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:81 msgid "DarkMod Path" msgstr "DarkMod Verzeichnis" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:89 msgid "This is the path where your TheDarkMod.exe is located." msgstr "An dieser stelle sollte sich TheDarkMod.exe befinden." #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:93 msgid "" "The FM folder name of the mission you want to work on, e.g. 'saintlucia'." msgstr "Der Ordnername der zu editierenden Mission, z.B. 'saintlucia'." #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:95 msgid "Mission" msgstr "Mission" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:142 msgid "" "The mission path {0} doesn't exist.\n" "Do you intend to start a new mission and create that folder?" msgstr "" "Der Missions-Ordner {0} existiert nicht.\n" "Willst Du eine neue Mission anfangen und den Ordner erzeugen?" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:145 msgid "Start a new Mission named {0}?" msgstr "Neue Mission namens {0} anlegen?" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:154 msgid "Could not create directory" msgstr "Konnte Verzeichnis nicht anlegen" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:154 msgid "Failed to create the folder {0}" msgstr "Konnte das Verzeichnis {0} nicht anlegen" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:242 msgid "The engine executable(s) could not be found in the specified folder.\n" msgstr "" "Die Dark Mod EXE-Datei(en) konnte(n) in dem angegebenen Ordner nicht " "gefunden werden.\n" #: ..\..\radiant\ui\prefdialog\GameSetupPageTdm.cpp:250 msgid "The mission path \"{0}\" does not exist.\n" msgstr "Der Missions-Pfad \"{0}\" existiert nicht.\n" #: ..\..\radiant\ui\prefdialog\PrefDialog.cpp:22 msgid "DarkRadiant Preferences" msgstr "DarkRadiant Einstellungen" #: ..\..\radiant\ui\prefdialog\PrefDialog.cpp:116 msgid "Settings/" msgstr "Einstellungen/" #: ..\..\radiant\ui\prefdialog\PrefDialog.cpp:181 msgid "Game" msgstr "Spiel" #: ..\..\radiant\ui\script\ScriptMenu.cpp:59 msgid "No scripts available" msgstr "Keine Skripts verfügbar" #: ..\..\radiant\ui\script\ScriptUserInterfaceModule.cpp:54 msgid "Reload Scripts" msgstr "Skripts neu laden" #: ..\..\radiant\ui\script\ScriptUserInterfaceModule.cpp:88 #: ..\..\radiant\ui\script\ScriptUserInterfaceModule.cpp:91 msgid "Script" msgstr "Skript" #: ..\..\radiant\ui\script\ScriptWindow.cpp:37 msgid "Python Script Input" msgstr "Python Skripteingabe" #: ..\..\radiant\ui\script\ScriptWindow.cpp:39 msgid "Run Script" msgstr "Starte Skript" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:24 msgid "" "Enter a name and hit ENTER to save a set.\n" "\n" "Select an item from the dropdown list to restore the selection.\n" "\n" "Hold SHIFT when opening the dropdown list and selecting the item to de-" "select the set." msgstr "" "Namen eingaben und mit der EINGABETASTE bestätigen um einen neuen Satz " "anzulegen.\n" "\n" "Ein Element in der Liste auswählen um die entsprechende Auswahl " "wiederherzustellen.\n" "\n" "UMSCHALTTASTE gedrückt halten um die Auswahl der entsprechenden Elemente " "aufzuheben." #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:43 msgid "Selection Set: " msgstr "Auswahlsatz: " #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:59 msgid "Clear Selection Sets" msgstr "Auswahlsätze löschen" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:189 msgid "Cannot create selection set" msgstr "Kann Auswahlsatz nicht erstellen" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:190 msgid "" "Cannot create a selection set, there is nothing selected in the current " "scene." msgstr "Kann Auswahlsatz nicht anlegen, keine Auswahl vorhanden." #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:259 msgid "Delete all selection sets?" msgstr "Alle Auswahlsätze löschen?" #: ..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp:260 msgid "" "This will delete all set definitions. The actual map objects will not be " "affected by this step.\n" "\n" "Continue with that operation?" msgstr "" "Dies entfernt alle vorhandenen Auswahlsätze. Die Objekte in der aktuellen " "Map werden dadurch nicht beeinflusst.\n" "\n" "Fortfahren?" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:27 msgid "The name of the shader in the clipboard" msgstr "Der Name des Shaders in der Zwischenablage" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:46 msgid "Face" msgstr "Face" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:48 msgid "Patch" msgstr "Patch" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:63 msgid "ShaderClipboard: {0} ({1})" msgstr "Shader-Zwischenablage: {0} ({1})" #: ..\..\radiant\ui\shaderclipboard\ShaderClipboardStatus.h:68 msgid "ShaderClipboard is empty." msgstr "Shader-Zwischenablage ist leer." #: ..\..\radiant\ui\statusbar\EditingStopwatchStatus.cpp:32 msgid "Time spent on this map" msgstr "Mit dieser Map verbrachte Zeit" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:38 msgid "Surface Inspector" msgstr "Surface Inspector" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:39 msgid "Texture Properties" msgstr "Textureigenschaften" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:40 msgid "Texture Operations" msgstr "Texturoperationen" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:48 msgid "Horiz. Shift:" msgstr "Horiz. Verschiebung:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:49 msgid "Vert. Shift:" msgstr "Vert. Verschiebung:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:50 msgid "Horiz. Scale:" msgstr "Horiz. Skalierung:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:51 msgid "Vert. Scale:" msgstr "Vert. Skalierung:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:52 msgid "Rotation:" msgstr "Rotation:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:53 #: xml_file_content.cpp:15 msgid "Shader:" msgstr "Shader:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:57 msgid "Fit Texture:" msgstr "Texture einpassen:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:58 msgid "Fit" msgstr "Einpassen" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:60 msgid "Align Texture:" msgstr "Textur ausrichten:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:61 msgid "Top" msgstr "Oben" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:62 msgid "Bottom" msgstr "Unten" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:63 #: xml_file_content.cpp:16 msgid "Right" msgstr "Rechts" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:64 #: xml_file_content.cpp:15 msgid "Left" msgstr "Links" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:66 msgid "Flip Texture:" msgstr "Textur kippen:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:67 msgid "Flip Horizontal" msgstr "Horizonal kippen" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:68 msgid "Flip Vertical" msgstr "Vertikal kippen" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:70 msgid "Modify Texture:" msgstr "Texturierung bearbeiten:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:71 msgid "Natural" msgstr "Natürliche Skala" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:72 msgid "Normalise" msgstr "Normalisieren" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:74 msgid "Default Scale:" msgstr "Standardskalierung:" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:75 #: xml_file_content.cpp:8 msgid "Texture Lock" msgstr "Textur-Lock" #: ..\..\radiant\ui\surfaceinspector\SurfaceInspector.cpp:614 msgid "Both fit values must be > 0." msgstr "Beide Fit-Werte müssen größer als 0 sein." #: ..\..\radiant\ui\texturebrowser\TextureBrowser.cpp:44 msgid "Seek in Media Browser" msgstr "In Media Browser zeigen" #: ..\..\radiant\ui\texturebrowser\TextureBrowser.cpp:243 #: ..\..\radiant\ui\texturebrowser\TextureBrowser.cpp:814 msgid "No shader" msgstr "Kein Shader" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:63 msgid "Settings/Texture Browser" msgstr "Einstellungen/Texturbrowser" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:65 msgid "Uniform texture thumbnail size (pixels)" msgstr "Einheitliche Größe der Texturvorschaubilder (in Pixel)" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:66 msgid "Texture scrollbar" msgstr "Texturbrowser-Scrollbalken" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:67 msgid "Mousewheel Increment" msgstr "Bildlaufgeschwindgkeit beim Scrollen" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:68 msgid "Max shadername length" msgstr "Maximal dargestellte Länge für Shadernamen" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:70 msgid "Show Texture Filter" msgstr "Zeige Textur-Filter" #: ..\..\radiant\ui\texturebrowser\TextureBrowserManager.cpp:71 msgid "Show \"Other Materials\"" msgstr "Zeige \"Andere Shader\"" #: ..\..\radiant\ui\transform\TransformDialog.cpp:26 msgid "Arbitrary Transformation" msgstr "Freie Transformation" #: ..\..\radiant\ui\transform\TransformDialog.cpp:27 msgid "Rotation" msgstr "Rotation" #: ..\..\radiant\ui\transform\TransformDialog.cpp:28 msgid "Scale" msgstr "Skalierung" #: ..\..\radiant\ui\transform\TransformDialog.cpp:30 msgid "X-Axis Rotate:" msgstr "Rotation um X-Achse" #: ..\..\radiant\ui\transform\TransformDialog.cpp:31 msgid "Y-Axis Rotate:" msgstr "Rotation um Y-Achse" #: ..\..\radiant\ui\transform\TransformDialog.cpp:32 msgid "Z-Axis Rotate:" msgstr "Rotation um Z-Achse" #: ..\..\radiant\ui\transform\TransformDialog.cpp:34 msgid "X-Axis Scale:" msgstr "Skalierung X-Achse" #: ..\..\radiant\ui\transform\TransformDialog.cpp:35 msgid "Y-Axis Scale:" msgstr "Skalierung Y-Achse" #: ..\..\radiant\ui\transform\TransformDialog.cpp:36 msgid "Z-Axis Scale:" msgstr "Skalierung Z-Achse" #: ..\..\radiant\ui\transform\TransformDialog.cpp:311 msgid "Cannot scale by zero or near-zero values" msgstr "Kann nicht mit 0 (bzw. beinahe 0) skalieren." #: ..\..\radiant\ui\UserInterfaceModule.cpp:72 msgid "Create Layer..." msgstr "Neuer Layer..." #: ..\..\radiant\ui\UserInterfaceModule.cpp:74 msgid "Add to Layer..." msgstr "Zu Layer hinzufügen..." #: ..\..\radiant\ui\UserInterfaceModule.cpp:75 msgid "Move to Layer..." msgstr "Nach Layer verschieben..." #: ..\..\radiant\ui\UserInterfaceModule.cpp:76 msgid "Remove from Layer..." msgstr "Von Layer entfernen..." #: ..\..\radiant\ui\UserInterfaceModule.cpp:78 msgid "Select by Filter..." msgstr "Nach Filter auswählen..." #: ..\..\radiant\ui\UserInterfaceModule.cpp:79 msgid "Deselect by Filter..." msgstr "Nach Filter abwählen..." #: ..\..\radiant\ui\UserInterfaceModule.cpp:174 xml_file_content.cpp:34 msgid "Group Selection" msgstr "Gruppe erstellen" #: ..\..\radiant\ui\UserInterfaceModule.cpp:180 xml_file_content.cpp:35 msgid "Ungroup Selection" msgstr "Gruppierung auflösen" #: ..\..\radiant\ui\UserInterfaceModule.cpp:268 msgid "Notification" msgstr "Hinweis" #: ..\..\radiant\ui\UserInterfaceModule.cpp:273 msgid "Warning" msgstr "Warnung" #: ..\..\radiant\ui\UserInterfaceModule.cpp:278 msgid "Error" msgstr "Fehler" #: ..\..\radiant\ui\UserInterfaceModule.cpp:344 msgid "Loading Shaders" msgstr "Lade Shader" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:16 #: xml_file_content.cpp:147 msgid "MD5 Animation Viewer" msgstr "MD5-Animationsvorschau" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:83 #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:103 msgid "Model Definition" msgstr "Model-Definition" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:86 msgid "Available Animations" msgstr "Verfügbare Animationen" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:125 msgid "Animation" msgstr "Animation" #: ..\..\radiant\uimanager\animationpreview\MD5AnimationViewer.cpp:127 #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:104 #: ..\..\libs\wxutil\fsview\FileSystemView.cpp:50 msgid "File" msgstr "Datei" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:27 msgid "Edit Colour Schemes" msgstr "Farbschemas bearbeiten" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:65 #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:53 #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:434 #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:449 #: ..\..\plugins\dm.stimresponse\StimEditor.cpp:439 xml_file_content.cpp:189 #: xml_file_content.cpp:3 xml_file_content.cpp:9 xml_file_content.cpp:16 #: xml_file_content.cpp:2 xml_file_content.cpp:5 xml_file_content.cpp:6 #: xml_file_content.cpp:18 msgid "Delete" msgstr "Löschen" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:66 #: xml_file_content.cpp:4 msgid "Copy" msgstr "Kopieren" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:84 msgid "Override light volume colour" msgstr "Erzwinge einheitliche Lichterfarben" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:87 msgid "" "Render all light volumes in a single colour set by the colour scheme, rather " "than a per-entity colour controlled by the _color spawnarg" msgstr "" "Alle Lichter werden mit der Farbe aus dem aktiven Farbschema gerendert, " "nicht mit der Farbe die durch das _color Spawnarg festgelegt wird." #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:115 msgid "Colour scheme" msgstr "Farbschema" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:295 msgid "Copy Colour Scheme" msgstr "Farbschema kopieren" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:295 msgid "Enter a name for the new scheme:" msgstr "Namen für das neue Schema eingeben:" #: ..\..\radiant\uimanager\colourscheme\ColourSchemeEditor.cpp:305 msgid "A Scheme with that name already exists." msgstr "Es existiert bereits ein Schema mit diesem Namen." #: ..\..\radiant\uimanager\SoundChooser.cpp:144 msgid "Choose sound" msgstr "Sound auswählen" #: ..\..\radiant\uimanager\SoundChooser.cpp:151 xml_file_content.cpp:22 msgid "Reload Sounds" msgstr "Sounds neu laden" #: ..\..\radiant\uimanager\SoundChooser.cpp:182 msgid "Soundshader" msgstr "Soundshader" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:40 msgid "Sound Files" msgstr "Sounddateien" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:42 msgid "Duration" msgstr "Dauer" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:57 msgid "Sound Shader " msgstr "Soundshader" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:59 msgid " defined in " msgstr " definiert in " #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:91 msgid "Play" msgstr "Abspielen" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:94 msgid "Play and loop" msgstr "Loopen" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:97 msgid "Stop" msgstr "Stop" #: ..\..\radiant\uimanager\SoundShaderPreview.cpp:259 msgid "Error: File not found." msgstr "Fehler: Datei nicht gefunden." #: ..\..\radiant\uimanager\UIManager.cpp:122 msgid "Describes available Mouse Commands" msgstr "Listet verfügbare Mauskommandos auf" #: ..\..\radiant\uimanager\UIManager.cpp:130 msgid "" "Number of brushes/patches/entities in this map\n" "(Number of selected items shown in parentheses)" msgstr "" "Anzahl der Brushes/Patches/Entities in der Map\n" "(Anzahl der selektierten Elemente in Klammern)" #: ..\..\radiant\uimanager\UIManager.cpp:168 msgid "Brushes: {0:d} ({1:d}) Patches: {2:d} ({3:d}) Entities: {4:d} ({5:d})" msgstr "Brushes: {0:d} ({1:d}) Patches: {2:d} ({3:d}) Entities: {4:d} ({5:d})" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:186 msgid "Settings/Orthoview" msgstr "Einstellungen/2D-Ansicht" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:188 msgid "View chases Mouse Cursor during Drags" msgstr "Ansicht folgt Mauszeiger bei Verschiebe-Operationen" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:189 msgid "Maximum Chase Mouse Speed" msgstr "Maximale Folgegeschwindigkeit" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:190 msgid "Update Views on Camera Movement" msgstr "Aktualisiere 2D-Ansichten bei Kamerabewegungen" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:191 msgid "Show Crosshairs" msgstr "Zeige Fadenkreuz" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:192 msgid "Show Grid" msgstr "Zeige Raster" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:193 msgid "Show Size Info" msgstr "Zeige Größeninformation" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:194 msgid "Show Entity Angle Arrow" msgstr "Zeige Richtungspfeile der Entities" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:195 msgid "Show Entity Names" msgstr "Zeige Namen der Entities" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:196 xml_file_content.cpp:87 msgid "Show Blocks" msgstr "Zeige Blöcke" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:197 msgid "Show Coordinates" msgstr "Zeige Koordinaten" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:198 xml_file_content.cpp:90 msgid "Show Axes" msgstr "Zeige Achsen" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:199 xml_file_content.cpp:89 msgid "Show Window Outline" msgstr "Zeige Fensterumrandung" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:200 xml_file_content.cpp:91 msgid "Show Workzone" msgstr "Zeige Arbeitsbereich" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:201 msgid "Translate Manipulator always constrained to Axis" msgstr "Translationen sind immer achsengebunden" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:202 msgid "Higher Selection Priority for Entities" msgstr "Höhere Auswahlpriorität für Entities" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:203 msgid "Font Style" msgstr "Schriftstil" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:204 msgid "Font Size" msgstr "Schriftgröße" #: ..\..\radiant\xyview\GlobalXYWnd.cpp:708 msgid "Shows the mouse position in the orthoview" msgstr "Zeigt die aktuelle Position des Mauszeigers in der Ortho-Ansicht" #: ..\..\radiant\xyview\tools\BrushCreatorTool.cpp:24 msgid "Drag-create Brush" msgstr "Erzeuge neue Brush" #: ..\..\radiant\xyview\tools\CameraAngleTool.h:28 msgid "Point Camera" msgstr "Kamera ausrichten" #: ..\..\radiant\xyview\tools\CameraMoveTool.h:27 msgid "Drag Camera" msgstr "Kamera verschieben" #: ..\..\radiant\xyview\tools\ClipperTool.cpp:25 xml_file_content.cpp:159 #: xml_file_content.cpp:13 xml_file_content.cpp:17 msgid "Clipper" msgstr "Clipper" #: ..\..\radiant\xyview\tools\MeasurementTool.cpp:28 msgid "Measure" msgstr "Messen" #: ..\..\radiant\xyview\tools\MoveViewTool.h:27 msgid "Drag View" msgstr "Ansicht verschieben" #: ..\..\radiant\xyview\tools\ZoomTool.h:30 msgid "Zoom View" msgstr "Ansicht zoomen" #: ..\..\radiant\xyview\XYWnd.cpp:247 msgid "XY Top" msgstr "XY Oben" #: ..\..\radiant\xyview\XYWnd.cpp:250 msgid "XZ Front" msgstr "XZ Vorne" #: ..\..\radiant\xyview\XYWnd.cpp:253 msgid "YZ Side" msgstr "YZ Seite" #: ..\..\radiant\xyview\XYWnd.cpp:526 msgid "x: {0:6.1f} y: {1:6.1f} z: {2:6.1f}" msgstr "x: {0:6.1f} y: {1:6.1f} z: {2:6.1f}" #: ..\..\plugins\dm.conversation\CommandArgumentItem.cpp:118 #: ..\..\plugins\dm.conversation\CommandEditor.cpp:40 msgid "Actor {0:d} ({1})" msgstr "Akteur {0:d} ({1})" #: ..\..\plugins\dm.conversation\CommandArgumentItem.cpp:158 msgid "Browse Sound Shaders" msgstr "Sound Shader durchsuchen" #: ..\..\plugins\dm.conversation\CommandArgumentItem.cpp:215 msgid "Browse Animations" msgstr "Animationen durchsuchen" #: ..\..\plugins\dm.conversation\CommandEditor.cpp:24 msgid "Edit Command" msgstr "Befehl bearbeiten" #: ..\..\plugins\dm.conversation\ConversationDialog.cpp:30 msgid "Conversation Editor" msgstr "Konversations-Editor" #: ..\..\plugins\dm.conversation\ConversationDialog.cpp:298 msgid "Unable to create conversation Entity: class '{0}' not found." msgstr "Kann Konversationsentity nicht anlegen, Klasse '{0}' nicht gefunden." #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:27 msgid "Edit Conversation" msgstr "Konversation bearbeiten" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:92 msgid "Actor (click to edit)" msgstr "Akteur (zum Bearbeiten klicken)" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:121 #: xml_file_content.cpp:1 msgid "Actor" msgstr "Akteur" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:125 msgid "Wait" msgstr "Warten" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:232 msgid "Actor {0:d}" msgstr "Akteur {0:d}" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:234 #: ..\..\plugins\dm.stimresponse\ResponseEffect.cpp:206 msgid "yes" msgstr "Ja" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:234 #: ..\..\plugins\dm.stimresponse\ResponseEffect.cpp:206 msgid "no" msgstr "Nein" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:403 msgid "New Actor" msgstr "Neuer Akteur" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:455 msgid "The actor {0} cannot be found in the current map." msgstr "Der Akteur {0} wurde in der aktuellen Map nicht gefunden." #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:462 msgid "Actors missing" msgstr "Akteure fehlen" #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:466 msgid "All actors are correctly referring to entities in the map." msgstr "Alle Akteure beziehen sich auf gültige Entities der aktuellen Map." #: ..\..\plugins\dm.conversation\ConversationEditor.cpp:467 msgid "Actors OK" msgstr "Akteure sind OK" #: ..\..\plugins\dm.conversation\ConversationEntity.cpp:70 msgid "New Conversation" msgstr "Neue Konversation" #: ..\..\plugins\dm.conversation\ConversationEntityFinder.h:78 #: ..\..\plugins\dm.objectives\ObjectiveEntityFinder.cpp:36 msgid "{0} at [ {1} ]" msgstr "{0} bei [ {1} ]" #: ..\..\plugins\dm.conversation\plugin.cpp:48 msgid "Conversations..." msgstr "Konversationen..." #: ..\..\plugins\dm.difficulty\DifficultyDialog.cpp:28 msgid "Difficulty Editor" msgstr "Schwierigkeitsstufen-Editor" #: ..\..\plugins\dm.difficulty\DifficultyDialog.cpp:118 msgid "Difficulty name" msgstr "Schwierigkeitsgradname" #: ..\..\plugins\dm.difficulty\DifficultyDialog.cpp:118 msgid "New name:" msgstr "Neuer Name:" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:55 xml_file_content.cpp:4 msgid "Setting" msgstr "Einstellung" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:74 msgid "Assign" msgstr "Zuweisen" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:75 #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:51 xml_file_content.cpp:2 #: xml_file_content.cpp:5 xml_file_content.cpp:8 xml_file_content.cpp:12 #: xml_file_content.cpp:1 xml_file_content.cpp:3 xml_file_content.cpp:17 #: xml_file_content.cpp:6 xml_file_content.cpp:31 msgid "Add" msgstr "Addieren" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:76 msgid "Multiply" msgstr "Multiplizieren" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:77 msgid "Ignore" msgstr "Ignorieren" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:145 msgid "This default setting is overridden, cannot edit." msgstr "" "Diese Standardeinstellung wurde außer Kraft gesetzt, Editieren nicht möglich." #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:216 msgid "Classname cannot be left empty" msgstr "Klassenname darf nicht leer sein" #: ..\..\plugins\dm.difficulty\DifficultyEditor.cpp:225 msgid "Spawnarg name and value cannot be left empty" msgstr "Weder Spawnarg-Name noch -Wert dürfen leer bleiben" #: ..\..\plugins\dm.difficulty\DifficultySettings.cpp:168 msgid " (overridden)" msgstr "(außer Kraft)" #: ..\..\plugins\dm.difficulty\plugin.cpp:56 msgid "Difficulty..." msgstr "Schwierigkeitsstufe..." #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:60 msgid "Can operate Doors" msgstr "Kann Türen bedienen" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:61 msgid "Can light Torches" msgstr "Kann Fackeln anzünden" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:62 msgid "Can operate Switch Lights" msgstr "Kann Lichtschalter betätigen" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:63 msgid "Can operate Elevators" msgstr "Kann Lifte bedienen" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:64 msgid "Can greet others" msgstr "Kann andere grüßen" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:65 msgid "Can search" msgstr "Kann suchen" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:66 msgid "AI is civilian" msgstr "AI ist Zivilist" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:67 msgid "Start sleeping" msgstr "Schläft von anfang an" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:68 msgid "Lay down to the left" msgstr "Nach links hinlegen" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:69 msgid "Start sitting" msgstr "Sitzt von anfang an" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:70 msgid "Patrol" msgstr "Patroullieren" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:71 msgid "Animal Patrol Mode" msgstr "Patrol-Modus für Tiere" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:72 msgid "Start in Alert Idle State" msgstr "Starte im \"alarmierten\" Idle-Zustand" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:73 msgid "Disable Alert Idle State" msgstr "\"Alarmierter\" Idle-Zustand nicht erlaubt" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:74 msgid "Drunk" msgstr "Betrunken" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:75 msgid "Body is shoulderable" msgstr "Kann geschultert werden" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:76 msgid "AI doesn't think outside the player PVS" msgstr "AI außerhalb des Spieler-PVS denkt nicht" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:78 msgid "AI can drown" msgstr "AI kann ertrinken" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:81 msgid "AI can be flatfooted" msgstr "AI kann kalt erwischt werden" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:82 msgid "AI is immune to KOs at high alert levels" msgstr "AI ist gegen KOs immun (auf hohem Alert-Level)" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:83 msgid "AI is immune to KOs" msgstr "AI ist immun gegen KOs" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:84 msgid "AI is immune to Gas" msgstr "AI ist immun gegen Gas" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:86 msgid "Team" msgstr "Team" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:87 msgid "Rank" msgstr "Rang" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:88 msgid "Sitting Angle" msgstr "Sitz-Winkel" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:89 msgid "Drunk Acuity Factor" msgstr "Sinnesschärfen-Faktor bei Trunkenheit" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:90 msgid "Visual Acuity" msgstr "Sehschärfe" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:91 msgid "Audio Acuity" msgstr "Hörschärfe" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:93 msgid "Horizontal FOV" msgstr "Horizontaler FOV" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:94 msgid "Vertical FOV" msgstr "Vertikaler FOV" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:96 msgid "Min. Interleave Distance" msgstr "Min. Interleaving Distanz" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:97 msgid "Max. Interleave Distance" msgstr "Max. Interleaving Distanz" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:99 msgid "Health" msgstr "Gesundheit" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:100 msgid "Critical Health" msgstr "Kritischer Gesundheitswert" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:101 msgid "Melee Range" msgstr "Reichweite für Handwaffen" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:105 msgid "Appearance" msgstr "Erscheinungsbild" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:110 msgid "Skin: " msgstr "Skin:" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:111 msgid "Head: " msgstr "Kopf:" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:111 #: ..\..\plugins\dm.editing\AIHeadPropertyEditor.cpp:31 msgid "Choose AI head..." msgstr "Kopf für AI auswählen..." #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:112 msgid "Vocal Set: " msgstr "Sprachsatz:" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:112 msgid "Choose Vocal Set..." msgstr "Sprachsatz für AI auswählen" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:117 msgid "Behaviour" msgstr "Verhalten" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:163 msgid "Abilities" msgstr "Fähigkeiten" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:178 msgid "Optimization" msgstr "Optimierung" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:190 msgid "Health / Combat" msgstr "Gesundheit / Kampf" #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:272 #: ..\..\plugins\dm.editing\AIEditingPanel.cpp:275 msgid "AI" msgstr "AI" #: ..\..\plugins\dm.editing\AIHeadChooserDialog.cpp:18 msgid "Choose AI Head" msgstr "Kopf für AI auswählen" #: ..\..\plugins\dm.editing\AIVocalSetChooserDialog.cpp:19 msgid "Choose AI Vocal Set" msgstr "Sprachsatz für AI auswählen" #: ..\..\plugins\dm.editing\AIVocalSetChooserDialog.cpp:47 msgid "Available Sets" msgstr "Verfügbare Sätze:" #: ..\..\plugins\dm.editing\AIVocalSetPreview.cpp:114 msgid "Error: File not found." msgstr "Fehler: Datei nicht gefunden." #: ..\..\plugins\dm.editing\AIVocalSetPropertyEditor.cpp:31 msgid "Select Vocal Set..." msgstr "Sprachsatz auswählen..." #: ..\..\plugins\dm.editing\DarkmodTxt.cpp:131 msgid "Order of the elements Title/Description/Author/etc. is incorrect" msgstr "" "Die Reihenfolge der Title/Description/Author/etc.-Elemente ist ungültig." #: ..\..\plugins\dm.editing\FixupMap.cpp:26 msgid "Fixup in progress" msgstr "Fixup läuft" #: ..\..\plugins\dm.editing\FixupMap.cpp:60 msgid "Processing line {0}..." msgstr "Verarbeite Zeile {0}..." #: ..\..\plugins\dm.editing\FixupMap.cpp:65 msgid "Fixup cancelled" msgstr "Fixup abgebrochen" #: ..\..\plugins\dm.editing\FixupMap.cpp:71 msgid "Completed" msgstr "Fertig" #: ..\..\plugins\dm.editing\FixupMap.cpp:155 #: ..\..\plugins\dm.editing\FixupMap.cpp:166 msgid "File not readable" msgstr "Datei nicht lesbar" #: ..\..\plugins\dm.editing\FixupMap.cpp:156 msgid "The specified file doesn't exist." msgstr "Die angegebene Datei existiert nicht." #: ..\..\plugins\dm.editing\FixupMap.cpp:167 msgid "The specified file can't be opened." msgstr "Die angegebene Datei kann nicht geöffnet werden." #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:15 msgid "Fixup Map" msgstr "Map-Fixup" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:16 msgid "Fixup File" msgstr "Fixup-Datei" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:47 msgid "{0} shaders replaced." msgstr "{0} Shader ersetzt." #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:48 msgid "{0} entities replaced." msgstr "{0} Entities ersetzt." #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:49 msgid "{0} models replaced." msgstr "{0} Modelle ersetzt." #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:50 msgid "{0} spawnargs replaced." msgstr "{0} Wertepaare ersetzt." #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:55 msgid "Errors occurred:" msgstr "Aufgetretene Fehler:" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:61 msgid "(Line {0}): {1}" msgstr "(Zeile {0}): {1}" #: ..\..\plugins\dm.editing\FixupMapDialog.cpp:66 msgid "Fixup Results" msgstr "Fixup Ergebnisse" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:25 msgid "Mission Info Editor (darkmod.txt)" msgstr "Missions-Info (darkmod.txt)" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:44 msgid "" "Failed to parse darkmod.txt:\n" "{0}" msgstr "" "Import der darkmod.txt-Datei fehlgeschlagen:\n" "{0}" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:109 msgid "#" msgstr "#" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:112 #: xml_file_content.cpp:17 msgid "Title" msgstr "Titel:" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:140 msgid "Add Title" msgstr "Titel hinzufügen:" #: ..\..\plugins\dm.editing\MissionInfoEditDialog.cpp:145 msgid "Delete Title" msgstr "Titel löschen" #: ..\..\plugins\dm.editing\MissionInfoTextFile.cpp:43 msgid "" "Could not write {0} contents:\n" "{1}" msgstr "" "Konnte {0} Datei nicht speichern:\n" "{1}" #: ..\..\plugins\dm.editing\MissionReadmeDialog.cpp:23 msgid "Mission Readme Editor (readme.txt)" msgstr "Missions-Readme Editor (readme.txt)" #: ..\..\plugins\dm.editing\MissionReadmeDialog.cpp:41 msgid "" "Failed to parse readme.txt:\n" "{0}" msgstr "" "Import der readme.txt-Datei fehlgeschlagen:\n" "{0}" #: ..\..\plugins\dm.editing\plugin.cpp:62 msgid "Fixup Map..." msgstr "Map-Fixup..." #: ..\..\plugins\dm.editing\plugin.cpp:71 msgid "Edit Package Info (darkmod.txt)..." msgstr "Missions-Info editieren (darkmod.txt)..." #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:144 msgid "Game connection error" msgstr "Verbindungsfehler" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:168 #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:176 msgid "Failed to connect to game process" msgstr "Konnte keine Verbindung zum Spiel aufbauen" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:271 msgid "Connection" msgstr "Verbindung" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:274 msgid "Game position follows DarkRadiant camera" msgstr "Spiel-Kamera folgt der DarkRadiant-Kamera" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:276 #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:324 msgid "Move camera to current game position" msgstr "Setze Kamera auf die Position im Spiel" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:280 msgid "Game reloads .map file on save" msgstr "Spiel lädt beim Speichern die Map-Datei neu" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:282 msgid "Tell game to reload .map file now" msgstr "Map-Datei im Spiel neu laden" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:286 msgid "Update entities on every change" msgstr "Entities nach jeder Änderung aktualisieren" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:288 msgid "Update entities now" msgstr "Entities jetzt aktualisieren " #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:292 msgid "Pause game" msgstr "Spiel pausieren" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:294 msgid "Respawn selected entities" msgstr "Ausgewählte Entities neu spawnen" #: ..\..\plugins\dm.gameconnection\GameConnection.cpp:318 msgid "Enable game camera sync with DarkRadiant camera" msgstr "Aktiviere Kamerasynchronisation von TDM und DarkRadiant" #: ..\..\plugins\dm.gui\GuiSelector.cpp:22 msgid "Choose a Gui Definition..." msgstr "GUI-Definition auswählen..." #: ..\..\plugins\dm.gui\GuiSelector.cpp:142 #: ..\..\plugins\dm.gui\GuiSelector.cpp:152 msgid "Gui Path" msgstr "GUI Pfad" #: ..\..\plugins\dm.gui\GuiSelector.cpp:147 msgid "One-Sided Readable Guis" msgstr "Einseitige Schriftstück-GUIs" #: ..\..\plugins\dm.gui\GuiSelector.cpp:157 msgid "Two-Sided Readable Guis" msgstr "Zweiseitige Schriftstück-GUIs" #: ..\..\plugins\dm.gui\plugin.cpp:86 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:43 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:542 msgid "Readable Editor" msgstr "Schriftstück-Editor" #: ..\..\plugins\dm.gui\plugin.cpp:93 msgid "Reload Readable Guis" msgstr "Schriftstück-GUIs neu laden" #: ..\..\plugins\dm.gui\plugin.cpp:103 msgid "Settings/Readable Editor" msgstr "Einstellungen/Schriftstück-Editor" #: ..\..\plugins\dm.gui\plugin.cpp:107 msgid "Mod/xdata" msgstr "Mod/xdata" #: ..\..\plugins\dm.gui\plugin.cpp:108 msgid "Mod Base/xdata" msgstr "Mod Base/xdata" #: ..\..\plugins\dm.gui\plugin.cpp:109 ..\..\plugins\dm.gui\plugin.cpp:113 msgid "Custom Folder" msgstr "Benutzerdefinierter Ordner" #: ..\..\plugins\dm.gui\plugin.cpp:111 msgid "XData Storage Folder" msgstr "Ordner zum Ablegen der XData-Dateien" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:45 msgid "" "Cannot run Readable Editor on this selection.\n" "Please select a single XData entity." msgstr "" "Schriftstück-Editor kann für diese Auswahl nicht ausgeführt werden.\n" "Bitte eine einzelne XData-Entity auswählen." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:227 msgid "Insert whole Page" msgstr "Ganze Seite einfügen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:228 msgid "Insert on left Side" msgstr "Links einfügen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:229 msgid "Insert on right Side" msgstr "Rechts einfügen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:235 msgid "Delete whole Page" msgstr "Ganze Seite löschen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:236 msgid "Delete on left Side" msgstr "Links löschen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:237 msgid "Delete on right Side" msgstr "Rechts löschen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:243 msgid "Append Page" msgstr "Seite anfügen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:248 msgid "Prepend Page" msgstr "Seite voranstellen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:253 msgid "Show last XData import summary" msgstr "Zeige Zusammenfassung des letzten XData-Imports" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:254 msgid "Show duplicated definitions" msgstr "Zeige doppelte Definitionen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:255 msgid "Show Gui import summary" msgstr "Zeige Zusammenfassung des letzten GUI-Imports" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:292 msgid "" msgstr "" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:317 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:644 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1398 msgid "Failed to import {0}." msgstr "Import von {0} fehlgeschlagen." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:319 msgid "Creating a new XData definition..." msgstr "Erzeuge eine neue XData-Definition..." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:321 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:646 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:665 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:716 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1400 #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:62 msgid "Do you want to open the import summary?" msgstr "Willst Du die Import-Zusammenfassung anzeigen?" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:323 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:648 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:667 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:718 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1402 #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:79 msgid "Import failed" msgstr "Import fehlgeschlagen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:379 msgid "" "You have imported an XData definition that is contained in a PK4, which " "can't be accessed for saving." msgstr "" "Du hast eine XData-Definition importiert, die in einem PK4-File gespeichert " "ist." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:381 msgid "" "Please rename your XData definition, so that it is stored under a different " "filename." msgstr "" "Bitte benenne Deine XData-Definition um, so dass sie unter einem neuen Namen " "gespeichert wird." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:398 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:419 msgid "Failed to open {0} for saving." msgstr "Konnte {0} nicht zum Speichern öffnen." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:405 msgid "" "Merging failed, because the length of the definition to be overwritten could " "not be retrieved." msgstr "" "Fehler beim Zusammenführen. Die Länge der zu überschreibenden Definition " "konnte nicht abgerufen werden." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:443 msgid "Mod path not defined. Using Base path..." msgstr "Mod-Pfad nicht definiert, verwende Base-Pfad..." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:456 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:474 msgid "Mod Base path not defined, neither is Mod path. Using Engine path..." msgstr "" "Mod-Base-Pfad nicht definiert, Mod-Pfad auch nicht, verwende Base-Pfad..." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:461 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:479 msgid "Mod Base path not defined. Using Mod path..." msgstr "Mod-Base-Pfad nicht definiert, verwende Mod-Pfad..." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:505 msgid "" "{0}{1} already exists in another path.\n" "\n" "XData will be stored in {2}{3}!" msgstr "" "{0}{1} existiert bereits unter anderem Pfad.\n" "\n" "XData wird in {2}{3} gespeichert!" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:663 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:714 msgid "Failed to load gui definition {0}." msgstr "Laden der GUI-Definition {0} fehlgeschlagen." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:834 msgid "Import definition?" msgstr "Definition importieren?" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:835 msgid "The definition {0} already exists. Should it be imported?" msgstr "Die Definition {0} existiert bereits, soll sie importiert werden?" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:859 msgid "Import failed:" msgstr "Import fehlgeschlagen:" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:862 msgid "Consult the import summary for further information." msgstr "" "Bitte sieh in der Import-Zusammenfassung nach, um weitere Informationen zu " "erhalten." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:885 msgid "" "To avoid duplicated XData definitions the current definition has been " "renamed to {0}." msgstr "" "Die aktuelle Definition wurde in {0} umbenannt, um doppelte XData-" "Definitionen zu vermeiden." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:889 msgid "XData has been renamed." msgstr "XData wurde umbenannt." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1157 msgid "The specified gui definition is not a readable." msgstr "Die angegebene GUI-Definition ist kein Schriftstück." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1162 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1174 msgid "" "The specified gui definition is not suitable for the currently chosen page-" "layout." msgstr "" "Die angegebene GUI-Definition ist für das momentan gewählte Seitenlayout " "nicht geeignet." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1184 msgid "Failure during import." msgstr "Fehler beim Import." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1187 msgid "The specified Definition does not exist." msgstr "Die angegebene Definition existiert nicht." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1195 msgid "Not a suitable Gui Definition!" msgstr "Keine geeignete GUI-Definition!" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1196 msgid "Start the Gui Browser?" msgstr "GUI-Browser öffnen?" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1230 msgid "Switching to default Gui..." msgstr "Schalte zu Standard-GUI um..." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1231 msgid "You didn't choose a Gui. Using the default Gui now." msgstr "Du hast keine GUI ausgewählt. Es wird die Standard-GUI verwendet." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1248 msgid "" "No import summary available. An XData definition has to be imported first..." msgstr "" "Die Importzusammenfassung ist erst nach dem Import einer XData-Definition " "verfügbar." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1260 msgid "XData import summary" msgstr "XData Importzusammenfassung" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1268 msgid "No import summary available. Browse Gui Definitions first." msgstr "" "Die Importzusammenfassung ist erst nach dem Öffnen des GUI-Browsers " "verfügbar." #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1279 msgid "Gui import summary" msgstr "GUI Importzusammenfassung" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1345 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1363 msgid "Please specify an XData name first!" msgstr "Bitte zuerst einen XData-Namen angeben!" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1552 #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1578 msgid "Duplicated XData definitions" msgstr "Mehrfach vorkommende XData-Definitionen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1553 msgid "There are no duplicated definitions!" msgstr "Es gibt keine mehrfachen XData-Definitionen" #: ..\..\plugins\dm.gui\ReadableEditorDialog.cpp:1572 msgid "{0} has been defined in:" msgstr "{0} ist definiert in:" #: ..\..\plugins\dm.gui\ReadablePopulator.h:35 msgid "Analysing Guis" msgstr "Analysiere GUIs" #: ..\..\plugins\dm.gui\ReadableReloader.h:30 msgid "Reloading Guis" msgstr "Neuladen der GUIs" #: ..\..\plugins\dm.gui\XData.cpp:257 ..\..\plugins\dm.gui\XData.cpp:285 #: ..\..\plugins\dm.gui\XData.cpp:367 ..\..\plugins\dm.gui\XData.cpp:382 msgid "Page Index out of bounds." msgstr "Seitenindex ungültig." #: ..\..\plugins\dm.gui\XData.h:118 ..\..\plugins\dm.gui\XData.h:125 msgid "GUI Page Index out of bounds." msgstr "GUI-Seitenindex ungültig" #: ..\..\plugins\dm.gui\XDataSelector.cpp:17 msgid "Choose an XData Definition..." msgstr "XData-Definition auswählen..." #: ..\..\plugins\dm.gui\XDataSelector.cpp:48 msgid "Xdata Path" msgstr "Xdata-Pfad" #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:20 msgid "Choose a file..." msgstr "Datei auswählen..." #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:60 msgid "{0} successfully imported." msgstr "{0} erfolgreich importiert" #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:64 msgid "Problems during import" msgstr "Fehler beim Import." #: ..\..\plugins\dm.gui\XdFileChooserDialog.cpp:99 msgid "" "The requested definition has been found in multiple Files. Choose the file:" msgstr "" "Die angeforderte Definition wurde in mehreren Dateien gefunden, bitte die " "genaue Datei auswählen:" #: ..\..\plugins\dm.objectives\ce\AIFindBodyComponentEditor.cpp:31 msgid "Body:" msgstr "Text:" #: ..\..\plugins\dm.objectives\ce\AIFindBodyComponentEditor.cpp:36 #: ..\..\plugins\dm.objectives\ce\AlertComponentEditor.cpp:43 #: ..\..\plugins\dm.objectives\ce\DestroyComponentEditor.cpp:37 #: ..\..\plugins\dm.objectives\ce\ItemComponentEditor.cpp:37 #: ..\..\plugins\dm.objectives\ce\KillComponentEditor.cpp:38 #: ..\..\plugins\dm.objectives\ce\KnockoutComponentEditor.cpp:38 #: ..\..\plugins\dm.objectives\ce\PickpocketComponentEditor.cpp:37 msgid "Amount:" msgstr "Anzahl:" #: ..\..\plugins\dm.objectives\ce\AIFindItemComponentEditor.cpp:23 #: ..\..\plugins\dm.objectives\ce\DestroyComponentEditor.cpp:31 #: ..\..\plugins\dm.objectives\ce\ItemComponentEditor.cpp:31 #: ..\..\plugins\dm.objectives\ce\PickpocketComponentEditor.cpp:31 msgid "Item:" msgstr "Gegenstand:" #: ..\..\plugins\dm.objectives\ce\AlertComponentEditor.cpp:37 msgid "AI:" msgstr "AI:" #: ..\..\plugins\dm.objectives\ce\AlertComponentEditor.cpp:46 msgid "Minimum Alert Level:" msgstr "Minimale Alarmierungs-Stufe" #: ..\..\plugins\dm.objectives\ce\CustomClockedComponentEditor.cpp:36 msgid "Script Function:" msgstr "Skriptfunktion:" #: ..\..\plugins\dm.objectives\ce\CustomClockedComponentEditor.cpp:42 #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:68 msgid "Clock interval:" msgstr "Zeitintervall:" #: ..\..\plugins\dm.objectives\ce\CustomClockedComponentEditor.cpp:48 #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:70 msgid "seconds:" msgstr "Sekunden:" #: ..\..\plugins\dm.objectives\ce\CustomComponentEditor.cpp:17 msgid "" "A custom component requires no specifiers,\n" "the state of this component is manually controlled \n" "(i.e. by scripts or triggers)." msgstr "" "Eine benutzerdefinierte Komponente benötigt keine Spezifikatoren,\n" "der Zustand der Komponente wird anderweitig gesteuert\n" "(z.B. durch Skript oder einen Trigger)." #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:50 #: ..\..\plugins\dm.objectives\ce\InfoLocationComponentEditor.cpp:24 #: ..\..\plugins\dm.objectives\ce\LocationComponentEditor.cpp:24 msgid "Entity:" msgstr "Entity:" #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:56 msgid "Location Entity:" msgstr "Orts-Entity:" #: ..\..\plugins\dm.objectives\ce\DistanceComponentEditor.cpp:62 msgid "Distance:" msgstr "Distanz:" #: ..\..\plugins\dm.objectives\ce\InfoLocationComponentEditor.cpp:30 #: ..\..\plugins\dm.objectives\ce\LocationComponentEditor.cpp:30 msgid "Location:" msgstr "Ort:" #: ..\..\plugins\dm.objectives\ce\KillComponentEditor.cpp:32 msgid "Kill target:" msgstr "Tötungs-Ziel:" #: ..\..\plugins\dm.objectives\ce\KnockoutComponentEditor.cpp:32 msgid "Knockout target:" msgstr "KO-Ziel:" #: ..\..\plugins\dm.objectives\ce\ReadableClosedComponentEditor.cpp:22 #: ..\..\plugins\dm.objectives\ce\ReadableOpenedComponentEditor.cpp:22 #: ..\..\plugins\dm.objectives\ce\ReadablePageReachedComponentEditor.cpp:31 msgid "Readable:" msgstr "Schriftstück:" #: ..\..\plugins\dm.objectives\ce\ReadablePageReachedComponentEditor.cpp:37 msgid "Page Number:" msgstr "Seite:" #: ..\..\plugins\dm.objectives\ComponentsDialog.cpp:28 msgid "Edit Objective" msgstr "Ziel editieren:" #: ..\..\plugins\dm.objectives\ComponentType.cpp:22 msgid "AI is killed" msgstr "AI wird getötet" #: ..\..\plugins\dm.objectives\ComponentType.cpp:27 msgid "AI is knocked out" msgstr "AI wird KO geschlagen" #: ..\..\plugins\dm.objectives\ComponentType.cpp:32 msgid "AI finds an item" msgstr "AI findet einen Gegenstand" #: ..\..\plugins\dm.objectives\ComponentType.cpp:37 msgid "AI finds a body" msgstr "AI findet einen Körper" #: ..\..\plugins\dm.objectives\ComponentType.cpp:42 msgid "AI is alerted" msgstr "AI wird alarmiert" #: ..\..\plugins\dm.objectives\ComponentType.cpp:47 msgid "Object is destroyed" msgstr "Objekt wird zerstört" #: ..\..\plugins\dm.objectives\ComponentType.cpp:52 msgid "Player possesses item" msgstr "Spieler besitzt Gegenstand" #: ..\..\plugins\dm.objectives\ComponentType.cpp:57 msgid "Player pickpockets AI" msgstr "Spieler bestiehlt AI" #: ..\..\plugins\dm.objectives\ComponentType.cpp:62 msgid "Item is in location" msgstr "Gegenstand ist am/im Ort" #: ..\..\plugins\dm.objectives\ComponentType.cpp:67 msgid "Item is in info_location" msgstr "Gegenstand ist am/im Ort (info_location)" #: ..\..\plugins\dm.objectives\ComponentType.cpp:72 msgid "Custom script" msgstr "Benutzerdefiniertes Skript" #: ..\..\plugins\dm.objectives\ComponentType.cpp:78 msgid "Custom script queried periodically" msgstr "Benutzerdefiniertes Skript wird periodisch abgefragt" #: ..\..\plugins\dm.objectives\ComponentType.cpp:85 msgid "Two entities are within a radius of each other" msgstr "Zwei Entities befinden sich innerhalb eines bestimmten Radius" #: ..\..\plugins\dm.objectives\ComponentType.cpp:93 msgid "Readable is opened." msgstr "Ein Schriftstück wird geöffnet" #: ..\..\plugins\dm.objectives\ComponentType.cpp:101 msgid "Readable is closed." msgstr "Ein Schriftstück wird geschlossen" #: ..\..\plugins\dm.objectives\ComponentType.cpp:109 msgid "A certain page of a readable is reached." msgstr "Eine bestimmte Seite eines Schriftstücks wird angezeigt." #: ..\..\plugins\dm.objectives\DifficultyPanel.cpp:21 msgid "All Levels" msgstr "All Stufen" #: ..\..\plugins\dm.objectives\DifficultyPanel.cpp:30 msgid "Level 1: Easy" msgstr "Level 1: Leicht" #: ..\..\plugins\dm.objectives\DifficultyPanel.cpp:31 msgid "Level 2: Hard" msgstr "Level 1: Hart" #: ..\..\plugins\dm.objectives\DifficultyPanel.cpp:32 msgid "Level 3: Expert" msgstr "Level 1: Experte" #: ..\..\plugins\dm.objectives\LogicEditor.cpp:24 msgid "Success Logic:" msgstr "Logik für Erfüllung:" #: ..\..\plugins\dm.objectives\LogicEditor.cpp:25 msgid "Failure Logic:" msgstr "Logik für Fehlschlag:" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:18 msgid "Edit Mission Logic" msgstr "Missions-Logik bearbeiten" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:21 msgid "This is the standard logic for all difficulty levels" msgstr "Das ist die Standard-Logik für alle Schwierigkeitsstufen." #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:24 msgid "" "These logics override the standard logic for the given difficulty level\n" "if the logic string is non-empty." msgstr "" "Diese Logik überschreibt die Standard-Logik für die angegebene " "Schwierigkeitsstufe\n" "wenn das Logik-Eingabefeld nicht leer ist." #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:45 msgid "Default Logic" msgstr "Standard-Logik" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:57 msgid "Difficulty-specific Logic" msgstr "Logik für bestimmte Schwierigkeitsstufe" #: ..\..\plugins\dm.objectives\MissionLogicDialog.cpp:66 msgid "Logic for Difficulty Level {0:d}" msgstr "Logik für Schwierigkeitsstufe {0:d}" #: ..\..\plugins\dm.objectives\Objective.h:73 msgid "INCOMPLETE" msgstr "NICHT ERFÜLLT" #: ..\..\plugins\dm.objectives\Objective.h:74 msgid "COMPLETE" msgstr "ERFÜLLT" #: ..\..\plugins\dm.objectives\Objective.h:75 msgid "FAILED" msgstr "FEHLGESCHLAGEN" #: ..\..\plugins\dm.objectives\Objective.h:76 msgid "INVALID" msgstr "UNGÜLTIG" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:24 #: xml_file_content.cpp:13 msgid "Edit Objective Conditions" msgstr "Missionsziel-Bedingungen bearbeiten" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:145 msgid "Change Objective State" msgstr "Setze Status eines Missionsziels" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:147 msgid "Change Visibility" msgstr "Setze Misionsziel auf sichtbar/unsichtbar" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:149 msgid "Change Mandatory Flag" msgstr "Setze die 'obligatorisch'-Eigenschaft" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:211 #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:212 #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:213 #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:214 msgid "Set state to {0}" msgstr "Setze Status auf {0}" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:225 msgid "Set Invisible" msgstr "Unsichtbar machen" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:226 msgid "Set Visible" msgstr "Sichtbar machen" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:237 msgid "Clear mandatory flag" msgstr "Nicht obligatorisch machen" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:238 msgid "Set mandatory flag" msgstr "Obligatorisch machen" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:463 msgid "Condition affecting objective {0:d}" msgstr "Bedingung betreffend Missionsziel {0:d}" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:493 msgid "If Objective {0} in Mission {1} is in state '{2}' do the following: " msgstr "Wenn das Missionsziel {0} in Mission Nr. {1} den Status '{2}' hat:" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:504 msgid "Set State on Objective {0} to {1}" msgstr "Setze den Status von Missionsziel {0} auf {1}" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:511 msgid "Make Objective {0} visible" msgstr "Missionsziel {0} sichtbar machen" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:515 msgid "Make Objective {0} invisible" msgstr "Missionsziel {0} unsichtbar machen" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:522 msgid "Make Objective {0} mandatory" msgstr "Missionsziel {0} obligatorisch machen" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:526 msgid "Make Objective {0} not mandatory" msgstr "Missionsziel {0} nicht obligatorisch machen" #: ..\..\plugins\dm.objectives\ObjectiveConditionsDialog.cpp:537 msgid "This condition is not valid or complete yet." msgstr "Diese Bedingung ist noch nicht gültig oder vollständig." #: ..\..\plugins\dm.objectives\ObjectiveEntity.cpp:281 msgid "New objective {0:d}" msgstr "Neues Ziel {0:d}" #: ..\..\plugins\dm.objectives\objectives.cpp:66 msgid "Objectives..." msgstr "Missionsziele..." #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:33 msgid "Mission Objectives" msgstr "Missionsziele" #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:97 msgid "Start" msgstr "Start" #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:135 msgid "Diff." msgstr "Schw." #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:270 msgid "Exception occurred: " msgstr "Ausnahmefehler:" #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:460 msgid "Unable to create Objective Entity: classes not defined in registry." msgstr "" "Kann Ziel-Entity nicht erzeugen: die Entityklassen sind nicht in der " "Registierung definiert." #: ..\..\plugins\dm.objectives\ObjectivesEditor.cpp:489 msgid "Unable to create Objective Entity: class '{0}' not found." msgstr "Kann Ziel-Entity nicht erzeugen: EntityKlasse '{0}' nicht gefunden." #: ..\..\plugins\dm.objectives\Specifier.cpp:20 msgid "entity" msgstr "Entity" #: ..\..\plugins\dm.objectives\Specifier.cpp:20 msgid "entities" msgstr "Entities" #: ..\..\plugins\dm.objectives\Specifier.cpp:43 msgid "" msgstr "" #: ..\..\plugins\dm.objectives\Specifier.cpp:46 msgid "entity " msgstr "entity" #: ..\..\plugins\dm.objectives\Specifier.cpp:54 msgid "{0:d} loot in gold" msgstr "{0:d} Loot in Gold" #: ..\..\plugins\dm.objectives\Specifier.cpp:57 msgid "{0:d} loot in goods" msgstr "{0:d} Loot in Waren" #: ..\..\plugins\dm.objectives\Specifier.cpp:60 msgid "{0:d} loot in jewels" msgstr "{0:d} Loot in Edelsteinen" #: ..\..\plugins\dm.objectives\Specifier.cpp:63 msgid "{0:d} loot" msgstr "{0:d} Loot" #: ..\..\plugins\dm.objectives\Specifier.cpp:66 msgid "{0:d} of \"{1}\"" msgstr "{0:d} von \"{1}\"" #: ..\..\plugins\dm.objectives\Specifier.cpp:70 msgid "{0} of type {1}" msgstr "{0} vom Typ {1}" #: ..\..\plugins\dm.objectives\Specifier.cpp:73 msgid "{0} of spawnclass {1}" msgstr "{0} der Spawnklasse {1}" #: ..\..\plugins\dm.objectives\Specifier.cpp:76 msgid "{0} AI of type {1}" msgstr "{0} AI vom Typ {1}" #: ..\..\plugins\dm.objectives\Specifier.cpp:79 msgid "{0} AI of team {1}" msgstr "{0} AI vom Team {1}" #: ..\..\plugins\dm.objectives\Specifier.cpp:82 msgid "{0} AI of {1}" msgstr "{0} AI von {1}" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:16 msgid "No specifier" msgstr "Kein Spezifikator" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:20 msgid "Name of single entity" msgstr "Name der Entity" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:24 msgid "Overall (component-specific)" msgstr "Insgesamt (komponentenspezifisch)" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:29 msgid "Group identifier (component-specific)" msgstr "Gruppenidentifizierer (komponentenspezifisch)" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:34 msgid "Any entity of specified class" msgstr "Irgendeine Entity der angegebenen Klasse" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:39 msgid "Any entity with SDK-level spawnclass" msgstr "Irgendeine Entity der angegebenen SDK Klasse" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:44 msgid "Any AI of specified type" msgstr "Irgendeine AI des angegebenen Typs" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:48 msgid "Any AI on specified team" msgstr "Irgendeine AI des angegebenen Teams" #: ..\..\plugins\dm.objectives\SpecifierType.cpp:53 msgid "Any AI with specified combat status" msgstr "Irgendeine AI mit dem angegebenen Kampfzustand" #: ..\..\plugins\dm.stimresponse\ClassEditor.cpp:54 msgid "S/R" msgstr "S/R" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:114 msgid "" "Note: Please beware that deleting custom stims may\n" "affect other entities as well. So check before you delete." msgstr "" "Hinweis: Bitte beachte, dass sich das Löschen benutzerdefinierter Stims auf\n" "andere Entities auswirken kann. Gehe deshalb sorgfältig vor." #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:126 msgid "Add Stim Type" msgstr "Stimtyp hinzufügen" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:127 msgid "Remove Stim Type" msgstr "Stimtyp entfernen" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:182 #: ..\..\plugins\dm.stimresponse\StimTypes.cpp:294 msgid "Custom Stim" msgstr "Benutzerdefinierter Stim" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:205 msgid "Delete Custom Stim" msgstr "Benutzerdefinierten Stim entfernen" #: ..\..\plugins\dm.stimresponse\CustomStimEditor.cpp:206 msgid "" "Beware that other entities might still be using this stim type.\n" "Do you really want to delete this custom stim?" msgstr "" "Beachte, dass andere Entities diesen Stimtyp noch verwenden könnten.\n" "Möchtest du diesen benutzerdefinierten Stim wirklich löschen?" #: ..\..\plugins\dm.stimresponse\EffectEditor.cpp:22 msgid "Edit Response Effect" msgstr "Response-Effekt editieren" #: ..\..\plugins\dm.stimresponse\EffectEditor.cpp:108 msgid "Effect:" msgstr "Effekt:" #: ..\..\plugins\dm.stimresponse\EffectEditor.cpp:115 xml_file_content.cpp:5 #: xml_file_content.cpp:34 msgid "Active" msgstr "Aktiv" #: ..\..\plugins\dm.stimresponse\EffectEditor.cpp:120 msgid "Arguments" msgstr "Argumente" #: ..\..\plugins\dm.stimresponse\plugin.cpp:57 msgid "Stim/Response..." msgstr "Stim/Response..." #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:268 msgid "Effect" msgstr "Effekt" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:271 msgid "Details (double-click to edit)" msgstr "Details (doppelklicken zum Editieren)" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:428 #: ..\..\plugins\dm.stimresponse\StimEditor.cpp:433 msgid "Activate" msgstr "Aktivieren" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:430 #: ..\..\plugins\dm.stimresponse\StimEditor.cpp:435 msgid "Deactivate" msgstr "Deaktivieren" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:432 #: ..\..\plugins\dm.stimresponse\StimEditor.cpp:437 xml_file_content.cpp:11 msgid "Duplicate" msgstr "Duplizieren" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:439 msgid "Add new Effect" msgstr "Neuen Effekt hinzufügen" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:441 xml_file_content.cpp:6 #: xml_file_content.cpp:13 xml_file_content.cpp:4 xml_file_content.cpp:8 msgid "Edit" msgstr "Bearbeiten" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:444 xml_file_content.cpp:7 #: xml_file_content.cpp:4 msgid "Move Up" msgstr "Nach oben" #: ..\..\plugins\dm.stimresponse\ResponseEditor.cpp:446 xml_file_content.cpp:8 #: xml_file_content.cpp:5 msgid "Move Down" msgstr "Nach unten" #: ..\..\plugins\dm.stimresponse\ResponseEffect.cpp:195 msgid "Error: eclass pointer invalid." msgstr "Fehler: Entityklassenzeiger ungültig." #: ..\..\plugins\dm.stimresponse\StimResponseEditor.cpp:27 msgid "Stim/Response Editor" msgstr "Stim/Response-Editor" #: ..\..\plugins\dm.stimresponse\StimResponseEditor.cpp:32 msgid "A single entity must be selected to edit Stim/Response properties." msgstr "" "Um Stim/Response-Eigenschaften zu editieren muss genau eine Entity " "ausgewählt sein." #: ..\..\libs\scene\Group.h:34 ..\..\libs\scene\Group.h:109 msgid "No map loaded" msgstr "Keine Map geladen" #: ..\..\libs\scene\Group.h:40 msgid "Groups can be formed in Primitive and Group Part selection mode only" msgstr "" "Gruppen können nur im Primitiv- und Gruppenteil-Selektionsmodus erstellt " "werden" #: ..\..\libs\scene\Group.h:45 msgid "Nothing selected, cannot group anything" msgstr "Nichts ausgewählt, kann keine Gruppe erstellen" #: ..\..\libs\scene\Group.h:50 msgid "Select more than one element to form a group" msgstr "" "Um eine Gruppe zu erstellen muss mehr als ein Element ausgewählt werden" #: ..\..\libs\scene\Group.h:76 msgid "The selected elements already form a group" msgstr "Die selektierten Elemente bilden bereits eine Gruppe" #: ..\..\libs\scene\Group.h:115 msgid "Groups can be dissolved in Primitive and Group Part selection mode only" msgstr "" "Gruppen können nur im Primitiv- und Gruppenteil-Selektionsmodus aufgelöst " "werden" #: ..\..\libs\scene\Group.h:120 msgid "Nothing selected, cannot un-group anything" msgstr "Nichts ausgewählt, kann keine Gruppierung auflösen" #: ..\..\libs\scene\Group.h:140 msgid "The selected elements aren't part of any group" msgstr "Keines der selektierten Elemente ist Teil einer Gruppe" #: ..\..\libs\stream\ExportStream.h:49 msgid "Path is not absolute: {0}" msgstr "Pfad ist nicht absolut: {0}" #: ..\..\libs\stream\ExportStream.h:62 msgid "Cannot open file for writing: {0}" msgstr "Kann die Datei nicht im Schreibmodus öffnen: {0}" #: ..\..\libs\stream\ExportStream.h:93 msgid "Could not rename the existing file to .bak: {0}" msgstr "Konnte die bestehende Datei nicht auf .bak umbenennen: {0}" #: ..\..\libs\stream\ExportStream.h:107 msgid "Could not rename the temporary file: {0}" msgstr "Konnte die temporäre Datei nicht umbenennen: {0}" #: ..\..\libs\wxutil\dataview\ResourceTreeView.cpp:15 msgid "Add to Favourites" msgstr "Zu Favoriten hinzufügen" #: ..\..\libs\wxutil\dataview\ResourceTreeView.cpp:131 msgid "No favourites added so far" msgstr "Keine Favoriten vorhanden" #: ..\..\libs\wxutil\dataview\ResourceTreeView.cpp:378 msgid "Loading resources..." msgstr "Lade Ressourcen..." #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:28 msgid "Show All" msgstr "Alle anzeigen" #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:29 msgid "Show Favourites" msgstr "Favoriten anzeigen" #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:46 msgid "" "Enter search text to filter the tree,\n" "use arrow keys to navigate" msgstr "" "Text eingeben um zu filtern,\n" "Navigation mittels Pfeiltasten." #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:57 #: ..\..\libs\wxutil\dataview\TreeView.cpp:299 msgid "Go to next match" msgstr "Zur nächsten Übereinstimmung" #: ..\..\libs\wxutil\dataview\ResourceTreeViewToolbar.cpp:58 #: ..\..\libs\wxutil\dataview\TreeView.cpp:300 msgid "Go to previous match" msgstr "Zur vorherigen Übereinstimmung" #: ..\..\libs\wxutil\dataview\TreeView.cpp:286 msgid "Find: " msgstr "Finde:" #: ..\..\libs\wxutil\dialog\MessageBox.cpp:20 xml_file_content.cpp:8 #: xml_file_content.cpp:10 xml_file_content.cpp:13 xml_file_content.cpp:4 #: xml_file_content.cpp:3 xml_file_content.cpp:21 msgid "Save" msgstr "Speichern" #: ..\..\libs\wxutil\dialog\MessageBox.cpp:20 msgid "Close without saving" msgstr "Schließen ohne zu speichern" #: ..\..\libs\wxutil\EntityClassChooser.cpp:29 msgid "Create entity" msgstr "Neue Entity" #: ..\..\libs\wxutil\FileChooser.cpp:64 msgid "Open File" msgstr "Datei öffnen" #: ..\..\libs\wxutil\FileChooser.cpp:64 msgid "Save File" msgstr "Datei speichern" #: ..\..\libs\wxutil\FileChooser.cpp:83 msgid "All Files (*.*)" msgstr "Alle Dateien (*.*)" #: ..\..\libs\wxutil\fsview\FileSystemView.cpp:52 msgid "Location" msgstr "Ort" #: ..\..\libs\wxutil\fsview\FileSystemView.cpp:54 msgid "Size" msgstr "Größe" #: ..\..\libs\wxutil\fsview\FileSystemView.cpp:120 msgid "Loading..." msgstr "Lade..." #: ..\..\libs\wxutil\fsview\Populator.cpp:94 msgid "[in {0}]" msgstr "[in {0}]" #: ..\..\libs\wxutil\ModalProgressDialog.cpp:19 #: ..\..\libs\wxutil\ModalProgressDialog.cpp:41 #: ..\..\libs\wxutil\ModalProgressDialog.cpp:51 msgid "Operation cancelled by user" msgstr "Abbruch durch Benutzer" #: ..\..\libs\wxutil\Modifier.h:146 msgid "Alt" msgstr "Alt" #: ..\..\libs\wxutil\Modifier.h:147 msgid "Ctrl" msgstr "Strg" #: ..\..\libs\wxutil\Modifier.h:148 msgid "Shift" msgstr "Umschalt" #: ..\..\libs\wxutil\PathEntry.cpp:104 msgid "Choose File" msgstr "Datei auswählen" #: ..\..\libs\wxutil\PathEntry.cpp:142 msgid "Choose Directory" msgstr "Verzeichnis auswählen" #: ..\..\libs\wxutil\preview\ModelPreview.cpp:115 #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:182 msgid "" "Unable to setup the preview,\n" "could not find the entity class {0}" msgstr "" "Vorschau nicht möglich,\n" "Entityklasse {0} nicht vorhanden." #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:51 msgid "Show coordinate axes" msgstr "Zeige Koordinatenachsen" #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:57 msgid "Show wireframe" msgstr "Zeige Wireframe" #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:61 #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:63 msgid "Auto Loop" msgstr "Auto Loop" #: ..\..\libs\wxutil\preview\ParticlePreview.cpp:67 msgid "Reload Particle Defs" msgstr "Partikel-Definitionen neu laden" #: ..\..\libs\wxutil\preview\RenderPreview.cpp:104 #: ..\..\libs\wxutil\preview\RenderPreview.cpp:106 xml_file_content.cpp:1 msgid "Filters" msgstr "Filter" #: xml_file_content.cpp:1 msgid "&File" msgstr "&Datei" #: xml_file_content.cpp:2 msgid "&New Map" msgstr "&Neue Map" #: xml_file_content.cpp:3 msgid "&Open..." msgstr "&Öffnen" #: xml_file_content.cpp:4 msgid "&Open Map from Project..." msgstr "Öffne Map aus Projekt..." #: xml_file_content.cpp:5 msgid "&Import map..." msgstr "&Map importieren" #: xml_file_content.cpp:6 msgid "Import &prefab..." msgstr "&Prefab importieren" #: xml_file_content.cpp:7 msgid "&Save" msgstr "&Speichern" #: xml_file_content.cpp:8 msgid "Save &as..." msgstr "Speichern &als..." #: xml_file_content.cpp:9 msgid "Save © as..." msgstr "&Kopie speichern als..." #: xml_file_content.cpp:10 msgid "&Export Map..." msgstr "&Exportiere Map..." #: xml_file_content.cpp:11 msgid "&Export selected as Map..." msgstr "Auswahl als Map exportieren..." #: xml_file_content.cpp:12 msgid "&Export selected as Prefab..." msgstr "Auswahl als Prefab exportieren..." #: xml_file_content.cpp:13 msgid "&Export selected as Model..." msgstr "Auswahl als Model exportieren..." #: xml_file_content.cpp:14 msgid "Export selected as Collision Model..." msgstr "Auswahl als Kollisionsmodell exportieren..." #: xml_file_content.cpp:15 msgid "Export &Region..." msgstr "Exportiere Region..." #: xml_file_content.cpp:16 msgid "&Reload Models" msgstr "&Modelle neu laden" #: xml_file_content.cpp:17 msgid "Reload Selected Models" msgstr "Ausgewählte Modelle neu laden" #: xml_file_content.cpp:18 msgid "Reload S&kins" msgstr "S&kins neu laden" #: xml_file_content.cpp:19 xml_file_content.cpp:28 msgid "Reload Materials" msgstr "Materials neu laden" #: xml_file_content.cpp:20 msgid "Reload Defs" msgstr "Defs neu laden" #: xml_file_content.cpp:21 msgid "Reload Particles" msgstr "Partikel neu laden" #: xml_file_content.cpp:23 msgid "&Game/Project Setup..." msgstr "Spiel/Projekteinstellungen..." #: xml_file_content.cpp:24 msgid "&Pointfile" msgstr "Pointfile" #: xml_file_content.cpp:25 msgid "E&xit" msgstr "B&eenden" #: xml_file_content.cpp:26 msgid "&Edit" msgstr "Bearbeiten" #: xml_file_content.cpp:27 msgid "&Undo" msgstr "Rückgängig" #: xml_file_content.cpp:28 msgid "&Redo" msgstr "Wiede&rherstellen" #: xml_file_content.cpp:29 msgid "&Copy" msgstr "&Kopieren" #: xml_file_content.cpp:30 msgid "&Paste" msgstr "&Einfügen" #: xml_file_content.cpp:31 msgid "Paste to Camera" msgstr "Bei Kameraposition einfügen" #: xml_file_content.cpp:32 msgid "&Duplicate" msgstr "&Duplizieren" #: xml_file_content.cpp:33 msgid "D&elete" msgstr "&Löschen" #: xml_file_content.cpp:36 msgid "Rep&arent Primitives" msgstr "Primitive neu zuordnen (Elternknoten ändern)" #: xml_file_content.cpp:37 msgid "Reparent Primitives to &Worldspawn" msgstr "Primitive Worldspawn zuordnen" #: xml_file_content.cpp:38 msgid "Merge selected Entities" msgstr "Ausgewählte Entities zusammenführen" #: xml_file_content.cpp:39 msgid "Copy Shader" msgstr "Shader kopieren" #: xml_file_content.cpp:40 msgid "Paste Shader" msgstr "Shader einfügen" #: xml_file_content.cpp:41 msgid "Paste Shader (Natural)" msgstr "Shader einfügen (Natürliche Skalierung)" #: xml_file_content.cpp:42 msgid "C&lear selection" msgstr "Auswahl aufheben" #: xml_file_content.cpp:43 msgid "&Invert selection" msgstr "Auswahl umkehren" #: xml_file_content.cpp:44 msgid "Select complete t&all" msgstr "Inneres auswählen (Projektion)" #: xml_file_content.cpp:45 msgid "Select i&nside" msgstr "Inneres auswählen" #: xml_file_content.cpp:46 msgid "Select &touching" msgstr "Berührtes auswählen" #: xml_file_content.cpp:47 msgid "Select Children" msgstr "Kinder auswählen" #: xml_file_content.cpp:48 msgid "Select Parent Entities" msgstr "Eltern-Entities auswählen" #: xml_file_content.cpp:49 msgid "Expand selection to all Siblings" msgstr "Auswahl auf Geschwister ausweiten" #: xml_file_content.cpp:50 msgid "Select all of type" msgstr "Alles vom selben Typ auswählen" #: xml_file_content.cpp:51 msgid "Keyboard Shortcuts..." msgstr "Tastenkombinationen..." #: xml_file_content.cpp:52 msgid "Mouse Bindings..." msgstr "Maustastenbelegungen..." #: xml_file_content.cpp:53 msgid "Pre&ferences..." msgstr "Einstellungen..." #: xml_file_content.cpp:54 msgid "V&iew" msgstr "Ansicht" #: xml_file_content.cpp:55 msgid "New XY view" msgstr "Neue XY-Ansicht" #: xml_file_content.cpp:58 msgid "Console View" msgstr "Konsole" #: xml_file_content.cpp:60 msgid "Media Browser" msgstr "Mediabrowser" #: xml_file_content.cpp:61 msgid "Entity Inspector" msgstr "Entity Inspector" #: xml_file_content.cpp:62 msgid "&Light Inspector" msgstr "Light Inspector" #: xml_file_content.cpp:63 msgid "&Surface Inspector" msgstr "Surface Inspector" #: xml_file_content.cpp:64 msgid "&Patch Inspector" msgstr "Patch Inspector" #: xml_file_content.cpp:65 msgid "&Texture Tool" msgstr "Textur-Werkzeug" #: xml_file_content.cpp:67 msgid "AAS Area Viewer" msgstr "AAS Visualisierung" #: xml_file_content.cpp:69 msgid "&Center" msgstr "Zentrieren" #: xml_file_content.cpp:70 msgid "&Up Floor" msgstr "Ein Stockwerk höher" #: xml_file_content.cpp:71 msgid "&Down Floor" msgstr "Ein Stockwerk tiefer" #: xml_file_content.cpp:72 msgid "Far Clip Plane In" msgstr "Entfernte Clip-Ebene heran" #: xml_file_content.cpp:73 msgid "Far Clip Plane Out" msgstr "Entfernte Clip-Ebene hinaus" #: xml_file_content.cpp:74 msgid "Next leak spot" msgstr "Nächster Leak-Spot" #: xml_file_content.cpp:75 msgid "Previous leak spot" msgstr "Vorheriger Leak-Spot" #: xml_file_content.cpp:76 msgid "Orthographic" msgstr "2D-Ansicht" #: xml_file_content.cpp:77 msgid "Next (XY, XZ, YZ)" msgstr "Nächste Ansicht (XY, XZ, YZ)" #: xml_file_content.cpp:78 msgid "XY (Top)" msgstr "XY (Oben)" #: xml_file_content.cpp:79 msgid "YZ" msgstr "YZ" #: xml_file_content.cpp:80 msgid "XZ" msgstr "XZ" #: xml_file_content.cpp:81 msgid "&XY 100%" msgstr "XY 100%" #: xml_file_content.cpp:82 msgid "&XY Zoom In" msgstr "XY Einzoomen" #: xml_file_content.cpp:83 msgid "&XY Zoom Out" msgstr "XY Auszoomen" #: xml_file_content.cpp:84 msgid "Show" msgstr "Zeigen" #: xml_file_content.cpp:85 msgid "Show &Angles" msgstr "Zeige Winkel" #: xml_file_content.cpp:86 msgid "Show &Names" msgstr "Zeige Namen" #: xml_file_content.cpp:88 msgid "Show C&oordinates" msgstr "Zeige Koordinaten" #: xml_file_content.cpp:92 msgid "Show size info" msgstr "Zeige Größeninformation" #: xml_file_content.cpp:93 msgid "Hide/Show" msgstr "Verbergen/Zeigen" #: xml_file_content.cpp:94 msgid "Hide Selected" msgstr "Auswahl verbergen" #: xml_file_content.cpp:95 msgid "Hide Deselected" msgstr "Nicht ausgewähltes verbergen" #: xml_file_content.cpp:96 msgid "Show hidden" msgstr "Zeige Verborgenes" #: xml_file_content.cpp:97 msgid "Region" msgstr "Region" #: xml_file_content.cpp:98 msgid "&Switch off" msgstr "Ausschalten" #: xml_file_content.cpp:99 msgid "Set from &XY view" msgstr "Über XY-Ansicht festlegen" #: xml_file_content.cpp:100 msgid "Set from &Brush" msgstr "Über Brush festlegen" #: xml_file_content.cpp:101 msgid "Set from Se&lection" msgstr "Über Auswahl festlegen" #: xml_file_content.cpp:102 msgid "Colours..." msgstr "Farben..." #: xml_file_content.cpp:103 msgid "Background Image..." msgstr "Hintergrundbild..." #: xml_file_content.cpp:104 msgid "Mo&dify" msgstr "Komponentenmodus" #: xml_file_content.cpp:105 xml_file_content.cpp:16 msgid "Components" msgstr "Komponenten" #: xml_file_content.cpp:106 msgid "&Edges" msgstr "Edges" #: xml_file_content.cpp:107 msgid "&Vertices" msgstr "Vertices" #: xml_file_content.cpp:108 msgid "&Faces" msgstr "Faces" #: xml_file_content.cpp:109 msgid "En&tities" msgstr "Entities" #: xml_file_content.cpp:110 msgid "Nudge" msgstr "Verschieben" #: xml_file_content.cpp:111 msgid "Nudge Left" msgstr "Verschiebe nach links" #: xml_file_content.cpp:112 msgid "Nudge Right" msgstr "Verschiebe nach rechts" #: xml_file_content.cpp:113 msgid "Nudge Up" msgstr "Verschiebe nach oben" #: xml_file_content.cpp:114 msgid "Nudge Down" msgstr "Verschiebe nach unten" #: xml_file_content.cpp:115 xml_file_content.cpp:15 msgid "Rotate" msgstr "Drehen" #: xml_file_content.cpp:116 msgid "Rotate X" msgstr "Drehe um X-Achse" #: xml_file_content.cpp:117 msgid "Rotate Y" msgstr "Drehe um Y-Achse" #: xml_file_content.cpp:118 msgid "Rotate Z" msgstr "Drehe um Z-Achse" #: xml_file_content.cpp:119 msgid "Mirror" msgstr "Spiegeln" #: xml_file_content.cpp:120 msgid "Mirror &X" msgstr "Spiegeln um X-Achse" #: xml_file_content.cpp:121 msgid "Mirror &Y" msgstr "Spiegeln um Y-Achse" #: xml_file_content.cpp:122 msgid "Mirror &Z" msgstr "Spiegeln um Z-Achse" #: xml_file_content.cpp:123 xml_file_content.cpp:9 msgid "Rotate Objects independently" msgstr "Objekte unabhängig voneinander drehen" #: xml_file_content.cpp:124 msgid "Rotate and scale..." msgstr "Drehen und skalieren..." #: xml_file_content.cpp:125 msgid "&Grid" msgstr "Raster" #: xml_file_content.cpp:126 msgid "Snap selected to grid" msgstr "Auswahl am Raster ausrichten" #: xml_file_content.cpp:127 msgid "Grid0.125" msgstr "Grid0.125" #: xml_file_content.cpp:128 msgid "Grid0.25" msgstr "Grid0.25" #: xml_file_content.cpp:129 msgid "Grid0.5" msgstr "Grid0.5" #: xml_file_content.cpp:130 msgid "Grid1" msgstr "Grid1" #: xml_file_content.cpp:131 msgid "Grid2" msgstr "Grid2" #: xml_file_content.cpp:132 msgid "Grid4" msgstr "Grid4" #: xml_file_content.cpp:133 msgid "Grid8" msgstr "Grid8" #: xml_file_content.cpp:134 msgid "Grid16" msgstr "Grid16" #: xml_file_content.cpp:135 msgid "Grid32" msgstr "Grid32" #: xml_file_content.cpp:136 msgid "Grid64" msgstr "Grid64" #: xml_file_content.cpp:137 msgid "Grid128" msgstr "Grid128" #: xml_file_content.cpp:138 msgid "Grid256" msgstr "Grid256" #: xml_file_content.cpp:139 msgid "M&ap" msgstr "Map" #: xml_file_content.cpp:140 msgid "Find brush..." msgstr "Brush suchen..." #: xml_file_content.cpp:141 msgid "Find and replace textures..." msgstr "Texturen suchen & ersetzen..." #: xml_file_content.cpp:142 msgid "Map info..." msgstr "Map-Information" #: xml_file_content.cpp:143 msgid "E&ntity" msgstr "Entity" #: xml_file_content.cpp:144 msgid "&Revert group to worldspawn" msgstr "Gruppe zu Worldspawn umwandeln" #: xml_file_content.cpp:145 msgid "&Connect selected entities" msgstr "Ausgewählte Entities verbinden" #: xml_file_content.cpp:146 msgid "&Bind selected entities" msgstr "Ausgewählte Entities verknüpfen" #: xml_file_content.cpp:148 msgid "Entity Class Tree..." msgstr "Entity-Klassenbaum..." #: xml_file_content.cpp:149 msgid "Particle Editor..." msgstr "Partikeleditor..." #: xml_file_content.cpp:150 msgid "B&rush" msgstr "Brush" #: xml_file_content.cpp:151 msgid "Prism..." msgstr "Prisma..." #: xml_file_content.cpp:152 msgid "Cone..." msgstr "Kegel..." #: xml_file_content.cpp:153 msgid "Sphere..." msgstr "Kugel..." #: xml_file_content.cpp:154 msgid "CSG" msgstr "CSG" #: xml_file_content.cpp:155 msgid "Make &Hollow" msgstr "Aushöhlen" #: xml_file_content.cpp:156 msgid "Make &Room" msgstr "Raum erstellen" #: xml_file_content.cpp:157 msgid "CSG &Subtract" msgstr "CSG Subtraktion" #: xml_file_content.cpp:158 msgid "CSG &Merge" msgstr "CSG Zusammenfügen" #: xml_file_content.cpp:160 msgid "Clip Selection" msgstr "Auswahl clippen" #: xml_file_content.cpp:161 msgid "Split Selection" msgstr "Auswahl splitten" #: xml_file_content.cpp:162 msgid "Flip Clip Orientation" msgstr "Clip-Orientierung umkehren" #: xml_file_content.cpp:163 msgid "Texture lock" msgstr "Textur-Lock" #: xml_file_content.cpp:164 msgid "Create Decal Patches" msgstr "Decal-Patches erstellen" #: xml_file_content.cpp:166 msgid "Make Detail" msgstr "Als Detail markieren" #: xml_file_content.cpp:167 msgid "Make Structural" msgstr "Als Struktur markieren" #: xml_file_content.cpp:168 msgid "&Patch" msgstr "Patch" #: xml_file_content.cpp:169 msgid "Create Simple Patch Mesh" msgstr "Neuer einfacher Patch" #: xml_file_content.cpp:170 msgid "Create End cap" msgstr "Endcap erstellen" #: xml_file_content.cpp:171 msgid "Create Bevel" msgstr "Bogen erstellen" #: xml_file_content.cpp:172 msgid "Create Cone" msgstr "Kegel erstellen" #: xml_file_content.cpp:173 msgid "Create Cylinder" msgstr "Zylinder erstellen" #: xml_file_content.cpp:174 msgid "Create Sphere" msgstr "Kugel erzeugen" #: xml_file_content.cpp:175 msgid "More cylinders" msgstr "Mehr Zylinderarten" #: xml_file_content.cpp:176 msgid "Create Dense Cylinder" msgstr "Erstelle \"dichten\" Zylinder" #: xml_file_content.cpp:177 msgid "Create Very Dense Cylinder" msgstr "Erstelle \"sehr dichten\" Zylinder" #: xml_file_content.cpp:178 msgid "Create Square Cylinder" msgstr "Erstelle quadratischen Zylinder" #: xml_file_content.cpp:179 msgid "Insert" msgstr "Einfügen" #: xml_file_content.cpp:180 msgid "Insert 2 Columns at the beginning" msgstr "Zwei Spalten am Anfang einfügen" #: xml_file_content.cpp:181 msgid "Insert 2 Columns at the end" msgstr "Zwei Spalten am Ende einfügen" #: xml_file_content.cpp:182 msgid "Insert 2 Rows at the beginning" msgstr "Zwei Zeilen am Anfang einfügen" #: xml_file_content.cpp:183 msgid "Insert 2 Rows at the end" msgstr "Zwei Zeilen am Ende einfügen" #: xml_file_content.cpp:184 msgid "Append" msgstr "Anfügen" #: xml_file_content.cpp:185 msgid "Append 2 columns at the beginning" msgstr "Zwei Spalten am Anfang anfügen" #: xml_file_content.cpp:186 msgid "Append 2 columns at the end" msgstr "Zwei Spalten am Ende anfügen" #: xml_file_content.cpp:187 msgid "Append 2 rows at the beginning" msgstr "Zwei Zeilen am Anfang anfügen" #: xml_file_content.cpp:188 msgid "Append 2 rows at the end" msgstr "Zwei Zeilen am Ende anfügen" #: xml_file_content.cpp:190 msgid "Delete 2 columns from the beginning" msgstr "Zwei Spalten am Anfang löschen" #: xml_file_content.cpp:191 msgid "Delete 2 columns from the end" msgstr "Zwei Spalten am Ende löschen" #: xml_file_content.cpp:192 msgid "Delete 2 rows from the beginning" msgstr "Zwei Zeilen am Anfang löschen" #: xml_file_content.cpp:193 msgid "Delete 2 rows from the end" msgstr "Zwei Spalten am Ende löschen" #: xml_file_content.cpp:194 msgid "Matrix" msgstr "Matrix" #: xml_file_content.cpp:195 msgid "Invert" msgstr "Invertieren" #: xml_file_content.cpp:196 msgid "Re-disperse" msgstr "Neu verteilen" #: xml_file_content.cpp:197 msgid "Rows" msgstr "Zeilen" #: xml_file_content.cpp:198 msgid "Columns" msgstr "Spalten" #: xml_file_content.cpp:199 msgid "Transpose" msgstr "Transponieren" #: xml_file_content.cpp:200 msgid "Thicken Selected Patches..." msgstr "Ausgewählte Patches extrudieren..." #: xml_file_content.cpp:201 msgid "Cap Selection..." msgstr "Cap für Auswahl erstellen..." #: xml_file_content.cpp:202 msgid "Stitch Patch Textures" msgstr "Patch-Texturen zusammenfügen" #: xml_file_content.cpp:203 msgid "Bulge Patch..." msgstr "Patch auswölben..." #: xml_file_content.cpp:204 msgid "Weld/Merge Patches" msgstr "Patches verbinden" #: xml_file_content.cpp:205 msgid "&Curve" msgstr "Kurve" #: xml_file_content.cpp:206 msgid "Create NURBS Curve" msgstr "NURBS-Kurve erstellen" #: xml_file_content.cpp:207 msgid "Create CatmullRom Curve" msgstr "CatmullRom-Kurve erstellen" #: xml_file_content.cpp:208 msgid "Convert NURBS <-> CatmullRom" msgstr "Konversion NURBS <-> CatmullRom" #: xml_file_content.cpp:209 msgid "Append Curve Control Point" msgstr "Kurvenkontrollpunkt anfügen" #: xml_file_content.cpp:210 msgid "Insert Curve Control Points" msgstr "Kurvenkontrollpunkt einfügen" #: xml_file_content.cpp:211 msgid "Remove Curve Control Points" msgstr "Kurvenkontrollpunkt entfernen" #: xml_file_content.cpp:212 msgid "&Help" msgstr "Hilfe" #: xml_file_content.cpp:213 msgid "&About" msgstr "Über DarkRadiant" #: xml_file_content.cpp:214 msgid "&User Guide" msgstr "&Benutzerhandbuch" #: xml_file_content.cpp:1 msgid "Texture Background" msgstr "Texturbrowser-Hintergrund" #: xml_file_content.cpp:2 msgid "Grid Background" msgstr "Rasterhintergrund" #: xml_file_content.cpp:3 msgid "Grid Major" msgstr "Grobes Raster" #: xml_file_content.cpp:4 msgid "Grid Minor" msgstr "Feines Raster" #: xml_file_content.cpp:5 msgid "Grid Text" msgstr "Rastertext" #: xml_file_content.cpp:6 msgid "Grid Block" msgstr "Rasterblock" #: xml_file_content.cpp:7 msgid "Brushes" msgstr "Brushes" #: xml_file_content.cpp:8 msgid "Entities (default)" msgstr "Standard-Entities" #: xml_file_content.cpp:9 msgid "Camera Background" msgstr "Kamera-Hintergrund" #: xml_file_content.cpp:10 msgid "Selected Items" msgstr "Ausgewählte Elemente" #: xml_file_content.cpp:11 msgid "Selected Group Items" msgstr "Ausgewählte Gruppenelemente" #: xml_file_content.cpp:12 msgid "Selected Items (Camera)" msgstr "Ausgewählte Elemente (Kamera)" #: xml_file_content.cpp:14 msgid "Active View Name" msgstr "Name der aktiven Ansicht" #: xml_file_content.cpp:15 msgid "X-Axis" msgstr "X-Achse" #: xml_file_content.cpp:16 msgid "Y-Axis" msgstr "Y-Achse" #: xml_file_content.cpp:17 msgid "Z-Axis" msgstr "Z-Achse" #: xml_file_content.cpp:18 msgid "Workzone" msgstr "Arbeitsbereich" #: xml_file_content.cpp:19 msgid "Camera Icon" msgstr "Kamera-Symbol" #: xml_file_content.cpp:20 msgid "Brush Size Info" msgstr "Brush-Größeninformation" #: xml_file_content.cpp:21 msgid "Light Volumes" msgstr "Lichtvolumina" #: xml_file_content.cpp:22 msgid "Brush Vertices" msgstr "Brush-Vertices" #: xml_file_content.cpp:23 msgid "Patch Inner Vertex" msgstr "Patch-Vertices (innen)" #: xml_file_content.cpp:24 msgid "Patch Corner Vertex" msgstr "Patch-Vertices (Ecke)" #: xml_file_content.cpp:25 msgid "Light Vertices (deselected)" msgstr "Licht-Vertices (nicht ausgewählt)" #: xml_file_content.cpp:26 msgid "Light Vertices (selected)" msgstr "Licht-Vertices (ausgewählt)" #: xml_file_content.cpp:27 msgid "Light Vertices (normal)" msgstr "Licht-Vertices (normal)" #: xml_file_content.cpp:28 msgid "Light Start/End (selected)" msgstr "Licht-Anfangs- und End-Vertices (ausgewählt)" #: xml_file_content.cpp:29 msgid "Light Start/End (deselected)" msgstr "Licht-Anfangs- und End-Vertices (nicht ausgewählt)" #: xml_file_content.cpp:30 msgid "XYView Crosshairs" msgstr "Fadenkreuz (XY-Ansicht)" #: xml_file_content.cpp:31 msgid "Drag-Selection Box" msgstr "Auswahl-Rechteck" #: xml_file_content.cpp:1 msgid "Open a map file" msgstr "Map öffnen" #: xml_file_content.cpp:2 msgid "Save the current map" msgstr "Die aktuelle Map speichern" #: xml_file_content.cpp:3 msgid "Change views" msgstr "Ansicht wechseln" #: xml_file_content.cpp:4 msgid "Select complete tall" msgstr "Inneres auswählen (Projektion)" #: xml_file_content.cpp:5 msgid "Select touching" msgstr "Berührtes auswählen" #: xml_file_content.cpp:6 msgid "Select inside" msgstr "Inneres auswählen" #: xml_file_content.cpp:7 msgid "Create Decals for selected Faces" msgstr "Decal-Patches für ausgewählte Faces erstellen" #: xml_file_content.cpp:8 msgid "x-axis Mirror" msgstr "An X-Achse Spiegeln" #: xml_file_content.cpp:9 msgid "x-axis Rotate" msgstr "Um X-Achse rotieren" #: xml_file_content.cpp:10 msgid "y-axis Mirror" msgstr "An Y-Achse Spiegeln" #: xml_file_content.cpp:11 msgid "y-axis Rotate" msgstr "Um Y-Achse rotieren" #: xml_file_content.cpp:12 msgid "z-axis Mirror" msgstr "An Z-Achse Spiegeln" #: xml_file_content.cpp:13 msgid "z-axis Rotate" msgstr "Um Z-Achse rotieren" #: xml_file_content.cpp:14 msgid "Snap selection to grid" msgstr "Auswahl am Raster ausrichten" #: xml_file_content.cpp:15 msgid "Floor selection" msgstr "Auswahl auf den Boden setzen" #: xml_file_content.cpp:16 msgid "CSG Subtract" msgstr "CSG Subtraktion" #: xml_file_content.cpp:17 msgid "CSG Merge" msgstr "CSG Zusammenfügen" #: xml_file_content.cpp:18 msgid "Hollow" msgstr "Aushöhlen" #: xml_file_content.cpp:19 msgid "Make Room" msgstr "Raum erstellen" #: xml_file_content.cpp:20 msgid "Group selected items" msgstr "Ausgewählte Elemente gruppieren" #: xml_file_content.cpp:21 msgid "Ungroup selected items" msgstr "Gruppierte Elemente auflösen" #: xml_file_content.cpp:22 msgid "Put caps on the current patch" msgstr "Cap-Patches für Auswahl erstellen" #: xml_file_content.cpp:23 msgid "Creates a NURBS curve" msgstr "NURBS-Kurve erstellen" #: xml_file_content.cpp:24 msgid "Convert the selected curve (NURBS <-> CatmullRom)" msgstr "Konvertiert die ausgewählte Kurve NURBS <-> CatmullRom" #: xml_file_content.cpp:25 msgid "Appends a control point to the selected curves" msgstr "Einen Kurvenkontrollpunkt zur ausgewählten Kurve hinzufügen" #: xml_file_content.cpp:26 msgid "Inserts a curve control point before the selected ones" msgstr "Fügt einen Kurvenkontrollpunkt vor dem ausgewählten Punkt ein" #: xml_file_content.cpp:27 msgid "Removes the selected curve control points" msgstr "Ausgewählte Kurvenkontrollpunkte entfernen" #: xml_file_content.cpp:29 msgid "Find & Replace" msgstr "Suchen & Ersetzen" #: xml_file_content.cpp:30 msgid "Decrease Grid Size" msgstr "Rastergröße verkleinern" #: xml_file_content.cpp:31 msgid "Increase Grid Size" msgstr "Rastergröße vergrößern" #: xml_file_content.cpp:32 msgid "Snap to Grid" msgstr "Am Raster ausrichten" #: xml_file_content.cpp:33 msgid "Merge Selection" msgstr "Auswahl zusammenführen" #: xml_file_content.cpp:34 msgid "Flip Selection Horiz (S-Axis)" msgstr "Auswahl Horizontal kippen (S-Achse)" #: xml_file_content.cpp:35 msgid "Flip Selection Vertical (T-Axis)" msgstr "Auswahl vertikal kippen (T-Achse)" #: xml_file_content.cpp:36 msgid "Select Related Items" msgstr "Verbundene Objekte auswählen" #: xml_file_content.cpp:1 msgid "Select Vertices" msgstr "Vertices auswählen" #: xml_file_content.cpp:2 msgid "Select Edges" msgstr "Kanten auswählen" #: xml_file_content.cpp:4 msgid "Select Entities" msgstr "Entities auswählen" #: xml_file_content.cpp:5 msgid "Select Group Parts" msgstr "Teile einer Gruppe auswähen" #: xml_file_content.cpp:6 msgid "Show/hide all light volumes" msgstr "Zeige/verberge alle Lichtvolumina" #: xml_file_content.cpp:7 msgid "Show/hide all speaker volumes" msgstr "Zeige/verberge alle Speaker-Volumina" #: xml_file_content.cpp:10 msgid "Rotate func_* Entities around origin" msgstr "Drehe func_*-Entities um deren Ursprung" #: xml_file_content.cpp:11 msgid "Snap Rotation Pivot to Grid" msgstr "Rotationspivot am Raster ausrichten" #: xml_file_content.cpp:12 msgid "Drag-resize entities symmetrically (leave origin unchanged)" msgstr "" "Symmetrisches Verändern von Entities beim Ziehen (Ursprung bleibt " "unverändert)" #: xml_file_content.cpp:13 msgid "Offset cloned objects by one grid unit to the right and downwards." msgstr "" "Duplizierte Objekte um eine Rastereinheit nach rechts unten verschieben" #: xml_file_content.cpp:14 msgid "Translate" msgstr "Translahieren" #: xml_file_content.cpp:16 msgid "Resize" msgstr "Größe ändern" #: xml_file_content.cpp:18 msgid "Model Scaler" msgstr "Modell-Skalierung" #: xml_file_content.cpp:19 msgid "Hide Unused" msgstr "Nicht Benutztes verbergen" #: xml_file_content.cpp:20 msgid "Show Favourites only" msgstr "Favoriten anzeigen" #: xml_file_content.cpp:21 msgid "Toggle Grid" msgstr "Raster anzeigen/verbergen" #: xml_file_content.cpp:22 msgid "Center Pivot when scaling faces" msgstr "Pivotpunkt beim Skalieren von Faces zentrieren" #: xml_file_content.cpp:1 msgid "DarkRadiant x.y.z" msgstr "DarkRadiant x.y.z" #: xml_file_content.cpp:2 msgid "Build date: 2014-08-04" msgstr "Kompilierungsdatum: %s" #: xml_file_content.cpp:3 msgid "" "https://www.darkradiant.net/\n" "\n" "This product contains software technology\n" "from id Software, Inc. ('id Technology').\n" "id Technology 2000 id Software,Inc.\n" "DarkRadiant is originally based \n" "on the GPL version of GtkRadiant.\n" "\n" "The Dark Mod (www.thedarkmod.com)" msgstr "" "https://www.darkradiant.net/\n" "\n" "Dieses Produkt enthält teilweise Software \n" "der Firma id Software, Inc. ('id Technology').\n" "id Technology 2000 id Software,Inc.\n" "\n" "DarkRadiant basiert auf der GPL version\n" "von GtkRadiant (www.qeradiant.com)\n" "\n" "The Dark Mod (www.thedarkmod.com)" #: xml_file_content.cpp:4 msgid "wxWidgets Properties" msgstr "wxWidgets Eigenschaften" #: xml_file_content.cpp:5 xml_file_content.cpp:8 msgid "Version:" msgstr "Version:" #: xml_file_content.cpp:6 msgid "OpenGL Properties" msgstr "OpenGL Eigenschaften" #: xml_file_content.cpp:7 msgid "Vendor:" msgstr "Hersteller:" #: xml_file_content.cpp:9 msgid "Renderer:" msgstr "Renderer:" #: xml_file_content.cpp:10 msgid "OpenGL Extensions" msgstr "OpenGL Erweiterungen" #: xml_file_content.cpp:1 msgid "wireframeBtn" msgstr "wireframeBtn" #: xml_file_content.cpp:2 msgid "flatShadeBtn" msgstr "flatShadeBtn" #: xml_file_content.cpp:3 msgid "texturedBtn" msgstr "texturedBtn" #: xml_file_content.cpp:4 msgid "lightingBtn" msgstr "lightingBtn" #: xml_file_content.cpp:5 xml_file_content.cpp:1 msgid "startTimeButton" msgstr "startTimeButton" #: xml_file_content.cpp:6 xml_file_content.cpp:3 msgid "stopTimeButton" msgstr "stopTimeButton" #: xml_file_content.cpp:7 msgid "clipPlaneToggleButton" msgstr "clipPlaneToggleButton" #: xml_file_content.cpp:8 msgid "clipPlaneInButton" msgstr "clipPlaneInButton" #: xml_file_content.cpp:9 msgid "clipPlaneOutButton" msgstr "clipPlaneOutButton" #: xml_file_content.cpp:3 msgid "Command Arguments" msgstr "Befehlsargumente" #: xml_file_content.cpp:4 msgid "Command Properties" msgstr "Befehlseigenschaften" #: xml_file_content.cpp:5 msgid "Wait until finished" msgstr "Warten bis Befehl fertig ausgeführt wurde" #: xml_file_content.cpp:1 msgid "Conversation Entities" msgstr "Konversations-Entities" #: xml_file_content.cpp:4 msgid "Conversations" msgstr "Konversationen" #: xml_file_content.cpp:10 xml_file_content.cpp:7 msgid "Clear" msgstr "Löschen" #: xml_file_content.cpp:1 msgid "Properties" msgstr "Eigenschaften" #: xml_file_content.cpp:3 msgid "Actors must be within talk distance" msgstr "Akteur müssen in Sprechweite sein" #: xml_file_content.cpp:4 msgid "Actors always face each other while talking" msgstr "Akteure sehen sich beim Sprechen gegenseitig an" #: xml_file_content.cpp:5 msgid "Let this conversation play" msgstr "Diese Konversation wird maximal" #: xml_file_content.cpp:6 msgid "times at maximum" msgstr "Mal(e) abgespielt" #: xml_file_content.cpp:7 msgid "Actors" msgstr "Akteure" #: xml_file_content.cpp:10 msgid "Validate all" msgstr "Alle überprüfen" #: xml_file_content.cpp:11 msgid "Commands" msgstr "Befehle" #: xml_file_content.cpp:14 xml_file_content.cpp:9 msgid "Move up" msgstr "Nach oben" #: xml_file_content.cpp:15 xml_file_content.cpp:10 msgid "Move down" msgstr "Nach unten" #: xml_file_content.cpp:5 msgid "Classname:" msgstr "Klassenname:" #: xml_file_content.cpp:6 msgid "Spawnarg:" msgstr "Wertepaar:" #: xml_file_content.cpp:7 msgid "Argument:" msgstr "Argument:" #: xml_file_content.cpp:2 xml_file_content.cpp:12 msgid "-" msgstr "-" #: xml_file_content.cpp:3 xml_file_content.cpp:4 msgid "Description:" msgstr "Beschreibung:" #: xml_file_content.cpp:1 msgid "Output File" msgstr "Zieldatei" #: xml_file_content.cpp:2 msgid "Output Format:" msgstr "Export-Format:" #: xml_file_content.cpp:3 msgid "File Path:" msgstr "Dateipfad:" #: xml_file_content.cpp:4 msgid "Export Options" msgstr "Export-Optionen" #: xml_file_content.cpp:5 msgid "Center Objects around Origin" msgstr "Objekte um den Ursprung anordnen" #: xml_file_content.cpp:6 msgid "Skip Surfaces textured with Caulk" msgstr "Caulk-Flächen nicht exportieren" #: xml_file_content.cpp:7 msgid "Replace Selection with exported Model" msgstr "Auswahl durch exportiertes Modelle ersetzen" #: xml_file_content.cpp:8 msgid "Use Entity Origin as export Origin" msgstr "Verwende den Entity-Origin als Ursprung" #: xml_file_content.cpp:9 msgid "Export Lights as Objects (small octahedrons)" msgstr "Exportiere Lichter als Objekte (Oktaeder)" #: xml_file_content.cpp:11 msgid "Export" msgstr "Export" #: xml_file_content.cpp:3 xml_file_content.cpp:68 msgid "View" msgstr "Ansicht" #: xml_file_content.cpp:2 msgid "Rules" msgstr "Regeln" #: xml_file_content.cpp:7 msgid "" "Filter rules are applied in the shown order.\n" "\"Match\" is accepting regular expressions.\n" "\"Object\"-type filters can be used to match \"patch\" or \"brush\"." msgstr "" "Filterregeln werden in der angegebenen Reihenfolge angewandt.\n" "Das Ausdruck-Feld akzeptiert reguläre Ausdrücke (RegEx).\n" "Für Filter vom Typ Objekt können die Schlüsselwörter patch oder brush " "verwendet werden." #: xml_file_content.cpp:1 msgid "Find:" msgstr "Suchen:" #: xml_file_content.cpp:2 msgid "Replace:" msgstr "Ersetzen:" #: xml_file_content.cpp:3 msgid "Search current selection only" msgstr "Durchsuche nur die aktuelle Auswahl" #: xml_file_content.cpp:4 msgid "x shader(s) replaced." msgstr "x shader ersetzt." #: xml_file_content.cpp:5 msgid "Find and Replace" msgstr "Suchen & Ersetzen" #: xml_file_content.cpp:6 xml_file_content.cpp:13 xml_file_content.cpp:88 msgid "Close" msgstr "Schließen" #: xml_file_content.cpp:1 msgid "Light Volume" msgstr "Lichtvolumina" #: xml_file_content.cpp:2 msgid "Omnidirectional" msgstr "Omnidirektional" #: xml_file_content.cpp:3 msgid "Projected" msgstr "Projektion" #: xml_file_content.cpp:4 msgid "Use start/end" msgstr "Verwende Start/End" #: xml_file_content.cpp:5 msgid "Colour" msgstr "Farbe" #: xml_file_content.cpp:6 xml_file_content.cpp:9 msgid "Options" msgstr "Optionen" #: xml_file_content.cpp:7 msgid "Parallel" msgstr "Parallel" #: xml_file_content.cpp:8 msgid "Do not cast shadows (fast)" msgstr "Wirft keine Schatten (schnell)." #: xml_file_content.cpp:9 msgid "Skip specular lighting" msgstr "Kein Specularmap-Rendering" #: xml_file_content.cpp:10 msgid "Skip diffuse lighting" msgstr "Kein Diffusemap-Rendering" #: xml_file_content.cpp:11 msgid "Affects Lightgem and AI" msgstr "Beeinflusst Lightgem und KI" #: xml_file_content.cpp:12 msgid "Light Texture" msgstr "Lichttextur" #: xml_file_content.cpp:1 msgid "Mission Info" msgstr "Missions-Info" #: xml_file_content.cpp:2 msgid "Title:" msgstr "Titel:" #: xml_file_content.cpp:3 msgid "Author:" msgstr "Autor:" #: xml_file_content.cpp:6 msgid "Required TDM Version:" msgstr "Erforderliche TDM-Version:" #: xml_file_content.cpp:7 msgid "(optional, e.g. \"2.03\")" msgstr "(option, z.B. \"2.03\")" #: xml_file_content.cpp:8 msgid "Mission Titles:" msgstr "Missions-Titel:" #: xml_file_content.cpp:9 msgid "" "Optional. Fill in if this \n" "package is a campaign \n" "containing several maps" msgstr "" "Optional. Nur ausfüllen\n" "bei Kampagnen bestehend\n" "aus mehreren Missionen." #: xml_file_content.cpp:10 xml_file_content.cpp:2 msgid "Output Path:" msgstr "Zielpfad:" #: xml_file_content.cpp:11 xml_file_content.cpp:3 msgid "C:GamesDarkmodfmsgathers" msgstr "C:\\Games\\Darkmod\\fms\\gathers" #: xml_file_content.cpp:12 msgid "Edit readme.txt..." msgstr "Bearbeite readme.txt Datei..." #: xml_file_content.cpp:1 msgid "Mission Readme" msgstr "Missions-Readme" #: xml_file_content.cpp:1 msgid "Options:" msgstr "Optionen:" #: xml_file_content.cpp:2 msgid "Surround with monsterclip brush" msgstr "Mit Monsterclip einhüllen" #: xml_file_content.cpp:3 msgid "Reload Skins" msgstr "Skins neu laden" #: xml_file_content.cpp:4 msgid "Reload Models" msgstr "Modelle neu laden" #: xml_file_content.cpp:2 msgid "Difficulty" msgstr "Schwierigkeitsgrad" #: xml_file_content.cpp:3 msgid "Initial State" msgstr "Anfangszustand" #: xml_file_content.cpp:4 xml_file_content.cpp:20 msgid "Flags" msgstr "Flags" #: xml_file_content.cpp:5 msgid "Mandatory" msgstr "Obgligatorisches Ziel" #: xml_file_content.cpp:6 msgid "Ongoing" msgstr "Laufend" #: xml_file_content.cpp:7 xml_file_content.cpp:22 msgid "Irreversible" msgstr "Irreversibel" #: xml_file_content.cpp:9 msgid "Enabling Objectives" msgstr "Vorausgesetzte Ziele" #: xml_file_content.cpp:10 xml_file_content.cpp:11 msgid "Success Logic" msgstr "Logik für Erfüllung:" #: xml_file_content.cpp:11 msgid "Failure Logic" msgstr "Logik für Fehlschlag" #: xml_file_content.cpp:12 msgid "Completion Script" msgstr "Skript bei Erfüllung" #: xml_file_content.cpp:13 msgid "Failure Script" msgstr "Skript bei Fehlschlag" #: xml_file_content.cpp:14 msgid "Completion Target" msgstr "Target bei Erfüllung" #: xml_file_content.cpp:15 msgid "Failure Target" msgstr "Target bei Fehlschlag" #: xml_file_content.cpp:21 msgid "Satisfied at start" msgstr "Bei Missionsstart erfüllt" #: xml_file_content.cpp:23 msgid "Boolean NOT" msgstr "Negieren" #: xml_file_content.cpp:24 msgid "Player responsible" msgstr "Spieler ist verantwortlich" #: xml_file_content.cpp:25 msgid "&OK" msgstr "OK" #: xml_file_content.cpp:26 msgid "&Cancel" msgstr "Abbrechen" #: xml_file_content.cpp:1 msgid "Objective Conditions" msgstr "Missionsziel-Bedingungen" #: xml_file_content.cpp:4 msgid "Condition" msgstr "Bedingung" #: xml_file_content.cpp:5 msgid "Source Mission:" msgstr "Quellmission:" #: xml_file_content.cpp:6 msgid "Source Objective:" msgstr "Quell-Missionsziel:" #: xml_file_content.cpp:7 msgid "Source Objective State:" msgstr "Status des Quell-Missionsziels:" #: xml_file_content.cpp:8 msgid "Target Objective:" msgstr "Missionsziel:" #: xml_file_content.cpp:9 msgid "Action:" msgstr "Aktion:" #: xml_file_content.cpp:10 msgid "Action Value:" msgstr "Wert:" #: xml_file_content.cpp:11 msgid "Sentence" msgstr "In Worten" #: xml_file_content.cpp:1 msgid "Objective Entities" msgstr "Missionsziel-Entities" #: xml_file_content.cpp:4 msgid "Objectives" msgstr "Missionsziele" #: xml_file_content.cpp:12 msgid "Edit Mission Success Logic" msgstr "Logik für Erfüllung bearbeiten" #: xml_file_content.cpp:1 msgid "Use background image" msgstr "Verwende Hintergrundbild" #: xml_file_content.cpp:2 msgid "Image file" msgstr "Bilddatei" #: xml_file_content.cpp:3 msgid "Transparency" msgstr "Transparenz" #: xml_file_content.cpp:4 msgid "transparent" msgstr "transparent" #: xml_file_content.cpp:5 msgid "opaque" msgstr "intransparent" #: xml_file_content.cpp:6 msgid "Image scale" msgstr "Bildskalierung" #: xml_file_content.cpp:7 msgid "Horizontal offset" msgstr "Horizontale Verschiebung" #: xml_file_content.cpp:8 msgid "Vertical offset" msgstr "Vertikale Verschiebung" #: xml_file_content.cpp:10 msgid "Keep aspect ratio" msgstr "Seitenverhältnis beibehalten" #: xml_file_content.cpp:11 msgid "Zoom image with viewport" msgstr "Bild zusammen mit 2D-Ansicht zoomen" #: xml_file_content.cpp:12 msgid "Pan image with viewport" msgstr "Bild zusammen mit 2D-Ansicht verschieben" #: xml_file_content.cpp:1 msgid "Particle Definitions" msgstr "Partikeldefinitionen" #: xml_file_content.cpp:5 msgid "Particle Stages" msgstr "Partikelstufen" #: xml_file_content.cpp:7 xml_file_content.cpp:3 xml_file_content.cpp:32 msgid "Remove" msgstr "Entfernen" #: xml_file_content.cpp:8 msgid "Toggle Visibility" msgstr "Anzeigen/Verstecken" #: xml_file_content.cpp:9 msgid "Up" msgstr "Nach oben" #: xml_file_content.cpp:10 msgid "Down" msgstr "Nach unten" #: xml_file_content.cpp:12 msgid "Depth Hack:" msgstr "Depth Hack:" #: xml_file_content.cpp:13 msgid "Stage Settings" msgstr "Stufeneinstellungen" #: xml_file_content.cpp:16 msgid "Colour:" msgstr "Farbe:" #: xml_file_content.cpp:17 msgid "Fade Colour:" msgstr "Fade-Farbe" #: xml_file_content.cpp:18 msgid "Use Entity Colour" msgstr "Entity-Farbe verwenden" #: xml_file_content.cpp:19 msgid "Fade In Fraction:" msgstr "Fade In Fraction:" #: xml_file_content.cpp:20 msgid "Fade Out Fraction:" msgstr "Fade Out Fraction:" #: xml_file_content.cpp:21 msgid "Fade Index Fraction:" msgstr "Fade Index Fraction:" #: xml_file_content.cpp:22 msgid "Animation:" msgstr "Animation:" #: xml_file_content.cpp:23 msgid "Frames:" msgstr "Frames:" #: xml_file_content.cpp:24 msgid "Rate:" msgstr "Abspielrate:" #: xml_file_content.cpp:25 msgid "FPS" msgstr "FPS" #: xml_file_content.cpp:26 msgid "Count / Time" msgstr "Anzahl / Zeit" #: xml_file_content.cpp:27 msgid "Count:" msgstr "Anzahl:" #: xml_file_content.cpp:28 msgid "Duration / sec:" msgstr "Dauer / Sek.:" #: xml_file_content.cpp:29 msgid "Bunching:" msgstr "Häufung:" #: xml_file_content.cpp:30 msgid "Cycles:" msgstr "Durchläufe:" #: xml_file_content.cpp:31 msgid "Time Offset / sec:" msgstr "Zeitversatz / Sek." #: xml_file_content.cpp:32 msgid "Dead Time / sec:" msgstr "Totzeit / Sek.:" #: xml_file_content.cpp:33 msgid "Size / Speed" msgstr "Größe / Geschw." #: xml_file_content.cpp:34 msgid "Speed:" msgstr "Geschw.:" #: xml_file_content.cpp:35 xml_file_content.cpp:38 xml_file_content.cpp:41 #: xml_file_content.cpp:44 msgid "From:" msgstr "Von:" #: xml_file_content.cpp:36 xml_file_content.cpp:39 xml_file_content.cpp:42 #: xml_file_content.cpp:45 msgid "To:" msgstr "Bis:" #: xml_file_content.cpp:37 msgid "Size:" msgstr "Größe:" #: xml_file_content.cpp:40 msgid "Rotation Speed:" msgstr "Rotationsgeschwindigkeit:" #: xml_file_content.cpp:43 msgid "Aspect Ratio:" msgstr "Seitenverhältnis:" #: xml_file_content.cpp:46 msgid "Gravity:" msgstr "Schwerkraft:" #: xml_file_content.cpp:47 msgid "Use World Gravity" msgstr "Welt-Schwerkraftrichtung verwenden" #: xml_file_content.cpp:48 msgid "Bounds Expansion:" msgstr "Bounds Expansion:" #: xml_file_content.cpp:49 msgid "Distribution" msgstr "Verteilung" #: xml_file_content.cpp:50 msgid "Shape:" msgstr "Form:" #: xml_file_content.cpp:51 msgid "Rectangular" msgstr "Rechteckig" #: xml_file_content.cpp:52 msgid "Cylindric" msgstr "Zylindrisch" #: xml_file_content.cpp:53 msgid "Spherical" msgstr "Sphärisch" #: xml_file_content.cpp:54 msgid "X Size:" msgstr "X-Größe:" #: xml_file_content.cpp:55 msgid "Y Size:" msgstr "Y-Größe:" #: xml_file_content.cpp:56 msgid "Z Size:" msgstr "Z-Größe:" #: xml_file_content.cpp:57 msgid "Ring Size:" msgstr "Ringgröße:" #: xml_file_content.cpp:58 msgid "Offset:" msgstr "Abstand:" #: xml_file_content.cpp:59 msgid "Randomness:" msgstr "Zufälligkeit:" #: xml_file_content.cpp:60 msgid "Distribute Particles randomly within Volume" msgstr "Verteile Polygone zufällig im angegebenen Volumen" #: xml_file_content.cpp:61 msgid "Direction / Orientation" msgstr "Richtung / Orientierung" #: xml_file_content.cpp:62 msgid "Direction:" msgstr "Richtung:" #: xml_file_content.cpp:63 msgid "Cone" msgstr "Kegel" #: xml_file_content.cpp:64 msgid "Outward" msgstr "Auswärts " #: xml_file_content.cpp:65 msgid "Cone Angle:" msgstr "Öffnungswinkel:" #: xml_file_content.cpp:66 msgid "Upward Bias:" msgstr "Aufwärtsdrift:" #: xml_file_content.cpp:67 msgid "Orientation:" msgstr "Orientierung:" #: xml_file_content.cpp:69 msgid "Aimed" msgstr "Ausgerichtet" #: xml_file_content.cpp:70 msgid "X" msgstr "X" #: xml_file_content.cpp:71 msgid "Y" msgstr "Y" #: xml_file_content.cpp:72 msgid "Z" msgstr "Z" #: xml_file_content.cpp:73 msgid "Trails:" msgstr "Spuren:" #: xml_file_content.cpp:74 msgid "Time:" msgstr "Zeit:" #: xml_file_content.cpp:75 msgid "Initial Angle:" msgstr "Anfangswinkel:" #: xml_file_content.cpp:76 msgid "Path" msgstr "Pfad" #: xml_file_content.cpp:77 msgid "Path Type:" msgstr "Pfad-Typ:" #: xml_file_content.cpp:78 msgid "Standard" msgstr "Standard" #: xml_file_content.cpp:79 msgid "Flies" msgstr "Fliegen" #: xml_file_content.cpp:80 msgid "Helix" msgstr "Helix" #: xml_file_content.cpp:81 msgid "Radial Speed:" msgstr "Radiale Geschwindigkeit:" #: xml_file_content.cpp:82 msgid "Axial Speed:" msgstr "Axiale Geschw.:" #: xml_file_content.cpp:83 msgid "Sphere Radius:" msgstr "Kugelradius:" #: xml_file_content.cpp:84 msgid "Cylinder Size X:" msgstr "Zylindergröße X:" #: xml_file_content.cpp:85 msgid "Cylinder Size Y:" msgstr "Zylindergröße Y:" #: xml_file_content.cpp:86 msgid "Cylinder Size Z:" msgstr "Zylindergröße Z:" #: xml_file_content.cpp:87 msgid "Note: changes will be written to the file ....." msgstr "Hinweis: alle Änderungen werden in den File ... geschrieben" #: xml_file_content.cpp:1 msgid "Create simple Patch Mesh" msgstr "Neuer einfacher Patch" #: xml_file_content.cpp:2 msgid "Width:" msgstr "Breite:" #: xml_file_content.cpp:3 msgid "Height:" msgstr "Höhe:" #: xml_file_content.cpp:4 msgid "Remove selected Brush" msgstr "Entferne die ausgewählte Brush" #: xml_file_content.cpp:1 msgid "Patch Control Vertices" msgstr "Patch-Kontrollpunkte" #: xml_file_content.cpp:2 msgid "Row:" msgstr "Reihe:" #: xml_file_content.cpp:3 msgid "Column:" msgstr "Spalte:" #: xml_file_content.cpp:4 msgid "Coordinates" msgstr "Koordinaten" #: xml_file_content.cpp:5 msgid "Patch Tesselation" msgstr "Patch-Tesselierung" #: xml_file_content.cpp:6 msgid "Fixed Subdivisions" msgstr "Fixe Tesselierung" #: xml_file_content.cpp:7 msgid "Horizontal:" msgstr "Horizontal:" #: xml_file_content.cpp:8 msgid "Vertical:" msgstr "Vertikal:" #: xml_file_content.cpp:1 msgid "Thicken selected Patches" msgstr "Ausgewählte Patches extrudieren" #: xml_file_content.cpp:2 msgid "Extrude along Vertex Normals" msgstr "Extrusion entlang der Vertex-Normalen" #: xml_file_content.cpp:3 msgid "Extrude along X-Axis" msgstr "Extrusion entlang der X-Achse" #: xml_file_content.cpp:4 msgid "Extrude along Y-Axis" msgstr "Extrusion entlang der Y-Achse" #: xml_file_content.cpp:5 msgid "Extrude along Z-Axis" msgstr "Extrusion entlang der Z-Achse" #: xml_file_content.cpp:6 msgid "Thickness (units):" msgstr "Tiefe (in Rastereinheiten):" #: xml_file_content.cpp:7 msgid "Create Seams (\"side walls\")" msgstr "Umschließen (erzeuge \"Seitenwände\")" #: xml_file_content.cpp:1 msgid "General Properties" msgstr "Allgemeine Eigenschaften" #: xml_file_content.cpp:2 msgid "Inventory Name:" msgstr "Name im Inventory:" #: xml_file_content.cpp:3 msgid "XData Name:" msgstr "XData-Name:" #: xml_file_content.cpp:4 msgid "Number of Pages:" msgstr "Anzahl der Seiten:" #: xml_file_content.cpp:5 msgid "Layout:" msgstr "Layout:" #: xml_file_content.cpp:6 msgid "One-sided" msgstr "Einseitig" #: xml_file_content.cpp:7 msgid "Two-sided" msgstr "Zweiseitig" #: xml_file_content.cpp:8 msgid "Pageturn Sound:" msgstr "Sound beim Umblättern:" #: xml_file_content.cpp:9 msgid "Page Editing" msgstr "Textbearbeitung" #: xml_file_content.cpp:10 msgid "Insert Page" msgstr "Seite einfügen" #: xml_file_content.cpp:11 msgid "Current Page:" msgstr "Aktuelle Seite:" #: xml_file_content.cpp:12 msgid "1" msgstr "1" #: xml_file_content.cpp:13 msgid "Remove Page" msgstr "Seite Entfernen" #: xml_file_content.cpp:14 msgid "GUI Definition:" msgstr "GUI-Definition:" #: xml_file_content.cpp:18 msgid "Body" msgstr "Text:" #: xml_file_content.cpp:19 msgid "Tools" msgstr "Werkzeuge" #: xml_file_content.cpp:22 msgid "Save and Close" msgstr "Speichern & Schließen" #: xml_file_content.cpp:2 msgid "pauseTimeButton" msgstr "pauseTimeButton" #: xml_file_content.cpp:4 msgid "prevButton" msgstr "prevButton" #: xml_file_content.cpp:5 msgid "nextButton" msgstr "nextButton" #: xml_file_content.cpp:6 msgid "texturedModeButton" msgstr "texturedModeButton" #: xml_file_content.cpp:7 msgid "lightingModeButton" msgstr "lightingModeButton" #: xml_file_content.cpp:8 msgid "gridButton" msgstr "gridButton" #: xml_file_content.cpp:1 msgid "Stims" msgstr "Stims" #: xml_file_content.cpp:4 xml_file_content.cpp:33 msgid "Type:" msgstr "Typ:" #: xml_file_content.cpp:6 msgid "Activation Timer:" msgstr "Aktivierungs-Timer:" #: xml_file_content.cpp:7 msgid "h" msgstr "h" #: xml_file_content.cpp:8 msgid "m" msgstr "m" #: xml_file_content.cpp:9 msgid "s" msgstr "s" #: xml_file_content.cpp:10 xml_file_content.cpp:16 xml_file_content.cpp:18 msgid "ms" msgstr "ms" #: xml_file_content.cpp:11 msgid "Timer restarts after firing" msgstr "Timer startet neu nach Ablauf" #: xml_file_content.cpp:12 msgid "Timer reloads" msgstr "Timer-Neustarts" #: xml_file_content.cpp:13 msgid "times" msgstr "Mal(e)" #: xml_file_content.cpp:14 msgid "Timer waits for start (when disabled: starts at spawn time)" msgstr "" "Timer wartet auf Start (wenn Option deaktiviert: Timer startet zur Spawn-" "Zeit)" #: xml_file_content.cpp:15 msgid "Time interval:" msgstr "Zeitintervall:" #: xml_file_content.cpp:17 msgid "Duration:" msgstr "Dauer:" #: xml_file_content.cpp:19 msgid "Radius" msgstr "Radius" #: xml_file_content.cpp:20 msgid "Use bounds" msgstr "Boundingbox benutzen" #: xml_file_content.cpp:21 msgid "Radius changes over time to:" msgstr "Radius verändert sich über die Zeit zu:" #: xml_file_content.cpp:22 msgid "Magnitude:" msgstr "Stärke:" #: xml_file_content.cpp:23 msgid "Falloff Exponent:" msgstr "Falloff-Exponent:" #: xml_file_content.cpp:24 msgid "Max Fire Count:" msgstr "Max. Auslösevorgänge:" #: xml_file_content.cpp:25 xml_file_content.cpp:35 msgid "Chance:" msgstr "Wahrscheinlichkeit:" #: xml_file_content.cpp:26 msgid "Velocity:" msgstr "Geschwindigkeit:" #: xml_file_content.cpp:27 msgid "Bounds:" msgstr "Boundingbox:" #: xml_file_content.cpp:28 msgid "Min:" msgstr "Min:" #: xml_file_content.cpp:29 msgid "Max:" msgstr "Max:" #: xml_file_content.cpp:30 msgid "Responses" msgstr "Responses" #: xml_file_content.cpp:36 msgid "Random Effects:" msgstr "Zufällige Effekte:" #: xml_file_content.cpp:37 msgid "Response Effects" msgstr "Response-Effekte" #: xml_file_content.cpp:38 msgid "Custom Stims" msgstr "Benutzerdefinierte Stims" #~ msgid "Reload map from .map file" #~ msgstr "Von .map-Datei neu laden" #~ msgid "Cubic clip the camera view" #~ msgstr "Far-Clip-Ebene verwenden" #~ msgid "Settings/Primitives" #~ msgstr "Einstellungen/Primitive" #~ msgid "Default texture scale" #~ msgstr "Standard-Texturskalierung" #~ msgid "Enable Texture Lock (for Brushes)" #~ msgstr "Textur-Lock aktivieren (für Brushes)" #~ msgid "This Is Not Dromed Warning" #~ msgstr "Das-ist-nicht-Dromed-Warnung" #~ msgid "" #~ "Note: be careful when using the CSG tool, as you might end up\n" #~ "with an unnecessary number of tiny brushes and/or leaks.\n" #~ "This popup will not be shown again." #~ msgstr "" #~ "Hinweis: das CSG Werkzeug sollte vorsichtig benutzt werden,\n" #~ "da es unnötig viele sehr kleine Brushes und/oder Lecks erzeugen kann.\n" #~ "Dieser Hinweis wird nicht wieder erscheinen." #~ msgid "CSG Subtract: No brushes selected." #~ msgstr "CSG Subtraktion: Keine Brushes ausgewählt." #~ msgid "CSG Merge: No brushes selected." #~ msgstr "CSG Zusammenfügen: Keine Brushes ausgewählt." #~ msgid "Settings/Clipper" #~ msgstr "Einstellungen/Clipper" #~ msgid "Clipper tool uses caulk texture" #~ msgstr "Clipper verwendet Caulk-Textur für neu erzeugte Faces." #~ msgid "Caulk shader name" #~ msgstr "Name des Caulk Shaders" #~ msgid "Reloading Defs" #~ msgstr "Neuladen der Definitionen" #~ msgid "createNodeForEntity(): cannot create entity for NULL entityclass." #~ msgstr "" #~ "createNodeForEntity: Entity für Entity-Klasse NULL kann nicht erstellt " #~ "werden." #~ msgid "All Files" #~ msgstr "Alle Dateien" #~ msgid "Default" #~ msgstr "Standard" #~ msgid "" #~ "To replace the selection with the exported model\n" #~ "the output path must be located within the mod/project." #~ msgstr "" #~ "Um die Auswahl durch das exportierte Model zu ersetzen\n" #~ "muss der Pfad innerhalb des Projekts/Mods liegen." #~ msgid "Unable to create model, classname not found." #~ msgstr "Kann Modell nicht erzeugen, Klassenname nicht gefunden." #~ msgid "Unknown map format" #~ msgstr "Unbekanntes Map-Format" #~ msgid "" #~ "Failure reading map from clipboard:\n" #~ "{0}" #~ msgstr "" #~ "Fehler beim Lesen der Mapdatei aus der Zwischenablage:\n" #~ "{0}" #~ msgid "Writing node {0:d}" #~ msgstr "Schreibe Knoten {0:d}" #~ msgid "Loading entity {0:d}\n" #~ msgstr "Lade Entity {0:d}\n" #~ msgid "Reloading Models" #~ msgstr "Neuladen der Modelle" #~ msgid "Snapshot Folder Size Warning" #~ msgstr "Grössenlimit des Schnappschussverzeichnisses (MB)" #~ msgid "" #~ "Failed parsing entity {0:d}:\n" #~ "{1}" #~ msgstr "" #~ "Fehler beim Parsen der Entity {0:d}\n" #~ "{1}" #~ msgid "Unable to parse map version (parse exception)." #~ msgstr "Konnte Map-Version nicht parsen (Parse-Exception)" #~ msgid "Could not recognise map version number format." #~ msgstr "Nicht erkennbares Versionsnummernformat" #~ msgid "Incorrect map version: required {0:f}, found {1:f}" #~ msgstr "Ungültige Map-Version: erwartet: {0:f}, gefunden: {1:f}" #~ msgid "Primitive #{0:d}: parse error" #~ msgstr "Primitiv #{0:d}: Parserfehler" #~ msgid "Primitive #{0:d}: parse exception {1}" #~ msgstr "Primitiv #{0:d}: Parserfehler {1}" #~ msgid "Parsed invalid value '{0}' for key '{1}'" #~ msgstr "Ungültigen Wert '{0}' für Schlüssel '{1}' eingelesen" #~ msgid "BrushDefParser: invalid token '{0}'" #~ msgstr "BrushDefParser: Ungültiges Token '{0}'" #~ msgid "BrushDef3Parser: invalid token '{0}'" #~ msgstr "BrushDef3Parser: ungültiges Token '{0}'" #~ msgid "BrushDef3ParserQuake4: invalid token '{0}'" #~ msgstr "BrushDef3ParserQuake4: ungültiges Token '{0}'" #~ msgid "Map Info File Version invalid" #~ msgstr "Ungültige Map Info File Verson" #~ msgid "unnamed.map" #~ msgstr "unbenannt.map" #~ msgid "Preprocessing" #~ msgstr "Vorverarbeitung" #~ msgid "Saving Map" #~ msgstr "Speichere Map" #~ msgid "Importing..." #~ msgstr "Importiere..." #~ msgid "" #~ "Save changes to map \"{0}\"\n" #~ "before closing?" #~ msgstr "" #~ "Sollen die Änderungen an der Map \"{0}\"\n" #~ "vor dem Schließen gespeichert werden?" #~ msgid "{0:d} minutes" #~ msgstr "{0:d} Minuten" #~ msgid "{0:d} seconds" #~ msgstr "{0:d} Sekunden" #~ msgid "" #~ "If you don't save, changes from the last {0}\n" #~ "will be lost." #~ msgstr "" #~ "Wenn Du nicht sicherst, gehen die Änderungen\n" #~ "der letzten {0} verloren." #~ msgid "Save Map" #~ msgstr "Map speichern" #~ msgid "Save Copy As..." #~ msgstr "Speichere Kopie als..." #~ msgid "New Map" #~ msgstr "Neue Map" #~ msgid "Open map" #~ msgstr "Map öffnen" #~ msgid "Import map" #~ msgstr "Map importieren" #~ msgid "Export Map" #~ msgstr "Map-Export" #~ msgid "Export selection" #~ msgstr "Auswahl exportieren" #~ msgid "Save selected as Prefab" #~ msgstr "Auswahl als Prefab speichern" #~ msgid "" #~ "Failure running map event {0}:\n" #~ "{1}" #~ msgstr "" #~ "Fehler beim Auslösen des Map-Ereignisses:\n" #~ "{0}" #~ msgid "Map" #~ msgstr "Map" #~ msgid "Prefab" #~ msgstr "Prefab" #~ msgid "Portable Prefab" #~ msgstr "Portables Prefab" #~ msgid "File is write-protected: {0}" #~ msgstr "Datei ist schreibgeschützt: {0}" #~ msgid "" #~ "Could not determine map format of file:\n" #~ "{0}" #~ msgstr "Konnte das Format der Mapdatei nicht bestimmen: {0}" #~ msgid "Map loading cancelled" #~ msgstr "Ladevorgang abgebrochen" #~ msgid "" #~ "Failure reading map file:\n" #~ "{0}\n" #~ "\n" #~ "{1}" #~ msgstr "" #~ "Fehler beim Lesen der Mapdatei:\n" #~ "{0}\n" #~ "\n" #~ "{1}" #~ msgid "" #~ "Failure opening file:\n" #~ "{0}" #~ msgstr "" #~ "Fehler beim Öffnen der Datei:\n" #~ "{0}" #~ msgid "Map writing cancelled" #~ msgstr "Schreibvorgang abgebrochen" #~ msgid "Could not open output streams for writing" #~ msgstr "Fehler beim Öffnen der Output-Streams" #~ msgid "Could not open pointfile: {0}" #~ msgstr "Konnte das Pointfile nicht öffnen: {0}" #~ msgid "Warning: Camera not within region, can't set info_player_start." #~ msgstr "" #~ "Warnung: die Kamera befindet sich nicht innerhalb der Region, konnte " #~ "daher den Spielerstartpunkt nicht setzen." #~ msgid "Could not set Region: XY Top View not found." #~ msgstr "" #~ "Konnte Region nicht festlegen, weil die XY-Ansicht nicht gefunden wurde." #~ msgid "Could not set Region: please select a single Brush." #~ msgstr "Kann Region nicht festlegen: bitte einen einzelnen Brush auswählen." #~ msgid "This command is not available in component mode." #~ msgstr "Dieser Befehl steht im Komponentenmodus nicht zur Verfügung." #~ msgid "Could not set Region: nothing selected." #~ msgstr "Kann keine Region festlegen: keine Elemente ausgewählt." #~ msgid "Export region" #~ msgstr "Exportiere Region" #~ msgid "Settings/Model Export" #~ msgstr "Einstellungen/Model-Export" #~ msgid "Export Format for scaled Models" #~ msgstr "Export-Format für skalierte Models" #~ msgid "Initialising Module: {0}" #~ msgstr "Initialisiere Modul: {0}" #~ msgid "Searching for Modules" #~ msgstr "Suche nach Modulen" #~ msgid "Initialising Modules" #~ msgstr "Initialisiere Module" #~ msgid "Modules initialised" #~ msgstr "Module initialisiert" #~ msgid "Cannot save particle, it has not been registered yet." #~ msgstr "" #~ "Kann Partikeldefinition nicht speichern, sie wurde nicht registriert." #~ msgid "Cannot open file for reading: {0}" #~ msgstr "Kann die Datei nicht im Lesemodus öffnen: {0}" #~ msgid "Could not remove the file {0}" #~ msgstr "Kann die Datei nicht entfernen: {0}" #~ msgid "Could not rename the temporary file {0}" #~ msgstr "Konnte die temporäre Datei nicht umbenennen: {0}" #~ msgid "" #~ "Cannot stitch textures. \n" #~ "Could not cast nodes to patches." #~ msgstr "" #~ "Kann Texturen nicht zusammenheften.\n" #~ "Konnte Nodes nicht casten." #~ msgid "" #~ "Cannot stitch patch textures. \n" #~ "Exactly 2 patches must be selected." #~ msgstr "" #~ "Kann Texturen nicht zusammenheften, für diese Operation müssten genau 2 " #~ "Patches ausgewählt sein." #~ msgid "Cannot create end-cap, patch must have a width of 5." #~ msgstr "Kann keine End-Caps erzeugen, Patch muss eine Breite von 5 haben" #~ msgid "Cannot create bevel-cap, patch must have a width of 3." #~ msgstr "Kann keine Bevel-Caps erzeugen, Patch muss eine Breite von 3 haben" #~ msgid "Cannot create cylinder-cap, patch must have a width of 9." #~ msgstr "" #~ "Kann keine Zylinder-Caps erzeugen, Patch muss eine Breite von 9 haben" #~ msgid "Sorry. Patch is not suitable for this kind of operation." #~ msgstr "Patch ist nicht geeignet für diese Operation." #~ msgid "Settings/Patch" #~ msgstr "Einstellungen/Patches" #~ msgid "Patch Subdivide Threshold" #~ msgstr "Patch-Tesselierungsgrenzwert" #~ msgid "Can't append curve point - no entities with curve selected." #~ msgstr "Kann Kontrollpunkt nicht anfügen, keine Kurven ausgewählt." #~ msgid "Can't remove curve points - must be in vertex editing mode." #~ msgstr "" #~ "Kann Kontrollpunkte nicht entfernen, bitte vorher in den Vertex-Modus " #~ "wechseln." #~ msgid "Can't remove curve points - no entities with curves selected." #~ msgstr "Kann Kontrollpunkte nicht entfernen, keine Kurven ausgewählt." #~ msgid "Can't insert curve points - must be in vertex editing mode." #~ msgstr "" #~ "Kann Kontrollpunkte nicht einfügen, bitte vorher in den Vertex-Modus " #~ "wechseln." #~ msgid "Can't insert curve points - no entities with curves selected." #~ msgstr "Kann Kontrollpunkte nicht einfügen, keine Kurven ausgewählt." #~ msgid "Can't convert curves - no entities with curves selected." #~ msgstr "Kann Kurve nicht konvertieren, keine Kurven ausgewählt." #~ msgid "The name {0} already exists in this map!" #~ msgstr "Der Name {0} existiert bereits in dieser Map!" #~ msgid "Cannot set classname to an empty string." #~ msgstr "Der Klassenname darf nicht leer sein" #~ msgid "Cannot change classname to worldspawn." #~ msgstr "Der Klassenname darf nicht auf worldspawn gesetzt werden." #~ msgid "Cannot change classname of worldspawn entity." #~ msgstr "Der Klassenname der Worldspawn-Entity darf nicht geändert werden." #~ msgid "Critical: Cannot find selected entities." #~ msgstr "Kritischer Fehler: kann ausgewählte Entities nicht finden." #~ msgid "Exactly two entities must be selected for this operation." #~ msgstr "Für diese Operation müssen genau zwei Entities ausgewählt sein." #~ msgid "Unable to create entity {0}, no brushes selected." #~ msgstr "Entity {0} kann nicht erzeugt werden. Keine Brushes ausgewählt." #~ msgid "" #~ "Cannot reparent primitives to entity. Please select at least one brush/" #~ "patch and exactly one func_* entity. (The entity has to be selected last.)" #~ msgstr "" #~ "Kann die ausgewählten Primitive nicht neu zuordnen. Bitte zumindest einen " #~ "Brush/Patch sowie genau eine Entity auswählen. (Die Entity muss als " #~ "letztes ausgewählt worden sein.)" #~ msgid "" #~ "Cannot merge entities, the selection must consist of func_* entities " #~ "only.\n" #~ "(The first selected entity will be preserved.)" #~ msgstr "" #~ "Kann Entities nicht zusammenführen, die Auswahl muss ausschließlich aus " #~ "func_*-Entities bestehen.\n" #~ "(Die zuerst ausgewählte Entity bleibt dabei erhalten.)" #~ msgid "No patches selected." #~ msgstr "Keine Patches ausgewählt." #~ msgid "Could not create patch." #~ msgstr "Konnte Patch nicht erzeugen." #~ msgid "No faces selected." #~ msgstr "Keine Faces ausgewählt." #~ msgid "{0:d} faces were not suitable (had more than 4 vertices)." #~ msgstr "" #~ "{0:d} ungeeignete Faces wurden nicht bearbeitet (Faces mit mehr als 4 " #~ "Eckpunkten)." #~ msgid "No brushes selected." #~ msgstr "Keine Brushes ausgewählt." #~ msgid "" #~ "Can't paste shader to entire brush.\n" #~ "Target is not a brush." #~ msgstr "" #~ "Kann Shader nicht auf gesamten Brush anwenden, das Ziel ist kein Brush." #~ msgid "" #~ "Can't paste Texture Coordinates.\n" #~ "Target patch dimensions must match." #~ msgstr "" #~ "Kann Texturkoordinaten nicht kopieren, da die Patch-Dimensionen nicht " #~ "passend sind." #~ msgid "Can't paste Texture Coordinates from patches to faces." #~ msgstr "" #~ "Es ist nicht möglich, Texturkoordinaten von Patches auf Faces zu kopieren." #~ msgid "Can't paste Texture Coordinates from faces." #~ msgstr "Es ist nicht möglich, Texturkoordinaten von Faces zu kopieren." #~ msgid "Can't copy Shader. Couldn't retrieve patch." #~ msgstr "Konnte Patch nicht casten, Shader wurde nicht kopiert." #~ msgid "Can't copy Shader. Couldn't retrieve face." #~ msgstr "Konnte Face nicht casten, Shader wurde nicht kopiert." #~ msgid "Can't copy Shader. Please select a single face or patch." #~ msgstr "" #~ "Shader nicht kopiert: bitte ein einzelnes Face oder einen Patch auswählen." #~ msgid "Settings/Selection" #~ msgstr "Einstellungen/Selektion" #~ msgid "" #~ "Ignore light volume bounds when calculating default rotation pivot " #~ "location" #~ msgstr "Ignoriere Lichtvolumina für die Berechnung des Standard-Pivotpunkts" #~ msgid "" #~ "This page has been moved!\n" #~ "Please use the game settings dialog in the menu: File > Game/Project " #~ "Setup..." #~ msgstr "" #~ "Diese Seite wurde verschoben!\n" #~ "Bitte benutze den Dialog unter dem Menüpunkt Datei > Spiel/" #~ "Projekteinstellungen..." #~ msgid "GameManager: No game type selected, can't continue." #~ msgstr "GameManager: kein Spieltyp ausgewählt, kann daher nicht fortfahren." #~ msgid "GameManager: No valid game files found, can't continue." #~ msgstr "" #~ "GameManager: keine gültigen Spieldateien (.game) gefunden, kann nicht " #~ "fortfahren." #~ msgid "No game type selected." #~ msgstr "Kein Spieltyp ausgewählt." #~ msgid "Abkhazian" #~ msgstr "Abchasisch" #~ msgid "Avestan" #~ msgstr "Avestisch" #~ msgid "Afrikaans" #~ msgstr "Afrikaans" #~ msgid "Akan" #~ msgstr "Akan" #~ msgid "Amharic" #~ msgstr "Amharisch" #~ msgid "Aragonese" #~ msgstr "Aragonesisch" #~ msgid "Arabic" #~ msgstr "Arabisch" #~ msgid "Assamese" #~ msgstr "Assamesisch" #~ msgid "Avaric" #~ msgstr "Awarisch" #~ msgid "Aymara" #~ msgstr "Aymara" #~ msgid "Azerbaijani" #~ msgstr "Aserbaidschanisch" #~ msgid "Bashkir" #~ msgstr "Baschkirisch" #~ msgid "Belarusian" #~ msgstr "Belarussisch" #~ msgid "Bulgarian" #~ msgstr "Bulgarisch" #~ msgid "Bihari languages" #~ msgstr "Bihari" #~ msgid "Bislama" #~ msgstr "Bislama" #~ msgid "Bambara" #~ msgstr "Bambara" #~ msgid "Bengali" #~ msgstr "Bengalisch" #~ msgid "Tibetan" #~ msgstr "Tibetanisch" #~ msgid "Breton" #~ msgstr "Bretonisch" #~ msgid "Bosnian" #~ msgstr "Bosnisch" #~ msgid "Catalan" #~ msgstr "Katalanisch" #~ msgid "Chechen" #~ msgstr "Tschetschenisch" #~ msgid "Chamorro" #~ msgstr "Chamorro" #~ msgid "Corsican" #~ msgstr "Korsisch" #~ msgid "Cree" #~ msgstr "Cree" #~ msgid "Czech" #~ msgstr "Tschechisch" #~ msgid "Chuvash" #~ msgstr "Tschuwaschisch" #~ msgid "Welsh" #~ msgstr "Walisisch" #~ msgid "Danish" #~ msgstr "Dänisch" #~ msgid "Divehi" #~ msgstr "Dhivehi" #~ msgid "Dzongkha" #~ msgstr "Dzongkha" #~ msgid "Ewe" #~ msgstr "Ewe" #~ msgid "Greek" #~ msgstr "Griechisch" #~ msgid "Esperanto" #~ msgstr "Esperanto" #~ msgid "Spanish" #~ msgstr "Spanisch" #~ msgid "Estonian" #~ msgstr "Estnisch" #~ msgid "Basque" #~ msgstr "Baskisch" #~ msgid "Persian" #~ msgstr "Persisch" #~ msgid "Fulah" #~ msgstr "Fulah" #~ msgid "Finnish" #~ msgstr "Finnisch" #~ msgid "Fijian" #~ msgstr "Fidschi" #~ msgid "Faroese" #~ msgstr "Färöisch" #~ msgid "French" #~ msgstr "Französisch" #~ msgid "Western Frisian" #~ msgstr "Westfriesisch" #~ msgid "Irish" #~ msgstr "Irisch" #~ msgid "Gaelic; Scottish Gaelic" #~ msgstr "Gälisch" #~ msgid "Galician" #~ msgstr "Galicische" #~ msgid "Guarani" #~ msgstr "Guaraní" #~ msgid "Gujarati" #~ msgstr "Gujarati" #~ msgid "Manx" #~ msgstr "Manx-Gälisch" #~ msgid "Hausa" #~ msgstr "Hausa" #~ msgid "Hebrew" #~ msgstr "Hebräisch" #~ msgid "Hindi" #~ msgstr "Hindi" #~ msgid "Hiri Motu" #~ msgstr "Hiri Motu" #~ msgid "Croatian" #~ msgstr "Kroatisch" #~ msgid "Haitian" #~ msgstr "Haitianisch" #~ msgid "Hungarian" #~ msgstr "Ungarisch" #~ msgid "Armenian" #~ msgstr "Armenisch" #~ msgid "Herero" #~ msgstr "Herero" #~ msgid "Interlingua" #~ msgstr "Interlingua" #~ msgid "Indonesian" #~ msgstr "Indonesisch" #~ msgid "Interlingue; Occidental" #~ msgstr "Occidental-Interlingue" #~ msgid "Igbo" #~ msgstr "Igbo" #~ msgid "Sichuan Yi; Nuosu" #~ msgstr "Yi" #~ msgid "Inupiaq" #~ msgstr "Inupiaq" #~ msgid "Ido" #~ msgstr "Ido" #~ msgid "Icelandic" #~ msgstr "Isländisch" #~ msgid "Italian" #~ msgstr "Italienisch" #~ msgid "Inuktitut" #~ msgstr "Inuktitut" #~ msgid "Japanese" #~ msgstr "Japanisch" #~ msgid "Javanese" #~ msgstr "Javanisch" #~ msgid "Georgian" #~ msgstr "Georgisch" #~ msgid "Kongo" #~ msgstr "Kongo" #~ msgid "Kikuyu" #~ msgstr "Kikuyu" #~ msgid "Kuanyama" #~ msgstr "Kwanyama" #~ msgid "Kazakh" #~ msgstr "Kasachisch" #~ msgid "Kalaallisut; Greenlandic" #~ msgstr "Grönländisch" #~ msgid "Central Khmer" #~ msgstr "Khmer" #~ msgid "Kannada" #~ msgstr "Kanaresisch" #~ msgid "Korean" #~ msgstr "Koreanisch" #~ msgid "Kanuri" #~ msgstr "Kanuri" #~ msgid "Kashmiri" #~ msgstr "Kashmiri" #~ msgid "Kurdish" #~ msgstr "Kurdisch" #~ msgid "Komi" #~ msgstr "Komi" #~ msgid "Cornish" #~ msgstr "Kornisch" #~ msgid "Kirghiz" #~ msgstr "Kirgisisch" #~ msgid "Latin" #~ msgstr "Lateinisch" #~ msgid "Luxembourgish" #~ msgstr "Luxemburgisch" #~ msgid "Ganda" #~ msgstr "Luganda" #~ msgid "Limburgan" #~ msgstr "Limburgisch" #~ msgid "Lingala" #~ msgstr "Lingála" #~ msgid "Lao" #~ msgstr "Lao" #~ msgid "Lithuanian" #~ msgstr "Litauisch" #~ msgid "Luba-Katanga" #~ msgstr "Luba-Katanga" #~ msgid "Latvian" #~ msgstr "Lettisch" #~ msgid "Malagasy" #~ msgstr "Malagasy" #~ msgid "Marshallese" #~ msgstr "Marshallesisch" #~ msgid "Maori" #~ msgstr "Maori" #~ msgid "Macedonian" #~ msgstr "Mazedonisch" #~ msgid "Malayalam" #~ msgstr "Malayalam" #~ msgid "Mongolian" #~ msgstr "Mongolisch" #~ msgid "Marathi" #~ msgstr "Marathi" #~ msgid "Malay" #~ msgstr "Malaiisch" #~ msgid "Maltese" #~ msgstr "Maltesisch" #~ msgid "Burmese" #~ msgstr "Burmesisch" #~ msgid "Nauru" #~ msgstr "Nauruisch" #~ msgid "Ndebele, North" #~ msgstr "IsiNdebele" #~ msgid "Nepali" #~ msgstr "Nepalesisch" #~ msgid "Ndonga" #~ msgstr "Ndonga" #~ msgid "Dutch" #~ msgstr "Dänisch" #~ msgid "Norwegian" #~ msgstr "Norwegisch" #~ msgid "Ndebele, South" #~ msgstr "Süd-Ndebele" #~ msgid "Navajo" #~ msgstr "Navajo" #~ msgid "Chichewa" #~ msgstr "Chichewa" #~ msgid "Occitan" #~ msgstr "Okzitanisch" #~ msgid "Ojibwa" #~ msgstr "Ojibwe" #~ msgid "Oromo" #~ msgstr "Oromo" #~ msgid "Oriya" #~ msgstr "Oriya" #~ msgid "Ossetian" #~ msgstr "Ossetisch" #~ msgid "Panjabi" #~ msgstr "Panjabi" #~ msgid "Pali" #~ msgstr "Pali" #~ msgid "Polish" #~ msgstr "Polnisch" #~ msgid "Pushto" #~ msgstr "Paschtunisch" #~ msgid "Portuguese" #~ msgstr "Portugiesisch" #~ msgid "Quechua" #~ msgstr "Quechua" #~ msgid "Romansh" #~ msgstr "Rätoromanisch" #~ msgid "Rundi" #~ msgstr "Kirundi" #~ msgid "Romanian" #~ msgstr "Rumänisch" #~ msgid "Russian" #~ msgstr "Russisch" #~ msgid "Kinyarwanda" #~ msgstr "Kinyarwanda" #~ msgid "Sanskrit" #~ msgstr "Sanskrit" #~ msgid "Sardinian" #~ msgstr "Sardisch" #~ msgid "Sindhi" #~ msgstr "Sindhi" #~ msgid "Northern Sami" #~ msgstr "Nordsamisch" #~ msgid "Sango" #~ msgstr "Sango" #~ msgid "Sinhala" #~ msgstr "Singhalesisch" #~ msgid "Slovak" #~ msgstr "Slowakisch" #~ msgid "Slovenian" #~ msgstr "Slowenisch" #~ msgid "Samoan" #~ msgstr "Samoisch" #~ msgid "Shona" #~ msgstr "Shona" #~ msgid "Somali" #~ msgstr "Somali" #~ msgid "Albanian" #~ msgstr "Albanisch" #~ msgid "Serbian" #~ msgstr "Serbisch" #~ msgid "Swati" #~ msgstr "Siswati" #~ msgid "Sotho, Southern" #~ msgstr "Süd-Sotho" #~ msgid "Sundanese" #~ msgstr "Sundanesisch" #~ msgid "Swedish" #~ msgstr "Schwedisch" #~ msgid "Swahili" #~ msgstr "Swahili" #~ msgid "Tamil" #~ msgstr "Tamilisch" #~ msgid "Telugu" #~ msgstr "Telugu" #~ msgid "Tajik" #~ msgstr "Tadschikisch" #~ msgid "Thai" #~ msgstr "Thailändisch" #~ msgid "Tigrinya" #~ msgstr "Tigrinya" #~ msgid "Turkmen" #~ msgstr "Turkmenisch" #~ msgid "Tagalog" #~ msgstr "Tagalog" #~ msgid "Tswana" #~ msgstr "Tswana" #~ msgid "Tonga" #~ msgstr "Tonga" #~ msgid "Turkish" #~ msgstr "Türkisch" #~ msgid "Tsonga" #~ msgstr "Tsonga" #~ msgid "Tatar" #~ msgstr "Tatarisch" #~ msgid "Twi" #~ msgstr "Twi" #~ msgid "Tahitian" #~ msgstr "Tahitianisch" #~ msgid "Uighur" #~ msgstr "Uigurisch" #~ msgid "Ukrainian" #~ msgstr "Ukrainisch" #~ msgid "Urdu" #~ msgstr "Urdu" #~ msgid "Uzbek" #~ msgstr "Usbekisch" #~ msgid "Venda" #~ msgstr "Venda" #~ msgid "Vietnamese" #~ msgstr "Vietnamesisch" #~ msgid "Volapuek" #~ msgstr "Volapük" #~ msgid "Walloon" #~ msgstr "Wallonisch" #~ msgid "Wolof" #~ msgstr "Wolof" #~ msgid "Xhosa" #~ msgstr "Xhosa" #~ msgid "Yiddish" #~ msgstr "Yiddisch" #~ msgid "Yoruba" #~ msgstr "Yoruba" #~ msgid "Zhuang" #~ msgstr "Zhuang" #~ msgid "Chinese" #~ msgstr "Chinesisch" #~ msgid "Zulu" #~ msgstr "Zulu" #~ msgid "{0} Settings" #~ msgstr "{0} Einstellungen" #~ msgid "Material:" #~ msgstr "Material:" #~ msgid "Settings/Grid" #~ msgstr "Einstellungen/Raster" #~ msgid "Default Grid Size" #~ msgstr "Standard-Rastergröße" #~ msgid "Lines" #~ msgstr "Linien" #~ msgid "Dotted Lines" #~ msgstr "Gepunktete Linien" #~ msgid "More Dotted Lines" #~ msgstr "Stärker gepunktete Linien" #~ msgid "Crosses" #~ msgstr "Kreuze" #~ msgid "Dots" #~ msgstr "Punkte" #~ msgid "Big Dots" #~ msgstr "Große Punkte" #~ msgid "Squares" #~ msgstr "Quadrate" #~ msgid "Major Grid Style" #~ msgstr "Hauptgitter-Stil" #~ msgid "Minor Grid Style" #~ msgstr "Nebengitter-Stil" #~ msgid "Exit DarkRadiant" #~ msgstr "DarkRadiant beenden" #~ msgid "Could not read map file: {0}" #~ msgstr "Konnte die Mapdatei nicht lesen: {0}" #~ msgid "Settings/Map Files" #~ msgstr "Einstellungen/Map" #~ msgid "Number of most recently used files" #~ msgstr "Anzahl der zuletzt geöffneten Dateien" #~ msgid "Open last map on startup" #~ msgstr "Lade zuletzt geöffnete Map beim Start" #~ msgid "Unable to create light, classname not found." #~ msgstr "Kann Licht nicht erzeugen, Klassenname nicht gefunden." #~ msgid "Unable to create speaker, classname not found." #~ msgstr "Kann Speaker nicht erzeugen, Klassenname nicht gefunden." #~ msgid "Settings/Undo System" #~ msgstr "Einstellungen/Undo" #~ msgid "Undo Queue Size" #~ msgstr "Größe des Undo-Stapels" #~ msgid "Bulge patch" #~ msgstr "Patch auswölben" #~ msgid "DarkRadiant Modules" #~ msgstr "DarkRadiant Module" #~ msgid "&Save selected as Map..." #~ msgstr "&Auswahl als Map speichern..." #~ msgid "&Save selected as prefab..." #~ msgstr "Auswahl als &Prefab speichern..." #~ msgid "Save ®ion..." #~ msgstr "&Region speichern" #~ msgid "Sucess Logic" #~ msgstr "Logik für Erfüllung" #~ msgid "?" #~ msgstr "?" #~ msgid "Entity {0}" #~ msgstr "Entity {0}" #~ msgid "Parsing material file {0}" #~ msgstr "Lade Material Datei {0}" #~ msgid "Omni" #~ msgstr "Omni" #~ msgid "Select a Game:" #~ msgstr "Spiel auswählen:" #~ msgid "The fs_game folder \"{0}\" does not exist.\n" #~ msgstr "Das fs_game Verzeichnis \"{0}\" existiert nicht.\n" #~ msgid "The fs_game_base folder \"{0}\" does not exist.\n" #~ msgstr "Das fs_game_base Verzeichnis \"{0}\" existiert nicht.\n" #~ msgid "" #~ "Note: You will have to restart DarkRadiant\n" #~ "for the changes to take effect." #~ msgstr "" #~ "Hinweis: Du musst DarkRadiant neu starten,\n" #~ "damit die Änderungen wirksam werden." #~ msgid "Select &Game..." #~ msgstr "Spiel auswählen..." #~ msgid "%s Settings" #~ msgstr "%s Einstellungen" #~ msgid "Vendor: %s" #~ msgstr "Hersteller: %s" #~ msgid "Version: %s" #~ msgstr "Version: %s" #~ msgid "Renderer: %s" #~ msgstr "Renderer: %s" #~ msgid "Entity %d" #~ msgstr "Entity %d" #~ msgid "%d of \"%s\"" #~ msgstr "%d \"%s\"" #~ msgid "%s AI of %s" #~ msgstr "%s AI von %s" #, fuzzy #~ msgid "capsule" #~ msgstr "Skalierung" #, fuzzy #~ msgid "bool" #~ msgstr "Werkzeug" #, fuzzy #~ msgid "Tuple[" #~ msgstr "Typ" #, fuzzy #~ msgid "*args" #~ msgstr "Flags" #, fuzzy #~ msgid "complex" #~ msgstr "Fertig" #, fuzzy #~ msgid "n" #~ msgstr "Nein" #, fuzzy #~ msgid "Set[" #~ msgstr "Auswählen" #, fuzzy #~ msgid "List[" #~ msgstr "Linien" #, fuzzy #~ msgid "Optional[" #~ msgstr "Optionen" #~ msgid "Could not remove the file: %s" #~ msgstr "Kann die Datei nicht entfernen: %s" #~ msgid "Page Editing:" #~ msgstr "Textbearbeitung" #~ msgid "General Properties:" #~ msgstr "Allgemeine Eigenschaften:" #~ msgid "Settings/Media Browser" #~ msgstr "Einstellungen/Mediabrowser" #~ msgid "Load media tree at startup" #~ msgstr "Lade Medienbaum während des Startvorgangs" #~ msgid "_Filters" #~ msgstr "_Filter" #~ msgid "Selected Brush" #~ msgstr "Ausgewählter Brush" #~ msgid "Cycle Cap Texture" #~ msgstr "Cap-Textur durchrotieren" #~ msgid "Save as Obj" #~ msgstr "Als OBJ speichern" #~ msgid "Loading models" #~ msgstr "Lade Modelle" #~ msgid "Searching" #~ msgstr "Durchsuchen" #~ msgid "Texture Thumbnail Scale" #~ msgstr "Skalierung der Texturvorschaubilder" #~ msgid "Free Model Rotation" #~ msgstr "Freie Modelldrehung" #~ msgid "Clamp texture thumbnails to constant size" #~ msgstr "Textur-Vorschaubilder mit fixer Größe anzeigen" #~ msgid "Nothing" #~ msgstr "Nichts" #~ msgid "Move View" #~ msgstr "Ansicht verschieben" #~ msgid "Toggle Selection" #~ msgstr "Auswählen/abwählen" #~ msgid "Toggle Face Selection" #~ msgstr "Face auswählen/abwählen" #~ msgid "Copy Texture" #~ msgstr "Textur kopieren" #~ msgid "PasteTexture Natural" #~ msgstr "Tetxur einfügen (Natürliche Skalierung)" #~ msgid "Paste Texture Name only" #~ msgstr "Nur Texturnamen einfügen" #~ msgid "Creating Preference Dialog" #~ msgstr "Erzeuge Einstellungsdialog" #~ msgid "Constructing Menu" #~ msgstr "Erzeuge Menü" #~ msgid "Initialising MediaBrowser" #~ msgstr "Initialisiere Medienbrowser" #~ msgid "Starting MainFrame" #~ msgstr "Starte Mainframe" #~ msgid "DarkRadiant Startup Complete" #~ msgstr "DarkRadiant Startphase abgeschlossen" #~ msgid "%d shaders found." #~ msgstr "%d Shader gefunden." #~ msgid "Settings/Source View" #~ msgstr "Einstellungen/Quellansicht" #~ msgid "%s" #~ msgstr "%s" #~ msgid "GTK+ Properties" #~ msgstr "GTK+ Eigenschaften" #~ msgid "gtkmm Version: %d.%d.%d" #~ msgstr "gtkmm Version: %d.%d.%d" #~ msgid "Light volume" #~ msgstr "Lichtvolumen" #~ msgid "Choose image" #~ msgstr "Bild auswählen" #~ msgid "Category" #~ msgstr "Kategorie" #~ msgid "Constant size" #~ msgstr "Fixe Größe" #~ msgid "Description:" #~ msgstr "Beschreibung:" #~ msgid "ID" #~ msgstr "ID" #~ msgid "Do you want to replace it?" #~ msgstr "Willst Du sie ersetzen?" #~ msgid "_File" #~ msgstr "_Datei" #~ msgid "_New Map" #~ msgstr "_Neue Map" #~ msgid "_Edit" #~ msgstr "_Bearbeiten" #~ msgid "_Duplicate" #~ msgstr "_Duplizieren" #~ msgid "D_elete" #~ msgstr "Lösch_en" #~ msgid "Select complete t_all" #~ msgstr "Inneres auswählen (Projektion)" #~ msgid "Select i_nside" #~ msgstr "Inneres auswählen" #~ msgid "Select _touching" #~ msgstr "Berührtes auswählen" #~ msgid "V_iew" #~ msgstr "Ans_icht" #~ msgid "_Surface Inspector" #~ msgstr "_Surface Inspector" #~ msgid "_Patch Inspector" #~ msgstr "_Patch Inspector" #~ msgid "_Texture Tool" #~ msgstr "_Textur-Werkzeug" #~ msgid "Show C_oordinates" #~ msgstr "Zeige Koordinaten" #~ msgid "_Faces" #~ msgstr "_Faces" #~ msgid "En_tities" #~ msgstr "En_tities" #~ msgid "M_ap" #~ msgstr "K_arte" #~ msgid "E_ntity" #~ msgstr "E_ntity" #~ msgid "Make _Room" #~ msgstr "Raum erstellen" #~ msgid "CSG _Subtract" #~ msgstr "CSG _Subtraktion" #~ msgid "CSG _Merge" #~ msgstr "CSG _Zusammenfügen" #~ msgid "_Patch" #~ msgstr "_Patch" #~ msgid "Populating MediaBrowser" #~ msgstr "Lade Medienbrowser" #~ msgid "Advanced" #~ msgstr "Erweitert" #~ msgid "Create MonsterClip Brush" #~ msgstr "Erzeuge Monsterclip-Brush" #~ msgid "Active materials" #~ msgstr "Aktive Shader" #~ msgid "Doom 3 map" #~ msgstr "Doom 3 Map" #~ msgid "Doom 3 region" #~ msgstr "Doom 3 Region" #~ msgid "Doom 3 prefab" #~ msgstr "Doom 3 Prefab" #~ msgid "Quake 4 map" #~ msgstr "Quake 4 Map" #~ msgid "Quake 4 region" #~ msgstr "Quake 4 Region" #~ msgid "Quake 4 prefab" #~ msgstr "Quake 4 Prefab" #~ msgid "Stop time" #~ msgstr "Zeit stoppen" #~ msgid "Next frame" #~ msgstr "Nächster Frame" #~ msgid "Previous frame" #~ msgstr "Vorheriger Frame" #~ msgid "Reload Shaders" #~ msgstr "Shader neu laden" #~ msgid "Flush & Reload Shaders" #~ msgstr "Shader neu laden" #~ msgid "Start Render Time" #~ msgstr "Render-Zeit starten" #~ msgid "Stop Render Time" #~ msgstr "Render-Zeit stoppen" #~ msgid "Clip plane in" #~ msgstr "Entfernte Clip-Ebene heran" #~ msgid "Clip plane out" #~ msgstr "Entfernte Clip-Ebene hinaus" #~ msgid "Success logic" #~ msgstr "Logik für Erfüllung" #~ msgid "Edit objective conditions" #~ msgstr "Missionsziel-Bedingung bearbeiten" #~ msgid "Material to render onto each quad." #~ msgstr "Der Shader zum Rendern der Polygone dieses Partikels." #~ msgid "Render Colour" #~ msgstr "Renderfarbe" #~ msgid "Shader: " #~ msgstr "Shader:" #~ msgid "Either 0 0 0 0 for additive, or 1 1 1 0 for blended materials." #~ msgstr "Entweder 0 0 0 0 für additive, oder 1 1 1 0 für Blend-Shader." #~ msgid "Force colour from render entity (Fade Colour is still valid)" #~ msgstr "Farbe der Entity übernehmen (Die Fade-Farbe ist weiterhin gültig)" #~ msgid "In 0.0 to 1.0 range, causes later index smokes to be more faded." #~ msgstr "" #~ "Im Bereich 0.0 bis 1.0, bewirkt dass spätere Partikel-Polygone stärker " #~ "\"gefadet\" erscheinen." #~ msgid "If > 1, subdivide the texture S axis into frames and crossfade." #~ msgstr "" #~ "Wenn > 1, wird die Textur-Achse S je nach Anzahl der Frames zerteilt und " #~ "überblendet." #~ msgid "Frames per second" #~ msgstr "Frames pro Sekunde" #~ msgid "" #~ "Total number of particles, although some may be invisible at a given time." #~ msgstr "" #~ "Gesamtanzahl der Partikelpolygone, möglicherweise sind nicht alle zu " #~ "jedem Zeitpunkt sichtbar." #~ msgid "" #~ "Allows things to oneShot (1 cycle) or run for a set number of cycles on a " #~ "per stage basis." #~ msgstr "Gibt an wie oft die Stage abgespielt wird." #~ msgid "Time offset from system start for the first particle to spawn." #~ msgstr "" #~ "Zeitversatz, vom Start weg gerechnet, bevor das erste Polygon gerendert " #~ "wird." #~ msgid "" #~ "0.0 = all come out at first instant, 1.0 = evenly spaced over cycle time" #~ msgstr "" #~ "0.0 = alle Polygone werden auf einmal erzeugt, 1.0 = Polygone werden " #~ "zeitlich gleichmäßig über die Stage-Lebensdauer verteilt." #~ msgid "Time after particleLife before respawning." #~ msgstr "Pause nach einem Stage-Durchgang" #~ msgid "Values > 1 make the T axis longer." #~ msgstr "Werte > 1 verlängern die Textur-Achse T." #~ msgid "Can be negative to let particles float upwards." #~ msgstr "Kann negativ sein, um Polygone aufwärts driften zu lassen." #~ msgid "" #~ "Half the particles will have negative rotation speeds, this is measured " #~ "in degrees/sec." #~ msgstr "" #~ "Die halben Polygone drehen sich in negativer Drehrichtung, wird in Grad/" #~ "Sek.gemessen" #~ msgid "User tweak to fix poorly calculated bounds." #~ msgstr "User-Fix zur Behebung von schlecht berechneten Partikel-Bounds." #~ msgid "" #~ "Apply gravity in world space. If this flag is set use -z as gravity " #~ "direction as in the game world, otherwise use the reverse emitter " #~ "direction." #~ msgstr "" #~ "Wendet die Schwerkraft so an wie sie auch im Spiel wirkt. Wenn dieses " #~ "Flag gesetzt ist wird die Z-Achse des Partikelsystems nach unten zeigen, " #~ "ist es gelöscht wirkt es in der entgegengesetzten Richtung des Emitters." #~ msgid "" #~ "Offset from Origin to spawn all Particles, also applies to Custom Paths." #~ msgstr "" #~ "Abstand zur Entity, wird auch bei Speziellen Pfadoptionen angewandt. " #~ msgid "" #~ "Randomly orient the quad on emission. If random distribution is off, " #~ "particles get spawned at ." #~ msgstr "" #~ "Polygone werden mit zufälliger Orientierung erzeugt. Wenn diese " #~ "Einstellung abgeschaltet ist, erscheinen die Polygone bei ." #~ msgid "" #~ "Some tests showed that for the cylinder type the fourth parameter " #~ "(\"ringfraction\") is only effective if >1, it effectively scales the " #~ "elliptic shape by that factor.\n" #~ "Values < 1.0 didn't have any effect." #~ msgstr "" #~ "Tests haben gezeigt dass der 4. Parameter der \"Zylinder\"-Einstellung " #~ "(\"Ring Fraction\") nur bei Werten > 1 etwas Sichtbares bewirkt: die " #~ "elliptische Form wird dann um diesen Faktor skaliert.\n" #~ "Werte < 1 haben keinen sichtbaren Effekt." #~ msgid "In degrees, random angle is used if zero (default)." #~ msgstr "" #~ "Wird in Grad gemessen, bei einem Wert von 0 werden die Polygone zufällig " #~ "gedreht." #~ msgid "" #~ "\"Flies\" particles are moving on the surface of a sphere of the given " #~ "radius.\n" #~ "The radial and axial speeds are chosen at random (but never 0) and are " #~ "constant during the lifetime of a particle.\n" #~ "Starting position appears to be random, but different to the " #~ "\"distribution sphere\" type (i.e. it is not evenly distributed, instead " #~ "the particles seem to bunch themselves at the poles)." #~ msgstr "" #~ "\"Fliegen\"-Partikel bewegen sich auf einer Kugel mit dem angegebenen " #~ "Radius.\n" #~ "Die radialen und axialen Geschwindigkeiten werden zufällig gewählt (sind " #~ "aber immer ungleich 0) und bleiben konstant während der Lebensdauer eines " #~ "Polygons.\n" #~ "Die Startposition scheint zufällig gewählt zu werden, ist aber (im " #~ "Gegensatz zur Verteilung vom Typ \"Kugel\") nicht gleichmäßig über die " #~ "Kugeloberfläche verteilt (leichte Häufung an den Polen)." #~ msgid "" #~ "Helical movement is describing an elliptic cylinder, its shape is " #~ "determined by sizeX, sizeY and sizeZ.\n" #~ "Particles are spawned randomly on that cylinder surface, their velocities " #~ "(radial and axial) are also random (both negative and positive velocities " #~ "are allowed)." #~ msgstr "" #~ "Die helikale Bewegung beschreibt einen elliptischen Zylinder, die Form " #~ "wird durch die drei Größenparameter X, Y und Z bestimmt.\n" #~ "Die Polygone werden an einem zufälligen Ort auf der Zylinderoberfläche " #~ "erzeugt, ihre Geschwindigkeiten (sowohl radial als auch axial) sind " #~ "ebenfalls zufällig, positiv wie negativ." #~ msgid "" #~ "Error while creating backup:\n" #~ "%s" #~ msgstr "" #~ "Fehler beim Erstellen des Backups:\n" #~ "%s" DarkRadiant-2.14.0/install/input.xml000066400000000000000000000320251413722237400173200ustar00rootroot00000000000000 DarkRadiant-2.14.0/install/menu.xml000066400000000000000000000500621413722237400171260ustar00rootroot00000000000000 DarkRadiant-2.14.0/install/resources/000077500000000000000000000000001413722237400174475ustar00rootroot00000000000000DarkRadiant-2.14.0/install/resources/preview/000077500000000000000000000000001413722237400211305ustar00rootroot00000000000000DarkRadiant-2.14.0/install/resources/preview/cube.ase000066400000000000000000000266751413722237400225600ustar00rootroot00000000000000*3DSMAX_ASCIIEXPORT 200 *COMMENT "Ascii Scene Exporter v2.52" *SCENE { *SCENE_FILENAME "cube.blend" *SCENE_FIRSTFRAME 0 *SCENE_LASTFRAME 100 *SCENE_FRAMESPEED 30 *SCENE_TICKSPERFRAME 160 *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000 *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000 } *MATERIAL_LIST { *MATERIAL_COUNT 1 *MATERIAL 0 { *MATERIAL_NAME "material" *MATERIAL_CLASS "Standard" *MATERIAL_AMBIENT 0.0000 0.0000 0.0000 *MATERIAL_DIFFUSE 0.9071 0.9071 0.9071 1.0000 *MATERIAL_SPECULAR 1.0000 1.0000 1.0000 *MATERIAL_SHINE 2.5000 *MATERIAL_SHINESTRENGTH 0.5000 *MATERIAL_TRANSPARENCY 0.0000 *MATERIAL_WIRESIZE 1.0000 *MATERIAL_SHADING Blinn *MATERIAL_XP_FALLOFF 0.0000 *MATERIAL_SELFILLUM 0.0000 *MATERIAL_FALLOFF In *MATERIAL_XP_TYPE Filter *MAP_DIFFUSE { *MAP_NAME "material" *MAP_CLASS "Bitmap" *MAP_SUBNO 1 *MAP_AMOUNT 1.0000 *BITMAP "\\base\material" *MAP_TYPE Screen *UVW_U_OFFSET 0.0000 *UVW_V_OFFSET 0.0000 *UVW_U_TILING 1.0000 *UVW_V_TILING 1.0000 *UVW_ANGLE 0.0000 *UVW_BLUR 1.0000 *UVW_BLUR_OFFSET 0.0000 *UVW_NOISE_AMT 1.0000 *UVW_NOISE_SIZE 1.0000 *UVW_NOISE_LEVEL 1 *UVW_NOISE_PHASE 0.0000 *BITMAP_FILTER Pyramidal } } } *GEOMOBJECT { *NODE_NAME "Cube" *NODE_TM { *NODE_NAME "Cube" *INHERIT_POS 0 0 0 *INHERIT_ROT 0 0 0 *INHERIT_SCL 0 0 0 *TM_ROW0 1.0000 0.0000 0.0000 *TM_ROW1 0.0000 1.0000 0.0000 *TM_ROW2 0.0000 0.0000 1.0000 *TM_ROW3 0.0000 0.0000 0.0000 *TM_POS 0.0000 0.0000 0.0000 *TM_ROTAXIS 0.0000 0.0000 0.0000 *TM_ROTANGLE 0.0000 *TM_SCALE 1.0000 1.0000 1.0000 *TM_SCALEAXIS 0.0000 0.0000 0.0000 *TM_SCALEAXISANG 0.0000 } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 4 *MESH_NUMFACES 2 *MESH_VERTEX_LIST { *MESH_VERTEX 0 -16.0000 -16.0000 16.0000 *MESH_VERTEX 1 -16.0000 -16.0000 -16.0000 *MESH_VERTEX 2 16.0000 -16.0000 16.0000 *MESH_VERTEX 3 16.0000 -16.0000 -16.0000 } *MESH_FACE_LIST { *MESH_FACE 0: A: 3 B: 0 C: 1 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 1: A: 3 B: 2 C: 0 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 } *MESH_NUMTVERTEX 4 *MESH_TVERTLIST { *MESH_TVERT 0 1.0000 0.0000 0.0000 *MESH_TVERT 1 0.0000 1.0000 0.0000 *MESH_TVERT 2 0.0000 0.0000 0.0000 *MESH_TVERT 3 1.0000 1.0000 0.0000 } *MESH_NUMTVFACES 2 *MESH_TFACELIST { *MESH_TFACE 0 0 1 2 *MESH_TFACE 1 0 3 1 } *MESH_NUMCVERTEX 0 *MESH_NORMALS { *MESH_FACENORMAL 0 0.0000 -1.0000 -0.0000 *MESH_VERTEXNORMAL 3 0.0000 -1.0000 -0.0000 *MESH_VERTEXNORMAL 0 0.0000 -1.0000 -0.0000 *MESH_VERTEXNORMAL 1 0.0000 -1.0000 -0.0000 *MESH_FACENORMAL 1 0.0000 -1.0000 -0.0000 *MESH_VERTEXNORMAL 3 0.0000 -1.0000 -0.0000 *MESH_VERTEXNORMAL 2 0.0000 -1.0000 -0.0000 *MESH_VERTEXNORMAL 0 0.0000 -1.0000 -0.0000 } } *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *MATERIAL_REF 0 } *GEOMOBJECT { *NODE_NAME "Cube.001" *NODE_TM { *NODE_NAME "Cube.001" *INHERIT_POS 0 0 0 *INHERIT_ROT 0 0 0 *INHERIT_SCL 0 0 0 *TM_ROW0 1.0000 0.0000 0.0000 *TM_ROW1 0.0000 1.0000 0.0000 *TM_ROW2 0.0000 0.0000 1.0000 *TM_ROW3 0.0000 0.0000 0.0000 *TM_POS 0.0000 0.0000 0.0000 *TM_ROTAXIS 0.0000 0.0000 0.0000 *TM_ROTANGLE 0.0000 *TM_SCALE 1.0000 1.0000 1.0000 *TM_SCALEAXIS 0.0000 0.0000 0.0000 *TM_SCALEAXISANG 0.0000 } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 4 *MESH_NUMFACES 2 *MESH_VERTEX_LIST { *MESH_VERTEX 0 -16.0000 16.0000 16.0000 *MESH_VERTEX 1 -16.0000 16.0000 -16.0000 *MESH_VERTEX 2 16.0000 16.0000 16.0000 *MESH_VERTEX 3 16.0000 16.0000 -16.0000 } *MESH_FACE_LIST { *MESH_FACE 0: A: 1 B: 2 C: 3 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 1: A: 1 B: 0 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 } *MESH_NUMTVERTEX 4 *MESH_TVERTLIST { *MESH_TVERT 0 1.0000 0.0000 0.0000 *MESH_TVERT 1 0.0000 1.0000 0.0000 *MESH_TVERT 2 0.0000 0.0000 0.0000 *MESH_TVERT 3 1.0000 1.0000 0.0000 } *MESH_NUMTVFACES 2 *MESH_TFACELIST { *MESH_TFACE 0 0 1 2 *MESH_TFACE 1 0 3 1 } *MESH_NUMCVERTEX 0 *MESH_NORMALS { *MESH_FACENORMAL 0 0.0000 1.0000 0.0000 *MESH_VERTEXNORMAL 1 0.0000 1.0000 0.0000 *MESH_VERTEXNORMAL 2 0.0000 1.0000 0.0000 *MESH_VERTEXNORMAL 3 0.0000 1.0000 0.0000 *MESH_FACENORMAL 1 0.0000 1.0000 0.0000 *MESH_VERTEXNORMAL 1 0.0000 1.0000 0.0000 *MESH_VERTEXNORMAL 0 0.0000 1.0000 0.0000 *MESH_VERTEXNORMAL 2 0.0000 1.0000 0.0000 } } *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *MATERIAL_REF 0 } *GEOMOBJECT { *NODE_NAME "Cube.002" *NODE_TM { *NODE_NAME "Cube.002" *INHERIT_POS 0 0 0 *INHERIT_ROT 0 0 0 *INHERIT_SCL 0 0 0 *TM_ROW0 1.0000 0.0000 0.0000 *TM_ROW1 0.0000 1.0000 0.0000 *TM_ROW2 0.0000 0.0000 1.0000 *TM_ROW3 0.0000 0.0000 0.0000 *TM_POS 0.0000 0.0000 0.0000 *TM_ROTAXIS 0.0000 0.0000 0.0000 *TM_ROTANGLE 0.0000 *TM_SCALE 1.0000 1.0000 1.0000 *TM_SCALEAXIS 0.0000 0.0000 0.0000 *TM_SCALEAXISANG 0.0000 } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 4 *MESH_NUMFACES 2 *MESH_VERTEX_LIST { *MESH_VERTEX 0 -16.0000 -16.0000 -16.0000 *MESH_VERTEX 1 -16.0000 16.0000 -16.0000 *MESH_VERTEX 2 16.0000 -16.0000 -16.0000 *MESH_VERTEX 3 16.0000 16.0000 -16.0000 } *MESH_FACE_LIST { *MESH_FACE 0: A: 1 B: 2 C: 0 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 1: A: 1 B: 3 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 } *MESH_NUMTVERTEX 4 *MESH_TVERTLIST { *MESH_TVERT 0 1.0000 0.0000 0.0000 *MESH_TVERT 1 0.0000 1.0000 0.0000 *MESH_TVERT 2 0.0000 0.0000 0.0000 *MESH_TVERT 3 1.0000 1.0000 0.0000 } *MESH_NUMTVFACES 2 *MESH_TFACELIST { *MESH_TFACE 0 0 1 2 *MESH_TFACE 1 0 3 1 } *MESH_NUMCVERTEX 0 *MESH_NORMALS { *MESH_FACENORMAL 0 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 1 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 2 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 0 0.0000 0.0000 -1.0000 *MESH_FACENORMAL 1 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 1 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 3 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 2 0.0000 0.0000 -1.0000 } } *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *MATERIAL_REF 0 } *GEOMOBJECT { *NODE_NAME "Cube.003" *NODE_TM { *NODE_NAME "Cube.003" *INHERIT_POS 0 0 0 *INHERIT_ROT 0 0 0 *INHERIT_SCL 0 0 0 *TM_ROW0 1.0000 0.0000 0.0000 *TM_ROW1 0.0000 1.0000 0.0000 *TM_ROW2 0.0000 0.0000 1.0000 *TM_ROW3 0.0000 0.0000 0.0000 *TM_POS 0.0000 0.0000 0.0000 *TM_ROTAXIS 0.0000 0.0000 0.0000 *TM_ROTANGLE 0.0000 *TM_SCALE 1.0000 1.0000 1.0000 *TM_SCALEAXIS 0.0000 0.0000 0.0000 *TM_SCALEAXISANG 0.0000 } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 4 *MESH_NUMFACES 2 *MESH_VERTEX_LIST { *MESH_VERTEX 0 -16.0000 -16.0000 16.0000 *MESH_VERTEX 1 -16.0000 16.0000 16.0000 *MESH_VERTEX 2 -16.0000 -16.0000 -16.0000 *MESH_VERTEX 3 -16.0000 16.0000 -16.0000 } *MESH_FACE_LIST { *MESH_FACE 0: A: 1 B: 2 C: 0 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 1: A: 1 B: 3 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 } *MESH_NUMTVERTEX 4 *MESH_TVERTLIST { *MESH_TVERT 0 1.0000 0.0000 0.0000 *MESH_TVERT 1 0.0000 1.0000 0.0000 *MESH_TVERT 2 0.0000 0.0000 0.0000 *MESH_TVERT 3 1.0000 1.0000 0.0000 } *MESH_NUMTVFACES 2 *MESH_TFACELIST { *MESH_TFACE 0 0 1 2 *MESH_TFACE 1 0 3 1 } *MESH_NUMCVERTEX 0 *MESH_NORMALS { *MESH_FACENORMAL 0 -1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 1 -1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 2 -1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 0 -1.0000 0.0000 0.0000 *MESH_FACENORMAL 1 -1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 1 -1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 3 -1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 2 -1.0000 0.0000 0.0000 } } *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *MATERIAL_REF 0 } *GEOMOBJECT { *NODE_NAME "Cube.004" *NODE_TM { *NODE_NAME "Cube.004" *INHERIT_POS 0 0 0 *INHERIT_ROT 0 0 0 *INHERIT_SCL 0 0 0 *TM_ROW0 1.0000 0.0000 0.0000 *TM_ROW1 0.0000 1.0000 0.0000 *TM_ROW2 0.0000 0.0000 1.0000 *TM_ROW3 0.0000 0.0000 0.0000 *TM_POS 0.0000 0.0000 0.0000 *TM_ROTAXIS 0.0000 0.0000 0.0000 *TM_ROTANGLE 0.0000 *TM_SCALE 1.0000 1.0000 1.0000 *TM_SCALEAXIS 0.0000 0.0000 0.0000 *TM_SCALEAXISANG 0.0000 } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 4 *MESH_NUMFACES 2 *MESH_VERTEX_LIST { *MESH_VERTEX 0 -16.0000 -16.0000 16.0000 *MESH_VERTEX 1 -16.0000 16.0000 16.0000 *MESH_VERTEX 2 16.0000 -16.0000 16.0000 *MESH_VERTEX 3 16.0000 16.0000 16.0000 } *MESH_FACE_LIST { *MESH_FACE 0: A: 3 B: 0 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 1: A: 3 B: 1 C: 0 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 } *MESH_NUMTVERTEX 4 *MESH_TVERTLIST { *MESH_TVERT 0 1.0000 0.0000 0.0000 *MESH_TVERT 1 0.0000 1.0000 0.0000 *MESH_TVERT 2 0.0000 0.0000 0.0000 *MESH_TVERT 3 1.0000 1.0000 0.0000 } *MESH_NUMTVFACES 2 *MESH_TFACELIST { *MESH_TFACE 0 0 1 2 *MESH_TFACE 1 0 3 1 } *MESH_NUMCVERTEX 0 *MESH_NORMALS { *MESH_FACENORMAL 0 0.0000 -0.0000 1.0000 *MESH_VERTEXNORMAL 3 0.0000 -0.0000 1.0000 *MESH_VERTEXNORMAL 0 0.0000 -0.0000 1.0000 *MESH_VERTEXNORMAL 2 0.0000 -0.0000 1.0000 *MESH_FACENORMAL 1 0.0000 -0.0000 1.0000 *MESH_VERTEXNORMAL 3 0.0000 -0.0000 1.0000 *MESH_VERTEXNORMAL 1 0.0000 -0.0000 1.0000 *MESH_VERTEXNORMAL 0 0.0000 -0.0000 1.0000 } } *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *MATERIAL_REF 0 } *GEOMOBJECT { *NODE_NAME "Cube.005" *NODE_TM { *NODE_NAME "Cube.005" *INHERIT_POS 0 0 0 *INHERIT_ROT 0 0 0 *INHERIT_SCL 0 0 0 *TM_ROW0 1.0000 0.0000 0.0000 *TM_ROW1 0.0000 1.0000 0.0000 *TM_ROW2 0.0000 0.0000 1.0000 *TM_ROW3 0.0000 0.0000 0.0000 *TM_POS 0.0000 0.0000 0.0000 *TM_ROTAXIS 0.0000 0.0000 0.0000 *TM_ROTANGLE 0.0000 *TM_SCALE 1.0000 1.0000 1.0000 *TM_SCALEAXIS 0.0000 0.0000 0.0000 *TM_SCALEAXISANG 0.0000 } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 4 *MESH_NUMFACES 2 *MESH_VERTEX_LIST { *MESH_VERTEX 0 16.0000 -16.0000 16.0000 *MESH_VERTEX 1 16.0000 16.0000 16.0000 *MESH_VERTEX 2 16.0000 -16.0000 -16.0000 *MESH_VERTEX 3 16.0000 16.0000 -16.0000 } *MESH_FACE_LIST { *MESH_FACE 0: A: 3 B: 0 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 1: A: 3 B: 1 C: 0 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 } *MESH_NUMTVERTEX 4 *MESH_TVERTLIST { *MESH_TVERT 0 1.0000 0.0000 0.0000 *MESH_TVERT 1 0.0000 1.0000 0.0000 *MESH_TVERT 2 0.0000 0.0000 0.0000 *MESH_TVERT 3 1.0000 1.0000 0.0000 } *MESH_NUMTVFACES 2 *MESH_TFACELIST { *MESH_TFACE 0 0 1 2 *MESH_TFACE 1 0 3 1 } *MESH_NUMCVERTEX 0 *MESH_NORMALS { *MESH_FACENORMAL 0 1.0000 -0.0000 -0.0000 *MESH_VERTEXNORMAL 3 1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 0 1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 2 1.0000 0.0000 0.0000 *MESH_FACENORMAL 1 1.0000 -0.0000 0.0000 *MESH_VERTEXNORMAL 3 1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 1 1.0000 0.0000 0.0000 *MESH_VERTEXNORMAL 0 1.0000 0.0000 0.0000 } } *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *MATERIAL_REF 0 }DarkRadiant-2.14.0/install/resources/preview/room_cuboid.ase000066400000000000000000000215121413722237400241240ustar00rootroot00000000000000*3DSMAX_ASCIIEXPORT 200 *COMMENT "DarkRadiant ASCII Scene Export(*.ase)" *SCENE { *SCENE_FILENAME "maps/room_cuboid.map" *SCENE_FIRSTFRAME 0 *SCENE_LASTFRAME 100 *SCENE_FRAMESPEED 30 *SCENE_TICKSPERFRAME 160 *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000 *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000 } *MATERIAL_LIST { *MATERIAL_COUNT 1 *MATERIAL 0 { *MATERIAL_NAME "Room" *MATERIAL_CLASS "Standard" *MATERIAL_AMBIENT 0.5882 0.5882 0.5882 *MATERIAL_DIFFUSE 0.5882 0.5882 0.5882 *MATERIAL_SPECULAR 0.9000 0.9000 0.9000 *MATERIAL_SHINE 0.1000 *MATERIAL_SHINESTRENGTH 0.0000 *MATERIAL_TRANSPARENCY 0.0000 *MATERIAL_WIRESIZE 1.0000 *MATERIAL_SHADING Blinn *MATERIAL_XP_FALLOFF 0.0000 *MATERIAL_SELFILLUM 0.0000 *MATERIAL_FALLOFF In *MATERIAL_XP_TYPE Filter *MAP_DIFFUSE { *MAP_NAME "Room" *MAP_CLASS "Bitmap" *MAP_SUBNO 1 *MAP_AMOUNT 1.0000 *BITMAP "\\base\material" *MAP_TYPE Screen *UVW_U_OFFSET 0.0000 *UVW_V_OFFSET 0.0000 *UVW_U_TILING 1.0000 *UVW_V_TILING 1.0000 *UVW_ANGLE 0.0000 *UVW_BLUR 1.0000 *UVW_BLUR_OFFSET 0.0000 *UVW_NOUSE_AMT 1.0000 *UVW_NOISE_SIZE 1.0000 *UVW_NOISE_LEVEL 1 *UVW_NOISE_PHASE 0.0000 *BITMAP_FILTER Pyramidal } } } *GEOMOBJECT { *NODE_NAME "mesh0" *NODE_TM { *NODE_NAME "mesh0" *INHERIT_POS 0 0 0 *INHERIT_ROT 0 0 0 *INHERIT_SCL 0 0 0 *TM_ROW0 1.0000 0.0000 0.0000 *TM_ROW1 0.0000 1.0000 0.0000 *TM_ROW2 0.0000 0.0000 1.0000 *TM_ROW3 0.0000 0.0000 0.0000 *TM_POS 0.0000 0.0000 0.0000 *TM_ROTAXIS 0.0000 0.0000 0.0000 *TM_ROTANGLE 0.0000 *TM_SCALE 1.0000 1.0000 1.0000 *TM_SCALEAXIS 0.0000 0.0000 0.0000 *TM_SCALEAXISANG 0.0000 } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 36 *MESH_NUMFACES 12 *MESH_VERTEX_LIST { *MESH_VERTEX 0 160 160 256 *MESH_VERTEX 1 160 -160 256 *MESH_VERTEX 2 -160 -160 256 *MESH_VERTEX 3 -160 160 256 *MESH_VERTEX 4 160 160 256 *MESH_VERTEX 5 -160 -160 256 *MESH_VERTEX 6 160 160 -96 *MESH_VERTEX 7 160 160 256 *MESH_VERTEX 8 -160 160 256 *MESH_VERTEX 9 -160 160 -96 *MESH_VERTEX 10 160 160 -96 *MESH_VERTEX 11 -160 160 256 *MESH_VERTEX 12 160 -160 256 *MESH_VERTEX 13 160 160 256 *MESH_VERTEX 14 160 160 -96 *MESH_VERTEX 15 160 -160 -96 *MESH_VERTEX 16 160 -160 256 *MESH_VERTEX 17 160 160 -96 *MESH_VERTEX 18 -160 160 -96 *MESH_VERTEX 19 -160 -160 -96 *MESH_VERTEX 20 160 -160 -96 *MESH_VERTEX 21 160 160 -96 *MESH_VERTEX 22 -160 160 -96 *MESH_VERTEX 23 160 -160 -96 *MESH_VERTEX 24 -160 -160 256 *MESH_VERTEX 25 160 -160 256 *MESH_VERTEX 26 160 -160 -96 *MESH_VERTEX 27 -160 -160 -96 *MESH_VERTEX 28 -160 -160 256 *MESH_VERTEX 29 160 -160 -96 *MESH_VERTEX 30 -160 160 256 *MESH_VERTEX 31 -160 -160 256 *MESH_VERTEX 32 -160 -160 -96 *MESH_VERTEX 33 -160 160 -96 *MESH_VERTEX 34 -160 160 256 *MESH_VERTEX 35 -160 -160 -96 } *MESH_FACE_LIST { *MESH_FACE 0: A: 0 B: 1 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 1: A: 3 B: 4 C: 5 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 2: A: 6 B: 7 C: 8 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 3: A: 9 B: 10 C: 11 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 4: A: 12 B: 13 C: 14 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 5: A: 15 B: 16 C: 17 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 6: A: 18 B: 19 C: 20 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 7: A: 21 B: 22 C: 23 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 8: A: 24 B: 25 C: 26 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 9: A: 27 B: 28 C: 29 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 10: A: 30 B: 31 C: 32 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 11: A: 33 B: 34 C: 35 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 } *MESH_NUMTVERTEX 36 *MESH_TVERTLIST { *MESH_TVERT 0 2 -4.36364 0.0000 *MESH_TVERT 1 0 -4.36364 0.0000 *MESH_TVERT 2 0 -7.09091 0.0000 *MESH_TVERT 3 2 -7.09091 0.0000 *MESH_TVERT 4 2 -4.36364 0.0000 *MESH_TVERT 5 0 -7.09091 0.0000 *MESH_TVERT 6 4 -3 0.0000 *MESH_TVERT 7 4 -6.50232e-08 0.0000 *MESH_TVERT 8 2 -6.50232e-08 0.0000 *MESH_TVERT 9 2 -3 0.0000 *MESH_TVERT 10 4 -3 0.0000 *MESH_TVERT 11 2 -6.50232e-08 0.0000 *MESH_TVERT 12 2 -6.50232e-08 0.0000 *MESH_TVERT 13 0 -6.50232e-08 0.0000 *MESH_TVERT 14 0 -3 0.0000 *MESH_TVERT 15 2 -3 0.0000 *MESH_TVERT 16 2 -6.50232e-08 0.0000 *MESH_TVERT 17 0 -3 0.0000 *MESH_TVERT 18 2 1.36364 0.0000 *MESH_TVERT 19 0 1.36364 0.0000 *MESH_TVERT 20 0 -1.36364 0.0000 *MESH_TVERT 21 2 -1.36364 0.0000 *MESH_TVERT 22 2 1.36364 0.0000 *MESH_TVERT 23 0 -1.36364 0.0000 *MESH_TVERT 24 0 -6.50232e-08 0.0000 *MESH_TVERT 25 -2 -6.50232e-08 0.0000 *MESH_TVERT 26 -2 -3 0.0000 *MESH_TVERT 27 0 -3 0.0000 *MESH_TVERT 28 0 -6.50232e-08 0.0000 *MESH_TVERT 29 -2 -3 0.0000 *MESH_TVERT 30 2 -6.50232e-08 0.0000 *MESH_TVERT 31 0 -6.50232e-08 0.0000 *MESH_TVERT 32 0 -3 0.0000 *MESH_TVERT 33 2 -3 0.0000 *MESH_TVERT 34 2 -6.50232e-08 0.0000 *MESH_TVERT 35 0 -3 0.0000 } *MESH_NUMTVFACES 12 *MESH_TFACELIST { *MESH_TFACE 0 0 1 2 *MESH_TFACE 1 3 4 5 *MESH_TFACE 2 6 7 8 *MESH_TFACE 3 9 10 11 *MESH_TFACE 4 12 13 14 *MESH_TFACE 5 15 16 17 *MESH_TFACE 6 18 19 20 *MESH_TFACE 7 21 22 23 *MESH_TFACE 8 24 25 26 *MESH_TFACE 9 27 28 29 *MESH_TFACE 10 30 31 32 *MESH_TFACE 11 33 34 35 } *MESH_NUMCVERTEX 36 *MESH_CVERTLIST { *MESH_VERTCOL 0 1 1 1 *MESH_VERTCOL 1 1 1 1 *MESH_VERTCOL 2 1 1 1 *MESH_VERTCOL 3 1 1 1 *MESH_VERTCOL 4 1 1 1 *MESH_VERTCOL 5 1 1 1 *MESH_VERTCOL 6 1 1 1 *MESH_VERTCOL 7 1 1 1 *MESH_VERTCOL 8 1 1 1 *MESH_VERTCOL 9 1 1 1 *MESH_VERTCOL 10 1 1 1 *MESH_VERTCOL 11 1 1 1 *MESH_VERTCOL 12 1 1 1 *MESH_VERTCOL 13 1 1 1 *MESH_VERTCOL 14 1 1 1 *MESH_VERTCOL 15 1 1 1 *MESH_VERTCOL 16 1 1 1 *MESH_VERTCOL 17 1 1 1 *MESH_VERTCOL 18 1 1 1 *MESH_VERTCOL 19 1 1 1 *MESH_VERTCOL 20 1 1 1 *MESH_VERTCOL 21 1 1 1 *MESH_VERTCOL 22 1 1 1 *MESH_VERTCOL 23 1 1 1 *MESH_VERTCOL 24 1 1 1 *MESH_VERTCOL 25 1 1 1 *MESH_VERTCOL 26 1 1 1 *MESH_VERTCOL 27 1 1 1 *MESH_VERTCOL 28 1 1 1 *MESH_VERTCOL 29 1 1 1 *MESH_VERTCOL 30 1 1 1 *MESH_VERTCOL 31 1 1 1 *MESH_VERTCOL 32 1 1 1 *MESH_VERTCOL 33 1 1 1 *MESH_VERTCOL 34 1 1 1 *MESH_VERTCOL 35 1 1 1 } *MESH_NUMCVFACES 12 *MESH_CFACELIST { *MESH_CFACE 0 0 1 2 *MESH_CFACE 1 3 4 5 *MESH_CFACE 2 6 7 8 *MESH_CFACE 3 9 10 11 *MESH_CFACE 4 12 13 14 *MESH_CFACE 5 15 16 17 *MESH_CFACE 6 18 19 20 *MESH_CFACE 7 21 22 23 *MESH_CFACE 8 24 25 26 *MESH_CFACE 9 27 28 29 *MESH_CFACE 10 30 31 32 *MESH_CFACE 11 33 34 35 } *MESH_NORMALS { *MESH_FACENORMAL 0 -0 -0 -1 *MESH_VERTEXNORMAL 0 -0 -0 -1 *MESH_VERTEXNORMAL 1 -0 -0 -1 *MESH_VERTEXNORMAL 2 -0 -0 -1 *MESH_FACENORMAL 1 -0 -0 -1 *MESH_VERTEXNORMAL 3 -0 -0 -1 *MESH_VERTEXNORMAL 4 -0 -0 -1 *MESH_VERTEXNORMAL 5 -0 -0 -1 *MESH_FACENORMAL 2 -0 -1 0 *MESH_VERTEXNORMAL 6 -0 -1 0 *MESH_VERTEXNORMAL 7 -0 -1 0 *MESH_VERTEXNORMAL 8 -0 -1 0 *MESH_FACENORMAL 3 -0 -1 0 *MESH_VERTEXNORMAL 9 -0 -1 0 *MESH_VERTEXNORMAL 10 -0 -1 0 *MESH_VERTEXNORMAL 11 -0 -1 0 *MESH_FACENORMAL 4 -1 -0 -0 *MESH_VERTEXNORMAL 12 -1 -0 -0 *MESH_VERTEXNORMAL 13 -1 -0 -0 *MESH_VERTEXNORMAL 14 -1 -0 -0 *MESH_FACENORMAL 5 -1 -0 -0 *MESH_VERTEXNORMAL 15 -1 -0 -0 *MESH_VERTEXNORMAL 16 -1 -0 -0 *MESH_VERTEXNORMAL 17 -1 -0 -0 *MESH_FACENORMAL 6 -0 -0 1 *MESH_VERTEXNORMAL 18 -0 -0 1 *MESH_VERTEXNORMAL 19 -0 -0 1 *MESH_VERTEXNORMAL 20 -0 -0 1 *MESH_FACENORMAL 7 -0 -0 1 *MESH_VERTEXNORMAL 21 -0 -0 1 *MESH_VERTEXNORMAL 22 -0 -0 1 *MESH_VERTEXNORMAL 23 -0 -0 1 *MESH_FACENORMAL 8 -0 1 -0 *MESH_VERTEXNORMAL 24 -0 1 -0 *MESH_VERTEXNORMAL 25 -0 1 -0 *MESH_VERTEXNORMAL 26 -0 1 -0 *MESH_FACENORMAL 9 -0 1 -0 *MESH_VERTEXNORMAL 27 -0 1 -0 *MESH_VERTEXNORMAL 28 -0 1 -0 *MESH_VERTEXNORMAL 29 -0 1 -0 *MESH_FACENORMAL 10 1 -0 -0 *MESH_VERTEXNORMAL 30 1 -0 -0 *MESH_VERTEXNORMAL 31 1 -0 -0 *MESH_VERTEXNORMAL 32 1 -0 -0 *MESH_FACENORMAL 11 1 -0 -0 *MESH_VERTEXNORMAL 33 1 -0 -0 *MESH_VERTEXNORMAL 34 1 -0 -0 *MESH_VERTEXNORMAL 35 1 -0 -0 } } *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *MATERIAL_REF 0 } DarkRadiant-2.14.0/install/resources/preview/sphere.ase000066400000000000000000013113631413722237400231200ustar00rootroot00000000000000*3DSMAX_ASCIIEXPORT 200 *COMMENT "Ascii Scene Exporter v2.52" *SCENE { *SCENE_FILENAME "cube.blend" *SCENE_FIRSTFRAME 0 *SCENE_LASTFRAME 100 *SCENE_FRAMESPEED 30 *SCENE_TICKSPERFRAME 160 *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000 *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000 } *MATERIAL_LIST { *MATERIAL_COUNT 1 *MATERIAL 0 { *MATERIAL_NAME "material" *MATERIAL_CLASS "Standard" *MATERIAL_AMBIENT 0.0000 0.0000 0.0000 *MATERIAL_DIFFUSE 0.9071 0.9071 0.9071 1.0000 *MATERIAL_SPECULAR 1.0000 1.0000 1.0000 *MATERIAL_SHINE 2.5000 *MATERIAL_SHINESTRENGTH 0.5000 *MATERIAL_TRANSPARENCY 0.0000 *MATERIAL_WIRESIZE 1.0000 *MATERIAL_SHADING Blinn *MATERIAL_XP_FALLOFF 0.0000 *MATERIAL_SELFILLUM 0.0000 *MATERIAL_FALLOFF In *MATERIAL_XP_TYPE Filter *MAP_DIFFUSE { *MAP_NAME "material" *MAP_CLASS "Bitmap" *MAP_SUBNO 1 *MAP_AMOUNT 1.0000 *BITMAP "\\base\material" *MAP_TYPE Screen *UVW_U_OFFSET 0.0000 *UVW_V_OFFSET 0.0000 *UVW_U_TILING 1.0000 *UVW_V_TILING 1.0000 *UVW_ANGLE 0.0000 *UVW_BLUR 1.0000 *UVW_BLUR_OFFSET 0.0000 *UVW_NOISE_AMT 1.0000 *UVW_NOISE_SIZE 1.0000 *UVW_NOISE_LEVEL 1 *UVW_NOISE_PHASE 0.0000 *BITMAP_FILTER Pyramidal } } } *GEOMOBJECT { *NODE_NAME "Sphere" *NODE_TM { *NODE_NAME "Sphere" *INHERIT_POS 0 0 0 *INHERIT_ROT 0 0 0 *INHERIT_SCL 0 0 0 *TM_ROW0 1.0000 0.0000 0.0000 *TM_ROW1 0.0000 1.0000 0.0000 *TM_ROW2 0.0000 0.0000 1.0000 *TM_ROW3 0.0000 0.0000 0.0000 *TM_POS 0.0000 0.0000 0.0000 *TM_ROTAXIS 0.0000 0.0000 0.0000 *TM_ROTANGLE 0.0000 *TM_SCALE 1.0000 1.0000 1.0000 *TM_SCALEAXIS 0.0000 0.0000 0.0000 *TM_SCALEAXISANG 0.0000 } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 482 *MESH_NUMFACES 960 *MESH_VERTEX_LIST { *MESH_VERTEX 0 0.0000 5.3584 26.9360 *MESH_VERTEX 1 0.0000 10.5104 25.3728 *MESH_VERTEX 2 0.0000 15.2576 22.8352 *MESH_VERTEX 3 0.0000 19.4192 19.4192 *MESH_VERTEX 4 0.0000 22.8352 15.2576 *MESH_VERTEX 5 0.0000 25.3728 10.5104 *MESH_VERTEX 6 0.0000 26.9360 5.3584 *MESH_VERTEX 7 0.0000 27.4640 0.0000 *MESH_VERTEX 8 0.0000 26.9360 -5.3584 *MESH_VERTEX 9 0.0000 15.2576 -22.8352 *MESH_VERTEX 10 1.0448 5.2544 26.9360 *MESH_VERTEX 11 2.0496 10.3072 25.3728 *MESH_VERTEX 12 2.9760 14.9648 22.8352 *MESH_VERTEX 13 3.7888 19.0464 19.4192 *MESH_VERTEX 14 4.4544 22.3968 15.2576 *MESH_VERTEX 15 4.9504 24.8848 10.5104 *MESH_VERTEX 16 5.2544 26.4176 5.3584 *MESH_VERTEX 17 5.3584 26.9360 0.0000 *MESH_VERTEX 18 5.2544 26.4176 -5.3584 *MESH_VERTEX 19 4.9504 24.8848 -10.5104 *MESH_VERTEX 20 4.4544 22.3968 -15.2576 *MESH_VERTEX 21 3.7888 19.0464 -19.4192 *MESH_VERTEX 22 2.9760 14.9648 -22.8352 *MESH_VERTEX 23 2.0496 10.3072 -25.3728 *MESH_VERTEX 24 1.0448 5.2544 -26.9360 *MESH_VERTEX 25 2.0496 4.9504 26.9360 *MESH_VERTEX 26 4.0224 9.7104 25.3728 *MESH_VERTEX 27 5.8384 14.0960 22.8352 *MESH_VERTEX 28 7.4320 17.9408 19.4192 *MESH_VERTEX 29 8.7392 21.0960 15.2576 *MESH_VERTEX 30 9.7104 23.4416 10.5104 *MESH_VERTEX 31 10.3072 24.8848 5.3584 *MESH_VERTEX 32 10.5104 25.3728 0.0000 *MESH_VERTEX 33 10.3072 24.8848 -5.3584 *MESH_VERTEX 34 9.7104 23.4416 -10.5104 *MESH_VERTEX 35 8.7392 21.0960 -15.2576 *MESH_VERTEX 36 7.4320 17.9408 -19.4192 *MESH_VERTEX 37 5.8384 14.0960 -22.8352 *MESH_VERTEX 38 4.0224 9.7104 -25.3728 *MESH_VERTEX 39 2.0496 4.9504 -26.9360 *MESH_VERTEX 40 2.9760 4.4544 26.9360 *MESH_VERTEX 41 5.8384 8.7392 25.3728 *MESH_VERTEX 42 8.4768 12.6864 22.8352 *MESH_VERTEX 43 10.7888 16.1472 19.4192 *MESH_VERTEX 44 12.6864 18.9872 15.2576 *MESH_VERTEX 45 14.0960 21.0960 10.5104 *MESH_VERTEX 46 14.9648 22.3968 5.3584 *MESH_VERTEX 47 15.2576 22.8352 0.0000 *MESH_VERTEX 48 14.9648 22.3968 -5.3584 *MESH_VERTEX 49 14.0960 21.0960 -10.5104 *MESH_VERTEX 50 12.6864 18.9872 -15.2576 *MESH_VERTEX 51 10.7888 16.1472 -19.4192 *MESH_VERTEX 52 8.4768 12.6864 -22.8352 *MESH_VERTEX 53 5.8384 8.7392 -25.3728 *MESH_VERTEX 54 2.9760 4.4544 -26.9360 *MESH_VERTEX 55 3.7888 3.7888 26.9360 *MESH_VERTEX 56 7.4320 7.4320 25.3728 *MESH_VERTEX 57 10.7888 10.7888 22.8352 *MESH_VERTEX 58 13.7312 13.7312 19.4192 *MESH_VERTEX 59 16.1472 16.1472 15.2576 *MESH_VERTEX 60 17.9408 17.9408 10.5104 *MESH_VERTEX 61 19.0464 19.0464 5.3584 *MESH_VERTEX 62 19.4192 19.4192 0.0000 *MESH_VERTEX 63 19.0464 19.0464 -5.3584 *MESH_VERTEX 64 17.9408 17.9408 -10.5104 *MESH_VERTEX 65 16.1472 16.1472 -15.2576 *MESH_VERTEX 66 13.7312 13.7312 -19.4192 *MESH_VERTEX 67 10.7888 10.7888 -22.8352 *MESH_VERTEX 68 7.4320 7.4320 -25.3728 *MESH_VERTEX 69 3.7888 3.7888 -26.9360 *MESH_VERTEX 70 4.4544 2.9760 26.9360 *MESH_VERTEX 71 8.7392 5.8384 25.3728 *MESH_VERTEX 72 12.6864 8.4768 22.8352 *MESH_VERTEX 73 16.1472 10.7888 19.4192 *MESH_VERTEX 74 18.9872 12.6864 15.2576 *MESH_VERTEX 75 21.0960 14.0960 10.5104 *MESH_VERTEX 76 22.3968 14.9648 5.3584 *MESH_VERTEX 77 22.8352 15.2576 0.0000 *MESH_VERTEX 78 22.3968 14.9648 -5.3584 *MESH_VERTEX 79 21.0960 14.0960 -10.5104 *MESH_VERTEX 80 18.9872 12.6864 -15.2576 *MESH_VERTEX 81 16.1472 10.7888 -19.4192 *MESH_VERTEX 82 12.6864 8.4768 -22.8352 *MESH_VERTEX 83 8.7392 5.8384 -25.3728 *MESH_VERTEX 84 4.4544 2.9760 -26.9360 *MESH_VERTEX 85 4.9504 2.0496 26.9360 *MESH_VERTEX 86 9.7104 4.0224 25.3728 *MESH_VERTEX 87 14.0960 5.8384 22.8352 *MESH_VERTEX 88 17.9408 7.4320 19.4192 *MESH_VERTEX 89 21.0960 8.7392 15.2576 *MESH_VERTEX 90 23.4416 9.7104 10.5104 *MESH_VERTEX 91 24.8848 10.3072 5.3584 *MESH_VERTEX 92 25.3728 10.5104 0.0000 *MESH_VERTEX 93 24.8848 10.3072 -5.3584 *MESH_VERTEX 94 23.4416 9.7104 -10.5104 *MESH_VERTEX 95 21.0960 8.7392 -15.2576 *MESH_VERTEX 96 17.9408 7.4320 -19.4192 *MESH_VERTEX 97 14.0960 5.8384 -22.8352 *MESH_VERTEX 98 9.7104 4.0224 -25.3728 *MESH_VERTEX 99 4.9504 2.0496 -26.9360 *MESH_VERTEX 100 5.2544 1.0448 26.9360 *MESH_VERTEX 101 10.3072 2.0496 25.3728 *MESH_VERTEX 102 14.9648 2.9760 22.8352 *MESH_VERTEX 103 19.0464 3.7888 19.4192 *MESH_VERTEX 104 22.3968 4.4544 15.2576 *MESH_VERTEX 105 24.8848 4.9504 10.5104 *MESH_VERTEX 106 26.4176 5.2544 5.3584 *MESH_VERTEX 107 26.9360 5.3584 0.0000 *MESH_VERTEX 108 26.4176 5.2544 -5.3584 *MESH_VERTEX 109 24.8848 4.9504 -10.5104 *MESH_VERTEX 110 22.3968 4.4544 -15.2576 *MESH_VERTEX 111 19.0464 3.7888 -19.4192 *MESH_VERTEX 112 14.9648 2.9760 -22.8352 *MESH_VERTEX 113 10.3072 2.0496 -25.3728 *MESH_VERTEX 114 5.2544 1.0448 -26.9360 *MESH_VERTEX 115 5.3584 -0.0000 26.9360 *MESH_VERTEX 116 10.5104 -0.0000 25.3728 *MESH_VERTEX 117 15.2576 -0.0000 22.8352 *MESH_VERTEX 118 19.4192 -0.0000 19.4192 *MESH_VERTEX 119 22.8352 -0.0000 15.2576 *MESH_VERTEX 120 25.3728 -0.0000 10.5104 *MESH_VERTEX 121 26.9360 -0.0000 5.3584 *MESH_VERTEX 122 27.4640 -0.0000 0.0000 *MESH_VERTEX 123 26.9360 -0.0000 -5.3584 *MESH_VERTEX 124 25.3728 -0.0000 -10.5104 *MESH_VERTEX 125 22.8352 -0.0000 -15.2576 *MESH_VERTEX 126 19.4192 -0.0000 -19.4192 *MESH_VERTEX 127 15.2576 -0.0000 -22.8352 *MESH_VERTEX 128 10.5104 -0.0000 -25.3728 *MESH_VERTEX 129 5.3584 -0.0000 -26.9360 *MESH_VERTEX 130 5.2544 -1.0448 26.9360 *MESH_VERTEX 131 10.3072 -2.0496 25.3728 *MESH_VERTEX 132 14.9648 -2.9760 22.8352 *MESH_VERTEX 133 19.0464 -3.7888 19.4192 *MESH_VERTEX 134 22.3968 -4.4544 15.2576 *MESH_VERTEX 135 24.8848 -4.9504 10.5104 *MESH_VERTEX 136 26.4176 -5.2544 5.3584 *MESH_VERTEX 137 26.9360 -5.3584 0.0000 *MESH_VERTEX 138 26.4176 -5.2544 -5.3584 *MESH_VERTEX 139 24.8848 -4.9504 -10.5104 *MESH_VERTEX 140 22.3968 -4.4544 -15.2576 *MESH_VERTEX 141 19.0464 -3.7888 -19.4192 *MESH_VERTEX 142 14.9648 -2.9760 -22.8352 *MESH_VERTEX 143 10.3072 -2.0496 -25.3728 *MESH_VERTEX 144 5.2544 -1.0448 -26.9360 *MESH_VERTEX 145 4.9504 -2.0496 26.9360 *MESH_VERTEX 146 9.7104 -4.0224 25.3728 *MESH_VERTEX 147 14.0960 -5.8384 22.8352 *MESH_VERTEX 148 17.9408 -7.4320 19.4192 *MESH_VERTEX 149 21.0960 -8.7392 15.2576 *MESH_VERTEX 150 23.4416 -9.7104 10.5104 *MESH_VERTEX 151 24.8848 -10.3072 5.3584 *MESH_VERTEX 152 25.3728 -10.5104 0.0000 *MESH_VERTEX 153 24.8848 -10.3072 -5.3584 *MESH_VERTEX 154 23.4416 -9.7104 -10.5104 *MESH_VERTEX 155 21.0960 -8.7392 -15.2576 *MESH_VERTEX 156 17.9408 -7.4320 -19.4192 *MESH_VERTEX 157 14.0960 -5.8384 -22.8352 *MESH_VERTEX 158 9.7104 -4.0224 -25.3728 *MESH_VERTEX 159 4.9504 -2.0496 -26.9360 *MESH_VERTEX 160 4.4544 -2.9760 26.9360 *MESH_VERTEX 161 8.7392 -5.8384 25.3728 *MESH_VERTEX 162 12.6864 -8.4768 22.8352 *MESH_VERTEX 163 16.1472 -10.7888 19.4192 *MESH_VERTEX 164 18.9872 -12.6864 15.2576 *MESH_VERTEX 165 21.0960 -14.0960 10.5104 *MESH_VERTEX 166 22.3968 -14.9648 5.3584 *MESH_VERTEX 167 22.8352 -15.2576 0.0000 *MESH_VERTEX 168 22.3968 -14.9648 -5.3584 *MESH_VERTEX 169 21.0960 -14.0960 -10.5104 *MESH_VERTEX 170 18.9872 -12.6864 -15.2576 *MESH_VERTEX 171 16.1472 -10.7888 -19.4192 *MESH_VERTEX 172 12.6864 -8.4768 -22.8352 *MESH_VERTEX 173 8.7392 -5.8384 -25.3728 *MESH_VERTEX 174 4.4544 -2.9760 -26.9360 *MESH_VERTEX 175 3.7888 -3.7888 26.9360 *MESH_VERTEX 176 7.4320 -7.4320 25.3728 *MESH_VERTEX 177 10.7888 -10.7888 22.8352 *MESH_VERTEX 178 13.7312 -13.7312 19.4192 *MESH_VERTEX 179 16.1472 -16.1472 15.2576 *MESH_VERTEX 180 17.9408 -17.9408 10.5104 *MESH_VERTEX 181 19.0464 -19.0464 5.3584 *MESH_VERTEX 182 19.4192 -19.4192 0.0000 *MESH_VERTEX 183 19.0464 -19.0464 -5.3584 *MESH_VERTEX 184 17.9408 -17.9408 -10.5104 *MESH_VERTEX 185 16.1472 -16.1472 -15.2576 *MESH_VERTEX 186 13.7312 -13.7312 -19.4192 *MESH_VERTEX 187 10.7888 -10.7888 -22.8352 *MESH_VERTEX 188 7.4320 -7.4320 -25.3728 *MESH_VERTEX 189 3.7888 -3.7888 -26.9360 *MESH_VERTEX 190 2.9760 -4.4544 26.9360 *MESH_VERTEX 191 5.8384 -8.7392 25.3728 *MESH_VERTEX 192 8.4768 -12.6864 22.8352 *MESH_VERTEX 193 10.7888 -16.1472 19.4192 *MESH_VERTEX 194 12.6864 -18.9872 15.2576 *MESH_VERTEX 195 14.0960 -21.0960 10.5104 *MESH_VERTEX 196 14.9648 -22.3968 5.3584 *MESH_VERTEX 197 15.2576 -22.8352 0.0000 *MESH_VERTEX 198 14.9648 -22.3968 -5.3584 *MESH_VERTEX 199 14.0960 -21.0960 -10.5104 *MESH_VERTEX 200 12.6864 -18.9872 -15.2576 *MESH_VERTEX 201 10.7888 -16.1472 -19.4192 *MESH_VERTEX 202 8.4768 -12.6864 -22.8352 *MESH_VERTEX 203 5.8384 -8.7392 -25.3728 *MESH_VERTEX 204 2.9760 -4.4544 -26.9360 *MESH_VERTEX 205 0.0000 -0.0000 -27.4640 *MESH_VERTEX 206 2.0496 -4.9504 26.9360 *MESH_VERTEX 207 4.0224 -9.7104 25.3728 *MESH_VERTEX 208 5.8384 -14.0960 22.8352 *MESH_VERTEX 209 7.4320 -17.9408 19.4192 *MESH_VERTEX 210 8.7392 -21.0960 15.2576 *MESH_VERTEX 211 9.7104 -23.4416 10.5104 *MESH_VERTEX 212 10.3072 -24.8848 5.3584 *MESH_VERTEX 213 10.5104 -25.3728 0.0000 *MESH_VERTEX 214 10.3072 -24.8848 -5.3584 *MESH_VERTEX 215 9.7104 -23.4416 -10.5104 *MESH_VERTEX 216 8.7392 -21.0960 -15.2576 *MESH_VERTEX 217 7.4320 -17.9408 -19.4192 *MESH_VERTEX 218 5.8384 -14.0960 -22.8352 *MESH_VERTEX 219 4.0224 -9.7104 -25.3728 *MESH_VERTEX 220 2.0496 -4.9504 -26.9360 *MESH_VERTEX 221 1.0448 -5.2544 26.9360 *MESH_VERTEX 222 2.0496 -10.3072 25.3728 *MESH_VERTEX 223 2.9760 -14.9648 22.8352 *MESH_VERTEX 224 3.7888 -19.0464 19.4192 *MESH_VERTEX 225 4.4544 -22.3968 15.2576 *MESH_VERTEX 226 4.9504 -24.8848 10.5104 *MESH_VERTEX 227 5.2544 -26.4176 5.3584 *MESH_VERTEX 228 5.3584 -26.9360 0.0000 *MESH_VERTEX 229 5.2544 -26.4176 -5.3584 *MESH_VERTEX 230 4.9504 -24.8848 -10.5104 *MESH_VERTEX 231 4.4544 -22.3968 -15.2576 *MESH_VERTEX 232 3.7888 -19.0464 -19.4192 *MESH_VERTEX 233 2.9760 -14.9648 -22.8352 *MESH_VERTEX 234 2.0496 -10.3072 -25.3728 *MESH_VERTEX 235 1.0448 -5.2544 -26.9360 *MESH_VERTEX 236 -0.0000 -5.3584 26.9360 *MESH_VERTEX 237 0.0000 -10.5104 25.3728 *MESH_VERTEX 238 0.0000 -15.2576 22.8352 *MESH_VERTEX 239 -0.0000 -19.4192 19.4192 *MESH_VERTEX 240 -0.0000 -22.8352 15.2576 *MESH_VERTEX 241 0.0000 -25.3728 10.5104 *MESH_VERTEX 242 -0.0000 -26.9360 5.3584 *MESH_VERTEX 243 -0.0000 -27.4640 0.0000 *MESH_VERTEX 244 -0.0000 -26.9360 -5.3584 *MESH_VERTEX 245 0.0000 -25.3728 -10.5104 *MESH_VERTEX 246 -0.0000 -22.8352 -15.2576 *MESH_VERTEX 247 -0.0000 -19.4192 -19.4192 *MESH_VERTEX 248 -0.0000 -15.2576 -22.8352 *MESH_VERTEX 249 0.0000 -10.5104 -25.3728 *MESH_VERTEX 250 0.0000 -5.3584 -26.9360 *MESH_VERTEX 251 -1.0448 -5.2544 26.9360 *MESH_VERTEX 252 -2.0496 -10.3072 25.3728 *MESH_VERTEX 253 -2.9760 -14.9648 22.8352 *MESH_VERTEX 254 -3.7888 -19.0464 19.4192 *MESH_VERTEX 255 -4.4544 -22.3968 15.2576 *MESH_VERTEX 256 -4.9504 -24.8848 10.5104 *MESH_VERTEX 257 -5.2544 -26.4176 5.3584 *MESH_VERTEX 258 -5.3584 -26.9360 0.0000 *MESH_VERTEX 259 -5.2544 -26.4176 -5.3584 *MESH_VERTEX 260 -4.9504 -24.8848 -10.5104 *MESH_VERTEX 261 -4.4544 -22.3968 -15.2576 *MESH_VERTEX 262 -3.7888 -19.0464 -19.4192 *MESH_VERTEX 263 -2.9760 -14.9648 -22.8352 *MESH_VERTEX 264 -2.0496 -10.3072 -25.3728 *MESH_VERTEX 265 -1.0448 -5.2544 -26.9360 *MESH_VERTEX 266 -2.0496 -4.9504 26.9360 *MESH_VERTEX 267 -4.0224 -9.7104 25.3728 *MESH_VERTEX 268 -5.8384 -14.0960 22.8352 *MESH_VERTEX 269 -7.4320 -17.9408 19.4192 *MESH_VERTEX 270 -8.7392 -21.0960 15.2576 *MESH_VERTEX 271 -9.7104 -23.4416 10.5104 *MESH_VERTEX 272 -10.3072 -24.8848 5.3584 *MESH_VERTEX 273 -10.5104 -25.3728 0.0000 *MESH_VERTEX 274 -10.3072 -24.8848 -5.3584 *MESH_VERTEX 275 -9.7104 -23.4416 -10.5104 *MESH_VERTEX 276 -8.7392 -21.0960 -15.2576 *MESH_VERTEX 277 -7.4320 -17.9408 -19.4192 *MESH_VERTEX 278 -5.8384 -14.0960 -22.8352 *MESH_VERTEX 279 -4.0224 -9.7104 -25.3728 *MESH_VERTEX 280 -2.0496 -4.9504 -26.9360 *MESH_VERTEX 281 -2.9760 -4.4544 26.9360 *MESH_VERTEX 282 -5.8384 -8.7392 25.3728 *MESH_VERTEX 283 -8.4768 -12.6864 22.8352 *MESH_VERTEX 284 -10.7888 -16.1472 19.4192 *MESH_VERTEX 285 -12.6864 -18.9872 15.2576 *MESH_VERTEX 286 -14.0960 -21.0960 10.5104 *MESH_VERTEX 287 -14.9648 -22.3968 5.3584 *MESH_VERTEX 288 -15.2576 -22.8352 0.0000 *MESH_VERTEX 289 -14.9648 -22.3968 -5.3584 *MESH_VERTEX 290 -14.0960 -21.0960 -10.5104 *MESH_VERTEX 291 -12.6864 -18.9872 -15.2576 *MESH_VERTEX 292 -10.7888 -16.1472 -19.4192 *MESH_VERTEX 293 -8.4768 -12.6864 -22.8352 *MESH_VERTEX 294 -5.8384 -8.7392 -25.3728 *MESH_VERTEX 295 -2.9760 -4.4544 -26.9360 *MESH_VERTEX 296 -0.0000 -0.0000 27.4640 *MESH_VERTEX 297 -3.7888 -3.7888 26.9360 *MESH_VERTEX 298 -7.4320 -7.4320 25.3728 *MESH_VERTEX 299 -10.7888 -10.7888 22.8352 *MESH_VERTEX 300 -13.7312 -13.7312 19.4192 *MESH_VERTEX 301 -16.1472 -16.1472 15.2576 *MESH_VERTEX 302 -17.9408 -17.9408 10.5104 *MESH_VERTEX 303 -19.0464 -19.0464 5.3584 *MESH_VERTEX 304 -19.4192 -19.4192 0.0000 *MESH_VERTEX 305 -19.0464 -19.0464 -5.3584 *MESH_VERTEX 306 -17.9408 -17.9408 -10.5104 *MESH_VERTEX 307 -16.1472 -16.1472 -15.2576 *MESH_VERTEX 308 -13.7312 -13.7312 -19.4192 *MESH_VERTEX 309 -10.7888 -10.7888 -22.8352 *MESH_VERTEX 310 -7.4320 -7.4320 -25.3728 *MESH_VERTEX 311 -3.7888 -3.7888 -26.9360 *MESH_VERTEX 312 -4.4544 -2.9760 26.9360 *MESH_VERTEX 313 -8.7392 -5.8384 25.3728 *MESH_VERTEX 314 -12.6864 -8.4768 22.8352 *MESH_VERTEX 315 -16.1472 -10.7888 19.4192 *MESH_VERTEX 316 -18.9872 -12.6864 15.2576 *MESH_VERTEX 317 -21.0960 -14.0960 10.5104 *MESH_VERTEX 318 -22.3968 -14.9648 5.3584 *MESH_VERTEX 319 -22.8352 -15.2576 0.0000 *MESH_VERTEX 320 -22.3968 -14.9648 -5.3584 *MESH_VERTEX 321 -21.0960 -14.0960 -10.5104 *MESH_VERTEX 322 -18.9872 -12.6864 -15.2576 *MESH_VERTEX 323 -16.1472 -10.7888 -19.4192 *MESH_VERTEX 324 -12.6864 -8.4768 -22.8352 *MESH_VERTEX 325 -8.7392 -5.8384 -25.3728 *MESH_VERTEX 326 -4.4544 -2.9760 -26.9360 *MESH_VERTEX 327 -4.9504 -2.0496 26.9360 *MESH_VERTEX 328 -9.7104 -4.0224 25.3728 *MESH_VERTEX 329 -14.0960 -5.8384 22.8352 *MESH_VERTEX 330 -17.9408 -7.4320 19.4192 *MESH_VERTEX 331 -21.0960 -8.7392 15.2576 *MESH_VERTEX 332 -23.4416 -9.7104 10.5104 *MESH_VERTEX 333 -24.8848 -10.3072 5.3584 *MESH_VERTEX 334 -25.3728 -10.5104 0.0000 *MESH_VERTEX 335 -24.8848 -10.3072 -5.3584 *MESH_VERTEX 336 -23.4416 -9.7104 -10.5104 *MESH_VERTEX 337 -21.0960 -8.7392 -15.2576 *MESH_VERTEX 338 -17.9408 -7.4320 -19.4192 *MESH_VERTEX 339 -14.0960 -5.8384 -22.8352 *MESH_VERTEX 340 -9.7104 -4.0224 -25.3728 *MESH_VERTEX 341 -4.9504 -2.0496 -26.9360 *MESH_VERTEX 342 -5.2544 -1.0448 26.9360 *MESH_VERTEX 343 -10.3072 -2.0496 25.3728 *MESH_VERTEX 344 -14.9648 -2.9760 22.8352 *MESH_VERTEX 345 -19.0464 -3.7888 19.4192 *MESH_VERTEX 346 -22.3968 -4.4544 15.2576 *MESH_VERTEX 347 -24.8848 -4.9504 10.5104 *MESH_VERTEX 348 -26.4176 -5.2544 5.3584 *MESH_VERTEX 349 -26.9360 -5.3584 0.0000 *MESH_VERTEX 350 -26.4176 -5.2544 -5.3584 *MESH_VERTEX 351 -24.8848 -4.9504 -10.5104 *MESH_VERTEX 352 -22.3968 -4.4544 -15.2576 *MESH_VERTEX 353 -19.0464 -3.7888 -19.4192 *MESH_VERTEX 354 -14.9648 -2.9760 -22.8352 *MESH_VERTEX 355 -10.3072 -2.0496 -25.3728 *MESH_VERTEX 356 -5.2544 -1.0448 -26.9360 *MESH_VERTEX 357 -5.3584 -0.0000 26.9360 *MESH_VERTEX 358 -10.5104 -0.0000 25.3728 *MESH_VERTEX 359 -15.2576 -0.0000 22.8352 *MESH_VERTEX 360 -19.4192 -0.0000 19.4192 *MESH_VERTEX 361 -22.8352 -0.0000 15.2576 *MESH_VERTEX 362 -25.3728 -0.0000 10.5104 *MESH_VERTEX 363 -26.9360 -0.0000 5.3584 *MESH_VERTEX 364 -27.4640 -0.0000 0.0000 *MESH_VERTEX 365 -26.9360 -0.0000 -5.3584 *MESH_VERTEX 366 -25.3728 -0.0000 -10.5104 *MESH_VERTEX 367 -22.8352 -0.0000 -15.2576 *MESH_VERTEX 368 -19.4192 -0.0000 -19.4192 *MESH_VERTEX 369 -15.2576 -0.0000 -22.8352 *MESH_VERTEX 370 -10.5104 -0.0000 -25.3728 *MESH_VERTEX 371 -5.3584 -0.0000 -26.9360 *MESH_VERTEX 372 -5.2544 1.0448 26.9360 *MESH_VERTEX 373 -10.3072 2.0496 25.3728 *MESH_VERTEX 374 -14.9648 2.9760 22.8352 *MESH_VERTEX 375 -19.0464 3.7888 19.4192 *MESH_VERTEX 376 -22.3968 4.4544 15.2576 *MESH_VERTEX 377 -24.8848 4.9504 10.5104 *MESH_VERTEX 378 -26.4176 5.2544 5.3584 *MESH_VERTEX 379 -26.9360 5.3584 0.0000 *MESH_VERTEX 380 -26.4176 5.2544 -5.3584 *MESH_VERTEX 381 -24.8848 4.9504 -10.5104 *MESH_VERTEX 382 -22.3968 4.4544 -15.2576 *MESH_VERTEX 383 -19.0464 3.7888 -19.4192 *MESH_VERTEX 384 -14.9648 2.9760 -22.8352 *MESH_VERTEX 385 -10.3072 2.0496 -25.3728 *MESH_VERTEX 386 -5.2544 1.0448 -26.9360 *MESH_VERTEX 387 -4.9504 2.0496 26.9360 *MESH_VERTEX 388 -9.7104 4.0224 25.3728 *MESH_VERTEX 389 -14.0960 5.8384 22.8352 *MESH_VERTEX 390 -17.9408 7.4320 19.4192 *MESH_VERTEX 391 -21.0960 8.7392 15.2576 *MESH_VERTEX 392 -23.4416 9.7104 10.5104 *MESH_VERTEX 393 -24.8848 10.3072 5.3584 *MESH_VERTEX 394 -25.3728 10.5104 0.0000 *MESH_VERTEX 395 -24.8848 10.3072 -5.3584 *MESH_VERTEX 396 -23.4416 9.7104 -10.5104 *MESH_VERTEX 397 -21.0960 8.7392 -15.2576 *MESH_VERTEX 398 -17.9408 7.4320 -19.4192 *MESH_VERTEX 399 -14.0960 5.8384 -22.8352 *MESH_VERTEX 400 -9.7104 4.0224 -25.3728 *MESH_VERTEX 401 -4.9504 2.0496 -26.9360 *MESH_VERTEX 402 -4.4544 2.9760 26.9360 *MESH_VERTEX 403 -8.7392 5.8384 25.3728 *MESH_VERTEX 404 -12.6864 8.4768 22.8352 *MESH_VERTEX 405 -16.1472 10.7888 19.4192 *MESH_VERTEX 406 -18.9872 12.6864 15.2576 *MESH_VERTEX 407 -21.0960 14.0960 10.5104 *MESH_VERTEX 408 -22.3968 14.9648 5.3584 *MESH_VERTEX 409 -22.8352 15.2576 0.0000 *MESH_VERTEX 410 -22.3968 14.9648 -5.3584 *MESH_VERTEX 411 -21.0960 14.0960 -10.5104 *MESH_VERTEX 412 -18.9872 12.6864 -15.2576 *MESH_VERTEX 413 -16.1472 10.7888 -19.4192 *MESH_VERTEX 414 -12.6864 8.4768 -22.8352 *MESH_VERTEX 415 -8.7392 5.8384 -25.3728 *MESH_VERTEX 416 -4.4544 2.9760 -26.9360 *MESH_VERTEX 417 -3.7888 3.7888 26.9360 *MESH_VERTEX 418 -7.4320 7.4320 25.3728 *MESH_VERTEX 419 -10.7888 10.7888 22.8352 *MESH_VERTEX 420 -13.7312 13.7312 19.4192 *MESH_VERTEX 421 -16.1472 16.1472 15.2576 *MESH_VERTEX 422 -17.9408 17.9408 10.5104 *MESH_VERTEX 423 -19.0464 19.0464 5.3584 *MESH_VERTEX 424 -19.4192 19.4192 0.0000 *MESH_VERTEX 425 -19.0464 19.0464 -5.3584 *MESH_VERTEX 426 -17.9408 17.9408 -10.5104 *MESH_VERTEX 427 -16.1472 16.1472 -15.2576 *MESH_VERTEX 428 -13.7312 13.7312 -19.4192 *MESH_VERTEX 429 -10.7888 10.7888 -22.8352 *MESH_VERTEX 430 -7.4320 7.4320 -25.3728 *MESH_VERTEX 431 -3.7888 3.7888 -26.9360 *MESH_VERTEX 432 -2.9760 4.4544 26.9360 *MESH_VERTEX 433 -5.8384 8.7392 25.3728 *MESH_VERTEX 434 -8.4768 12.6864 22.8352 *MESH_VERTEX 435 -10.7888 16.1472 19.4192 *MESH_VERTEX 436 -12.6864 18.9872 15.2576 *MESH_VERTEX 437 -14.0960 21.0960 10.5104 *MESH_VERTEX 438 -14.9648 22.3968 5.3584 *MESH_VERTEX 439 -15.2576 22.8352 0.0000 *MESH_VERTEX 440 -14.9648 22.3968 -5.3584 *MESH_VERTEX 441 -14.0960 21.0960 -10.5104 *MESH_VERTEX 442 -12.6864 18.9872 -15.2576 *MESH_VERTEX 443 -10.7888 16.1472 -19.4192 *MESH_VERTEX 444 -8.4768 12.6864 -22.8352 *MESH_VERTEX 445 -5.8384 8.7392 -25.3728 *MESH_VERTEX 446 -2.9760 4.4544 -26.9360 *MESH_VERTEX 447 -2.0496 4.9504 26.9360 *MESH_VERTEX 448 -4.0224 9.7104 25.3728 *MESH_VERTEX 449 -5.8384 14.0960 22.8352 *MESH_VERTEX 450 -7.4320 17.9408 19.4192 *MESH_VERTEX 451 -8.7392 21.0960 15.2576 *MESH_VERTEX 452 -9.7104 23.4416 10.5104 *MESH_VERTEX 453 -10.3072 24.8848 5.3584 *MESH_VERTEX 454 -10.5104 25.3728 0.0000 *MESH_VERTEX 455 -10.3072 24.8848 -5.3584 *MESH_VERTEX 456 -9.7104 23.4416 -10.5104 *MESH_VERTEX 457 -8.7392 21.0960 -15.2576 *MESH_VERTEX 458 -7.4320 17.9408 -19.4192 *MESH_VERTEX 459 -5.8384 14.0960 -22.8352 *MESH_VERTEX 460 -4.0224 9.7104 -25.3728 *MESH_VERTEX 461 -2.0496 4.9504 -26.9360 *MESH_VERTEX 462 -1.0448 5.2544 26.9360 *MESH_VERTEX 463 -2.0496 10.3072 25.3728 *MESH_VERTEX 464 -2.9760 14.9648 22.8352 *MESH_VERTEX 465 -3.7888 19.0464 19.4192 *MESH_VERTEX 466 -4.4544 22.3968 15.2576 *MESH_VERTEX 467 -4.9504 24.8848 10.5104 *MESH_VERTEX 468 -5.2544 26.4176 5.3584 *MESH_VERTEX 469 -5.3584 26.9360 0.0000 *MESH_VERTEX 470 -5.2544 26.4176 -5.3584 *MESH_VERTEX 471 -4.9504 24.8848 -10.5104 *MESH_VERTEX 472 -4.4544 22.3968 -15.2576 *MESH_VERTEX 473 -3.7888 19.0464 -19.4192 *MESH_VERTEX 474 -2.9760 14.9648 -22.8352 *MESH_VERTEX 475 -2.0496 10.3072 -25.3728 *MESH_VERTEX 476 -1.0448 5.2544 -26.9360 *MESH_VERTEX 477 0.0000 25.3728 -10.5104 *MESH_VERTEX 478 0.0000 22.8352 -15.2576 *MESH_VERTEX 479 0.0000 19.4192 -19.4192 *MESH_VERTEX 480 0.0000 10.5104 -25.3728 *MESH_VERTEX 481 0.0000 5.3584 -26.9360 } *MESH_FACE_LIST { *MESH_FACE 0: A: 477 B: 20 C: 478 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 1: A: 2 B: 13 C: 3 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 2: A: 478 B: 21 C: 479 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 3: A: 3 B: 14 C: 4 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 4: A: 479 B: 22 C: 9 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 5: A: 4 B: 15 C: 5 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 6: A: 9 B: 23 C: 480 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 7: A: 5 B: 16 C: 6 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 8: A: 480 B: 24 C: 481 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 9: A: 6 B: 17 C: 7 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 10: A: 0 B: 296 C: 10 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 11: A: 205 B: 481 C: 24 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 12: A: 7 B: 18 C: 8 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 13: A: 0 B: 11 C: 1 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 14: A: 8 B: 19 C: 477 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 15: A: 2 B: 11 C: 12 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 16: A: 19 B: 33 C: 34 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 17: A: 11 B: 27 C: 12 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 18: A: 19 B: 35 C: 20 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 19: A: 12 B: 28 C: 13 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 20: A: 21 B: 35 C: 36 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 21: A: 13 B: 29 C: 14 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 22: A: 21 B: 37 C: 22 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 23: A: 14 B: 30 C: 15 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 24: A: 22 B: 38 C: 23 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 25: A: 15 B: 31 C: 16 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 26: A: 23 B: 39 C: 24 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 27: A: 16 B: 32 C: 17 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 28: A: 10 B: 296 C: 25 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 29: A: 205 B: 24 C: 39 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 30: A: 18 B: 32 C: 33 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 31: A: 10 B: 26 C: 11 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 32: A: 37 B: 53 C: 38 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 33: A: 31 B: 45 C: 46 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 34: A: 38 B: 54 C: 39 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 35: A: 31 B: 47 C: 32 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 36: A: 25 B: 296 C: 40 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 37: A: 205 B: 39 C: 54 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 38: A: 32 B: 48 C: 33 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 39: A: 25 B: 41 C: 26 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 40: A: 33 B: 49 C: 34 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 41: A: 26 B: 42 C: 27 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 42: A: 35 B: 49 C: 50 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 43: A: 27 B: 43 C: 28 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 44: A: 36 B: 50 C: 51 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 45: A: 28 B: 44 C: 29 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 46: A: 36 B: 52 C: 37 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 47: A: 29 B: 45 C: 30 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 48: A: 41 B: 57 C: 42 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 49: A: 50 B: 64 C: 65 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 50: A: 42 B: 58 C: 43 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 51: A: 50 B: 66 C: 51 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 52: A: 43 B: 59 C: 44 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 53: A: 51 B: 67 C: 52 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 54: A: 44 B: 60 C: 45 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 55: A: 52 B: 68 C: 53 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 56: A: 45 B: 61 C: 46 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 57: A: 53 B: 69 C: 54 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 58: A: 47 B: 61 C: 62 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 59: A: 40 B: 296 C: 55 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 60: A: 205 B: 54 C: 69 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 61: A: 47 B: 63 C: 48 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 62: A: 40 B: 56 C: 41 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 63: A: 48 B: 64 C: 49 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 64: A: 60 B: 76 C: 61 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 65: A: 68 B: 84 C: 69 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 66: A: 62 B: 76 C: 77 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 67: A: 55 B: 296 C: 70 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 68: A: 205 B: 69 C: 84 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 69: A: 62 B: 78 C: 63 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 70: A: 55 B: 71 C: 56 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 71: A: 63 B: 79 C: 64 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 72: A: 56 B: 72 C: 57 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 73: A: 65 B: 79 C: 80 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 74: A: 57 B: 73 C: 58 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 75: A: 65 B: 81 C: 66 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 76: A: 59 B: 73 C: 74 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 77: A: 67 B: 81 C: 82 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 78: A: 59 B: 75 C: 60 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 79: A: 68 B: 82 C: 83 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 80: A: 80 B: 94 C: 95 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 81: A: 72 B: 88 C: 73 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 82: A: 81 B: 95 C: 96 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 83: A: 74 B: 88 C: 89 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 84: A: 81 B: 97 C: 82 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 85: A: 74 B: 90 C: 75 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 86: A: 83 B: 97 C: 98 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 87: A: 76 B: 90 C: 91 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 88: A: 83 B: 99 C: 84 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 89: A: 76 B: 92 C: 77 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 90: A: 70 B: 296 C: 85 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 91: A: 205 B: 84 C: 99 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 92: A: 77 B: 93 C: 78 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 93: A: 70 B: 86 C: 71 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 94: A: 78 B: 94 C: 79 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 95: A: 71 B: 87 C: 72 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 96: A: 99 B: 113 C: 114 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 97: A: 91 B: 107 C: 92 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 98: A: 85 B: 296 C: 100 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 99: A: 205 B: 99 C: 114 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 100: A: 92 B: 108 C: 93 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 101: A: 85 B: 101 C: 86 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 102: A: 93 B: 109 C: 94 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 103: A: 86 B: 102 C: 87 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 104: A: 95 B: 109 C: 110 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 105: A: 88 B: 102 C: 103 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 106: A: 96 B: 110 C: 111 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 107: A: 88 B: 104 C: 89 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 108: A: 96 B: 112 C: 97 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 109: A: 89 B: 105 C: 90 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 110: A: 97 B: 113 C: 98 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 111: A: 91 B: 105 C: 106 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 112: A: 110 B: 126 C: 111 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 113: A: 103 B: 119 C: 104 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 114: A: 112 B: 126 C: 127 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 115: A: 104 B: 120 C: 105 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 116: A: 113 B: 127 C: 128 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 117: A: 106 B: 120 C: 121 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 118: A: 114 B: 128 C: 129 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 119: A: 106 B: 122 C: 107 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 120: A: 100 B: 296 C: 115 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 121: A: 205 B: 114 C: 129 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 122: A: 108 B: 122 C: 123 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 123: A: 100 B: 116 C: 101 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 124: A: 108 B: 124 C: 109 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 125: A: 101 B: 117 C: 102 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 126: A: 110 B: 124 C: 125 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 127: A: 102 B: 118 C: 103 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 128: A: 115 B: 296 C: 130 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 129: A: 205 B: 129 C: 144 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 130: A: 122 B: 138 C: 123 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 131: A: 116 B: 130 C: 131 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 132: A: 123 B: 139 C: 124 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 133: A: 116 B: 132 C: 117 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 134: A: 125 B: 139 C: 140 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 135: A: 117 B: 133 C: 118 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 136: A: 125 B: 141 C: 126 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 137: A: 119 B: 133 C: 134 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 138: A: 127 B: 141 C: 142 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 139: A: 119 B: 135 C: 120 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 140: A: 127 B: 143 C: 128 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 141: A: 121 B: 135 C: 136 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 142: A: 129 B: 143 C: 144 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 143: A: 121 B: 137 C: 122 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 144: A: 133 B: 149 C: 134 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 145: A: 141 B: 157 C: 142 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 146: A: 134 B: 150 C: 135 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 147: A: 143 B: 157 C: 158 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 148: A: 136 B: 150 C: 151 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 149: A: 143 B: 159 C: 144 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 150: A: 136 B: 152 C: 137 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 151: A: 130 B: 296 C: 145 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 152: A: 205 B: 144 C: 159 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 153: A: 137 B: 153 C: 138 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 154: A: 130 B: 146 C: 131 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 155: A: 138 B: 154 C: 139 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 156: A: 132 B: 146 C: 147 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 157: A: 140 B: 154 C: 155 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 158: A: 132 B: 148 C: 133 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 159: A: 140 B: 156 C: 141 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 160: A: 153 B: 167 C: 168 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 161: A: 145 B: 161 C: 146 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 162: A: 153 B: 169 C: 154 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 163: A: 146 B: 162 C: 147 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 164: A: 155 B: 169 C: 170 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 165: A: 147 B: 163 C: 148 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 166: A: 155 B: 171 C: 156 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 167: A: 149 B: 163 C: 164 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 168: A: 157 B: 171 C: 172 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 169: A: 149 B: 165 C: 150 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 170: A: 157 B: 173 C: 158 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 171: A: 151 B: 165 C: 166 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 172: A: 158 B: 174 C: 159 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 173: A: 151 B: 167 C: 152 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 174: A: 145 B: 296 C: 160 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 175: A: 205 B: 159 C: 174 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 176: A: 172 B: 186 C: 187 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 177: A: 164 B: 180 C: 165 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 178: A: 172 B: 188 C: 173 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 179: A: 166 B: 180 C: 181 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 180: A: 174 B: 188 C: 189 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 181: A: 166 B: 182 C: 167 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 182: A: 160 B: 296 C: 175 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 183: A: 205 B: 174 C: 189 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 184: A: 167 B: 183 C: 168 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 185: A: 160 B: 176 C: 161 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 186: A: 168 B: 184 C: 169 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 187: A: 161 B: 177 C: 162 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 188: A: 169 B: 185 C: 170 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 189: A: 162 B: 178 C: 163 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 190: A: 170 B: 186 C: 171 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 191: A: 163 B: 179 C: 164 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 192: A: 175 B: 191 C: 176 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 193: A: 183 B: 199 C: 184 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 194: A: 176 B: 192 C: 177 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 195: A: 185 B: 199 C: 200 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 196: A: 178 B: 192 C: 193 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 197: A: 185 B: 201 C: 186 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 198: A: 179 B: 193 C: 194 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 199: A: 187 B: 201 C: 202 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 200: A: 179 B: 195 C: 180 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 201: A: 187 B: 203 C: 188 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 202: A: 181 B: 195 C: 196 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 203: A: 189 B: 203 C: 204 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 204: A: 181 B: 197 C: 182 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 205: A: 175 B: 296 C: 190 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 206: A: 205 B: 189 C: 204 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 207: A: 183 B: 197 C: 198 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 208: A: 194 B: 211 C: 195 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 209: A: 202 B: 219 C: 203 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 210: A: 196 B: 211 C: 212 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 211: A: 203 B: 220 C: 204 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 212: A: 196 B: 213 C: 197 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 213: A: 190 B: 296 C: 206 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 214: A: 205 B: 204 C: 220 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 215: A: 197 B: 214 C: 198 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 216: A: 190 B: 207 C: 191 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 217: A: 198 B: 215 C: 199 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 218: A: 192 B: 207 C: 208 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 219: A: 200 B: 215 C: 216 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 220: A: 192 B: 209 C: 193 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 221: A: 200 B: 217 C: 201 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 222: A: 193 B: 210 C: 194 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 223: A: 202 B: 217 C: 218 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 224: A: 214 B: 230 C: 215 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 225: A: 207 B: 223 C: 208 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 226: A: 216 B: 230 C: 231 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 227: A: 208 B: 224 C: 209 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 228: A: 216 B: 232 C: 217 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 229: A: 209 B: 225 C: 210 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 230: A: 217 B: 233 C: 218 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 231: A: 210 B: 226 C: 211 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 232: A: 218 B: 234 C: 219 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 233: A: 212 B: 226 C: 227 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 234: A: 220 B: 234 C: 235 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 235: A: 212 B: 228 C: 213 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 236: A: 206 B: 296 C: 221 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 237: A: 205 B: 220 C: 235 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 238: A: 213 B: 229 C: 214 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 239: A: 206 B: 222 C: 207 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 240: A: 233 B: 249 C: 234 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 241: A: 227 B: 241 C: 242 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 242: A: 235 B: 249 C: 250 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 243: A: 227 B: 243 C: 228 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 244: A: 221 B: 296 C: 236 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 245: A: 205 B: 235 C: 250 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 246: A: 228 B: 244 C: 229 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 247: A: 221 B: 237 C: 222 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 248: A: 229 B: 245 C: 230 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 249: A: 223 B: 237 C: 238 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 250: A: 231 B: 245 C: 246 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 251: A: 224 B: 238 C: 239 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 252: A: 231 B: 247 C: 232 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 253: A: 224 B: 240 C: 225 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 254: A: 233 B: 247 C: 248 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 255: A: 225 B: 241 C: 226 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 256: A: 246 B: 260 C: 261 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 257: A: 239 B: 253 C: 254 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 258: A: 246 B: 262 C: 247 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 259: A: 240 B: 254 C: 255 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 260: A: 247 B: 263 C: 248 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 261: A: 240 B: 256 C: 241 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 262: A: 248 B: 264 C: 249 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 263: A: 242 B: 256 C: 257 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 264: A: 249 B: 265 C: 250 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 265: A: 242 B: 258 C: 243 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 266: A: 236 B: 296 C: 251 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 267: A: 205 B: 250 C: 265 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 268: A: 243 B: 259 C: 244 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 269: A: 236 B: 252 C: 237 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 270: A: 244 B: 260 C: 245 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 271: A: 237 B: 253 C: 238 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 272: A: 265 B: 279 C: 280 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 273: A: 257 B: 273 C: 258 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 274: A: 251 B: 296 C: 266 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 275: A: 205 B: 265 C: 280 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 276: A: 259 B: 273 C: 274 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 277: A: 251 B: 267 C: 252 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 278: A: 259 B: 275 C: 260 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 279: A: 252 B: 268 C: 253 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 280: A: 261 B: 275 C: 276 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 281: A: 254 B: 268 C: 269 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 282: A: 261 B: 277 C: 262 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 283: A: 255 B: 269 C: 270 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 284: A: 262 B: 278 C: 263 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 285: A: 255 B: 271 C: 256 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 286: A: 264 B: 278 C: 279 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 287: A: 257 B: 271 C: 272 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 288: A: 268 B: 284 C: 269 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 289: A: 276 B: 292 C: 277 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 290: A: 270 B: 284 C: 285 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 291: A: 278 B: 292 C: 293 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 292: A: 270 B: 286 C: 271 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 293: A: 278 B: 294 C: 279 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 294: A: 272 B: 286 C: 287 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 295: A: 280 B: 294 C: 295 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 296: A: 272 B: 288 C: 273 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 297: A: 266 B: 296 C: 281 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 298: A: 205 B: 280 C: 295 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 299: A: 273 B: 289 C: 274 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 300: A: 266 B: 282 C: 267 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 301: A: 274 B: 290 C: 275 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 302: A: 267 B: 283 C: 268 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 303: A: 276 B: 290 C: 291 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 304: A: 288 B: 303 C: 304 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 305: A: 281 B: 296 C: 297 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 306: A: 205 B: 295 C: 311 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 307: A: 288 B: 305 C: 289 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 308: A: 281 B: 298 C: 282 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 309: A: 289 B: 306 C: 290 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 310: A: 282 B: 299 C: 283 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 311: A: 291 B: 306 C: 307 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 312: A: 284 B: 299 C: 300 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 313: A: 291 B: 308 C: 292 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 314: A: 285 B: 300 C: 301 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 315: A: 292 B: 309 C: 293 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 316: A: 285 B: 302 C: 286 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 317: A: 293 B: 310 C: 294 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 318: A: 287 B: 302 C: 303 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 319: A: 294 B: 311 C: 295 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 320: A: 307 B: 323 C: 308 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 321: A: 301 B: 315 C: 316 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 322: A: 308 B: 324 C: 309 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 323: A: 301 B: 317 C: 302 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 324: A: 310 B: 324 C: 325 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 325: A: 303 B: 317 C: 318 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 326: A: 310 B: 326 C: 311 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 327: A: 303 B: 319 C: 304 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 328: A: 297 B: 296 C: 312 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 329: A: 205 B: 311 C: 326 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 330: A: 304 B: 320 C: 305 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 331: A: 297 B: 313 C: 298 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 332: A: 305 B: 321 C: 306 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 333: A: 298 B: 314 C: 299 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 334: A: 307 B: 321 C: 322 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 335: A: 300 B: 314 C: 315 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 336: A: 312 B: 296 C: 327 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 337: A: 205 B: 326 C: 341 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 338: A: 319 B: 335 C: 320 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 339: A: 312 B: 328 C: 313 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 340: A: 320 B: 336 C: 321 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 341: A: 313 B: 329 C: 314 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 342: A: 322 B: 336 C: 337 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 343: A: 315 B: 329 C: 330 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 344: A: 323 B: 337 C: 338 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 345: A: 316 B: 330 C: 331 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 346: A: 323 B: 339 C: 324 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 347: A: 316 B: 332 C: 317 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 348: A: 325 B: 339 C: 340 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 349: A: 318 B: 332 C: 333 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 350: A: 326 B: 340 C: 341 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 351: A: 318 B: 334 C: 319 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 352: A: 331 B: 345 C: 346 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 353: A: 338 B: 354 C: 339 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 354: A: 331 B: 347 C: 332 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 355: A: 340 B: 354 C: 355 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 356: A: 333 B: 347 C: 348 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 357: A: 340 B: 356 C: 341 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 358: A: 333 B: 349 C: 334 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 359: A: 327 B: 296 C: 342 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 360: A: 205 B: 341 C: 356 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 361: A: 334 B: 350 C: 335 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 362: A: 328 B: 342 C: 343 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 363: A: 335 B: 351 C: 336 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 364: A: 328 B: 344 C: 329 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 365: A: 337 B: 351 C: 352 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 366: A: 330 B: 344 C: 345 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 367: A: 337 B: 353 C: 338 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 368: A: 350 B: 364 C: 365 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 369: A: 343 B: 357 C: 358 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 370: A: 350 B: 366 C: 351 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 371: A: 343 B: 359 C: 344 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 372: A: 352 B: 366 C: 367 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 373: A: 345 B: 359 C: 360 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 374: A: 352 B: 368 C: 353 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 375: A: 345 B: 361 C: 346 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 376: A: 354 B: 368 C: 369 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 377: A: 346 B: 362 C: 347 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 378: A: 355 B: 369 C: 370 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 379: A: 348 B: 362 C: 363 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 380: A: 355 B: 371 C: 356 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 381: A: 348 B: 364 C: 349 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 382: A: 342 B: 296 C: 357 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 383: A: 205 B: 356 C: 371 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 384: A: 368 B: 384 C: 369 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 385: A: 361 B: 377 C: 362 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 386: A: 370 B: 384 C: 385 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 387: A: 363 B: 377 C: 378 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 388: A: 370 B: 386 C: 371 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 389: A: 363 B: 379 C: 364 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 390: A: 357 B: 296 C: 372 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 391: A: 205 B: 371 C: 386 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 392: A: 365 B: 379 C: 380 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 393: A: 358 B: 372 C: 373 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 394: A: 365 B: 381 C: 366 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 395: A: 358 B: 374 C: 359 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 396: A: 367 B: 381 C: 382 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 397: A: 360 B: 374 C: 375 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 398: A: 367 B: 383 C: 368 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 399: A: 361 B: 375 C: 376 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 400: A: 380 B: 396 C: 381 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 401: A: 373 B: 389 C: 374 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 402: A: 382 B: 396 C: 397 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 403: A: 375 B: 389 C: 390 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 404: A: 382 B: 398 C: 383 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 405: A: 375 B: 391 C: 376 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 406: A: 383 B: 399 C: 384 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 407: A: 376 B: 392 C: 377 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 408: A: 385 B: 399 C: 400 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 409: A: 378 B: 392 C: 393 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 410: A: 385 B: 401 C: 386 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 411: A: 378 B: 394 C: 379 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 412: A: 372 B: 296 C: 387 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 413: A: 205 B: 386 C: 401 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 414: A: 379 B: 395 C: 380 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 415: A: 372 B: 388 C: 373 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 416: A: 400 B: 414 C: 415 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 417: A: 393 B: 407 C: 408 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 418: A: 400 B: 416 C: 401 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 419: A: 393 B: 409 C: 394 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 420: A: 387 B: 296 C: 402 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 421: A: 205 B: 401 C: 416 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 422: A: 395 B: 409 C: 410 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 423: A: 387 B: 403 C: 388 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 424: A: 395 B: 411 C: 396 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 425: A: 389 B: 403 C: 404 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 426: A: 397 B: 411 C: 412 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 427: A: 390 B: 404 C: 405 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 428: A: 397 B: 413 C: 398 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 429: A: 391 B: 405 C: 406 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 430: A: 398 B: 414 C: 399 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 431: A: 391 B: 407 C: 392 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 432: A: 403 B: 419 C: 404 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 433: A: 412 B: 426 C: 427 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 434: A: 404 B: 420 C: 405 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 435: A: 412 B: 428 C: 413 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 436: A: 406 B: 420 C: 421 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 437: A: 413 B: 429 C: 414 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 438: A: 406 B: 422 C: 407 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 439: A: 414 B: 430 C: 415 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 440: A: 408 B: 422 C: 423 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 441: A: 415 B: 431 C: 416 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 442: A: 408 B: 424 C: 409 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 443: A: 402 B: 296 C: 417 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 444: A: 205 B: 416 C: 431 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 445: A: 410 B: 424 C: 425 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 446: A: 402 B: 418 C: 403 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 447: A: 410 B: 426 C: 411 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 448: A: 423 B: 437 C: 438 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 449: A: 430 B: 446 C: 431 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 450: A: 424 B: 438 C: 439 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 451: A: 417 B: 296 C: 432 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 452: A: 205 B: 431 C: 446 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 453: A: 424 B: 440 C: 425 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 454: A: 417 B: 433 C: 418 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 455: A: 425 B: 441 C: 426 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 456: A: 418 B: 434 C: 419 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 457: A: 427 B: 441 C: 442 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 458: A: 419 B: 435 C: 420 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 459: A: 427 B: 443 C: 428 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 460: A: 421 B: 435 C: 436 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 461: A: 429 B: 443 C: 444 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 462: A: 421 B: 437 C: 422 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 463: A: 429 B: 445 C: 430 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 464: A: 442 B: 456 C: 457 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 465: A: 435 B: 449 C: 450 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 466: A: 442 B: 458 C: 443 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 467: A: 436 B: 450 C: 451 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 468: A: 443 B: 459 C: 444 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 469: A: 436 B: 452 C: 437 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 470: A: 444 B: 460 C: 445 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 471: A: 438 B: 452 C: 453 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 472: A: 445 B: 461 C: 446 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 473: A: 438 B: 454 C: 439 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 474: A: 432 B: 296 C: 447 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 475: A: 205 B: 446 C: 461 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 476: A: 439 B: 455 C: 440 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 477: A: 433 B: 447 C: 448 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 478: A: 440 B: 456 C: 441 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 479: A: 434 B: 448 C: 449 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 480: A: 461 B: 475 C: 476 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 481: A: 453 B: 469 C: 454 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 482: A: 447 B: 296 C: 462 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 483: A: 205 B: 461 C: 476 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 484: A: 454 B: 470 C: 455 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 485: A: 447 B: 463 C: 448 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 486: A: 455 B: 471 C: 456 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 487: A: 448 B: 464 C: 449 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 488: A: 457 B: 471 C: 472 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 489: A: 449 B: 465 C: 450 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 490: A: 457 B: 473 C: 458 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 491: A: 451 B: 465 C: 466 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 492: A: 458 B: 474 C: 459 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 493: A: 451 B: 467 C: 452 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 494: A: 459 B: 475 C: 460 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 495: A: 453 B: 467 C: 468 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 496: A: 465 B: 2 C: 3 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 497: A: 472 B: 479 C: 473 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 498: A: 466 B: 3 C: 4 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 499: A: 473 B: 9 C: 474 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 500: A: 467 B: 4 C: 5 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 501: A: 474 B: 480 C: 475 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 502: A: 468 B: 5 C: 6 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 503: A: 475 B: 481 C: 476 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 504: A: 469 B: 6 C: 7 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 505: A: 462 B: 296 C: 0 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 506: A: 205 B: 476 C: 481 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 507: A: 469 B: 8 C: 470 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 508: A: 463 B: 0 C: 1 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 509: A: 470 B: 477 C: 471 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 510: A: 464 B: 1 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 511: A: 472 B: 477 C: 478 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 512: A: 477 B: 19 C: 20 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 513: A: 2 B: 12 C: 13 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 514: A: 478 B: 20 C: 21 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 515: A: 3 B: 13 C: 14 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 516: A: 479 B: 21 C: 22 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 517: A: 4 B: 14 C: 15 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 518: A: 9 B: 22 C: 23 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 519: A: 5 B: 15 C: 16 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 520: A: 480 B: 23 C: 24 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 521: A: 6 B: 16 C: 17 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 522: A: 7 B: 17 C: 18 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 523: A: 0 B: 10 C: 11 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 524: A: 8 B: 18 C: 19 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 525: A: 2 B: 1 C: 11 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 526: A: 19 B: 18 C: 33 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 527: A: 11 B: 26 C: 27 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 528: A: 19 B: 34 C: 35 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 529: A: 12 B: 27 C: 28 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 530: A: 21 B: 20 C: 35 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 531: A: 13 B: 28 C: 29 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 532: A: 21 B: 36 C: 37 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 533: A: 14 B: 29 C: 30 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 534: A: 22 B: 37 C: 38 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 535: A: 15 B: 30 C: 31 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 536: A: 23 B: 38 C: 39 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 537: A: 16 B: 31 C: 32 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 538: A: 18 B: 17 C: 32 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 539: A: 10 B: 25 C: 26 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 540: A: 37 B: 52 C: 53 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 541: A: 31 B: 30 C: 45 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 542: A: 38 B: 53 C: 54 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 543: A: 31 B: 46 C: 47 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 544: A: 32 B: 47 C: 48 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 545: A: 25 B: 40 C: 41 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 546: A: 33 B: 48 C: 49 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 547: A: 26 B: 41 C: 42 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 548: A: 35 B: 34 C: 49 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 549: A: 27 B: 42 C: 43 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 550: A: 36 B: 35 C: 50 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 551: A: 28 B: 43 C: 44 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 552: A: 36 B: 51 C: 52 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 553: A: 29 B: 44 C: 45 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 554: A: 41 B: 56 C: 57 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 555: A: 50 B: 49 C: 64 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 556: A: 42 B: 57 C: 58 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 557: A: 50 B: 65 C: 66 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 558: A: 43 B: 58 C: 59 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 559: A: 51 B: 66 C: 67 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 560: A: 44 B: 59 C: 60 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 561: A: 52 B: 67 C: 68 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 562: A: 45 B: 60 C: 61 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 563: A: 53 B: 68 C: 69 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 564: A: 47 B: 46 C: 61 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 565: A: 47 B: 62 C: 63 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 566: A: 40 B: 55 C: 56 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 567: A: 48 B: 63 C: 64 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 568: A: 60 B: 75 C: 76 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 569: A: 68 B: 83 C: 84 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 570: A: 62 B: 61 C: 76 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 571: A: 62 B: 77 C: 78 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 572: A: 55 B: 70 C: 71 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 573: A: 63 B: 78 C: 79 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 574: A: 56 B: 71 C: 72 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 575: A: 65 B: 64 C: 79 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 576: A: 57 B: 72 C: 73 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 577: A: 65 B: 80 C: 81 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 578: A: 59 B: 58 C: 73 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 579: A: 67 B: 66 C: 81 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 580: A: 59 B: 74 C: 75 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 581: A: 68 B: 67 C: 82 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 582: A: 80 B: 79 C: 94 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 583: A: 72 B: 87 C: 88 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 584: A: 81 B: 80 C: 95 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 585: A: 74 B: 73 C: 88 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 586: A: 81 B: 96 C: 97 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 587: A: 74 B: 89 C: 90 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 588: A: 83 B: 82 C: 97 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 589: A: 76 B: 75 C: 90 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 590: A: 83 B: 98 C: 99 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 591: A: 76 B: 91 C: 92 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 592: A: 77 B: 92 C: 93 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 593: A: 70 B: 85 C: 86 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 594: A: 78 B: 93 C: 94 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 595: A: 71 B: 86 C: 87 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 596: A: 99 B: 98 C: 113 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 597: A: 91 B: 106 C: 107 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 598: A: 92 B: 107 C: 108 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 599: A: 85 B: 100 C: 101 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 600: A: 93 B: 108 C: 109 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 601: A: 86 B: 101 C: 102 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 602: A: 95 B: 94 C: 109 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 603: A: 88 B: 87 C: 102 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 604: A: 96 B: 95 C: 110 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 605: A: 88 B: 103 C: 104 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 606: A: 96 B: 111 C: 112 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 607: A: 89 B: 104 C: 105 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 608: A: 97 B: 112 C: 113 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 609: A: 91 B: 90 C: 105 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 610: A: 110 B: 125 C: 126 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 611: A: 103 B: 118 C: 119 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 612: A: 112 B: 111 C: 126 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 613: A: 104 B: 119 C: 120 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 614: A: 113 B: 112 C: 127 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 615: A: 106 B: 105 C: 120 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 616: A: 114 B: 113 C: 128 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 617: A: 106 B: 121 C: 122 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 618: A: 108 B: 107 C: 122 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 619: A: 100 B: 115 C: 116 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 620: A: 108 B: 123 C: 124 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 621: A: 101 B: 116 C: 117 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 622: A: 110 B: 109 C: 124 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 623: A: 102 B: 117 C: 118 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 624: A: 122 B: 137 C: 138 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 625: A: 116 B: 115 C: 130 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 626: A: 123 B: 138 C: 139 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 627: A: 116 B: 131 C: 132 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 628: A: 125 B: 124 C: 139 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 629: A: 117 B: 132 C: 133 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 630: A: 125 B: 140 C: 141 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 631: A: 119 B: 118 C: 133 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 632: A: 127 B: 126 C: 141 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 633: A: 119 B: 134 C: 135 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 634: A: 127 B: 142 C: 143 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 635: A: 121 B: 120 C: 135 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 636: A: 129 B: 128 C: 143 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 637: A: 121 B: 136 C: 137 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 638: A: 133 B: 148 C: 149 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 639: A: 141 B: 156 C: 157 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 640: A: 134 B: 149 C: 150 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 641: A: 143 B: 142 C: 157 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 642: A: 136 B: 135 C: 150 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 643: A: 143 B: 158 C: 159 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 644: A: 136 B: 151 C: 152 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 645: A: 137 B: 152 C: 153 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 646: A: 130 B: 145 C: 146 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 647: A: 138 B: 153 C: 154 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 648: A: 132 B: 131 C: 146 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 649: A: 140 B: 139 C: 154 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 650: A: 132 B: 147 C: 148 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 651: A: 140 B: 155 C: 156 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 652: A: 153 B: 152 C: 167 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 653: A: 145 B: 160 C: 161 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 654: A: 153 B: 168 C: 169 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 655: A: 146 B: 161 C: 162 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 656: A: 155 B: 154 C: 169 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 657: A: 147 B: 162 C: 163 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 658: A: 155 B: 170 C: 171 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 659: A: 149 B: 148 C: 163 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 660: A: 157 B: 156 C: 171 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 661: A: 149 B: 164 C: 165 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 662: A: 157 B: 172 C: 173 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 663: A: 151 B: 150 C: 165 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 664: A: 158 B: 173 C: 174 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 665: A: 151 B: 166 C: 167 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 666: A: 172 B: 171 C: 186 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 667: A: 164 B: 179 C: 180 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 668: A: 172 B: 187 C: 188 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 669: A: 166 B: 165 C: 180 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 670: A: 174 B: 173 C: 188 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 671: A: 166 B: 181 C: 182 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 672: A: 167 B: 182 C: 183 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 673: A: 160 B: 175 C: 176 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 674: A: 168 B: 183 C: 184 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 675: A: 161 B: 176 C: 177 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 676: A: 169 B: 184 C: 185 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 677: A: 162 B: 177 C: 178 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 678: A: 170 B: 185 C: 186 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 679: A: 163 B: 178 C: 179 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 680: A: 175 B: 190 C: 191 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 681: A: 183 B: 198 C: 199 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 682: A: 176 B: 191 C: 192 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 683: A: 185 B: 184 C: 199 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 684: A: 178 B: 177 C: 192 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 685: A: 185 B: 200 C: 201 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 686: A: 179 B: 178 C: 193 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 687: A: 187 B: 186 C: 201 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 688: A: 179 B: 194 C: 195 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 689: A: 187 B: 202 C: 203 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 690: A: 181 B: 180 C: 195 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 691: A: 189 B: 188 C: 203 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 692: A: 181 B: 196 C: 197 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 693: A: 183 B: 182 C: 197 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 694: A: 194 B: 210 C: 211 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 695: A: 202 B: 218 C: 219 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 696: A: 196 B: 195 C: 211 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 697: A: 203 B: 219 C: 220 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 698: A: 196 B: 212 C: 213 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 699: A: 197 B: 213 C: 214 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 700: A: 190 B: 206 C: 207 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 701: A: 198 B: 214 C: 215 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 702: A: 192 B: 191 C: 207 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 703: A: 200 B: 199 C: 215 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 704: A: 192 B: 208 C: 209 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 705: A: 200 B: 216 C: 217 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 706: A: 193 B: 209 C: 210 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 707: A: 202 B: 201 C: 217 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 708: A: 214 B: 229 C: 230 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 709: A: 207 B: 222 C: 223 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 710: A: 216 B: 215 C: 230 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 711: A: 208 B: 223 C: 224 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 712: A: 216 B: 231 C: 232 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 713: A: 209 B: 224 C: 225 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 714: A: 217 B: 232 C: 233 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 715: A: 210 B: 225 C: 226 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 716: A: 218 B: 233 C: 234 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 717: A: 212 B: 211 C: 226 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 718: A: 220 B: 219 C: 234 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 719: A: 212 B: 227 C: 228 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 720: A: 213 B: 228 C: 229 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 721: A: 206 B: 221 C: 222 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 722: A: 233 B: 248 C: 249 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 723: A: 227 B: 226 C: 241 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 724: A: 235 B: 234 C: 249 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 725: A: 227 B: 242 C: 243 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 726: A: 228 B: 243 C: 244 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 727: A: 221 B: 236 C: 237 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 728: A: 229 B: 244 C: 245 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 729: A: 223 B: 222 C: 237 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 730: A: 231 B: 230 C: 245 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 731: A: 224 B: 223 C: 238 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 732: A: 231 B: 246 C: 247 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 733: A: 224 B: 239 C: 240 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 734: A: 233 B: 232 C: 247 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 735: A: 225 B: 240 C: 241 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 736: A: 246 B: 245 C: 260 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 737: A: 239 B: 238 C: 253 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 738: A: 246 B: 261 C: 262 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 739: A: 240 B: 239 C: 254 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 740: A: 247 B: 262 C: 263 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 741: A: 240 B: 255 C: 256 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 742: A: 248 B: 263 C: 264 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 743: A: 242 B: 241 C: 256 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 744: A: 249 B: 264 C: 265 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 745: A: 242 B: 257 C: 258 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 746: A: 243 B: 258 C: 259 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 747: A: 236 B: 251 C: 252 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 748: A: 244 B: 259 C: 260 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 749: A: 237 B: 252 C: 253 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 750: A: 265 B: 264 C: 279 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 751: A: 257 B: 272 C: 273 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 752: A: 259 B: 258 C: 273 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 753: A: 251 B: 266 C: 267 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 754: A: 259 B: 274 C: 275 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 755: A: 252 B: 267 C: 268 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 756: A: 261 B: 260 C: 275 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 757: A: 254 B: 253 C: 268 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 758: A: 261 B: 276 C: 277 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 759: A: 255 B: 254 C: 269 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 760: A: 262 B: 277 C: 278 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 761: A: 255 B: 270 C: 271 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 762: A: 264 B: 263 C: 278 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 763: A: 257 B: 256 C: 271 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 764: A: 268 B: 283 C: 284 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 765: A: 276 B: 291 C: 292 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 766: A: 270 B: 269 C: 284 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 767: A: 278 B: 277 C: 292 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 768: A: 270 B: 285 C: 286 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 769: A: 278 B: 293 C: 294 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 770: A: 272 B: 271 C: 286 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 771: A: 280 B: 279 C: 294 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 772: A: 272 B: 287 C: 288 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 773: A: 273 B: 288 C: 289 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 774: A: 266 B: 281 C: 282 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 775: A: 274 B: 289 C: 290 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 776: A: 267 B: 282 C: 283 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 777: A: 276 B: 275 C: 290 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 778: A: 288 B: 287 C: 303 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 779: A: 288 B: 304 C: 305 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 780: A: 281 B: 297 C: 298 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 781: A: 289 B: 305 C: 306 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 782: A: 282 B: 298 C: 299 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 783: A: 291 B: 290 C: 306 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 784: A: 284 B: 283 C: 299 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 785: A: 291 B: 307 C: 308 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 786: A: 285 B: 284 C: 300 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 787: A: 292 B: 308 C: 309 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 788: A: 285 B: 301 C: 302 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 789: A: 293 B: 309 C: 310 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 790: A: 287 B: 286 C: 302 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 791: A: 294 B: 310 C: 311 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 792: A: 307 B: 322 C: 323 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 793: A: 301 B: 300 C: 315 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 794: A: 308 B: 323 C: 324 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 795: A: 301 B: 316 C: 317 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 796: A: 310 B: 309 C: 324 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 797: A: 303 B: 302 C: 317 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 798: A: 310 B: 325 C: 326 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 799: A: 303 B: 318 C: 319 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 800: A: 304 B: 319 C: 320 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 801: A: 297 B: 312 C: 313 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 802: A: 305 B: 320 C: 321 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 803: A: 298 B: 313 C: 314 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 804: A: 307 B: 306 C: 321 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 805: A: 300 B: 299 C: 314 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 806: A: 319 B: 334 C: 335 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 807: A: 312 B: 327 C: 328 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 808: A: 320 B: 335 C: 336 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 809: A: 313 B: 328 C: 329 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 810: A: 322 B: 321 C: 336 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 811: A: 315 B: 314 C: 329 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 812: A: 323 B: 322 C: 337 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 813: A: 316 B: 315 C: 330 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 814: A: 323 B: 338 C: 339 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 815: A: 316 B: 331 C: 332 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 816: A: 325 B: 324 C: 339 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 817: A: 318 B: 317 C: 332 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 818: A: 326 B: 325 C: 340 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 819: A: 318 B: 333 C: 334 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 820: A: 331 B: 330 C: 345 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 821: A: 338 B: 353 C: 354 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 822: A: 331 B: 346 C: 347 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 823: A: 340 B: 339 C: 354 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 824: A: 333 B: 332 C: 347 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 825: A: 340 B: 355 C: 356 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 826: A: 333 B: 348 C: 349 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 827: A: 334 B: 349 C: 350 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 828: A: 328 B: 327 C: 342 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 829: A: 335 B: 350 C: 351 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 830: A: 328 B: 343 C: 344 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 831: A: 337 B: 336 C: 351 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 832: A: 330 B: 329 C: 344 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 833: A: 337 B: 352 C: 353 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 834: A: 350 B: 349 C: 364 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 835: A: 343 B: 342 C: 357 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 836: A: 350 B: 365 C: 366 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 837: A: 343 B: 358 C: 359 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 838: A: 352 B: 351 C: 366 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 839: A: 345 B: 344 C: 359 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 840: A: 352 B: 367 C: 368 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 841: A: 345 B: 360 C: 361 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 842: A: 354 B: 353 C: 368 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 843: A: 346 B: 361 C: 362 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 844: A: 355 B: 354 C: 369 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 845: A: 348 B: 347 C: 362 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 846: A: 355 B: 370 C: 371 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 847: A: 348 B: 363 C: 364 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 848: A: 368 B: 383 C: 384 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 849: A: 361 B: 376 C: 377 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 850: A: 370 B: 369 C: 384 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 851: A: 363 B: 362 C: 377 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 852: A: 370 B: 385 C: 386 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 853: A: 363 B: 378 C: 379 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 854: A: 365 B: 364 C: 379 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 855: A: 358 B: 357 C: 372 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 856: A: 365 B: 380 C: 381 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 857: A: 358 B: 373 C: 374 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 858: A: 367 B: 366 C: 381 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 859: A: 360 B: 359 C: 374 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 860: A: 367 B: 382 C: 383 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 861: A: 361 B: 360 C: 375 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 862: A: 380 B: 395 C: 396 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 863: A: 373 B: 388 C: 389 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 864: A: 382 B: 381 C: 396 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 865: A: 375 B: 374 C: 389 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 866: A: 382 B: 397 C: 398 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 867: A: 375 B: 390 C: 391 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 868: A: 383 B: 398 C: 399 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 869: A: 376 B: 391 C: 392 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 870: A: 385 B: 384 C: 399 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 871: A: 378 B: 377 C: 392 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 872: A: 385 B: 400 C: 401 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 873: A: 378 B: 393 C: 394 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 874: A: 379 B: 394 C: 395 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 875: A: 372 B: 387 C: 388 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 876: A: 400 B: 399 C: 414 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 877: A: 393 B: 392 C: 407 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 878: A: 400 B: 415 C: 416 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 879: A: 393 B: 408 C: 409 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 880: A: 395 B: 394 C: 409 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 881: A: 387 B: 402 C: 403 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 882: A: 395 B: 410 C: 411 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 883: A: 389 B: 388 C: 403 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 884: A: 397 B: 396 C: 411 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 885: A: 390 B: 389 C: 404 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 886: A: 397 B: 412 C: 413 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 887: A: 391 B: 390 C: 405 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 888: A: 398 B: 413 C: 414 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 889: A: 391 B: 406 C: 407 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 890: A: 403 B: 418 C: 419 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 891: A: 412 B: 411 C: 426 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 892: A: 404 B: 419 C: 420 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 893: A: 412 B: 427 C: 428 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 894: A: 406 B: 405 C: 420 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 895: A: 413 B: 428 C: 429 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 896: A: 406 B: 421 C: 422 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 897: A: 414 B: 429 C: 430 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 898: A: 408 B: 407 C: 422 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 899: A: 415 B: 430 C: 431 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 900: A: 408 B: 423 C: 424 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 901: A: 410 B: 409 C: 424 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 902: A: 402 B: 417 C: 418 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 903: A: 410 B: 425 C: 426 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 904: A: 423 B: 422 C: 437 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 905: A: 430 B: 445 C: 446 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 906: A: 424 B: 423 C: 438 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 907: A: 424 B: 439 C: 440 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 908: A: 417 B: 432 C: 433 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 909: A: 425 B: 440 C: 441 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 910: A: 418 B: 433 C: 434 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 911: A: 427 B: 426 C: 441 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 912: A: 419 B: 434 C: 435 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 913: A: 427 B: 442 C: 443 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 914: A: 421 B: 420 C: 435 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 915: A: 429 B: 428 C: 443 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 916: A: 421 B: 436 C: 437 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 917: A: 429 B: 444 C: 445 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 918: A: 442 B: 441 C: 456 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 919: A: 435 B: 434 C: 449 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 920: A: 442 B: 457 C: 458 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 921: A: 436 B: 435 C: 450 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 922: A: 443 B: 458 C: 459 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 923: A: 436 B: 451 C: 452 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 924: A: 444 B: 459 C: 460 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 925: A: 438 B: 437 C: 452 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 926: A: 445 B: 460 C: 461 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 927: A: 438 B: 453 C: 454 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 928: A: 439 B: 454 C: 455 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 929: A: 433 B: 432 C: 447 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 930: A: 440 B: 455 C: 456 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 931: A: 434 B: 433 C: 448 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 932: A: 461 B: 460 C: 475 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 933: A: 453 B: 468 C: 469 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 934: A: 454 B: 469 C: 470 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 935: A: 447 B: 462 C: 463 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 936: A: 455 B: 470 C: 471 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 937: A: 448 B: 463 C: 464 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 938: A: 457 B: 456 C: 471 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 939: A: 449 B: 464 C: 465 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 940: A: 457 B: 472 C: 473 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 941: A: 451 B: 450 C: 465 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 942: A: 458 B: 473 C: 474 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 943: A: 451 B: 466 C: 467 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 944: A: 459 B: 474 C: 475 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 945: A: 453 B: 452 C: 467 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 946: A: 465 B: 464 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 947: A: 472 B: 478 C: 479 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 948: A: 466 B: 465 C: 3 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 949: A: 473 B: 479 C: 9 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 950: A: 467 B: 466 C: 4 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 951: A: 474 B: 9 C: 480 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 952: A: 468 B: 467 C: 5 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 953: A: 475 B: 480 C: 481 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 954: A: 469 B: 468 C: 6 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 955: A: 469 B: 7 C: 8 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 956: A: 463 B: 462 C: 0 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 957: A: 470 B: 8 C: 477 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 958: A: 464 B: 463 C: 1 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 *MESH_FACE 959: A: 472 B: 471 C: 477 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 0 *MESH_MTLID 0 } *MESH_NUMTVERTEX 559 *MESH_TVERTLIST { *MESH_TVERT 0 0.7500 0.3750 0.0000 *MESH_TVERT 1 0.7188 0.3125 0.0000 *MESH_TVERT 2 0.7500 0.3125 0.0000 *MESH_TVERT 3 0.7500 0.8125 0.0000 *MESH_TVERT 4 0.7188 0.7500 0.0000 *MESH_TVERT 5 0.7500 0.7500 0.0000 *MESH_TVERT 6 0.7188 0.2500 0.0000 *MESH_TVERT 7 0.7500 0.2500 0.0000 *MESH_TVERT 8 0.7188 0.6875 0.0000 *MESH_TVERT 9 0.7500 0.6875 0.0000 *MESH_TVERT 10 0.7188 0.1875 0.0000 *MESH_TVERT 11 0.7500 0.1875 0.0000 *MESH_TVERT 12 0.7188 0.6250 0.0000 *MESH_TVERT 13 0.7500 0.6250 0.0000 *MESH_TVERT 14 0.7188 0.1250 0.0000 *MESH_TVERT 15 0.7500 0.1250 0.0000 *MESH_TVERT 16 0.7188 0.5625 0.0000 *MESH_TVERT 17 0.7500 0.5625 0.0000 *MESH_TVERT 18 0.7187 0.0625 0.0000 *MESH_TVERT 19 0.7500 0.0625 0.0000 *MESH_TVERT 20 0.7188 0.5000 0.0000 *MESH_TVERT 21 0.7500 0.5000 0.0000 *MESH_TVERT 22 0.7500 0.9375 0.0000 *MESH_TVERT 23 0.7344 1.0000 0.0000 *MESH_TVERT 24 0.7187 0.9375 0.0000 *MESH_TVERT 25 0.7344 0.0000 0.0000 *MESH_TVERT 26 0.7188 0.4375 0.0000 *MESH_TVERT 27 0.7500 0.4375 0.0000 *MESH_TVERT 28 0.7188 0.8750 0.0000 *MESH_TVERT 29 0.7500 0.8750 0.0000 *MESH_TVERT 30 0.7188 0.3750 0.0000 *MESH_TVERT 31 0.7188 0.8125 0.0000 *MESH_TVERT 32 0.6875 0.4375 0.0000 *MESH_TVERT 33 0.6875 0.3750 0.0000 *MESH_TVERT 34 0.6875 0.8125 0.0000 *MESH_TVERT 35 0.6875 0.3125 0.0000 *MESH_TVERT 36 0.6875 0.7500 0.0000 *MESH_TVERT 37 0.6875 0.2500 0.0000 *MESH_TVERT 38 0.6875 0.6875 0.0000 *MESH_TVERT 39 0.6875 0.1875 0.0000 *MESH_TVERT 40 0.6875 0.6250 0.0000 *MESH_TVERT 41 0.6875 0.1250 0.0000 *MESH_TVERT 42 0.6875 0.5625 0.0000 *MESH_TVERT 43 0.6875 0.0625 0.0000 *MESH_TVERT 44 0.6875 0.5000 0.0000 *MESH_TVERT 45 0.7031 1.0000 0.0000 *MESH_TVERT 46 0.6875 0.9375 0.0000 *MESH_TVERT 47 0.7031 0.0000 0.0000 *MESH_TVERT 48 0.6875 0.8750 0.0000 *MESH_TVERT 49 0.6562 0.1250 0.0000 *MESH_TVERT 50 0.6562 0.6250 0.0000 *MESH_TVERT 51 0.6562 0.5625 0.0000 *MESH_TVERT 52 0.6562 0.0625 0.0000 *MESH_TVERT 53 0.6562 0.5000 0.0000 *MESH_TVERT 54 0.6719 1.0000 0.0000 *MESH_TVERT 55 0.6562 0.9375 0.0000 *MESH_TVERT 56 0.6719 0.0000 0.0000 *MESH_TVERT 57 0.6562 0.4375 0.0000 *MESH_TVERT 58 0.6562 0.8750 0.0000 *MESH_TVERT 59 0.6562 0.3750 0.0000 *MESH_TVERT 60 0.6562 0.8125 0.0000 *MESH_TVERT 61 0.6562 0.3125 0.0000 *MESH_TVERT 62 0.6562 0.7500 0.0000 *MESH_TVERT 63 0.6562 0.2500 0.0000 *MESH_TVERT 64 0.6562 0.6875 0.0000 *MESH_TVERT 65 0.6562 0.1875 0.0000 *MESH_TVERT 66 0.6250 0.8125 0.0000 *MESH_TVERT 67 0.6250 0.3750 0.0000 *MESH_TVERT 68 0.6250 0.3125 0.0000 *MESH_TVERT 69 0.6250 0.7500 0.0000 *MESH_TVERT 70 0.6250 0.2500 0.0000 *MESH_TVERT 71 0.6250 0.6875 0.0000 *MESH_TVERT 72 0.6250 0.1875 0.0000 *MESH_TVERT 73 0.6250 0.6250 0.0000 *MESH_TVERT 74 0.6250 0.1250 0.0000 *MESH_TVERT 75 0.6250 0.5625 0.0000 *MESH_TVERT 76 0.6250 0.0625 0.0000 *MESH_TVERT 77 0.6250 0.5000 0.0000 *MESH_TVERT 78 0.6406 1.0000 0.0000 *MESH_TVERT 79 0.6250 0.9375 0.0000 *MESH_TVERT 80 0.6406 0.0000 0.0000 *MESH_TVERT 81 0.6250 0.4375 0.0000 *MESH_TVERT 82 0.6250 0.8750 0.0000 *MESH_TVERT 83 0.5937 0.5625 0.0000 *MESH_TVERT 84 0.5937 0.0625 0.0000 *MESH_TVERT 85 0.5937 0.5000 0.0000 *MESH_TVERT 86 0.6094 1.0000 0.0000 *MESH_TVERT 87 0.5937 0.9375 0.0000 *MESH_TVERT 88 0.6094 0.0000 0.0000 *MESH_TVERT 89 0.5937 0.4375 0.0000 *MESH_TVERT 90 0.5937 0.8750 0.0000 *MESH_TVERT 91 0.5938 0.3750 0.0000 *MESH_TVERT 92 0.5937 0.8125 0.0000 *MESH_TVERT 93 0.5937 0.3125 0.0000 *MESH_TVERT 94 0.5937 0.7500 0.0000 *MESH_TVERT 95 0.5937 0.2500 0.0000 *MESH_TVERT 96 0.5937 0.6875 0.0000 *MESH_TVERT 97 0.5937 0.1875 0.0000 *MESH_TVERT 98 0.5937 0.6250 0.0000 *MESH_TVERT 99 0.5937 0.1250 0.0000 *MESH_TVERT 100 0.5625 0.3750 0.0000 *MESH_TVERT 101 0.5625 0.3125 0.0000 *MESH_TVERT 102 0.5625 0.7500 0.0000 *MESH_TVERT 103 0.5625 0.2500 0.0000 *MESH_TVERT 104 0.5625 0.6875 0.0000 *MESH_TVERT 105 0.5625 0.1875 0.0000 *MESH_TVERT 106 0.5625 0.6250 0.0000 *MESH_TVERT 107 0.5625 0.1250 0.0000 *MESH_TVERT 108 0.5625 0.5625 0.0000 *MESH_TVERT 109 0.5625 0.0625 0.0000 *MESH_TVERT 110 0.5625 0.5000 0.0000 *MESH_TVERT 111 0.5781 1.0000 0.0000 *MESH_TVERT 112 0.5625 0.9375 0.0000 *MESH_TVERT 113 0.5781 0.0000 0.0000 *MESH_TVERT 114 0.5625 0.4375 0.0000 *MESH_TVERT 115 0.5625 0.8750 0.0000 *MESH_TVERT 116 0.5625 0.8125 0.0000 *MESH_TVERT 117 0.5312 0.1250 0.0000 *MESH_TVERT 118 0.5312 0.0625 0.0000 *MESH_TVERT 119 0.5312 0.5000 0.0000 *MESH_TVERT 120 0.5469 1.0000 0.0000 *MESH_TVERT 121 0.5312 0.9375 0.0000 *MESH_TVERT 122 0.5469 0.0000 0.0000 *MESH_TVERT 123 0.5312 0.4375 0.0000 *MESH_TVERT 124 0.5312 0.8750 0.0000 *MESH_TVERT 125 0.5312 0.3750 0.0000 *MESH_TVERT 126 0.5312 0.8125 0.0000 *MESH_TVERT 127 0.5312 0.3125 0.0000 *MESH_TVERT 128 0.5312 0.7500 0.0000 *MESH_TVERT 129 0.5312 0.2500 0.0000 *MESH_TVERT 130 0.5312 0.6875 0.0000 *MESH_TVERT 131 0.5312 0.1875 0.0000 *MESH_TVERT 132 0.5312 0.6250 0.0000 *MESH_TVERT 133 0.5312 0.5625 0.0000 *MESH_TVERT 134 0.5000 0.2500 0.0000 *MESH_TVERT 135 0.5000 0.6875 0.0000 *MESH_TVERT 136 0.5000 0.1875 0.0000 *MESH_TVERT 137 0.5000 0.6250 0.0000 *MESH_TVERT 138 0.5000 0.1250 0.0000 *MESH_TVERT 139 0.5000 0.5625 0.0000 *MESH_TVERT 140 0.5000 0.0625 0.0000 *MESH_TVERT 141 0.5000 0.5000 0.0000 *MESH_TVERT 142 0.5156 1.0000 0.0000 *MESH_TVERT 143 0.5000 0.9375 0.0000 *MESH_TVERT 144 0.5156 0.0000 0.0000 *MESH_TVERT 145 0.5000 0.4375 0.0000 *MESH_TVERT 146 0.5000 0.8750 0.0000 *MESH_TVERT 147 0.5000 0.3750 0.0000 *MESH_TVERT 148 0.5000 0.8125 0.0000 *MESH_TVERT 149 0.5000 0.3125 0.0000 *MESH_TVERT 150 0.5000 0.7500 0.0000 *MESH_TVERT 151 0.4844 1.0000 0.0000 *MESH_TVERT 152 0.4687 0.9375 0.0000 *MESH_TVERT 153 0.4844 0.0000 0.0000 *MESH_TVERT 154 0.4687 0.0625 0.0000 *MESH_TVERT 155 0.4687 0.4375 0.0000 *MESH_TVERT 156 0.4687 0.8750 0.0000 *MESH_TVERT 157 0.4687 0.3750 0.0000 *MESH_TVERT 158 0.4687 0.8125 0.0000 *MESH_TVERT 159 0.4687 0.3125 0.0000 *MESH_TVERT 160 0.4687 0.7500 0.0000 *MESH_TVERT 161 0.4687 0.2500 0.0000 *MESH_TVERT 162 0.4687 0.6875 0.0000 *MESH_TVERT 163 0.4687 0.1875 0.0000 *MESH_TVERT 164 0.4687 0.6250 0.0000 *MESH_TVERT 165 0.4687 0.1250 0.0000 *MESH_TVERT 166 0.4687 0.5625 0.0000 *MESH_TVERT 167 0.4687 0.5000 0.0000 *MESH_TVERT 168 0.4375 0.6875 0.0000 *MESH_TVERT 169 0.4375 0.1875 0.0000 *MESH_TVERT 170 0.4375 0.6250 0.0000 *MESH_TVERT 171 0.4375 0.1250 0.0000 *MESH_TVERT 172 0.4375 0.5625 0.0000 *MESH_TVERT 173 0.4375 0.0625 0.0000 *MESH_TVERT 174 0.4375 0.5000 0.0000 *MESH_TVERT 175 0.4531 1.0000 0.0000 *MESH_TVERT 176 0.4375 0.9375 0.0000 *MESH_TVERT 177 0.4531 0.0000 0.0000 *MESH_TVERT 178 0.4375 0.4375 0.0000 *MESH_TVERT 179 0.4375 0.8750 0.0000 *MESH_TVERT 180 0.4375 0.3750 0.0000 *MESH_TVERT 181 0.4375 0.8125 0.0000 *MESH_TVERT 182 0.4375 0.3125 0.0000 *MESH_TVERT 183 0.4375 0.7500 0.0000 *MESH_TVERT 184 0.4375 0.2500 0.0000 *MESH_TVERT 185 0.4062 0.5000 0.0000 *MESH_TVERT 186 0.4062 0.4375 0.0000 *MESH_TVERT 187 0.4062 0.8750 0.0000 *MESH_TVERT 188 0.4062 0.3750 0.0000 *MESH_TVERT 189 0.4062 0.8125 0.0000 *MESH_TVERT 190 0.4062 0.3125 0.0000 *MESH_TVERT 191 0.4062 0.7500 0.0000 *MESH_TVERT 192 0.4062 0.2500 0.0000 *MESH_TVERT 193 0.4062 0.6875 0.0000 *MESH_TVERT 194 0.4062 0.1875 0.0000 *MESH_TVERT 195 0.4062 0.6250 0.0000 *MESH_TVERT 196 0.4062 0.1250 0.0000 *MESH_TVERT 197 0.4062 0.5625 0.0000 *MESH_TVERT 198 0.4062 0.0625 0.0000 *MESH_TVERT 199 0.4219 1.0000 0.0000 *MESH_TVERT 200 0.4062 0.9375 0.0000 *MESH_TVERT 201 0.4219 0.0000 0.0000 *MESH_TVERT 202 0.3750 0.2500 0.0000 *MESH_TVERT 203 0.3750 0.1875 0.0000 *MESH_TVERT 204 0.3750 0.6250 0.0000 *MESH_TVERT 205 0.3750 0.1250 0.0000 *MESH_TVERT 206 0.3750 0.5625 0.0000 *MESH_TVERT 207 0.3750 0.0625 0.0000 *MESH_TVERT 208 0.3750 0.5000 0.0000 *MESH_TVERT 209 0.3906 1.0000 0.0000 *MESH_TVERT 210 0.3750 0.9375 0.0000 *MESH_TVERT 211 0.3906 0.0000 0.0000 *MESH_TVERT 212 0.3750 0.4375 0.0000 *MESH_TVERT 213 0.3750 0.8750 0.0000 *MESH_TVERT 214 0.3750 0.3750 0.0000 *MESH_TVERT 215 0.3750 0.8125 0.0000 *MESH_TVERT 216 0.3750 0.3125 0.0000 *MESH_TVERT 217 0.3750 0.7500 0.0000 *MESH_TVERT 218 0.3750 0.6875 0.0000 *MESH_TVERT 219 0.3437 0.8750 0.0000 *MESH_TVERT 220 0.3437 0.3750 0.0000 *MESH_TVERT 221 0.3437 0.8125 0.0000 *MESH_TVERT 222 0.3437 0.3125 0.0000 *MESH_TVERT 223 0.3437 0.7500 0.0000 *MESH_TVERT 224 0.3437 0.2500 0.0000 *MESH_TVERT 225 0.3437 0.6875 0.0000 *MESH_TVERT 226 0.3437 0.1875 0.0000 *MESH_TVERT 227 0.3437 0.6250 0.0000 *MESH_TVERT 228 0.3437 0.1250 0.0000 *MESH_TVERT 229 0.3437 0.5625 0.0000 *MESH_TVERT 230 0.3437 0.0625 0.0000 *MESH_TVERT 231 0.3437 0.5000 0.0000 *MESH_TVERT 232 0.3594 1.0000 0.0000 *MESH_TVERT 233 0.3437 0.9375 0.0000 *MESH_TVERT 234 0.3594 0.0000 0.0000 *MESH_TVERT 235 0.3437 0.4375 0.0000 *MESH_TVERT 236 0.3125 0.6250 0.0000 *MESH_TVERT 237 0.3125 0.1250 0.0000 *MESH_TVERT 238 0.3125 0.5625 0.0000 *MESH_TVERT 239 0.3125 0.0625 0.0000 *MESH_TVERT 240 0.3125 0.5000 0.0000 *MESH_TVERT 241 0.3281 1.0000 0.0000 *MESH_TVERT 242 0.3125 0.9375 0.0000 *MESH_TVERT 243 0.3281 0.0000 0.0000 *MESH_TVERT 244 0.3125 0.4375 0.0000 *MESH_TVERT 245 0.3125 0.8750 0.0000 *MESH_TVERT 246 0.3125 0.3750 0.0000 *MESH_TVERT 247 0.3125 0.8125 0.0000 *MESH_TVERT 248 0.3125 0.3125 0.0000 *MESH_TVERT 249 0.3125 0.7500 0.0000 *MESH_TVERT 250 0.3125 0.2500 0.0000 *MESH_TVERT 251 0.3125 0.6875 0.0000 *MESH_TVERT 252 0.3125 0.1875 0.0000 *MESH_TVERT 253 0.2812 0.3750 0.0000 *MESH_TVERT 254 0.2812 0.8125 0.0000 *MESH_TVERT 255 0.2812 0.3125 0.0000 *MESH_TVERT 256 0.2812 0.7500 0.0000 *MESH_TVERT 257 0.2812 0.2500 0.0000 *MESH_TVERT 258 0.2812 0.6875 0.0000 *MESH_TVERT 259 0.2812 0.1875 0.0000 *MESH_TVERT 260 0.2812 0.6250 0.0000 *MESH_TVERT 261 0.2812 0.1250 0.0000 *MESH_TVERT 262 0.2812 0.5625 0.0000 *MESH_TVERT 263 0.2812 0.0625 0.0000 *MESH_TVERT 264 0.2812 0.5000 0.0000 *MESH_TVERT 265 0.2969 1.0000 0.0000 *MESH_TVERT 266 0.2812 0.9375 0.0000 *MESH_TVERT 267 0.2969 0.0000 0.0000 *MESH_TVERT 268 0.2812 0.4375 0.0000 *MESH_TVERT 269 0.2812 0.8750 0.0000 *MESH_TVERT 270 0.2500 0.1250 0.0000 *MESH_TVERT 271 0.2500 0.6250 0.0000 *MESH_TVERT 272 0.2500 0.5625 0.0000 *MESH_TVERT 273 0.2500 0.0625 0.0000 *MESH_TVERT 274 0.2500 0.5000 0.0000 *MESH_TVERT 275 0.2656 1.0000 0.0000 *MESH_TVERT 276 0.2500 0.9375 0.0000 *MESH_TVERT 277 0.2656 0.0000 0.0000 *MESH_TVERT 278 0.2500 0.4375 0.0000 *MESH_TVERT 279 0.2500 0.8750 0.0000 *MESH_TVERT 280 0.2500 0.3750 0.0000 *MESH_TVERT 281 0.2500 0.8125 0.0000 *MESH_TVERT 282 0.2500 0.3125 0.0000 *MESH_TVERT 283 0.2500 0.7500 0.0000 *MESH_TVERT 284 0.2500 0.2500 0.0000 *MESH_TVERT 285 0.2500 0.6875 0.0000 *MESH_TVERT 286 0.2500 0.1875 0.0000 *MESH_TVERT 287 0.2188 0.3750 0.0000 *MESH_TVERT 288 0.2187 0.3125 0.0000 *MESH_TVERT 289 0.2188 0.8125 0.0000 *MESH_TVERT 290 0.2187 0.7500 0.0000 *MESH_TVERT 291 0.2187 0.2500 0.0000 *MESH_TVERT 292 0.2187 0.6875 0.0000 *MESH_TVERT 293 0.2188 0.1875 0.0000 *MESH_TVERT 294 0.2188 0.6250 0.0000 *MESH_TVERT 295 0.2188 0.1250 0.0000 *MESH_TVERT 296 0.2187 0.5625 0.0000 *MESH_TVERT 297 0.2188 0.0625 0.0000 *MESH_TVERT 298 0.2187 0.5000 0.0000 *MESH_TVERT 299 0.2344 1.0000 0.0000 *MESH_TVERT 300 0.2188 0.9375 0.0000 *MESH_TVERT 301 0.2344 0.0000 0.0000 *MESH_TVERT 302 0.2187 0.4375 0.0000 *MESH_TVERT 303 0.2188 0.8750 0.0000 *MESH_TVERT 304 0.1875 0.1250 0.0000 *MESH_TVERT 305 0.1875 0.0625 0.0000 *MESH_TVERT 306 0.1875 0.5000 0.0000 *MESH_TVERT 307 0.2031 1.0000 0.0000 *MESH_TVERT 308 0.1875 0.9375 0.0000 *MESH_TVERT 309 0.2031 0.0000 0.0000 *MESH_TVERT 310 0.1875 0.4375 0.0000 *MESH_TVERT 311 0.1875 0.8750 0.0000 *MESH_TVERT 312 0.1875 0.3750 0.0000 *MESH_TVERT 313 0.1875 0.8125 0.0000 *MESH_TVERT 314 0.1875 0.3125 0.0000 *MESH_TVERT 315 0.1875 0.7500 0.0000 *MESH_TVERT 316 0.1875 0.2500 0.0000 *MESH_TVERT 317 0.1875 0.6875 0.0000 *MESH_TVERT 318 0.1875 0.1875 0.0000 *MESH_TVERT 319 0.1875 0.6250 0.0000 *MESH_TVERT 320 0.1875 0.5625 0.0000 *MESH_TVERT 321 0.1563 0.7500 0.0000 *MESH_TVERT 322 0.1563 0.2500 0.0000 *MESH_TVERT 323 0.1562 0.6875 0.0000 *MESH_TVERT 324 0.1563 0.1875 0.0000 *MESH_TVERT 325 0.1563 0.6250 0.0000 *MESH_TVERT 326 0.1563 0.1250 0.0000 *MESH_TVERT 327 0.1562 0.5625 0.0000 *MESH_TVERT 328 0.1563 0.0625 0.0000 *MESH_TVERT 329 0.1562 0.5000 0.0000 *MESH_TVERT 330 0.1719 1.0000 0.0000 *MESH_TVERT 331 0.1563 0.9375 0.0000 *MESH_TVERT 332 0.1719 0.0000 0.0000 *MESH_TVERT 333 0.1562 0.4375 0.0000 *MESH_TVERT 334 0.1563 0.8750 0.0000 *MESH_TVERT 335 0.1563 0.3750 0.0000 *MESH_TVERT 336 0.1563 0.8125 0.0000 *MESH_TVERT 337 0.1562 0.3125 0.0000 *MESH_TVERT 338 0.1250 0.5625 0.0000 *MESH_TVERT 339 0.1250 0.5000 0.0000 *MESH_TVERT 340 0.1406 1.0000 0.0000 *MESH_TVERT 341 0.1250 0.9375 0.0000 *MESH_TVERT 342 0.1406 0.0000 0.0000 *MESH_TVERT 343 0.1250 0.0625 0.0000 *MESH_TVERT 344 0.1250 0.4375 0.0000 *MESH_TVERT 345 0.1250 0.8750 0.0000 *MESH_TVERT 346 0.1250 0.3750 0.0000 *MESH_TVERT 347 0.1250 0.8125 0.0000 *MESH_TVERT 348 0.1250 0.3125 0.0000 *MESH_TVERT 349 0.1250 0.7500 0.0000 *MESH_TVERT 350 0.1250 0.2500 0.0000 *MESH_TVERT 351 0.1250 0.6875 0.0000 *MESH_TVERT 352 0.1250 0.1875 0.0000 *MESH_TVERT 353 0.1250 0.6250 0.0000 *MESH_TVERT 354 0.1250 0.1250 0.0000 *MESH_TVERT 355 0.0938 0.2500 0.0000 *MESH_TVERT 356 0.0938 0.7500 0.0000 *MESH_TVERT 357 0.0938 0.6875 0.0000 *MESH_TVERT 358 0.0938 0.1875 0.0000 *MESH_TVERT 359 0.0938 0.6250 0.0000 *MESH_TVERT 360 0.0938 0.1250 0.0000 *MESH_TVERT 361 0.0938 0.5625 0.0000 *MESH_TVERT 362 0.0938 0.0625 0.0000 *MESH_TVERT 363 0.0938 0.5000 0.0000 *MESH_TVERT 364 0.1094 1.0000 0.0000 *MESH_TVERT 365 0.0938 0.9375 0.0000 *MESH_TVERT 366 0.1094 0.0000 0.0000 *MESH_TVERT 367 0.0938 0.4375 0.0000 *MESH_TVERT 368 0.0938 0.8750 0.0000 *MESH_TVERT 369 0.0938 0.3750 0.0000 *MESH_TVERT 370 0.0938 0.8125 0.0000 *MESH_TVERT 371 0.0938 0.3125 0.0000 *MESH_TVERT 372 0.0781 1.0000 0.0000 *MESH_TVERT 373 0.0625 0.9375 0.0000 *MESH_TVERT 374 0.0781 0.0000 0.0000 *MESH_TVERT 375 0.0625 0.0625 0.0000 *MESH_TVERT 376 0.0625 0.4375 0.0000 *MESH_TVERT 377 0.0625 0.8750 0.0000 *MESH_TVERT 378 0.0625 0.3750 0.0000 *MESH_TVERT 379 0.0625 0.8125 0.0000 *MESH_TVERT 380 0.0625 0.3125 0.0000 *MESH_TVERT 381 0.0625 0.7500 0.0000 *MESH_TVERT 382 0.0625 0.2500 0.0000 *MESH_TVERT 383 0.0625 0.6875 0.0000 *MESH_TVERT 384 0.0625 0.1875 0.0000 *MESH_TVERT 385 0.0625 0.6250 0.0000 *MESH_TVERT 386 0.0625 0.1250 0.0000 *MESH_TVERT 387 0.0625 0.5625 0.0000 *MESH_TVERT 388 0.0625 0.5000 0.0000 *MESH_TVERT 389 0.0313 0.7500 0.0000 *MESH_TVERT 390 0.0313 0.6875 0.0000 *MESH_TVERT 391 0.0313 0.1875 0.0000 *MESH_TVERT 392 0.0313 0.6250 0.0000 *MESH_TVERT 393 0.0313 0.1250 0.0000 *MESH_TVERT 394 0.0312 0.5625 0.0000 *MESH_TVERT 395 0.0313 0.0625 0.0000 *MESH_TVERT 396 0.0313 0.5000 0.0000 *MESH_TVERT 397 0.0469 1.0000 0.0000 *MESH_TVERT 398 0.0313 0.9375 0.0000 *MESH_TVERT 399 0.0469 0.0000 0.0000 *MESH_TVERT 400 0.0312 0.4375 0.0000 *MESH_TVERT 401 0.0313 0.8750 0.0000 *MESH_TVERT 402 0.0313 0.3750 0.0000 *MESH_TVERT 403 0.0313 0.8125 0.0000 *MESH_TVERT 404 0.0313 0.3125 0.0000 *MESH_TVERT 405 0.0313 0.2500 0.0000 *MESH_TVERT 406 0.0000 0.5000 0.0000 *MESH_TVERT 407 0.0000 0.4375 0.0000 *MESH_TVERT 408 0.0000 0.9375 0.0000 *MESH_TVERT 409 0.0000 0.8750 0.0000 *MESH_TVERT 410 0.0000 0.3750 0.0000 *MESH_TVERT 411 0.0000 0.8125 0.0000 *MESH_TVERT 412 0.0000 0.3125 0.0000 *MESH_TVERT 413 0.0000 0.7500 0.0000 *MESH_TVERT 414 0.0000 0.2500 0.0000 *MESH_TVERT 415 0.0000 0.6875 0.0000 *MESH_TVERT 416 0.0000 0.1875 0.0000 *MESH_TVERT 417 0.0000 0.6250 0.0000 *MESH_TVERT 418 0.0000 0.1250 0.0000 *MESH_TVERT 419 0.0000 0.5625 0.0000 *MESH_TVERT 420 0.0000 0.0625 0.0000 *MESH_TVERT 421 0.0156 1.0000 0.0000 *MESH_TVERT 422 0.0156 0.0000 0.0000 *MESH_TVERT 423 1.0000 0.2500 0.0000 *MESH_TVERT 424 0.9688 0.1875 0.0000 *MESH_TVERT 425 1.0000 0.1875 0.0000 *MESH_TVERT 426 1.0000 0.6875 0.0000 *MESH_TVERT 427 0.9688 0.6250 0.0000 *MESH_TVERT 428 1.0000 0.6250 0.0000 *MESH_TVERT 429 1.0000 0.1250 0.0000 *MESH_TVERT 430 0.9688 0.1250 0.0000 *MESH_TVERT 431 1.0000 0.5625 0.0000 *MESH_TVERT 432 0.9688 0.5625 0.0000 *MESH_TVERT 433 0.9688 0.0625 0.0000 *MESH_TVERT 434 1.0000 0.0625 0.0000 *MESH_TVERT 435 0.9688 0.5000 0.0000 *MESH_TVERT 436 1.0000 0.5000 0.0000 *MESH_TVERT 437 1.0000 0.9375 0.0000 *MESH_TVERT 438 0.9844 1.0000 0.0000 *MESH_TVERT 439 0.9688 0.9375 0.0000 *MESH_TVERT 440 0.9844 0.0000 0.0000 *MESH_TVERT 441 1.0000 0.4375 0.0000 *MESH_TVERT 442 0.9688 0.4375 0.0000 *MESH_TVERT 443 1.0000 0.8750 0.0000 *MESH_TVERT 444 0.9688 0.8750 0.0000 *MESH_TVERT 445 0.9688 0.3750 0.0000 *MESH_TVERT 446 1.0000 0.3750 0.0000 *MESH_TVERT 447 0.9688 0.8125 0.0000 *MESH_TVERT 448 1.0000 0.8125 0.0000 *MESH_TVERT 449 1.0000 0.3125 0.0000 *MESH_TVERT 450 0.9688 0.3125 0.0000 *MESH_TVERT 451 1.0000 0.7500 0.0000 *MESH_TVERT 452 0.9688 0.7500 0.0000 *MESH_TVERT 453 0.9688 0.2500 0.0000 *MESH_TVERT 454 0.9688 0.6875 0.0000 *MESH_TVERT 455 0.9375 0.3750 0.0000 *MESH_TVERT 456 0.9375 0.8125 0.0000 *MESH_TVERT 457 0.9375 0.3125 0.0000 *MESH_TVERT 458 0.9375 0.7500 0.0000 *MESH_TVERT 459 0.9375 0.2500 0.0000 *MESH_TVERT 460 0.9375 0.6875 0.0000 *MESH_TVERT 461 0.9375 0.1875 0.0000 *MESH_TVERT 462 0.9375 0.6250 0.0000 *MESH_TVERT 463 0.9375 0.1250 0.0000 *MESH_TVERT 464 0.9375 0.5625 0.0000 *MESH_TVERT 465 0.9375 0.0625 0.0000 *MESH_TVERT 466 0.9375 0.5000 0.0000 *MESH_TVERT 467 0.9531 1.0000 0.0000 *MESH_TVERT 468 0.9375 0.9375 0.0000 *MESH_TVERT 469 0.9531 0.0000 0.0000 *MESH_TVERT 470 0.9375 0.4375 0.0000 *MESH_TVERT 471 0.9375 0.8750 0.0000 *MESH_TVERT 472 0.9062 0.1875 0.0000 *MESH_TVERT 473 0.9063 0.1250 0.0000 *MESH_TVERT 474 0.9062 0.6250 0.0000 *MESH_TVERT 475 0.9062 0.5625 0.0000 *MESH_TVERT 476 0.9063 0.0625 0.0000 *MESH_TVERT 477 0.9062 0.5000 0.0000 *MESH_TVERT 478 0.9219 1.0000 0.0000 *MESH_TVERT 479 0.9063 0.9375 0.0000 *MESH_TVERT 480 0.9219 0.0000 0.0000 *MESH_TVERT 481 0.9062 0.4375 0.0000 *MESH_TVERT 482 0.9063 0.8750 0.0000 *MESH_TVERT 483 0.9062 0.3750 0.0000 *MESH_TVERT 484 0.9062 0.8125 0.0000 *MESH_TVERT 485 0.9062 0.3125 0.0000 *MESH_TVERT 486 0.9062 0.7500 0.0000 *MESH_TVERT 487 0.9062 0.2500 0.0000 *MESH_TVERT 488 0.9062 0.6875 0.0000 *MESH_TVERT 489 0.8750 0.8125 0.0000 *MESH_TVERT 490 0.8750 0.3750 0.0000 *MESH_TVERT 491 0.8750 0.3125 0.0000 *MESH_TVERT 492 0.8750 0.7500 0.0000 *MESH_TVERT 493 0.8750 0.2500 0.0000 *MESH_TVERT 494 0.8750 0.6875 0.0000 *MESH_TVERT 495 0.8750 0.1875 0.0000 *MESH_TVERT 496 0.8750 0.6250 0.0000 *MESH_TVERT 497 0.8750 0.1250 0.0000 *MESH_TVERT 498 0.8750 0.5625 0.0000 *MESH_TVERT 499 0.8750 0.0625 0.0000 *MESH_TVERT 500 0.8750 0.5000 0.0000 *MESH_TVERT 501 0.8906 1.0000 0.0000 *MESH_TVERT 502 0.8750 0.9375 0.0000 *MESH_TVERT 503 0.8906 0.0000 0.0000 *MESH_TVERT 504 0.8750 0.4375 0.0000 *MESH_TVERT 505 0.8750 0.8750 0.0000 *MESH_TVERT 506 0.8438 0.6250 0.0000 *MESH_TVERT 507 0.8438 0.5625 0.0000 *MESH_TVERT 508 0.8438 0.0625 0.0000 *MESH_TVERT 509 0.8438 0.5000 0.0000 *MESH_TVERT 510 0.8594 1.0000 0.0000 *MESH_TVERT 511 0.8438 0.9375 0.0000 *MESH_TVERT 512 0.8594 0.0000 0.0000 *MESH_TVERT 513 0.8438 0.4375 0.0000 *MESH_TVERT 514 0.8438 0.8750 0.0000 *MESH_TVERT 515 0.8438 0.3750 0.0000 *MESH_TVERT 516 0.8438 0.8125 0.0000 *MESH_TVERT 517 0.8438 0.3125 0.0000 *MESH_TVERT 518 0.8438 0.7500 0.0000 *MESH_TVERT 519 0.8438 0.2500 0.0000 *MESH_TVERT 520 0.8438 0.6875 0.0000 *MESH_TVERT 521 0.8438 0.1875 0.0000 *MESH_TVERT 522 0.8438 0.1250 0.0000 *MESH_TVERT 523 0.8125 0.3750 0.0000 *MESH_TVERT 524 0.8125 0.3125 0.0000 *MESH_TVERT 525 0.8125 0.8125 0.0000 *MESH_TVERT 526 0.8125 0.7500 0.0000 *MESH_TVERT 527 0.8125 0.2500 0.0000 *MESH_TVERT 528 0.8125 0.6875 0.0000 *MESH_TVERT 529 0.8125 0.1875 0.0000 *MESH_TVERT 530 0.8125 0.6250 0.0000 *MESH_TVERT 531 0.8125 0.1250 0.0000 *MESH_TVERT 532 0.8125 0.5625 0.0000 *MESH_TVERT 533 0.8125 0.0625 0.0000 *MESH_TVERT 534 0.8125 0.5000 0.0000 *MESH_TVERT 535 0.8281 1.0000 0.0000 *MESH_TVERT 536 0.8125 0.9375 0.0000 *MESH_TVERT 537 0.8281 0.0000 0.0000 *MESH_TVERT 538 0.8125 0.4375 0.0000 *MESH_TVERT 539 0.8125 0.8750 0.0000 *MESH_TVERT 540 0.7812 0.1250 0.0000 *MESH_TVERT 541 0.7812 0.0625 0.0000 *MESH_TVERT 542 0.7812 0.5000 0.0000 *MESH_TVERT 543 0.7969 1.0000 0.0000 *MESH_TVERT 544 0.7812 0.9375 0.0000 *MESH_TVERT 545 0.7969 0.0000 0.0000 *MESH_TVERT 546 0.7812 0.4375 0.0000 *MESH_TVERT 547 0.7812 0.8750 0.0000 *MESH_TVERT 548 0.7812 0.3750 0.0000 *MESH_TVERT 549 0.7812 0.8125 0.0000 *MESH_TVERT 550 0.7812 0.3125 0.0000 *MESH_TVERT 551 0.7812 0.7500 0.0000 *MESH_TVERT 552 0.7812 0.2500 0.0000 *MESH_TVERT 553 0.7812 0.6875 0.0000 *MESH_TVERT 554 0.7812 0.1875 0.0000 *MESH_TVERT 555 0.7812 0.6250 0.0000 *MESH_TVERT 556 0.7812 0.5625 0.0000 *MESH_TVERT 557 0.7656 1.0000 0.0000 *MESH_TVERT 558 0.7656 0.0000 0.0000 } *MESH_NUMTVFACES 960 *MESH_TFACELIST { *MESH_TFACE 0 0 1 2 *MESH_TFACE 1 3 4 5 *MESH_TFACE 2 2 6 7 *MESH_TFACE 3 5 8 9 *MESH_TFACE 4 7 10 11 *MESH_TFACE 5 9 12 13 *MESH_TFACE 6 11 14 15 *MESH_TFACE 7 13 16 17 *MESH_TFACE 8 15 18 19 *MESH_TFACE 9 17 20 21 *MESH_TFACE 10 22 23 24 *MESH_TFACE 11 25 19 18 *MESH_TFACE 12 21 26 27 *MESH_TFACE 13 22 28 29 *MESH_TFACE 14 27 30 0 *MESH_TFACE 15 3 28 31 *MESH_TFACE 16 30 32 33 *MESH_TFACE 17 28 34 31 *MESH_TFACE 18 30 35 1 *MESH_TFACE 19 31 36 4 *MESH_TFACE 20 6 35 37 *MESH_TFACE 21 4 38 8 *MESH_TFACE 22 6 39 10 *MESH_TFACE 23 8 40 12 *MESH_TFACE 24 10 41 14 *MESH_TFACE 25 12 42 16 *MESH_TFACE 26 14 43 18 *MESH_TFACE 27 16 44 20 *MESH_TFACE 28 24 45 46 *MESH_TFACE 29 47 18 43 *MESH_TFACE 30 26 44 32 *MESH_TFACE 31 24 48 28 *MESH_TFACE 32 39 49 41 *MESH_TFACE 33 42 50 51 *MESH_TFACE 34 41 52 43 *MESH_TFACE 35 42 53 44 *MESH_TFACE 36 46 54 55 *MESH_TFACE 37 56 43 52 *MESH_TFACE 38 44 57 32 *MESH_TFACE 39 46 58 48 *MESH_TFACE 40 32 59 33 *MESH_TFACE 41 48 60 34 *MESH_TFACE 42 35 59 61 *MESH_TFACE 43 34 62 36 *MESH_TFACE 44 37 61 63 *MESH_TFACE 45 36 64 38 *MESH_TFACE 46 37 65 39 *MESH_TFACE 47 38 50 40 *MESH_TFACE 48 58 66 60 *MESH_TFACE 49 61 67 68 *MESH_TFACE 50 60 69 62 *MESH_TFACE 51 61 70 63 *MESH_TFACE 52 62 71 64 *MESH_TFACE 53 63 72 65 *MESH_TFACE 54 64 73 50 *MESH_TFACE 55 65 74 49 *MESH_TFACE 56 50 75 51 *MESH_TFACE 57 49 76 52 *MESH_TFACE 58 53 75 77 *MESH_TFACE 59 55 78 79 *MESH_TFACE 60 80 52 76 *MESH_TFACE 61 53 81 57 *MESH_TFACE 62 55 82 58 *MESH_TFACE 63 57 67 59 *MESH_TFACE 64 73 83 75 *MESH_TFACE 65 74 84 76 *MESH_TFACE 66 77 83 85 *MESH_TFACE 67 79 86 87 *MESH_TFACE 68 88 76 84 *MESH_TFACE 69 77 89 81 *MESH_TFACE 70 79 90 82 *MESH_TFACE 71 81 91 67 *MESH_TFACE 72 82 92 66 *MESH_TFACE 73 68 91 93 *MESH_TFACE 74 66 94 69 *MESH_TFACE 75 68 95 70 *MESH_TFACE 76 71 94 96 *MESH_TFACE 77 72 95 97 *MESH_TFACE 78 71 98 73 *MESH_TFACE 79 74 97 99 *MESH_TFACE 80 93 100 101 *MESH_TFACE 81 92 102 94 *MESH_TFACE 82 95 101 103 *MESH_TFACE 83 96 102 104 *MESH_TFACE 84 95 105 97 *MESH_TFACE 85 96 106 98 *MESH_TFACE 86 99 105 107 *MESH_TFACE 87 83 106 108 *MESH_TFACE 88 99 109 84 *MESH_TFACE 89 83 110 85 *MESH_TFACE 90 87 111 112 *MESH_TFACE 91 113 84 109 *MESH_TFACE 92 85 114 89 *MESH_TFACE 93 87 115 90 *MESH_TFACE 94 89 100 91 *MESH_TFACE 95 90 116 92 *MESH_TFACE 96 109 117 118 *MESH_TFACE 97 108 119 110 *MESH_TFACE 98 112 120 121 *MESH_TFACE 99 122 109 118 *MESH_TFACE 100 110 123 114 *MESH_TFACE 101 112 124 115 *MESH_TFACE 102 114 125 100 *MESH_TFACE 103 115 126 116 *MESH_TFACE 104 101 125 127 *MESH_TFACE 105 102 126 128 *MESH_TFACE 106 103 127 129 *MESH_TFACE 107 102 130 104 *MESH_TFACE 108 103 131 105 *MESH_TFACE 109 104 132 106 *MESH_TFACE 110 105 117 107 *MESH_TFACE 111 108 132 133 *MESH_TFACE 112 127 134 129 *MESH_TFACE 113 128 135 130 *MESH_TFACE 114 131 134 136 *MESH_TFACE 115 130 137 132 *MESH_TFACE 116 117 136 138 *MESH_TFACE 117 133 137 139 *MESH_TFACE 118 118 138 140 *MESH_TFACE 119 133 141 119 *MESH_TFACE 120 121 142 143 *MESH_TFACE 121 144 118 140 *MESH_TFACE 122 123 141 145 *MESH_TFACE 123 121 146 124 *MESH_TFACE 124 123 147 125 *MESH_TFACE 125 124 148 126 *MESH_TFACE 126 127 147 149 *MESH_TFACE 127 126 150 128 *MESH_TFACE 128 143 151 152 *MESH_TFACE 129 153 140 154 *MESH_TFACE 130 141 155 145 *MESH_TFACE 131 146 152 156 *MESH_TFACE 132 145 157 147 *MESH_TFACE 133 146 158 148 *MESH_TFACE 134 149 157 159 *MESH_TFACE 135 148 160 150 *MESH_TFACE 136 149 161 134 *MESH_TFACE 137 135 160 162 *MESH_TFACE 138 136 161 163 *MESH_TFACE 139 135 164 137 *MESH_TFACE 140 136 165 138 *MESH_TFACE 141 139 164 166 *MESH_TFACE 142 140 165 154 *MESH_TFACE 143 139 167 141 *MESH_TFACE 144 160 168 162 *MESH_TFACE 145 161 169 163 *MESH_TFACE 146 162 170 164 *MESH_TFACE 147 165 169 171 *MESH_TFACE 148 166 170 172 *MESH_TFACE 149 165 173 154 *MESH_TFACE 150 166 174 167 *MESH_TFACE 151 152 175 176 *MESH_TFACE 152 177 154 173 *MESH_TFACE 153 167 178 155 *MESH_TFACE 154 152 179 156 *MESH_TFACE 155 155 180 157 *MESH_TFACE 156 158 179 181 *MESH_TFACE 157 159 180 182 *MESH_TFACE 158 158 183 160 *MESH_TFACE 159 159 184 161 *MESH_TFACE 160 178 185 186 *MESH_TFACE 161 176 187 179 *MESH_TFACE 162 178 188 180 *MESH_TFACE 163 179 189 181 *MESH_TFACE 164 182 188 190 *MESH_TFACE 165 181 191 183 *MESH_TFACE 166 182 192 184 *MESH_TFACE 167 168 191 193 *MESH_TFACE 168 169 192 194 *MESH_TFACE 169 168 195 170 *MESH_TFACE 170 169 196 171 *MESH_TFACE 171 172 195 197 *MESH_TFACE 172 171 198 173 *MESH_TFACE 173 172 185 174 *MESH_TFACE 174 176 199 200 *MESH_TFACE 175 201 173 198 *MESH_TFACE 176 194 202 203 *MESH_TFACE 177 193 204 195 *MESH_TFACE 178 194 205 196 *MESH_TFACE 179 197 204 206 *MESH_TFACE 180 198 205 207 *MESH_TFACE 181 197 208 185 *MESH_TFACE 182 200 209 210 *MESH_TFACE 183 211 198 207 *MESH_TFACE 184 185 212 186 *MESH_TFACE 185 200 213 187 *MESH_TFACE 186 186 214 188 *MESH_TFACE 187 187 215 189 *MESH_TFACE 188 188 216 190 *MESH_TFACE 189 189 217 191 *MESH_TFACE 190 190 202 192 *MESH_TFACE 191 191 218 193 *MESH_TFACE 192 210 219 213 *MESH_TFACE 193 212 220 214 *MESH_TFACE 194 213 221 215 *MESH_TFACE 195 216 220 222 *MESH_TFACE 196 217 221 223 *MESH_TFACE 197 216 224 202 *MESH_TFACE 198 218 223 225 *MESH_TFACE 199 203 224 226 *MESH_TFACE 200 218 227 204 *MESH_TFACE 201 203 228 205 *MESH_TFACE 202 206 227 229 *MESH_TFACE 203 207 228 230 *MESH_TFACE 204 206 231 208 *MESH_TFACE 205 210 232 233 *MESH_TFACE 206 234 207 230 *MESH_TFACE 207 212 231 235 *MESH_TFACE 208 225 236 227 *MESH_TFACE 209 226 237 228 *MESH_TFACE 210 229 236 238 *MESH_TFACE 211 228 239 230 *MESH_TFACE 212 229 240 231 *MESH_TFACE 213 233 241 242 *MESH_TFACE 214 243 230 239 *MESH_TFACE 215 231 244 235 *MESH_TFACE 216 233 245 219 *MESH_TFACE 217 235 246 220 *MESH_TFACE 218 221 245 247 *MESH_TFACE 219 222 246 248 *MESH_TFACE 220 221 249 223 *MESH_TFACE 221 222 250 224 *MESH_TFACE 222 223 251 225 *MESH_TFACE 223 226 250 252 *MESH_TFACE 224 244 253 246 *MESH_TFACE 225 245 254 247 *MESH_TFACE 226 248 253 255 *MESH_TFACE 227 247 256 249 *MESH_TFACE 228 248 257 250 *MESH_TFACE 229 249 258 251 *MESH_TFACE 230 250 259 252 *MESH_TFACE 231 251 260 236 *MESH_TFACE 232 252 261 237 *MESH_TFACE 233 238 260 262 *MESH_TFACE 234 239 261 263 *MESH_TFACE 235 238 264 240 *MESH_TFACE 236 242 265 266 *MESH_TFACE 237 267 239 263 *MESH_TFACE 238 240 268 244 *MESH_TFACE 239 242 269 245 *MESH_TFACE 240 259 270 261 *MESH_TFACE 241 262 271 272 *MESH_TFACE 242 263 270 273 *MESH_TFACE 243 262 274 264 *MESH_TFACE 244 266 275 276 *MESH_TFACE 245 277 263 273 *MESH_TFACE 246 264 278 268 *MESH_TFACE 247 266 279 269 *MESH_TFACE 248 268 280 253 *MESH_TFACE 249 254 279 281 *MESH_TFACE 250 255 280 282 *MESH_TFACE 251 256 281 283 *MESH_TFACE 252 255 284 257 *MESH_TFACE 253 256 285 258 *MESH_TFACE 254 259 284 286 *MESH_TFACE 255 258 271 260 *MESH_TFACE 256 282 287 288 *MESH_TFACE 257 283 289 290 *MESH_TFACE 258 282 291 284 *MESH_TFACE 259 285 290 292 *MESH_TFACE 260 284 293 286 *MESH_TFACE 261 285 294 271 *MESH_TFACE 262 286 295 270 *MESH_TFACE 263 272 294 296 *MESH_TFACE 264 270 297 273 *MESH_TFACE 265 272 298 274 *MESH_TFACE 266 276 299 300 *MESH_TFACE 267 301 273 297 *MESH_TFACE 268 274 302 278 *MESH_TFACE 269 276 303 279 *MESH_TFACE 270 278 287 280 *MESH_TFACE 271 279 289 281 *MESH_TFACE 272 297 304 305 *MESH_TFACE 273 296 306 298 *MESH_TFACE 274 300 307 308 *MESH_TFACE 275 309 297 305 *MESH_TFACE 276 302 306 310 *MESH_TFACE 277 300 311 303 *MESH_TFACE 278 302 312 287 *MESH_TFACE 279 303 313 289 *MESH_TFACE 280 288 312 314 *MESH_TFACE 281 290 313 315 *MESH_TFACE 282 288 316 291 *MESH_TFACE 283 292 315 317 *MESH_TFACE 284 291 318 293 *MESH_TFACE 285 292 319 294 *MESH_TFACE 286 295 318 304 *MESH_TFACE 287 296 319 320 *MESH_TFACE 288 313 321 315 *MESH_TFACE 289 314 322 316 *MESH_TFACE 290 317 321 323 *MESH_TFACE 291 318 322 324 *MESH_TFACE 292 317 325 319 *MESH_TFACE 293 318 326 304 *MESH_TFACE 294 320 325 327 *MESH_TFACE 295 305 326 328 *MESH_TFACE 296 320 329 306 *MESH_TFACE 297 308 330 331 *MESH_TFACE 298 332 305 328 *MESH_TFACE 299 306 333 310 *MESH_TFACE 300 308 334 311 *MESH_TFACE 301 310 335 312 *MESH_TFACE 302 311 336 313 *MESH_TFACE 303 314 335 337 *MESH_TFACE 304 329 338 339 *MESH_TFACE 305 331 340 341 *MESH_TFACE 306 342 328 343 *MESH_TFACE 307 329 344 333 *MESH_TFACE 308 331 345 334 *MESH_TFACE 309 333 346 335 *MESH_TFACE 310 334 347 336 *MESH_TFACE 311 337 346 348 *MESH_TFACE 312 321 347 349 *MESH_TFACE 313 337 350 322 *MESH_TFACE 314 323 349 351 *MESH_TFACE 315 322 352 324 *MESH_TFACE 316 323 353 325 *MESH_TFACE 317 324 354 326 *MESH_TFACE 318 327 353 338 *MESH_TFACE 319 326 343 328 *MESH_TFACE 320 348 355 350 *MESH_TFACE 321 351 356 357 *MESH_TFACE 322 350 358 352 *MESH_TFACE 323 351 359 353 *MESH_TFACE 324 354 358 360 *MESH_TFACE 325 338 359 361 *MESH_TFACE 326 354 362 343 *MESH_TFACE 327 338 363 339 *MESH_TFACE 328 341 364 365 *MESH_TFACE 329 366 343 362 *MESH_TFACE 330 339 367 344 *MESH_TFACE 331 341 368 345 *MESH_TFACE 332 344 369 346 *MESH_TFACE 333 345 370 347 *MESH_TFACE 334 348 369 371 *MESH_TFACE 335 349 370 356 *MESH_TFACE 336 365 372 373 *MESH_TFACE 337 374 362 375 *MESH_TFACE 338 363 376 367 *MESH_TFACE 339 365 377 368 *MESH_TFACE 340 367 378 369 *MESH_TFACE 341 368 379 370 *MESH_TFACE 342 371 378 380 *MESH_TFACE 343 356 379 381 *MESH_TFACE 344 355 380 382 *MESH_TFACE 345 357 381 383 *MESH_TFACE 346 355 384 358 *MESH_TFACE 347 357 385 359 *MESH_TFACE 348 360 384 386 *MESH_TFACE 349 361 385 387 *MESH_TFACE 350 362 386 375 *MESH_TFACE 351 361 388 363 *MESH_TFACE 352 383 389 390 *MESH_TFACE 353 382 391 384 *MESH_TFACE 354 383 392 385 *MESH_TFACE 355 386 391 393 *MESH_TFACE 356 387 392 394 *MESH_TFACE 357 386 395 375 *MESH_TFACE 358 387 396 388 *MESH_TFACE 359 373 397 398 *MESH_TFACE 360 399 375 395 *MESH_TFACE 361 388 400 376 *MESH_TFACE 362 377 398 401 *MESH_TFACE 363 376 402 378 *MESH_TFACE 364 377 403 379 *MESH_TFACE 365 380 402 404 *MESH_TFACE 366 381 403 389 *MESH_TFACE 367 380 405 382 *MESH_TFACE 368 400 406 407 *MESH_TFACE 369 401 408 409 *MESH_TFACE 370 400 410 402 *MESH_TFACE 371 401 411 403 *MESH_TFACE 372 404 410 412 *MESH_TFACE 373 389 411 413 *MESH_TFACE 374 404 414 405 *MESH_TFACE 375 389 415 390 *MESH_TFACE 376 391 414 416 *MESH_TFACE 377 390 417 392 *MESH_TFACE 378 393 416 418 *MESH_TFACE 379 394 417 419 *MESH_TFACE 380 393 420 395 *MESH_TFACE 381 394 406 396 *MESH_TFACE 382 398 421 408 *MESH_TFACE 383 422 395 420 *MESH_TFACE 384 423 424 425 *MESH_TFACE 385 426 427 428 *MESH_TFACE 386 429 424 430 *MESH_TFACE 387 431 427 432 *MESH_TFACE 388 429 433 434 *MESH_TFACE 389 431 435 436 *MESH_TFACE 390 437 438 439 *MESH_TFACE 391 440 434 433 *MESH_TFACE 392 441 435 442 *MESH_TFACE 393 443 439 444 *MESH_TFACE 394 441 445 446 *MESH_TFACE 395 443 447 448 *MESH_TFACE 396 449 445 450 *MESH_TFACE 397 451 447 452 *MESH_TFACE 398 449 453 423 *MESH_TFACE 399 426 452 454 *MESH_TFACE 400 442 455 445 *MESH_TFACE 401 444 456 447 *MESH_TFACE 402 450 455 457 *MESH_TFACE 403 452 456 458 *MESH_TFACE 404 450 459 453 *MESH_TFACE 405 452 460 454 *MESH_TFACE 406 453 461 424 *MESH_TFACE 407 454 462 427 *MESH_TFACE 408 430 461 463 *MESH_TFACE 409 432 462 464 *MESH_TFACE 410 430 465 433 *MESH_TFACE 411 432 466 435 *MESH_TFACE 412 439 467 468 *MESH_TFACE 413 469 433 465 *MESH_TFACE 414 435 470 442 *MESH_TFACE 415 439 471 444 *MESH_TFACE 416 463 472 473 *MESH_TFACE 417 464 474 475 *MESH_TFACE 418 463 476 465 *MESH_TFACE 419 464 477 466 *MESH_TFACE 420 468 478 479 *MESH_TFACE 421 480 465 476 *MESH_TFACE 422 470 477 481 *MESH_TFACE 423 468 482 471 *MESH_TFACE 424 470 483 455 *MESH_TFACE 425 456 482 484 *MESH_TFACE 426 457 483 485 *MESH_TFACE 427 458 484 486 *MESH_TFACE 428 457 487 459 *MESH_TFACE 429 460 486 488 *MESH_TFACE 430 459 472 461 *MESH_TFACE 431 460 474 462 *MESH_TFACE 432 482 489 484 *MESH_TFACE 433 485 490 491 *MESH_TFACE 434 484 492 486 *MESH_TFACE 435 485 493 487 *MESH_TFACE 436 488 492 494 *MESH_TFACE 437 487 495 472 *MESH_TFACE 438 488 496 474 *MESH_TFACE 439 472 497 473 *MESH_TFACE 440 475 496 498 *MESH_TFACE 441 473 499 476 *MESH_TFACE 442 475 500 477 *MESH_TFACE 443 479 501 502 *MESH_TFACE 444 503 476 499 *MESH_TFACE 445 481 500 504 *MESH_TFACE 446 479 505 482 *MESH_TFACE 447 481 490 483 *MESH_TFACE 448 498 506 507 *MESH_TFACE 449 497 508 499 *MESH_TFACE 450 500 507 509 *MESH_TFACE 451 502 510 511 *MESH_TFACE 452 512 499 508 *MESH_TFACE 453 500 513 504 *MESH_TFACE 454 502 514 505 *MESH_TFACE 455 504 515 490 *MESH_TFACE 456 505 516 489 *MESH_TFACE 457 491 515 517 *MESH_TFACE 458 489 518 492 *MESH_TFACE 459 491 519 493 *MESH_TFACE 460 494 518 520 *MESH_TFACE 461 495 519 521 *MESH_TFACE 462 494 506 496 *MESH_TFACE 463 495 522 497 *MESH_TFACE 464 517 523 524 *MESH_TFACE 465 518 525 526 *MESH_TFACE 466 517 527 519 *MESH_TFACE 467 520 526 528 *MESH_TFACE 468 519 529 521 *MESH_TFACE 469 520 530 506 *MESH_TFACE 470 521 531 522 *MESH_TFACE 471 507 530 532 *MESH_TFACE 472 522 533 508 *MESH_TFACE 473 507 534 509 *MESH_TFACE 474 511 535 536 *MESH_TFACE 475 537 508 533 *MESH_TFACE 476 509 538 513 *MESH_TFACE 477 514 536 539 *MESH_TFACE 478 513 523 515 *MESH_TFACE 479 516 539 525 *MESH_TFACE 480 533 540 541 *MESH_TFACE 481 532 542 534 *MESH_TFACE 482 536 543 544 *MESH_TFACE 483 545 533 541 *MESH_TFACE 484 534 546 538 *MESH_TFACE 485 536 547 539 *MESH_TFACE 486 538 548 523 *MESH_TFACE 487 539 549 525 *MESH_TFACE 488 524 548 550 *MESH_TFACE 489 525 551 526 *MESH_TFACE 490 524 552 527 *MESH_TFACE 491 528 551 553 *MESH_TFACE 492 527 554 529 *MESH_TFACE 493 528 555 530 *MESH_TFACE 494 529 540 531 *MESH_TFACE 495 532 555 556 *MESH_TFACE 496 551 3 5 *MESH_TFACE 497 550 7 552 *MESH_TFACE 498 553 5 9 *MESH_TFACE 499 552 11 554 *MESH_TFACE 500 555 9 13 *MESH_TFACE 501 554 15 540 *MESH_TFACE 502 556 13 17 *MESH_TFACE 503 540 19 541 *MESH_TFACE 504 542 17 21 *MESH_TFACE 505 544 557 22 *MESH_TFACE 506 558 541 19 *MESH_TFACE 507 542 27 546 *MESH_TFACE 508 547 22 29 *MESH_TFACE 509 546 0 548 *MESH_TFACE 510 549 29 3 *MESH_TFACE 511 550 0 2 *MESH_TFACE 512 0 30 1 *MESH_TFACE 513 3 31 4 *MESH_TFACE 514 2 1 6 *MESH_TFACE 515 5 4 8 *MESH_TFACE 516 7 6 10 *MESH_TFACE 517 9 8 12 *MESH_TFACE 518 11 10 14 *MESH_TFACE 519 13 12 16 *MESH_TFACE 520 15 14 18 *MESH_TFACE 521 17 16 20 *MESH_TFACE 522 21 20 26 *MESH_TFACE 523 22 24 28 *MESH_TFACE 524 27 26 30 *MESH_TFACE 525 3 29 28 *MESH_TFACE 526 30 26 32 *MESH_TFACE 527 28 48 34 *MESH_TFACE 528 30 33 35 *MESH_TFACE 529 31 34 36 *MESH_TFACE 530 6 1 35 *MESH_TFACE 531 4 36 38 *MESH_TFACE 532 6 37 39 *MESH_TFACE 533 8 38 40 *MESH_TFACE 534 10 39 41 *MESH_TFACE 535 12 40 42 *MESH_TFACE 536 14 41 43 *MESH_TFACE 537 16 42 44 *MESH_TFACE 538 26 20 44 *MESH_TFACE 539 24 46 48 *MESH_TFACE 540 39 65 49 *MESH_TFACE 541 42 40 50 *MESH_TFACE 542 41 49 52 *MESH_TFACE 543 42 51 53 *MESH_TFACE 544 44 53 57 *MESH_TFACE 545 46 55 58 *MESH_TFACE 546 32 57 59 *MESH_TFACE 547 48 58 60 *MESH_TFACE 548 35 33 59 *MESH_TFACE 549 34 60 62 *MESH_TFACE 550 37 35 61 *MESH_TFACE 551 36 62 64 *MESH_TFACE 552 37 63 65 *MESH_TFACE 553 38 64 50 *MESH_TFACE 554 58 82 66 *MESH_TFACE 555 61 59 67 *MESH_TFACE 556 60 66 69 *MESH_TFACE 557 61 68 70 *MESH_TFACE 558 62 69 71 *MESH_TFACE 559 63 70 72 *MESH_TFACE 560 64 71 73 *MESH_TFACE 561 65 72 74 *MESH_TFACE 562 50 73 75 *MESH_TFACE 563 49 74 76 *MESH_TFACE 564 53 51 75 *MESH_TFACE 565 53 77 81 *MESH_TFACE 566 55 79 82 *MESH_TFACE 567 57 81 67 *MESH_TFACE 568 73 98 83 *MESH_TFACE 569 74 99 84 *MESH_TFACE 570 77 75 83 *MESH_TFACE 571 77 85 89 *MESH_TFACE 572 79 87 90 *MESH_TFACE 573 81 89 91 *MESH_TFACE 574 82 90 92 *MESH_TFACE 575 68 67 91 *MESH_TFACE 576 66 92 94 *MESH_TFACE 577 68 93 95 *MESH_TFACE 578 71 69 94 *MESH_TFACE 579 72 70 95 *MESH_TFACE 580 71 96 98 *MESH_TFACE 581 74 72 97 *MESH_TFACE 582 93 91 100 *MESH_TFACE 583 92 116 102 *MESH_TFACE 584 95 93 101 *MESH_TFACE 585 96 94 102 *MESH_TFACE 586 95 103 105 *MESH_TFACE 587 96 104 106 *MESH_TFACE 588 99 97 105 *MESH_TFACE 589 83 98 106 *MESH_TFACE 590 99 107 109 *MESH_TFACE 591 83 108 110 *MESH_TFACE 592 85 110 114 *MESH_TFACE 593 87 112 115 *MESH_TFACE 594 89 114 100 *MESH_TFACE 595 90 115 116 *MESH_TFACE 596 109 107 117 *MESH_TFACE 597 108 133 119 *MESH_TFACE 598 110 119 123 *MESH_TFACE 599 112 121 124 *MESH_TFACE 600 114 123 125 *MESH_TFACE 601 115 124 126 *MESH_TFACE 602 101 100 125 *MESH_TFACE 603 102 116 126 *MESH_TFACE 604 103 101 127 *MESH_TFACE 605 102 128 130 *MESH_TFACE 606 103 129 131 *MESH_TFACE 607 104 130 132 *MESH_TFACE 608 105 131 117 *MESH_TFACE 609 108 106 132 *MESH_TFACE 610 127 149 134 *MESH_TFACE 611 128 150 135 *MESH_TFACE 612 131 129 134 *MESH_TFACE 613 130 135 137 *MESH_TFACE 614 117 131 136 *MESH_TFACE 615 133 132 137 *MESH_TFACE 616 118 117 138 *MESH_TFACE 617 133 139 141 *MESH_TFACE 618 123 119 141 *MESH_TFACE 619 121 143 146 *MESH_TFACE 620 123 145 147 *MESH_TFACE 621 124 146 148 *MESH_TFACE 622 127 125 147 *MESH_TFACE 623 126 148 150 *MESH_TFACE 624 141 167 155 *MESH_TFACE 625 146 143 152 *MESH_TFACE 626 145 155 157 *MESH_TFACE 627 146 156 158 *MESH_TFACE 628 149 147 157 *MESH_TFACE 629 148 158 160 *MESH_TFACE 630 149 159 161 *MESH_TFACE 631 135 150 160 *MESH_TFACE 632 136 134 161 *MESH_TFACE 633 135 162 164 *MESH_TFACE 634 136 163 165 *MESH_TFACE 635 139 137 164 *MESH_TFACE 636 140 138 165 *MESH_TFACE 637 139 166 167 *MESH_TFACE 638 160 183 168 *MESH_TFACE 639 161 184 169 *MESH_TFACE 640 162 168 170 *MESH_TFACE 641 165 163 169 *MESH_TFACE 642 166 164 170 *MESH_TFACE 643 165 171 173 *MESH_TFACE 644 166 172 174 *MESH_TFACE 645 167 174 178 *MESH_TFACE 646 152 176 179 *MESH_TFACE 647 155 178 180 *MESH_TFACE 648 158 156 179 *MESH_TFACE 649 159 157 180 *MESH_TFACE 650 158 181 183 *MESH_TFACE 651 159 182 184 *MESH_TFACE 652 178 174 185 *MESH_TFACE 653 176 200 187 *MESH_TFACE 654 178 186 188 *MESH_TFACE 655 179 187 189 *MESH_TFACE 656 182 180 188 *MESH_TFACE 657 181 189 191 *MESH_TFACE 658 182 190 192 *MESH_TFACE 659 168 183 191 *MESH_TFACE 660 169 184 192 *MESH_TFACE 661 168 193 195 *MESH_TFACE 662 169 194 196 *MESH_TFACE 663 172 170 195 *MESH_TFACE 664 171 196 198 *MESH_TFACE 665 172 197 185 *MESH_TFACE 666 194 192 202 *MESH_TFACE 667 193 218 204 *MESH_TFACE 668 194 203 205 *MESH_TFACE 669 197 195 204 *MESH_TFACE 670 198 196 205 *MESH_TFACE 671 197 206 208 *MESH_TFACE 672 185 208 212 *MESH_TFACE 673 200 210 213 *MESH_TFACE 674 186 212 214 *MESH_TFACE 675 187 213 215 *MESH_TFACE 676 188 214 216 *MESH_TFACE 677 189 215 217 *MESH_TFACE 678 190 216 202 *MESH_TFACE 679 191 217 218 *MESH_TFACE 680 210 233 219 *MESH_TFACE 681 212 235 220 *MESH_TFACE 682 213 219 221 *MESH_TFACE 683 216 214 220 *MESH_TFACE 684 217 215 221 *MESH_TFACE 685 216 222 224 *MESH_TFACE 686 218 217 223 *MESH_TFACE 687 203 202 224 *MESH_TFACE 688 218 225 227 *MESH_TFACE 689 203 226 228 *MESH_TFACE 690 206 204 227 *MESH_TFACE 691 207 205 228 *MESH_TFACE 692 206 229 231 *MESH_TFACE 693 212 208 231 *MESH_TFACE 694 225 251 236 *MESH_TFACE 695 226 252 237 *MESH_TFACE 696 229 227 236 *MESH_TFACE 697 228 237 239 *MESH_TFACE 698 229 238 240 *MESH_TFACE 699 231 240 244 *MESH_TFACE 700 233 242 245 *MESH_TFACE 701 235 244 246 *MESH_TFACE 702 221 219 245 *MESH_TFACE 703 222 220 246 *MESH_TFACE 704 221 247 249 *MESH_TFACE 705 222 248 250 *MESH_TFACE 706 223 249 251 *MESH_TFACE 707 226 224 250 *MESH_TFACE 708 244 268 253 *MESH_TFACE 709 245 269 254 *MESH_TFACE 710 248 246 253 *MESH_TFACE 711 247 254 256 *MESH_TFACE 712 248 255 257 *MESH_TFACE 713 249 256 258 *MESH_TFACE 714 250 257 259 *MESH_TFACE 715 251 258 260 *MESH_TFACE 716 252 259 261 *MESH_TFACE 717 238 236 260 *MESH_TFACE 718 239 237 261 *MESH_TFACE 719 238 262 264 *MESH_TFACE 720 240 264 268 *MESH_TFACE 721 242 266 269 *MESH_TFACE 722 259 286 270 *MESH_TFACE 723 262 260 271 *MESH_TFACE 724 263 261 270 *MESH_TFACE 725 262 272 274 *MESH_TFACE 726 264 274 278 *MESH_TFACE 727 266 276 279 *MESH_TFACE 728 268 278 280 *MESH_TFACE 729 254 269 279 *MESH_TFACE 730 255 253 280 *MESH_TFACE 731 256 254 281 *MESH_TFACE 732 255 282 284 *MESH_TFACE 733 256 283 285 *MESH_TFACE 734 259 257 284 *MESH_TFACE 735 258 285 271 *MESH_TFACE 736 282 280 287 *MESH_TFACE 737 283 281 289 *MESH_TFACE 738 282 288 291 *MESH_TFACE 739 285 283 290 *MESH_TFACE 740 284 291 293 *MESH_TFACE 741 285 292 294 *MESH_TFACE 742 286 293 295 *MESH_TFACE 743 272 271 294 *MESH_TFACE 744 270 295 297 *MESH_TFACE 745 272 296 298 *MESH_TFACE 746 274 298 302 *MESH_TFACE 747 276 300 303 *MESH_TFACE 748 278 302 287 *MESH_TFACE 749 279 303 289 *MESH_TFACE 750 297 295 304 *MESH_TFACE 751 296 320 306 *MESH_TFACE 752 302 298 306 *MESH_TFACE 753 300 308 311 *MESH_TFACE 754 302 310 312 *MESH_TFACE 755 303 311 313 *MESH_TFACE 756 288 287 312 *MESH_TFACE 757 290 289 313 *MESH_TFACE 758 288 314 316 *MESH_TFACE 759 292 290 315 *MESH_TFACE 760 291 316 318 *MESH_TFACE 761 292 317 319 *MESH_TFACE 762 295 293 318 *MESH_TFACE 763 296 294 319 *MESH_TFACE 764 313 336 321 *MESH_TFACE 765 314 337 322 *MESH_TFACE 766 317 315 321 *MESH_TFACE 767 318 316 322 *MESH_TFACE 768 317 323 325 *MESH_TFACE 769 318 324 326 *MESH_TFACE 770 320 319 325 *MESH_TFACE 771 305 304 326 *MESH_TFACE 772 320 327 329 *MESH_TFACE 773 306 329 333 *MESH_TFACE 774 308 331 334 *MESH_TFACE 775 310 333 335 *MESH_TFACE 776 311 334 336 *MESH_TFACE 777 314 312 335 *MESH_TFACE 778 329 327 338 *MESH_TFACE 779 329 339 344 *MESH_TFACE 780 331 341 345 *MESH_TFACE 781 333 344 346 *MESH_TFACE 782 334 345 347 *MESH_TFACE 783 337 335 346 *MESH_TFACE 784 321 336 347 *MESH_TFACE 785 337 348 350 *MESH_TFACE 786 323 321 349 *MESH_TFACE 787 322 350 352 *MESH_TFACE 788 323 351 353 *MESH_TFACE 789 324 352 354 *MESH_TFACE 790 327 325 353 *MESH_TFACE 791 326 354 343 *MESH_TFACE 792 348 371 355 *MESH_TFACE 793 351 349 356 *MESH_TFACE 794 350 355 358 *MESH_TFACE 795 351 357 359 *MESH_TFACE 796 354 352 358 *MESH_TFACE 797 338 353 359 *MESH_TFACE 798 354 360 362 *MESH_TFACE 799 338 361 363 *MESH_TFACE 800 339 363 367 *MESH_TFACE 801 341 365 368 *MESH_TFACE 802 344 367 369 *MESH_TFACE 803 345 368 370 *MESH_TFACE 804 348 346 369 *MESH_TFACE 805 349 347 370 *MESH_TFACE 806 363 388 376 *MESH_TFACE 807 365 373 377 *MESH_TFACE 808 367 376 378 *MESH_TFACE 809 368 377 379 *MESH_TFACE 810 371 369 378 *MESH_TFACE 811 356 370 379 *MESH_TFACE 812 355 371 380 *MESH_TFACE 813 357 356 381 *MESH_TFACE 814 355 382 384 *MESH_TFACE 815 357 383 385 *MESH_TFACE 816 360 358 384 *MESH_TFACE 817 361 359 385 *MESH_TFACE 818 362 360 386 *MESH_TFACE 819 361 387 388 *MESH_TFACE 820 383 381 389 *MESH_TFACE 821 382 405 391 *MESH_TFACE 822 383 390 392 *MESH_TFACE 823 386 384 391 *MESH_TFACE 824 387 385 392 *MESH_TFACE 825 386 393 395 *MESH_TFACE 826 387 394 396 *MESH_TFACE 827 388 396 400 *MESH_TFACE 828 377 373 398 *MESH_TFACE 829 376 400 402 *MESH_TFACE 830 377 401 403 *MESH_TFACE 831 380 378 402 *MESH_TFACE 832 381 379 403 *MESH_TFACE 833 380 404 405 *MESH_TFACE 834 400 396 406 *MESH_TFACE 835 401 398 408 *MESH_TFACE 836 400 407 410 *MESH_TFACE 837 401 409 411 *MESH_TFACE 838 404 402 410 *MESH_TFACE 839 389 403 411 *MESH_TFACE 840 404 412 414 *MESH_TFACE 841 389 413 415 *MESH_TFACE 842 391 405 414 *MESH_TFACE 843 390 415 417 *MESH_TFACE 844 393 391 416 *MESH_TFACE 845 394 392 417 *MESH_TFACE 846 393 418 420 *MESH_TFACE 847 394 419 406 *MESH_TFACE 848 423 453 424 *MESH_TFACE 849 426 454 427 *MESH_TFACE 850 429 425 424 *MESH_TFACE 851 431 428 427 *MESH_TFACE 852 429 430 433 *MESH_TFACE 853 431 432 435 *MESH_TFACE 854 441 436 435 *MESH_TFACE 855 443 437 439 *MESH_TFACE 856 441 442 445 *MESH_TFACE 857 443 444 447 *MESH_TFACE 858 449 446 445 *MESH_TFACE 859 451 448 447 *MESH_TFACE 860 449 450 453 *MESH_TFACE 861 426 451 452 *MESH_TFACE 862 442 470 455 *MESH_TFACE 863 444 471 456 *MESH_TFACE 864 450 445 455 *MESH_TFACE 865 452 447 456 *MESH_TFACE 866 450 457 459 *MESH_TFACE 867 452 458 460 *MESH_TFACE 868 453 459 461 *MESH_TFACE 869 454 460 462 *MESH_TFACE 870 430 424 461 *MESH_TFACE 871 432 427 462 *MESH_TFACE 872 430 463 465 *MESH_TFACE 873 432 464 466 *MESH_TFACE 874 435 466 470 *MESH_TFACE 875 439 468 471 *MESH_TFACE 876 463 461 472 *MESH_TFACE 877 464 462 474 *MESH_TFACE 878 463 473 476 *MESH_TFACE 879 464 475 477 *MESH_TFACE 880 470 466 477 *MESH_TFACE 881 468 479 482 *MESH_TFACE 882 470 481 483 *MESH_TFACE 883 456 471 482 *MESH_TFACE 884 457 455 483 *MESH_TFACE 885 458 456 484 *MESH_TFACE 886 457 485 487 *MESH_TFACE 887 460 458 486 *MESH_TFACE 888 459 487 472 *MESH_TFACE 889 460 488 474 *MESH_TFACE 890 482 505 489 *MESH_TFACE 891 485 483 490 *MESH_TFACE 892 484 489 492 *MESH_TFACE 893 485 491 493 *MESH_TFACE 894 488 486 492 *MESH_TFACE 895 487 493 495 *MESH_TFACE 896 488 494 496 *MESH_TFACE 897 472 495 497 *MESH_TFACE 898 475 474 496 *MESH_TFACE 899 473 497 499 *MESH_TFACE 900 475 498 500 *MESH_TFACE 901 481 477 500 *MESH_TFACE 902 479 502 505 *MESH_TFACE 903 481 504 490 *MESH_TFACE 904 498 496 506 *MESH_TFACE 905 497 522 508 *MESH_TFACE 906 500 498 507 *MESH_TFACE 907 500 509 513 *MESH_TFACE 908 502 511 514 *MESH_TFACE 909 504 513 515 *MESH_TFACE 910 505 514 516 *MESH_TFACE 911 491 490 515 *MESH_TFACE 912 489 516 518 *MESH_TFACE 913 491 517 519 *MESH_TFACE 914 494 492 518 *MESH_TFACE 915 495 493 519 *MESH_TFACE 916 494 520 506 *MESH_TFACE 917 495 521 522 *MESH_TFACE 918 517 515 523 *MESH_TFACE 919 518 516 525 *MESH_TFACE 920 517 524 527 *MESH_TFACE 921 520 518 526 *MESH_TFACE 922 519 527 529 *MESH_TFACE 923 520 528 530 *MESH_TFACE 924 521 529 531 *MESH_TFACE 925 507 506 530 *MESH_TFACE 926 522 531 533 *MESH_TFACE 927 507 532 534 *MESH_TFACE 928 509 534 538 *MESH_TFACE 929 514 511 536 *MESH_TFACE 930 513 538 523 *MESH_TFACE 931 516 514 539 *MESH_TFACE 932 533 531 540 *MESH_TFACE 933 532 556 542 *MESH_TFACE 934 534 542 546 *MESH_TFACE 935 536 544 547 *MESH_TFACE 936 538 546 548 *MESH_TFACE 937 539 547 549 *MESH_TFACE 938 524 523 548 *MESH_TFACE 939 525 549 551 *MESH_TFACE 940 524 550 552 *MESH_TFACE 941 528 526 551 *MESH_TFACE 942 527 552 554 *MESH_TFACE 943 528 553 555 *MESH_TFACE 944 529 554 540 *MESH_TFACE 945 532 530 555 *MESH_TFACE 946 551 549 3 *MESH_TFACE 947 550 2 7 *MESH_TFACE 948 553 551 5 *MESH_TFACE 949 552 7 11 *MESH_TFACE 950 555 553 9 *MESH_TFACE 951 554 11 15 *MESH_TFACE 952 556 555 13 *MESH_TFACE 953 540 15 19 *MESH_TFACE 954 542 556 17 *MESH_TFACE 955 542 21 27 *MESH_TFACE 956 547 544 22 *MESH_TFACE 957 546 27 0 *MESH_TFACE 958 549 547 29 *MESH_TFACE 959 550 548 0 } *MESH_NUMCVERTEX 0 *MESH_NORMALS { *MESH_FACENORMAL 0 0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 477 0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 20 0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 478 0.0865 0.8786 -0.4696 *MESH_FACENORMAL 1 0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 2 0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 13 0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 3 0.0624 0.6332 0.7715 *MESH_FACENORMAL 2 0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 478 0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 21 0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 479 0.0759 0.7708 -0.6326 *MESH_FACENORMAL 3 0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 3 0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 14 0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 4 0.0759 0.7708 0.6326 *MESH_FACENORMAL 4 0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 479 0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 22 0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 9 0.0624 0.6332 -0.7715 *MESH_FACENORMAL 5 0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 4 0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 15 0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 5 0.0865 0.8786 0.4696 *MESH_FACENORMAL 6 0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 9 0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 23 0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 480 0.0464 0.4709 -0.8810 *MESH_FACENORMAL 7 0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 5 0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 16 0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 6 0.0938 0.9527 0.2890 *MESH_FACENORMAL 8 0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 480 0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 24 0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 481 0.0286 0.2902 -0.9565 *MESH_FACENORMAL 9 0.0975 0.9904 0.0975 *MESH_VERTEXNORMAL 6 0.0975 0.9904 0.0975 *MESH_VERTEXNORMAL 17 0.0975 0.9904 0.0975 *MESH_VERTEXNORMAL 7 0.0975 0.9904 0.0975 *MESH_FACENORMAL 10 0.0097 0.0980 0.9951 *MESH_VERTEXNORMAL 0 0.0097 0.0980 0.9951 *MESH_VERTEXNORMAL 296 0.0097 0.0980 0.9951 *MESH_VERTEXNORMAL 10 0.0097 0.0980 0.9951 *MESH_FACENORMAL 11 0.0097 0.0980 -0.9951 *MESH_VERTEXNORMAL 205 0.0097 0.0980 -0.9951 *MESH_VERTEXNORMAL 481 0.0097 0.0980 -0.9951 *MESH_VERTEXNORMAL 24 0.0097 0.0980 -0.9951 *MESH_FACENORMAL 12 0.0975 0.9904 -0.0975 *MESH_VERTEXNORMAL 7 0.0975 0.9904 -0.0975 *MESH_VERTEXNORMAL 18 0.0975 0.9904 -0.0975 *MESH_VERTEXNORMAL 8 0.0975 0.9904 -0.0975 *MESH_FACENORMAL 13 0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 0 0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 11 0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 1 0.0286 0.2902 0.9565 *MESH_FACENORMAL 14 0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 8 0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 19 0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 477 0.0938 0.9527 -0.2890 *MESH_FACENORMAL 15 0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 2 0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 11 0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 12 0.0464 0.4709 0.8810 *MESH_FACENORMAL 16 0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 19 0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 33 0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 34 0.2779 0.9161 -0.2890 *MESH_FACENORMAL 17 0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 11 0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 27 0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 12 0.1374 0.4528 0.8810 *MESH_FACENORMAL 18 0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 19 0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 35 0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 20 0.2563 0.8448 -0.4696 *MESH_FACENORMAL 19 0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 12 0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 28 0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 13 0.1847 0.6088 0.7715 *MESH_FACENORMAL 20 0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 21 0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 35 0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 36 0.2248 0.7412 -0.6326 *MESH_FACENORMAL 21 0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 13 0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 29 0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 14 0.2248 0.7412 0.6326 *MESH_FACENORMAL 22 0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 21 0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 37 0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 22 0.1847 0.6088 -0.7715 *MESH_FACENORMAL 23 0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 14 0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 30 0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 15 0.2563 0.8448 0.4696 *MESH_FACENORMAL 24 0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 22 0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 38 0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 23 0.1374 0.4528 -0.8810 *MESH_FACENORMAL 25 0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 15 0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 31 0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 16 0.2779 0.9161 0.2890 *MESH_FACENORMAL 26 0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 23 0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 39 0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 24 0.0846 0.2790 -0.9565 *MESH_FACENORMAL 27 0.2889 0.9524 0.0976 *MESH_VERTEXNORMAL 16 0.2889 0.9524 0.0976 *MESH_VERTEXNORMAL 32 0.2889 0.9524 0.0976 *MESH_VERTEXNORMAL 17 0.2889 0.9524 0.0976 *MESH_FACENORMAL 28 0.0286 0.0942 0.9951 *MESH_VERTEXNORMAL 10 0.0286 0.0942 0.9951 *MESH_VERTEXNORMAL 296 0.0286 0.0942 0.9951 *MESH_VERTEXNORMAL 25 0.0286 0.0942 0.9951 *MESH_FACENORMAL 29 0.0286 0.0942 -0.9951 *MESH_VERTEXNORMAL 205 0.0286 0.0942 -0.9951 *MESH_VERTEXNORMAL 24 0.0286 0.0942 -0.9951 *MESH_VERTEXNORMAL 39 0.0286 0.0942 -0.9951 *MESH_FACENORMAL 30 0.2889 0.9524 -0.0976 *MESH_VERTEXNORMAL 18 0.2889 0.9524 -0.0975 *MESH_VERTEXNORMAL 32 0.2889 0.9524 -0.0975 *MESH_VERTEXNORMAL 33 0.2889 0.9524 -0.0975 *MESH_FACENORMAL 31 0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 10 0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 26 0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 11 0.0846 0.2790 0.9565 *MESH_FACENORMAL 32 0.2230 0.4173 -0.8810 *MESH_VERTEXNORMAL 37 0.2231 0.4173 -0.8810 *MESH_VERTEXNORMAL 53 0.2231 0.4173 -0.8810 *MESH_VERTEXNORMAL 38 0.2231 0.4173 -0.8810 *MESH_FACENORMAL 33 0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 31 0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 45 0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 46 0.4513 0.8443 0.2890 *MESH_FACENORMAL 34 0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 38 0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 54 0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 39 0.1374 0.2571 -0.9565 *MESH_FACENORMAL 35 0.4691 0.8777 0.0975 *MESH_VERTEXNORMAL 31 0.4691 0.8777 0.0975 *MESH_VERTEXNORMAL 47 0.4691 0.8777 0.0975 *MESH_VERTEXNORMAL 32 0.4691 0.8777 0.0975 *MESH_FACENORMAL 36 0.0464 0.0869 0.9951 *MESH_VERTEXNORMAL 25 0.0464 0.0869 0.9951 *MESH_VERTEXNORMAL 296 0.0464 0.0869 0.9951 *MESH_VERTEXNORMAL 40 0.0464 0.0869 0.9951 *MESH_FACENORMAL 37 0.0464 0.0869 -0.9951 *MESH_VERTEXNORMAL 205 0.0464 0.0869 -0.9951 *MESH_VERTEXNORMAL 39 0.0464 0.0869 -0.9951 *MESH_VERTEXNORMAL 54 0.0464 0.0869 -0.9951 *MESH_FACENORMAL 38 0.4691 0.8777 -0.0975 *MESH_VERTEXNORMAL 32 0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 48 0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 33 0.4691 0.8777 -0.0976 *MESH_FACENORMAL 39 0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 25 0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 41 0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 26 0.1374 0.2571 0.9565 *MESH_FACENORMAL 40 0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 33 0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 49 0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 34 0.4513 0.8443 -0.2890 *MESH_FACENORMAL 41 0.2230 0.4173 0.8810 *MESH_VERTEXNORMAL 26 0.2231 0.4173 0.8810 *MESH_VERTEXNORMAL 42 0.2231 0.4173 0.8810 *MESH_VERTEXNORMAL 27 0.2231 0.4173 0.8810 *MESH_FACENORMAL 42 0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 35 0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 49 0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 50 0.4162 0.7786 -0.4696 *MESH_FACENORMAL 43 0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 27 0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 43 0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 28 0.2999 0.5611 0.7715 *MESH_FACENORMAL 44 0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 36 0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 50 0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 51 0.3651 0.6831 -0.6326 *MESH_FACENORMAL 45 0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 28 0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 44 0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 29 0.3651 0.6831 0.6326 *MESH_FACENORMAL 46 0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 36 0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 52 0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 37 0.2999 0.5611 -0.7715 *MESH_FACENORMAL 47 0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 29 0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 45 0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 30 0.4162 0.7786 0.4696 *MESH_FACENORMAL 48 0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 41 0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 57 0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 42 0.3002 0.3658 0.8810 *MESH_FACENORMAL 49 0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 50 0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 64 0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 65 0.5601 0.6825 -0.4696 *MESH_FACENORMAL 50 0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 42 0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 58 0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 43 0.4036 0.4918 0.7715 *MESH_FACENORMAL 51 0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 50 0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 66 0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 51 0.4913 0.5987 -0.6326 *MESH_FACENORMAL 52 0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 43 0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 59 0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 44 0.4913 0.5987 0.6326 *MESH_FACENORMAL 53 0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 51 0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 67 0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 52 0.4036 0.4918 -0.7715 *MESH_FACENORMAL 54 0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 44 0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 60 0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 45 0.5601 0.6825 0.4696 *MESH_FACENORMAL 55 0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 52 0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 68 0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 53 0.3002 0.3658 -0.8810 *MESH_FACENORMAL 56 0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 45 0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 61 0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 46 0.6073 0.7400 0.2890 *MESH_FACENORMAL 57 0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 53 0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 69 0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 54 0.1850 0.2254 -0.9565 *MESH_FACENORMAL 58 0.6314 0.7693 0.0975 *MESH_VERTEXNORMAL 47 0.6314 0.7693 0.0975 *MESH_VERTEXNORMAL 61 0.6314 0.7693 0.0975 *MESH_VERTEXNORMAL 62 0.6314 0.7693 0.0975 *MESH_FACENORMAL 59 0.0625 0.0761 0.9951 *MESH_VERTEXNORMAL 40 0.0625 0.0761 0.9951 *MESH_VERTEXNORMAL 296 0.0625 0.0761 0.9951 *MESH_VERTEXNORMAL 55 0.0625 0.0761 0.9951 *MESH_FACENORMAL 60 0.0625 0.0761 -0.9951 *MESH_VERTEXNORMAL 205 0.0625 0.0761 -0.9951 *MESH_VERTEXNORMAL 54 0.0625 0.0761 -0.9951 *MESH_VERTEXNORMAL 69 0.0625 0.0761 -0.9951 *MESH_FACENORMAL 61 0.6314 0.7693 -0.0976 *MESH_VERTEXNORMAL 47 0.6314 0.7693 -0.0976 *MESH_VERTEXNORMAL 63 0.6314 0.7693 -0.0976 *MESH_VERTEXNORMAL 48 0.6314 0.7693 -0.0976 *MESH_FACENORMAL 62 0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 40 0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 56 0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 41 0.1850 0.2254 0.9565 *MESH_FACENORMAL 63 0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 48 0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 64 0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 49 0.6073 0.7400 -0.2890 *MESH_FACENORMAL 64 0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 60 0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 76 0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 61 0.7400 0.6073 0.2890 *MESH_FACENORMAL 65 0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 68 0.2254 0.1850 -0.9566 *MESH_VERTEXNORMAL 84 0.2254 0.1850 -0.9566 *MESH_VERTEXNORMAL 69 0.2254 0.1850 -0.9566 *MESH_FACENORMAL 66 0.7693 0.6314 0.0976 *MESH_VERTEXNORMAL 62 0.7693 0.6314 0.0976 *MESH_VERTEXNORMAL 76 0.7693 0.6314 0.0976 *MESH_VERTEXNORMAL 77 0.7693 0.6314 0.0976 *MESH_FACENORMAL 67 0.0761 0.0625 0.9951 *MESH_VERTEXNORMAL 55 0.0761 0.0625 0.9951 *MESH_VERTEXNORMAL 296 0.0761 0.0625 0.9951 *MESH_VERTEXNORMAL 70 0.0761 0.0625 0.9951 *MESH_FACENORMAL 68 0.0761 0.0625 -0.9951 *MESH_VERTEXNORMAL 205 0.0761 0.0625 -0.9951 *MESH_VERTEXNORMAL 69 0.0761 0.0625 -0.9951 *MESH_VERTEXNORMAL 84 0.0761 0.0625 -0.9951 *MESH_FACENORMAL 69 0.7693 0.6314 -0.0975 *MESH_VERTEXNORMAL 62 0.7693 0.6314 -0.0975 *MESH_VERTEXNORMAL 78 0.7693 0.6314 -0.0975 *MESH_VERTEXNORMAL 63 0.7693 0.6314 -0.0975 *MESH_FACENORMAL 70 0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 55 0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 71 0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 56 0.2254 0.1850 0.9565 *MESH_FACENORMAL 71 0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 63 0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 79 0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 64 0.7400 0.6073 -0.2890 *MESH_FACENORMAL 72 0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 56 0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 72 0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 57 0.3658 0.3002 0.8810 *MESH_FACENORMAL 73 0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 65 0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 79 0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 80 0.6825 0.5601 -0.4696 *MESH_FACENORMAL 74 0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 57 0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 73 0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 58 0.4918 0.4036 0.7715 *MESH_FACENORMAL 75 0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 65 0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 81 0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 66 0.5987 0.4913 -0.6326 *MESH_FACENORMAL 76 0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 59 0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 73 0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 74 0.5987 0.4913 0.6326 *MESH_FACENORMAL 77 0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 67 0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 81 0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 82 0.4918 0.4036 -0.7715 *MESH_FACENORMAL 78 0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 59 0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 75 0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 60 0.6825 0.5601 0.4696 *MESH_FACENORMAL 79 0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 68 0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 82 0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 83 0.3658 0.3002 -0.8810 *MESH_FACENORMAL 80 0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 80 0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 94 0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 95 0.7786 0.4162 -0.4696 *MESH_FACENORMAL 81 0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 72 0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 88 0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 73 0.5611 0.2999 0.7715 *MESH_FACENORMAL 82 0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 81 0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 95 0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 96 0.6831 0.3651 -0.6326 *MESH_FACENORMAL 83 0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 74 0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 88 0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 89 0.6831 0.3651 0.6326 *MESH_FACENORMAL 84 0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 81 0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 97 0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 82 0.5611 0.2999 -0.7715 *MESH_FACENORMAL 85 0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 74 0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 90 0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 75 0.7786 0.4162 0.4696 *MESH_FACENORMAL 86 0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 83 0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 97 0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 98 0.4173 0.2230 -0.8810 *MESH_FACENORMAL 87 0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 76 0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 90 0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 91 0.8443 0.4513 0.2890 *MESH_FACENORMAL 88 0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 83 0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 99 0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 84 0.2571 0.1374 -0.9565 *MESH_FACENORMAL 89 0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 76 0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 92 0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 77 0.8777 0.4691 0.0976 *MESH_FACENORMAL 90 0.0869 0.0464 0.9951 *MESH_VERTEXNORMAL 70 0.0869 0.0464 0.9951 *MESH_VERTEXNORMAL 296 0.0869 0.0464 0.9951 *MESH_VERTEXNORMAL 85 0.0869 0.0464 0.9951 *MESH_FACENORMAL 91 0.0869 0.0464 -0.9951 *MESH_VERTEXNORMAL 205 0.0869 0.0464 -0.9951 *MESH_VERTEXNORMAL 84 0.0869 0.0464 -0.9951 *MESH_VERTEXNORMAL 99 0.0869 0.0464 -0.9951 *MESH_FACENORMAL 92 0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 77 0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 93 0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 78 0.8777 0.4691 -0.0976 *MESH_FACENORMAL 93 0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 70 0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 86 0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 71 0.2571 0.1374 0.9565 *MESH_FACENORMAL 94 0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 78 0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 94 0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 79 0.8443 0.4513 -0.2890 *MESH_FACENORMAL 95 0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 71 0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 87 0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 72 0.4173 0.2230 0.8810 *MESH_FACENORMAL 96 0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 99 0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 113 0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 114 0.2790 0.0846 -0.9565 *MESH_FACENORMAL 97 0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 91 0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 107 0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 92 0.9524 0.2889 0.0976 *MESH_FACENORMAL 98 0.0942 0.0286 0.9951 *MESH_VERTEXNORMAL 85 0.0942 0.0286 0.9951 *MESH_VERTEXNORMAL 296 0.0942 0.0286 0.9951 *MESH_VERTEXNORMAL 100 0.0942 0.0286 0.9951 *MESH_FACENORMAL 99 0.0942 0.0286 -0.9951 *MESH_VERTEXNORMAL 205 0.0942 0.0286 -0.9951 *MESH_VERTEXNORMAL 99 0.0942 0.0286 -0.9951 *MESH_VERTEXNORMAL 114 0.0942 0.0286 -0.9951 *MESH_FACENORMAL 100 0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 92 0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 108 0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 93 0.9524 0.2889 -0.0976 *MESH_FACENORMAL 101 0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 85 0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 101 0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 86 0.2790 0.0846 0.9565 *MESH_FACENORMAL 102 0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 93 0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 109 0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 94 0.9161 0.2779 -0.2890 *MESH_FACENORMAL 103 0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 86 0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 102 0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 87 0.4528 0.1374 0.8810 *MESH_FACENORMAL 104 0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 95 0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 109 0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 110 0.8448 0.2563 -0.4696 *MESH_FACENORMAL 105 0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 88 0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 102 0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 103 0.6088 0.1847 0.7715 *MESH_FACENORMAL 106 0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 96 0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 110 0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 111 0.7412 0.2248 -0.6326 *MESH_FACENORMAL 107 0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 88 0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 104 0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 89 0.7412 0.2248 0.6326 *MESH_FACENORMAL 108 0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 96 0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 112 0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 97 0.6088 0.1847 -0.7715 *MESH_FACENORMAL 109 0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 89 0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 105 0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 90 0.8448 0.2563 0.4696 *MESH_FACENORMAL 110 0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 97 0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 113 0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 98 0.4528 0.1374 -0.8810 *MESH_FACENORMAL 111 0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 91 0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 105 0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 106 0.9161 0.2779 0.2890 *MESH_FACENORMAL 112 0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 110 0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 126 0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 111 0.7708 0.0759 -0.6326 *MESH_FACENORMAL 113 0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 103 0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 119 0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 104 0.7708 0.0759 0.6326 *MESH_FACENORMAL 114 0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 112 0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 126 0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 127 0.6332 0.0624 -0.7715 *MESH_FACENORMAL 115 0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 104 0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 120 0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 105 0.8786 0.0865 0.4696 *MESH_FACENORMAL 116 0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 113 0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 127 0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 128 0.4709 0.0464 -0.8810 *MESH_FACENORMAL 117 0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 106 0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 120 0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 121 0.9527 0.0938 0.2890 *MESH_FACENORMAL 118 0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 114 0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 128 0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 129 0.2902 0.0286 -0.9565 *MESH_FACENORMAL 119 0.9904 0.0975 0.0976 *MESH_VERTEXNORMAL 106 0.9904 0.0975 0.0976 *MESH_VERTEXNORMAL 122 0.9904 0.0975 0.0976 *MESH_VERTEXNORMAL 107 0.9904 0.0975 0.0976 *MESH_FACENORMAL 120 0.0980 0.0097 0.9951 *MESH_VERTEXNORMAL 100 0.0980 0.0097 0.9951 *MESH_VERTEXNORMAL 296 0.0980 0.0097 0.9951 *MESH_VERTEXNORMAL 115 0.0980 0.0097 0.9951 *MESH_FACENORMAL 121 0.0980 0.0097 -0.9951 *MESH_VERTEXNORMAL 205 0.0980 0.0097 -0.9951 *MESH_VERTEXNORMAL 114 0.0980 0.0097 -0.9951 *MESH_VERTEXNORMAL 129 0.0980 0.0097 -0.9951 *MESH_FACENORMAL 122 0.9904 0.0975 -0.0976 *MESH_VERTEXNORMAL 108 0.9904 0.0975 -0.0976 *MESH_VERTEXNORMAL 122 0.9904 0.0975 -0.0976 *MESH_VERTEXNORMAL 123 0.9904 0.0975 -0.0976 *MESH_FACENORMAL 123 0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 100 0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 116 0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 101 0.2902 0.0286 0.9565 *MESH_FACENORMAL 124 0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 108 0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 124 0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 109 0.9527 0.0938 -0.2890 *MESH_FACENORMAL 125 0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 101 0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 117 0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 102 0.4709 0.0464 0.8810 *MESH_FACENORMAL 126 0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 110 0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 124 0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 125 0.8786 0.0865 -0.4696 *MESH_FACENORMAL 127 0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 102 0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 118 0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 103 0.6332 0.0624 0.7715 *MESH_FACENORMAL 128 0.0980 -0.0097 0.9951 *MESH_VERTEXNORMAL 115 0.0980 -0.0097 0.9951 *MESH_VERTEXNORMAL 296 0.0980 -0.0097 0.9951 *MESH_VERTEXNORMAL 130 0.0980 -0.0097 0.9951 *MESH_FACENORMAL 129 0.0980 -0.0097 -0.9951 *MESH_VERTEXNORMAL 205 0.0980 -0.0097 -0.9951 *MESH_VERTEXNORMAL 129 0.0980 -0.0097 -0.9951 *MESH_VERTEXNORMAL 144 0.0980 -0.0097 -0.9951 *MESH_FACENORMAL 130 0.9904 -0.0976 -0.0976 *MESH_VERTEXNORMAL 122 0.9904 -0.0975 -0.0976 *MESH_VERTEXNORMAL 138 0.9904 -0.0975 -0.0976 *MESH_VERTEXNORMAL 123 0.9904 -0.0975 -0.0976 *MESH_FACENORMAL 131 0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 116 0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 130 0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 131 0.2902 -0.0286 0.9565 *MESH_FACENORMAL 132 0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 123 0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 139 0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 124 0.9527 -0.0938 -0.2890 *MESH_FACENORMAL 133 0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 116 0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 132 0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 117 0.4709 -0.0464 0.8810 *MESH_FACENORMAL 134 0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 125 0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 139 0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 140 0.8786 -0.0865 -0.4696 *MESH_FACENORMAL 135 0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 117 0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 133 0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 118 0.6332 -0.0624 0.7715 *MESH_FACENORMAL 136 0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 125 0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 141 0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 126 0.7708 -0.0759 -0.6326 *MESH_FACENORMAL 137 0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 119 0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 133 0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 134 0.7708 -0.0759 0.6326 *MESH_FACENORMAL 138 0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 127 0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 141 0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 142 0.6332 -0.0624 -0.7715 *MESH_FACENORMAL 139 0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 119 0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 135 0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 120 0.8786 -0.0865 0.4696 *MESH_FACENORMAL 140 0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 127 0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 143 0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 128 0.4709 -0.0464 -0.8810 *MESH_FACENORMAL 141 0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 121 0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 135 0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 136 0.9527 -0.0938 0.2890 *MESH_FACENORMAL 142 0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 129 0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 143 0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 144 0.2902 -0.0286 -0.9565 *MESH_FACENORMAL 143 0.9904 -0.0975 0.0976 *MESH_VERTEXNORMAL 121 0.9904 -0.0975 0.0976 *MESH_VERTEXNORMAL 137 0.9904 -0.0975 0.0976 *MESH_VERTEXNORMAL 122 0.9904 -0.0975 0.0976 *MESH_FACENORMAL 144 0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 133 0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 149 0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 134 0.7412 -0.2248 0.6326 *MESH_FACENORMAL 145 0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 141 0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 157 0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 142 0.6088 -0.1847 -0.7715 *MESH_FACENORMAL 146 0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 134 0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 150 0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 135 0.8448 -0.2563 0.4696 *MESH_FACENORMAL 147 0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 143 0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 157 0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 158 0.4528 -0.1374 -0.8810 *MESH_FACENORMAL 148 0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 136 0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 150 0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 151 0.9161 -0.2779 0.2890 *MESH_FACENORMAL 149 0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 143 0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 159 0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 144 0.2790 -0.0846 -0.9565 *MESH_FACENORMAL 150 0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 136 0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 152 0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 137 0.9524 -0.2889 0.0976 *MESH_FACENORMAL 151 0.0942 -0.0286 0.9951 *MESH_VERTEXNORMAL 130 0.0942 -0.0286 0.9951 *MESH_VERTEXNORMAL 296 0.0942 -0.0286 0.9951 *MESH_VERTEXNORMAL 145 0.0942 -0.0286 0.9951 *MESH_FACENORMAL 152 0.0942 -0.0286 -0.9951 *MESH_VERTEXNORMAL 205 0.0942 -0.0286 -0.9951 *MESH_VERTEXNORMAL 144 0.0942 -0.0286 -0.9951 *MESH_VERTEXNORMAL 159 0.0942 -0.0286 -0.9951 *MESH_FACENORMAL 153 0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 137 0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 153 0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 138 0.9524 -0.2889 -0.0976 *MESH_FACENORMAL 154 0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 130 0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 146 0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 131 0.2790 -0.0846 0.9565 *MESH_FACENORMAL 155 0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 138 0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 154 0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 139 0.9161 -0.2779 -0.2890 *MESH_FACENORMAL 156 0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 132 0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 146 0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 147 0.4528 -0.1374 0.8810 *MESH_FACENORMAL 157 0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 140 0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 154 0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 155 0.8448 -0.2563 -0.4696 *MESH_FACENORMAL 158 0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 132 0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 148 0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 133 0.6088 -0.1847 0.7715 *MESH_FACENORMAL 159 0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 140 0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 156 0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 141 0.7412 -0.2248 -0.6326 *MESH_FACENORMAL 160 0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 153 0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 167 0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 168 0.8777 -0.4691 -0.0976 *MESH_FACENORMAL 161 0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 145 0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 161 0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 146 0.2571 -0.1374 0.9565 *MESH_FACENORMAL 162 0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 153 0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 169 0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 154 0.8443 -0.4513 -0.2890 *MESH_FACENORMAL 163 0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 146 0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 162 0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 147 0.4173 -0.2230 0.8810 *MESH_FACENORMAL 164 0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 155 0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 169 0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 170 0.7786 -0.4162 -0.4696 *MESH_FACENORMAL 165 0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 147 0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 163 0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 148 0.5611 -0.2999 0.7715 *MESH_FACENORMAL 166 0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 155 0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 171 0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 156 0.6831 -0.3651 -0.6326 *MESH_FACENORMAL 167 0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 149 0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 163 0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 164 0.6831 -0.3651 0.6326 *MESH_FACENORMAL 168 0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 157 0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 171 0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 172 0.5611 -0.2999 -0.7715 *MESH_FACENORMAL 169 0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 149 0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 165 0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 150 0.7786 -0.4162 0.4696 *MESH_FACENORMAL 170 0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 157 0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 173 0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 158 0.4173 -0.2230 -0.8810 *MESH_FACENORMAL 171 0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 151 0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 165 0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 166 0.8443 -0.4513 0.2890 *MESH_FACENORMAL 172 0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 158 0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 174 0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 159 0.2571 -0.1374 -0.9565 *MESH_FACENORMAL 173 0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 151 0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 167 0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 152 0.8777 -0.4691 0.0976 *MESH_FACENORMAL 174 0.0869 -0.0464 0.9951 *MESH_VERTEXNORMAL 145 0.0869 -0.0464 0.9951 *MESH_VERTEXNORMAL 296 0.0869 -0.0464 0.9951 *MESH_VERTEXNORMAL 160 0.0869 -0.0464 0.9951 *MESH_FACENORMAL 175 0.0869 -0.0464 -0.9951 *MESH_VERTEXNORMAL 205 0.0869 -0.0464 -0.9951 *MESH_VERTEXNORMAL 159 0.0869 -0.0464 -0.9951 *MESH_VERTEXNORMAL 174 0.0869 -0.0464 -0.9951 *MESH_FACENORMAL 176 0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 172 0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 186 0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 187 0.4918 -0.4036 -0.7715 *MESH_FACENORMAL 177 0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 164 0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 180 0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 165 0.6825 -0.5601 0.4696 *MESH_FACENORMAL 178 0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 172 0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 188 0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 173 0.3658 -0.3002 -0.8810 *MESH_FACENORMAL 179 0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 166 0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 180 0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 181 0.7400 -0.6073 0.2890 *MESH_FACENORMAL 180 0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 174 0.2254 -0.1850 -0.9566 *MESH_VERTEXNORMAL 188 0.2254 -0.1850 -0.9566 *MESH_VERTEXNORMAL 189 0.2254 -0.1850 -0.9566 *MESH_FACENORMAL 181 0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 166 0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 182 0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 167 0.7693 -0.6314 0.0976 *MESH_FACENORMAL 182 0.0761 -0.0625 0.9951 *MESH_VERTEXNORMAL 160 0.0761 -0.0625 0.9951 *MESH_VERTEXNORMAL 296 0.0761 -0.0625 0.9951 *MESH_VERTEXNORMAL 175 0.0761 -0.0625 0.9951 *MESH_FACENORMAL 183 0.0761 -0.0625 -0.9951 *MESH_VERTEXNORMAL 205 0.0761 -0.0625 -0.9951 *MESH_VERTEXNORMAL 174 0.0761 -0.0625 -0.9951 *MESH_VERTEXNORMAL 189 0.0761 -0.0625 -0.9951 *MESH_FACENORMAL 184 0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 167 0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 183 0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 168 0.7693 -0.6314 -0.0976 *MESH_FACENORMAL 185 0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 160 0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 176 0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 161 0.2254 -0.1850 0.9565 *MESH_FACENORMAL 186 0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 168 0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 184 0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 169 0.7400 -0.6073 -0.2890 *MESH_FACENORMAL 187 0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 161 0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 177 0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 162 0.3658 -0.3002 0.8810 *MESH_FACENORMAL 188 0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 169 0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 185 0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 170 0.6825 -0.5601 -0.4696 *MESH_FACENORMAL 189 0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 162 0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 178 0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 163 0.4918 -0.4036 0.7715 *MESH_FACENORMAL 190 0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 170 0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 186 0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 171 0.5987 -0.4913 -0.6326 *MESH_FACENORMAL 191 0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 163 0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 179 0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 164 0.5987 -0.4913 0.6326 *MESH_FACENORMAL 192 0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 175 0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 191 0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 176 0.1850 -0.2254 0.9565 *MESH_FACENORMAL 193 0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 183 0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 199 0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 184 0.6073 -0.7400 -0.2890 *MESH_FACENORMAL 194 0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 176 0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 192 0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 177 0.3002 -0.3658 0.8810 *MESH_FACENORMAL 195 0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 185 0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 199 0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 200 0.5601 -0.6825 -0.4696 *MESH_FACENORMAL 196 0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 178 0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 192 0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 193 0.4036 -0.4918 0.7715 *MESH_FACENORMAL 197 0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 185 0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 201 0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 186 0.4913 -0.5987 -0.6326 *MESH_FACENORMAL 198 0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 179 0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 193 0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 194 0.4913 -0.5987 0.6326 *MESH_FACENORMAL 199 0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 187 0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 201 0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 202 0.4036 -0.4918 -0.7715 *MESH_FACENORMAL 200 0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 179 0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 195 0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 180 0.5601 -0.6825 0.4696 *MESH_FACENORMAL 201 0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 187 0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 203 0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 188 0.3002 -0.3658 -0.8810 *MESH_FACENORMAL 202 0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 181 0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 195 0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 196 0.6073 -0.7400 0.2890 *MESH_FACENORMAL 203 0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 189 0.1850 -0.2254 -0.9566 *MESH_VERTEXNORMAL 203 0.1850 -0.2254 -0.9566 *MESH_VERTEXNORMAL 204 0.1850 -0.2254 -0.9566 *MESH_FACENORMAL 204 0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 181 0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 197 0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 182 0.6314 -0.7693 0.0976 *MESH_FACENORMAL 205 0.0625 -0.0761 0.9951 *MESH_VERTEXNORMAL 175 0.0625 -0.0761 0.9951 *MESH_VERTEXNORMAL 296 0.0625 -0.0761 0.9951 *MESH_VERTEXNORMAL 190 0.0625 -0.0761 0.9951 *MESH_FACENORMAL 206 0.0625 -0.0761 -0.9951 *MESH_VERTEXNORMAL 205 0.0625 -0.0761 -0.9951 *MESH_VERTEXNORMAL 189 0.0625 -0.0761 -0.9951 *MESH_VERTEXNORMAL 204 0.0625 -0.0761 -0.9951 *MESH_FACENORMAL 207 0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 183 0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 197 0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 198 0.6314 -0.7693 -0.0976 *MESH_FACENORMAL 208 0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 194 0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 211 0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 195 0.4162 -0.7786 0.4696 *MESH_FACENORMAL 209 0.2230 -0.4173 -0.8810 *MESH_VERTEXNORMAL 202 0.2231 -0.4173 -0.8810 *MESH_VERTEXNORMAL 219 0.2231 -0.4173 -0.8810 *MESH_VERTEXNORMAL 203 0.2231 -0.4173 -0.8810 *MESH_FACENORMAL 210 0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 196 0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 211 0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 212 0.4513 -0.8443 0.2890 *MESH_FACENORMAL 211 0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 203 0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 220 0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 204 0.1374 -0.2571 -0.9565 *MESH_FACENORMAL 212 0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 196 0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 213 0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 197 0.4691 -0.8777 0.0976 *MESH_FACENORMAL 213 0.0464 -0.0869 0.9951 *MESH_VERTEXNORMAL 190 0.0464 -0.0869 0.9951 *MESH_VERTEXNORMAL 296 0.0464 -0.0869 0.9951 *MESH_VERTEXNORMAL 206 0.0464 -0.0869 0.9951 *MESH_FACENORMAL 214 0.0464 -0.0869 -0.9951 *MESH_VERTEXNORMAL 205 0.0464 -0.0869 -0.9951 *MESH_VERTEXNORMAL 204 0.0464 -0.0869 -0.9951 *MESH_VERTEXNORMAL 220 0.0464 -0.0869 -0.9951 *MESH_FACENORMAL 215 0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 197 0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 214 0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 198 0.4691 -0.8777 -0.0976 *MESH_FACENORMAL 216 0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 190 0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 207 0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 191 0.1374 -0.2571 0.9565 *MESH_FACENORMAL 217 0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 198 0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 215 0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 199 0.4513 -0.8443 -0.2890 *MESH_FACENORMAL 218 0.2230 -0.4173 0.8810 *MESH_VERTEXNORMAL 192 0.2231 -0.4173 0.8810 *MESH_VERTEXNORMAL 207 0.2231 -0.4173 0.8810 *MESH_VERTEXNORMAL 208 0.2231 -0.4173 0.8810 *MESH_FACENORMAL 219 0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 200 0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 215 0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 216 0.4162 -0.7786 -0.4696 *MESH_FACENORMAL 220 0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 192 0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 209 0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 193 0.2999 -0.5611 0.7715 *MESH_FACENORMAL 221 0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 200 0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 217 0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 201 0.3651 -0.6831 -0.6326 *MESH_FACENORMAL 222 0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 193 0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 210 0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 194 0.3651 -0.6831 0.6326 *MESH_FACENORMAL 223 0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 202 0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 217 0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 218 0.2999 -0.5611 -0.7715 *MESH_FACENORMAL 224 0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 214 0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 230 0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 215 0.2779 -0.9161 -0.2890 *MESH_FACENORMAL 225 0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 207 0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 223 0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 208 0.1374 -0.4528 0.8810 *MESH_FACENORMAL 226 0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 216 0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 230 0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 231 0.2563 -0.8448 -0.4696 *MESH_FACENORMAL 227 0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 208 0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 224 0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 209 0.1847 -0.6088 0.7715 *MESH_FACENORMAL 228 0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 216 0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 232 0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 217 0.2248 -0.7412 -0.6326 *MESH_FACENORMAL 229 0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 209 0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 225 0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 210 0.2248 -0.7412 0.6326 *MESH_FACENORMAL 230 0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 217 0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 233 0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 218 0.1847 -0.6088 -0.7715 *MESH_FACENORMAL 231 0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 210 0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 226 0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 211 0.2563 -0.8448 0.4696 *MESH_FACENORMAL 232 0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 218 0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 234 0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 219 0.1374 -0.4528 -0.8810 *MESH_FACENORMAL 233 0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 212 0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 226 0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 227 0.2779 -0.9161 0.2890 *MESH_FACENORMAL 234 0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 220 0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 234 0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 235 0.0846 -0.2790 -0.9565 *MESH_FACENORMAL 235 0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 212 0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 228 0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 213 0.2889 -0.9524 0.0976 *MESH_FACENORMAL 236 0.0286 -0.0942 0.9951 *MESH_VERTEXNORMAL 206 0.0286 -0.0942 0.9951 *MESH_VERTEXNORMAL 296 0.0286 -0.0942 0.9951 *MESH_VERTEXNORMAL 221 0.0286 -0.0942 0.9951 *MESH_FACENORMAL 237 0.0286 -0.0942 -0.9951 *MESH_VERTEXNORMAL 205 0.0286 -0.0942 -0.9951 *MESH_VERTEXNORMAL 220 0.0286 -0.0942 -0.9951 *MESH_VERTEXNORMAL 235 0.0286 -0.0942 -0.9951 *MESH_FACENORMAL 238 0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 213 0.2889 -0.9524 -0.0975 *MESH_VERTEXNORMAL 229 0.2889 -0.9524 -0.0975 *MESH_VERTEXNORMAL 214 0.2889 -0.9524 -0.0975 *MESH_FACENORMAL 239 0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 206 0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 222 0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 207 0.0846 -0.2790 0.9565 *MESH_FACENORMAL 240 0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 233 0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 249 0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 234 0.0464 -0.4709 -0.8810 *MESH_FACENORMAL 241 0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 227 0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 241 0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 242 0.0938 -0.9527 0.2890 *MESH_FACENORMAL 242 0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 235 0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 249 0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 250 0.0286 -0.2902 -0.9565 *MESH_FACENORMAL 243 0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 227 0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 243 0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 228 0.0975 -0.9904 0.0976 *MESH_FACENORMAL 244 0.0097 -0.0980 0.9951 *MESH_VERTEXNORMAL 221 0.0097 -0.0980 0.9951 *MESH_VERTEXNORMAL 296 0.0097 -0.0980 0.9951 *MESH_VERTEXNORMAL 236 0.0097 -0.0980 0.9951 *MESH_FACENORMAL 245 0.0097 -0.0980 -0.9951 *MESH_VERTEXNORMAL 205 0.0097 -0.0980 -0.9951 *MESH_VERTEXNORMAL 235 0.0097 -0.0980 -0.9951 *MESH_VERTEXNORMAL 250 0.0097 -0.0980 -0.9951 *MESH_FACENORMAL 246 0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 228 0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 244 0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 229 0.0975 -0.9904 -0.0976 *MESH_FACENORMAL 247 0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 221 0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 237 0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 222 0.0286 -0.2902 0.9565 *MESH_FACENORMAL 248 0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 229 0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 245 0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 230 0.0938 -0.9527 -0.2890 *MESH_FACENORMAL 249 0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 223 0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 237 0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 238 0.0464 -0.4709 0.8810 *MESH_FACENORMAL 250 0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 231 0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 245 0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 246 0.0865 -0.8786 -0.4696 *MESH_FACENORMAL 251 0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 224 0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 238 0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 239 0.0624 -0.6332 0.7715 *MESH_FACENORMAL 252 0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 231 0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 247 0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 232 0.0759 -0.7708 -0.6326 *MESH_FACENORMAL 253 0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 224 0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 240 0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 225 0.0759 -0.7708 0.6326 *MESH_FACENORMAL 254 0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 233 0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 247 0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 248 0.0624 -0.6332 -0.7715 *MESH_FACENORMAL 255 0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 225 0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 241 0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 226 0.0865 -0.8786 0.4696 *MESH_FACENORMAL 256 -0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 246 -0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 260 -0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 261 -0.0865 -0.8786 -0.4696 *MESH_FACENORMAL 257 -0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 239 -0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 253 -0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 254 -0.0624 -0.6332 0.7715 *MESH_FACENORMAL 258 -0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 246 -0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 262 -0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 247 -0.0759 -0.7708 -0.6326 *MESH_FACENORMAL 259 -0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 240 -0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 254 -0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 255 -0.0759 -0.7708 0.6326 *MESH_FACENORMAL 260 -0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 247 -0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 263 -0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 248 -0.0624 -0.6332 -0.7715 *MESH_FACENORMAL 261 -0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 240 -0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 256 -0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 241 -0.0865 -0.8786 0.4696 *MESH_FACENORMAL 262 -0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 248 -0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 264 -0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 249 -0.0464 -0.4709 -0.8810 *MESH_FACENORMAL 263 -0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 242 -0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 256 -0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 257 -0.0938 -0.9527 0.2890 *MESH_FACENORMAL 264 -0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 249 -0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 265 -0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 250 -0.0286 -0.2902 -0.9565 *MESH_FACENORMAL 265 -0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 242 -0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 258 -0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 243 -0.0975 -0.9904 0.0976 *MESH_FACENORMAL 266 -0.0097 -0.0980 0.9951 *MESH_VERTEXNORMAL 236 -0.0097 -0.0980 0.9951 *MESH_VERTEXNORMAL 296 -0.0097 -0.0980 0.9951 *MESH_VERTEXNORMAL 251 -0.0097 -0.0980 0.9951 *MESH_FACENORMAL 267 -0.0097 -0.0980 -0.9951 *MESH_VERTEXNORMAL 205 -0.0097 -0.0980 -0.9951 *MESH_VERTEXNORMAL 250 -0.0097 -0.0980 -0.9951 *MESH_VERTEXNORMAL 265 -0.0097 -0.0980 -0.9951 *MESH_FACENORMAL 268 -0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 243 -0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 259 -0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 244 -0.0975 -0.9904 -0.0976 *MESH_FACENORMAL 269 -0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 236 -0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 252 -0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 237 -0.0286 -0.2902 0.9565 *MESH_FACENORMAL 270 -0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 244 -0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 260 -0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 245 -0.0938 -0.9527 -0.2890 *MESH_FACENORMAL 271 -0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 237 -0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 253 -0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 238 -0.0464 -0.4709 0.8810 *MESH_FACENORMAL 272 -0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 265 -0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 279 -0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 280 -0.0846 -0.2790 -0.9565 *MESH_FACENORMAL 273 -0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 257 -0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 273 -0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 258 -0.2889 -0.9524 0.0976 *MESH_FACENORMAL 274 -0.0286 -0.0942 0.9951 *MESH_VERTEXNORMAL 251 -0.0286 -0.0942 0.9951 *MESH_VERTEXNORMAL 296 -0.0286 -0.0942 0.9951 *MESH_VERTEXNORMAL 266 -0.0286 -0.0942 0.9951 *MESH_FACENORMAL 275 -0.0286 -0.0942 -0.9951 *MESH_VERTEXNORMAL 205 -0.0286 -0.0942 -0.9951 *MESH_VERTEXNORMAL 265 -0.0286 -0.0942 -0.9951 *MESH_VERTEXNORMAL 280 -0.0286 -0.0942 -0.9951 *MESH_FACENORMAL 276 -0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 259 -0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 273 -0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 274 -0.2889 -0.9524 -0.0976 *MESH_FACENORMAL 277 -0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 251 -0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 267 -0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 252 -0.0846 -0.2790 0.9565 *MESH_FACENORMAL 278 -0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 259 -0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 275 -0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 260 -0.2779 -0.9161 -0.2890 *MESH_FACENORMAL 279 -0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 252 -0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 268 -0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 253 -0.1374 -0.4528 0.8810 *MESH_FACENORMAL 280 -0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 261 -0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 275 -0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 276 -0.2563 -0.8448 -0.4696 *MESH_FACENORMAL 281 -0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 254 -0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 268 -0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 269 -0.1847 -0.6088 0.7715 *MESH_FACENORMAL 282 -0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 261 -0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 277 -0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 262 -0.2248 -0.7412 -0.6326 *MESH_FACENORMAL 283 -0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 255 -0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 269 -0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 270 -0.2248 -0.7412 0.6326 *MESH_FACENORMAL 284 -0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 262 -0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 278 -0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 263 -0.1847 -0.6088 -0.7715 *MESH_FACENORMAL 285 -0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 255 -0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 271 -0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 256 -0.2563 -0.8448 0.4696 *MESH_FACENORMAL 286 -0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 264 -0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 278 -0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 279 -0.1374 -0.4528 -0.8810 *MESH_FACENORMAL 287 -0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 257 -0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 271 -0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 272 -0.2779 -0.9161 0.2890 *MESH_FACENORMAL 288 -0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 268 -0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 284 -0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 269 -0.2999 -0.5611 0.7715 *MESH_FACENORMAL 289 -0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 276 -0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 292 -0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 277 -0.3651 -0.6831 -0.6326 *MESH_FACENORMAL 290 -0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 270 -0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 284 -0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 285 -0.3651 -0.6831 0.6326 *MESH_FACENORMAL 291 -0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 278 -0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 292 -0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 293 -0.2999 -0.5611 -0.7715 *MESH_FACENORMAL 292 -0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 270 -0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 286 -0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 271 -0.4162 -0.7786 0.4696 *MESH_FACENORMAL 293 -0.2231 -0.4173 -0.8810 *MESH_VERTEXNORMAL 278 -0.2230 -0.4173 -0.8810 *MESH_VERTEXNORMAL 294 -0.2230 -0.4173 -0.8810 *MESH_VERTEXNORMAL 279 -0.2230 -0.4173 -0.8810 *MESH_FACENORMAL 294 -0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 272 -0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 286 -0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 287 -0.4513 -0.8443 0.2890 *MESH_FACENORMAL 295 -0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 280 -0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 294 -0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 295 -0.1374 -0.2571 -0.9565 *MESH_FACENORMAL 296 -0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 272 -0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 288 -0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 273 -0.4691 -0.8777 0.0976 *MESH_FACENORMAL 297 -0.0464 -0.0869 0.9951 *MESH_VERTEXNORMAL 266 -0.0464 -0.0869 0.9951 *MESH_VERTEXNORMAL 296 -0.0464 -0.0869 0.9951 *MESH_VERTEXNORMAL 281 -0.0464 -0.0869 0.9951 *MESH_FACENORMAL 298 -0.0464 -0.0869 -0.9951 *MESH_VERTEXNORMAL 205 -0.0464 -0.0869 -0.9951 *MESH_VERTEXNORMAL 280 -0.0464 -0.0869 -0.9951 *MESH_VERTEXNORMAL 295 -0.0464 -0.0869 -0.9951 *MESH_FACENORMAL 299 -0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 273 -0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 289 -0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 274 -0.4691 -0.8777 -0.0976 *MESH_FACENORMAL 300 -0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 266 -0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 282 -0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 267 -0.1374 -0.2571 0.9565 *MESH_FACENORMAL 301 -0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 274 -0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 290 -0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 275 -0.4513 -0.8443 -0.2890 *MESH_FACENORMAL 302 -0.2230 -0.4173 0.8810 *MESH_VERTEXNORMAL 267 -0.2231 -0.4173 0.8810 *MESH_VERTEXNORMAL 283 -0.2231 -0.4173 0.8810 *MESH_VERTEXNORMAL 268 -0.2231 -0.4173 0.8810 *MESH_FACENORMAL 303 -0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 276 -0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 290 -0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 291 -0.4162 -0.7786 -0.4696 *MESH_FACENORMAL 304 -0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 288 -0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 303 -0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 304 -0.6314 -0.7693 0.0976 *MESH_FACENORMAL 305 -0.0625 -0.0761 0.9951 *MESH_VERTEXNORMAL 281 -0.0625 -0.0761 0.9951 *MESH_VERTEXNORMAL 296 -0.0625 -0.0761 0.9951 *MESH_VERTEXNORMAL 297 -0.0625 -0.0761 0.9951 *MESH_FACENORMAL 306 -0.0625 -0.0761 -0.9951 *MESH_VERTEXNORMAL 205 -0.0625 -0.0761 -0.9951 *MESH_VERTEXNORMAL 295 -0.0625 -0.0761 -0.9951 *MESH_VERTEXNORMAL 311 -0.0625 -0.0761 -0.9951 *MESH_FACENORMAL 307 -0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 288 -0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 305 -0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 289 -0.6314 -0.7693 -0.0976 *MESH_FACENORMAL 308 -0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 281 -0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 298 -0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 282 -0.1850 -0.2254 0.9565 *MESH_FACENORMAL 309 -0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 289 -0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 306 -0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 290 -0.6073 -0.7400 -0.2890 *MESH_FACENORMAL 310 -0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 282 -0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 299 -0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 283 -0.3002 -0.3658 0.8810 *MESH_FACENORMAL 311 -0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 291 -0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 306 -0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 307 -0.5601 -0.6825 -0.4696 *MESH_FACENORMAL 312 -0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 284 -0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 299 -0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 300 -0.4036 -0.4918 0.7715 *MESH_FACENORMAL 313 -0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 291 -0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 308 -0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 292 -0.4913 -0.5987 -0.6326 *MESH_FACENORMAL 314 -0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 285 -0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 300 -0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 301 -0.4913 -0.5987 0.6326 *MESH_FACENORMAL 315 -0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 292 -0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 309 -0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 293 -0.4036 -0.4918 -0.7715 *MESH_FACENORMAL 316 -0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 285 -0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 302 -0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 286 -0.5601 -0.6825 0.4696 *MESH_FACENORMAL 317 -0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 293 -0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 310 -0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 294 -0.3002 -0.3658 -0.8810 *MESH_FACENORMAL 318 -0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 287 -0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 302 -0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 303 -0.6073 -0.7400 0.2890 *MESH_FACENORMAL 319 -0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 294 -0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 311 -0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 295 -0.1850 -0.2254 -0.9565 *MESH_FACENORMAL 320 -0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 307 -0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 323 -0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 308 -0.5987 -0.4913 -0.6326 *MESH_FACENORMAL 321 -0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 301 -0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 315 -0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 316 -0.5987 -0.4913 0.6326 *MESH_FACENORMAL 322 -0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 308 -0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 324 -0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 309 -0.4918 -0.4036 -0.7715 *MESH_FACENORMAL 323 -0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 301 -0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 317 -0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 302 -0.6825 -0.5601 0.4696 *MESH_FACENORMAL 324 -0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 310 -0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 324 -0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 325 -0.3658 -0.3002 -0.8810 *MESH_FACENORMAL 325 -0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 303 -0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 317 -0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 318 -0.7400 -0.6073 0.2890 *MESH_FACENORMAL 326 -0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 310 -0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 326 -0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 311 -0.2254 -0.1850 -0.9565 *MESH_FACENORMAL 327 -0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 303 -0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 319 -0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 304 -0.7693 -0.6314 0.0976 *MESH_FACENORMAL 328 -0.0761 -0.0625 0.9951 *MESH_VERTEXNORMAL 297 -0.0761 -0.0625 0.9951 *MESH_VERTEXNORMAL 296 -0.0761 -0.0625 0.9951 *MESH_VERTEXNORMAL 312 -0.0761 -0.0625 0.9951 *MESH_FACENORMAL 329 -0.0761 -0.0625 -0.9951 *MESH_VERTEXNORMAL 205 -0.0761 -0.0625 -0.9951 *MESH_VERTEXNORMAL 311 -0.0761 -0.0625 -0.9951 *MESH_VERTEXNORMAL 326 -0.0761 -0.0625 -0.9951 *MESH_FACENORMAL 330 -0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 304 -0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 320 -0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 305 -0.7693 -0.6314 -0.0976 *MESH_FACENORMAL 331 -0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 297 -0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 313 -0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 298 -0.2254 -0.1850 0.9565 *MESH_FACENORMAL 332 -0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 305 -0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 321 -0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 306 -0.7400 -0.6073 -0.2890 *MESH_FACENORMAL 333 -0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 298 -0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 314 -0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 299 -0.3658 -0.3002 0.8810 *MESH_FACENORMAL 334 -0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 307 -0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 321 -0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 322 -0.6825 -0.5601 -0.4696 *MESH_FACENORMAL 335 -0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 300 -0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 314 -0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 315 -0.4918 -0.4036 0.7715 *MESH_FACENORMAL 336 -0.0869 -0.0464 0.9951 *MESH_VERTEXNORMAL 312 -0.0869 -0.0464 0.9951 *MESH_VERTEXNORMAL 296 -0.0869 -0.0464 0.9951 *MESH_VERTEXNORMAL 327 -0.0869 -0.0464 0.9951 *MESH_FACENORMAL 337 -0.0869 -0.0464 -0.9951 *MESH_VERTEXNORMAL 205 -0.0869 -0.0464 -0.9951 *MESH_VERTEXNORMAL 326 -0.0869 -0.0464 -0.9951 *MESH_VERTEXNORMAL 341 -0.0869 -0.0464 -0.9951 *MESH_FACENORMAL 338 -0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 319 -0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 335 -0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 320 -0.8777 -0.4691 -0.0976 *MESH_FACENORMAL 339 -0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 312 -0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 328 -0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 313 -0.2571 -0.1374 0.9565 *MESH_FACENORMAL 340 -0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 320 -0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 336 -0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 321 -0.8443 -0.4513 -0.2890 *MESH_FACENORMAL 341 -0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 313 -0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 329 -0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 314 -0.4173 -0.2230 0.8810 *MESH_FACENORMAL 342 -0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 322 -0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 336 -0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 337 -0.7786 -0.4162 -0.4696 *MESH_FACENORMAL 343 -0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 315 -0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 329 -0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 330 -0.5611 -0.2999 0.7715 *MESH_FACENORMAL 344 -0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 323 -0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 337 -0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 338 -0.6831 -0.3651 -0.6326 *MESH_FACENORMAL 345 -0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 316 -0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 330 -0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 331 -0.6831 -0.3651 0.6326 *MESH_FACENORMAL 346 -0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 323 -0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 339 -0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 324 -0.5611 -0.2999 -0.7715 *MESH_FACENORMAL 347 -0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 316 -0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 332 -0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 317 -0.7786 -0.4162 0.4696 *MESH_FACENORMAL 348 -0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 325 -0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 339 -0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 340 -0.4173 -0.2230 -0.8810 *MESH_FACENORMAL 349 -0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 318 -0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 332 -0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 333 -0.8443 -0.4513 0.2890 *MESH_FACENORMAL 350 -0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 326 -0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 340 -0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 341 -0.2571 -0.1374 -0.9565 *MESH_FACENORMAL 351 -0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 318 -0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 334 -0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 319 -0.8777 -0.4691 0.0976 *MESH_FACENORMAL 352 -0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 331 -0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 345 -0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 346 -0.7412 -0.2248 0.6326 *MESH_FACENORMAL 353 -0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 338 -0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 354 -0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 339 -0.6088 -0.1847 -0.7715 *MESH_FACENORMAL 354 -0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 331 -0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 347 -0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 332 -0.8448 -0.2563 0.4696 *MESH_FACENORMAL 355 -0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 340 -0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 354 -0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 355 -0.4528 -0.1374 -0.8810 *MESH_FACENORMAL 356 -0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 333 -0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 347 -0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 348 -0.9161 -0.2779 0.2890 *MESH_FACENORMAL 357 -0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 340 -0.2790 -0.0846 -0.9566 *MESH_VERTEXNORMAL 356 -0.2790 -0.0846 -0.9566 *MESH_VERTEXNORMAL 341 -0.2790 -0.0846 -0.9566 *MESH_FACENORMAL 358 -0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 333 -0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 349 -0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 334 -0.9524 -0.2889 0.0976 *MESH_FACENORMAL 359 -0.0942 -0.0286 0.9951 *MESH_VERTEXNORMAL 327 -0.0942 -0.0286 0.9951 *MESH_VERTEXNORMAL 296 -0.0942 -0.0286 0.9951 *MESH_VERTEXNORMAL 342 -0.0942 -0.0286 0.9951 *MESH_FACENORMAL 360 -0.0942 -0.0286 -0.9951 *MESH_VERTEXNORMAL 205 -0.0942 -0.0286 -0.9951 *MESH_VERTEXNORMAL 341 -0.0942 -0.0286 -0.9951 *MESH_VERTEXNORMAL 356 -0.0942 -0.0286 -0.9951 *MESH_FACENORMAL 361 -0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 334 -0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 350 -0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 335 -0.9524 -0.2889 -0.0976 *MESH_FACENORMAL 362 -0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 328 -0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 342 -0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 343 -0.2790 -0.0846 0.9565 *MESH_FACENORMAL 363 -0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 335 -0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 351 -0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 336 -0.9161 -0.2779 -0.2890 *MESH_FACENORMAL 364 -0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 328 -0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 344 -0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 329 -0.4528 -0.1374 0.8810 *MESH_FACENORMAL 365 -0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 337 -0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 351 -0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 352 -0.8448 -0.2563 -0.4696 *MESH_FACENORMAL 366 -0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 330 -0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 344 -0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 345 -0.6088 -0.1847 0.7715 *MESH_FACENORMAL 367 -0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 337 -0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 353 -0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 338 -0.7412 -0.2248 -0.6326 *MESH_FACENORMAL 368 -0.9904 -0.0975 -0.0976 *MESH_VERTEXNORMAL 350 -0.9904 -0.0975 -0.0976 *MESH_VERTEXNORMAL 364 -0.9904 -0.0975 -0.0976 *MESH_VERTEXNORMAL 365 -0.9904 -0.0975 -0.0976 *MESH_FACENORMAL 369 -0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 343 -0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 357 -0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 358 -0.2902 -0.0286 0.9565 *MESH_FACENORMAL 370 -0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 350 -0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 366 -0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 351 -0.9527 -0.0938 -0.2890 *MESH_FACENORMAL 371 -0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 343 -0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 359 -0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 344 -0.4709 -0.0464 0.8810 *MESH_FACENORMAL 372 -0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 352 -0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 366 -0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 367 -0.8786 -0.0865 -0.4696 *MESH_FACENORMAL 373 -0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 345 -0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 359 -0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 360 -0.6332 -0.0624 0.7715 *MESH_FACENORMAL 374 -0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 352 -0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 368 -0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 353 -0.7708 -0.0759 -0.6326 *MESH_FACENORMAL 375 -0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 345 -0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 361 -0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 346 -0.7708 -0.0759 0.6326 *MESH_FACENORMAL 376 -0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 354 -0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 368 -0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 369 -0.6332 -0.0624 -0.7715 *MESH_FACENORMAL 377 -0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 346 -0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 362 -0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 347 -0.8786 -0.0865 0.4696 *MESH_FACENORMAL 378 -0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 355 -0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 369 -0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 370 -0.4709 -0.0464 -0.8810 *MESH_FACENORMAL 379 -0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 348 -0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 362 -0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 363 -0.9527 -0.0938 0.2890 *MESH_FACENORMAL 380 -0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 355 -0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 371 -0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 356 -0.2902 -0.0286 -0.9565 *MESH_FACENORMAL 381 -0.9904 -0.0975 0.0976 *MESH_VERTEXNORMAL 348 -0.9904 -0.0975 0.0976 *MESH_VERTEXNORMAL 364 -0.9904 -0.0975 0.0976 *MESH_VERTEXNORMAL 349 -0.9904 -0.0975 0.0976 *MESH_FACENORMAL 382 -0.0980 -0.0097 0.9951 *MESH_VERTEXNORMAL 342 -0.0980 -0.0097 0.9951 *MESH_VERTEXNORMAL 296 -0.0980 -0.0097 0.9951 *MESH_VERTEXNORMAL 357 -0.0980 -0.0097 0.9951 *MESH_FACENORMAL 383 -0.0980 -0.0097 -0.9951 *MESH_VERTEXNORMAL 205 -0.0980 -0.0097 -0.9951 *MESH_VERTEXNORMAL 356 -0.0980 -0.0097 -0.9951 *MESH_VERTEXNORMAL 371 -0.0980 -0.0097 -0.9951 *MESH_FACENORMAL 384 -0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 368 -0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 384 -0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 369 -0.6332 0.0624 -0.7715 *MESH_FACENORMAL 385 -0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 361 -0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 377 -0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 362 -0.8786 0.0865 0.4696 *MESH_FACENORMAL 386 -0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 370 -0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 384 -0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 385 -0.4709 0.0464 -0.8810 *MESH_FACENORMAL 387 -0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 363 -0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 377 -0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 378 -0.9527 0.0938 0.2890 *MESH_FACENORMAL 388 -0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 370 -0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 386 -0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 371 -0.2902 0.0286 -0.9565 *MESH_FACENORMAL 389 -0.9904 0.0975 0.0976 *MESH_VERTEXNORMAL 363 -0.9904 0.0976 0.0976 *MESH_VERTEXNORMAL 379 -0.9904 0.0976 0.0976 *MESH_VERTEXNORMAL 364 -0.9904 0.0976 0.0976 *MESH_FACENORMAL 390 -0.0980 0.0097 0.9951 *MESH_VERTEXNORMAL 357 -0.0980 0.0097 0.9951 *MESH_VERTEXNORMAL 296 -0.0980 0.0097 0.9951 *MESH_VERTEXNORMAL 372 -0.0980 0.0097 0.9951 *MESH_FACENORMAL 391 -0.0980 0.0097 -0.9951 *MESH_VERTEXNORMAL 205 -0.0980 0.0097 -0.9951 *MESH_VERTEXNORMAL 371 -0.0980 0.0097 -0.9951 *MESH_VERTEXNORMAL 386 -0.0980 0.0097 -0.9951 *MESH_FACENORMAL 392 -0.9904 0.0976 -0.0976 *MESH_VERTEXNORMAL 365 -0.9904 0.0975 -0.0976 *MESH_VERTEXNORMAL 379 -0.9904 0.0975 -0.0976 *MESH_VERTEXNORMAL 380 -0.9904 0.0975 -0.0976 *MESH_FACENORMAL 393 -0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 358 -0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 372 -0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 373 -0.2902 0.0286 0.9565 *MESH_FACENORMAL 394 -0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 365 -0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 381 -0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 366 -0.9527 0.0938 -0.2890 *MESH_FACENORMAL 395 -0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 358 -0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 374 -0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 359 -0.4709 0.0464 0.8810 *MESH_FACENORMAL 396 -0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 367 -0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 381 -0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 382 -0.8786 0.0865 -0.4696 *MESH_FACENORMAL 397 -0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 360 -0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 374 -0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 375 -0.6332 0.0624 0.7715 *MESH_FACENORMAL 398 -0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 367 -0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 383 -0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 368 -0.7708 0.0759 -0.6326 *MESH_FACENORMAL 399 -0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 361 -0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 375 -0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 376 -0.7708 0.0759 0.6326 *MESH_FACENORMAL 400 -0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 380 -0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 396 -0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 381 -0.9161 0.2779 -0.2890 *MESH_FACENORMAL 401 -0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 373 -0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 389 -0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 374 -0.4528 0.1374 0.8810 *MESH_FACENORMAL 402 -0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 382 -0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 396 -0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 397 -0.8448 0.2563 -0.4696 *MESH_FACENORMAL 403 -0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 375 -0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 389 -0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 390 -0.6088 0.1847 0.7715 *MESH_FACENORMAL 404 -0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 382 -0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 398 -0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 383 -0.7412 0.2248 -0.6326 *MESH_FACENORMAL 405 -0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 375 -0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 391 -0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 376 -0.7412 0.2248 0.6326 *MESH_FACENORMAL 406 -0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 383 -0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 399 -0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 384 -0.6088 0.1847 -0.7715 *MESH_FACENORMAL 407 -0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 376 -0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 392 -0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 377 -0.8448 0.2563 0.4696 *MESH_FACENORMAL 408 -0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 385 -0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 399 -0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 400 -0.4528 0.1374 -0.8810 *MESH_FACENORMAL 409 -0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 378 -0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 392 -0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 393 -0.9161 0.2779 0.2890 *MESH_FACENORMAL 410 -0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 385 -0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 401 -0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 386 -0.2790 0.0846 -0.9565 *MESH_FACENORMAL 411 -0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 378 -0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 394 -0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 379 -0.9524 0.2889 0.0976 *MESH_FACENORMAL 412 -0.0942 0.0286 0.9951 *MESH_VERTEXNORMAL 372 -0.0942 0.0286 0.9951 *MESH_VERTEXNORMAL 296 -0.0942 0.0286 0.9951 *MESH_VERTEXNORMAL 387 -0.0942 0.0286 0.9951 *MESH_FACENORMAL 413 -0.0942 0.0286 -0.9951 *MESH_VERTEXNORMAL 205 -0.0942 0.0286 -0.9951 *MESH_VERTEXNORMAL 386 -0.0942 0.0286 -0.9951 *MESH_VERTEXNORMAL 401 -0.0942 0.0286 -0.9951 *MESH_FACENORMAL 414 -0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 379 -0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 395 -0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 380 -0.9524 0.2889 -0.0976 *MESH_FACENORMAL 415 -0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 372 -0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 388 -0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 373 -0.2790 0.0846 0.9565 *MESH_FACENORMAL 416 -0.4173 0.2231 -0.8810 *MESH_VERTEXNORMAL 400 -0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 414 -0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 415 -0.4173 0.2230 -0.8810 *MESH_FACENORMAL 417 -0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 393 -0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 407 -0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 408 -0.8443 0.4513 0.2890 *MESH_FACENORMAL 418 -0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 400 -0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 416 -0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 401 -0.2571 0.1374 -0.9565 *MESH_FACENORMAL 419 -0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 393 -0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 409 -0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 394 -0.8777 0.4691 0.0976 *MESH_FACENORMAL 420 -0.0869 0.0464 0.9951 *MESH_VERTEXNORMAL 387 -0.0869 0.0464 0.9951 *MESH_VERTEXNORMAL 296 -0.0869 0.0464 0.9951 *MESH_VERTEXNORMAL 402 -0.0869 0.0464 0.9951 *MESH_FACENORMAL 421 -0.0869 0.0464 -0.9951 *MESH_VERTEXNORMAL 205 -0.0869 0.0464 -0.9951 *MESH_VERTEXNORMAL 401 -0.0869 0.0464 -0.9951 *MESH_VERTEXNORMAL 416 -0.0869 0.0464 -0.9951 *MESH_FACENORMAL 422 -0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 395 -0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 409 -0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 410 -0.8777 0.4691 -0.0976 *MESH_FACENORMAL 423 -0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 387 -0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 403 -0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 388 -0.2571 0.1374 0.9565 *MESH_FACENORMAL 424 -0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 395 -0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 411 -0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 396 -0.8443 0.4513 -0.2890 *MESH_FACENORMAL 425 -0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 389 -0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 403 -0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 404 -0.4173 0.2230 0.8810 *MESH_FACENORMAL 426 -0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 397 -0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 411 -0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 412 -0.7786 0.4162 -0.4696 *MESH_FACENORMAL 427 -0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 390 -0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 404 -0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 405 -0.5611 0.2999 0.7715 *MESH_FACENORMAL 428 -0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 397 -0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 413 -0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 398 -0.6831 0.3651 -0.6326 *MESH_FACENORMAL 429 -0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 391 -0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 405 -0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 406 -0.6831 0.3651 0.6326 *MESH_FACENORMAL 430 -0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 398 -0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 414 -0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 399 -0.5611 0.2999 -0.7715 *MESH_FACENORMAL 431 -0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 391 -0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 407 -0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 392 -0.7786 0.4162 0.4696 *MESH_FACENORMAL 432 -0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 403 -0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 419 -0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 404 -0.3658 0.3002 0.8810 *MESH_FACENORMAL 433 -0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 412 -0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 426 -0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 427 -0.6825 0.5601 -0.4696 *MESH_FACENORMAL 434 -0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 404 -0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 420 -0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 405 -0.4918 0.4036 0.7715 *MESH_FACENORMAL 435 -0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 412 -0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 428 -0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 413 -0.5987 0.4913 -0.6326 *MESH_FACENORMAL 436 -0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 406 -0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 420 -0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 421 -0.5987 0.4913 0.6326 *MESH_FACENORMAL 437 -0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 413 -0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 429 -0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 414 -0.4918 0.4036 -0.7715 *MESH_FACENORMAL 438 -0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 406 -0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 422 -0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 407 -0.6825 0.5601 0.4696 *MESH_FACENORMAL 439 -0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 414 -0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 430 -0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 415 -0.3658 0.3002 -0.8810 *MESH_FACENORMAL 440 -0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 408 -0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 422 -0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 423 -0.7400 0.6073 0.2890 *MESH_FACENORMAL 441 -0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 415 -0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 431 -0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 416 -0.2254 0.1850 -0.9565 *MESH_FACENORMAL 442 -0.7693 0.6314 0.0976 *MESH_VERTEXNORMAL 408 -0.7693 0.6314 0.0976 *MESH_VERTEXNORMAL 424 -0.7693 0.6314 0.0976 *MESH_VERTEXNORMAL 409 -0.7693 0.6314 0.0976 *MESH_FACENORMAL 443 -0.0761 0.0625 0.9951 *MESH_VERTEXNORMAL 402 -0.0761 0.0625 0.9951 *MESH_VERTEXNORMAL 296 -0.0761 0.0625 0.9951 *MESH_VERTEXNORMAL 417 -0.0761 0.0625 0.9951 *MESH_FACENORMAL 444 -0.0761 0.0625 -0.9951 *MESH_VERTEXNORMAL 205 -0.0761 0.0625 -0.9951 *MESH_VERTEXNORMAL 416 -0.0761 0.0625 -0.9951 *MESH_VERTEXNORMAL 431 -0.0761 0.0625 -0.9951 *MESH_FACENORMAL 445 -0.7693 0.6314 -0.0976 *MESH_VERTEXNORMAL 410 -0.7693 0.6314 -0.0976 *MESH_VERTEXNORMAL 424 -0.7693 0.6314 -0.0976 *MESH_VERTEXNORMAL 425 -0.7693 0.6314 -0.0976 *MESH_FACENORMAL 446 -0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 402 -0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 418 -0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 403 -0.2254 0.1850 0.9565 *MESH_FACENORMAL 447 -0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 410 -0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 426 -0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 411 -0.7400 0.6073 -0.2890 *MESH_FACENORMAL 448 -0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 423 -0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 437 -0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 438 -0.6073 0.7400 0.2890 *MESH_FACENORMAL 449 -0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 430 -0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 446 -0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 431 -0.1850 0.2254 -0.9565 *MESH_FACENORMAL 450 -0.6314 0.7693 0.0976 *MESH_VERTEXNORMAL 424 -0.6314 0.7693 0.0976 *MESH_VERTEXNORMAL 438 -0.6314 0.7693 0.0976 *MESH_VERTEXNORMAL 439 -0.6314 0.7693 0.0976 *MESH_FACENORMAL 451 -0.0625 0.0761 0.9951 *MESH_VERTEXNORMAL 417 -0.0625 0.0761 0.9951 *MESH_VERTEXNORMAL 296 -0.0625 0.0761 0.9951 *MESH_VERTEXNORMAL 432 -0.0625 0.0761 0.9951 *MESH_FACENORMAL 452 -0.0625 0.0761 -0.9951 *MESH_VERTEXNORMAL 205 -0.0625 0.0761 -0.9951 *MESH_VERTEXNORMAL 431 -0.0625 0.0761 -0.9951 *MESH_VERTEXNORMAL 446 -0.0625 0.0761 -0.9951 *MESH_FACENORMAL 453 -0.6314 0.7693 -0.0976 *MESH_VERTEXNORMAL 424 -0.6314 0.7693 -0.0976 *MESH_VERTEXNORMAL 440 -0.6314 0.7693 -0.0976 *MESH_VERTEXNORMAL 425 -0.6314 0.7693 -0.0976 *MESH_FACENORMAL 454 -0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 417 -0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 433 -0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 418 -0.1850 0.2254 0.9565 *MESH_FACENORMAL 455 -0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 425 -0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 441 -0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 426 -0.6073 0.7400 -0.2890 *MESH_FACENORMAL 456 -0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 418 -0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 434 -0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 419 -0.3002 0.3658 0.8810 *MESH_FACENORMAL 457 -0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 427 -0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 441 -0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 442 -0.5601 0.6825 -0.4696 *MESH_FACENORMAL 458 -0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 419 -0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 435 -0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 420 -0.4036 0.4918 0.7715 *MESH_FACENORMAL 459 -0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 427 -0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 443 -0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 428 -0.4913 0.5987 -0.6326 *MESH_FACENORMAL 460 -0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 421 -0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 435 -0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 436 -0.4913 0.5987 0.6326 *MESH_FACENORMAL 461 -0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 429 -0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 443 -0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 444 -0.4036 0.4918 -0.7715 *MESH_FACENORMAL 462 -0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 421 -0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 437 -0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 422 -0.5601 0.6825 0.4696 *MESH_FACENORMAL 463 -0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 429 -0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 445 -0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 430 -0.3002 0.3658 -0.8810 *MESH_FACENORMAL 464 -0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 442 -0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 456 -0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 457 -0.4162 0.7786 -0.4696 *MESH_FACENORMAL 465 -0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 435 -0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 449 -0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 450 -0.2999 0.5611 0.7715 *MESH_FACENORMAL 466 -0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 442 -0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 458 -0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 443 -0.3651 0.6831 -0.6326 *MESH_FACENORMAL 467 -0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 436 -0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 450 -0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 451 -0.3651 0.6831 0.6326 *MESH_FACENORMAL 468 -0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 443 -0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 459 -0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 444 -0.2999 0.5611 -0.7715 *MESH_FACENORMAL 469 -0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 436 -0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 452 -0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 437 -0.4162 0.7786 0.4696 *MESH_FACENORMAL 470 -0.2230 0.4173 -0.8810 *MESH_VERTEXNORMAL 444 -0.2231 0.4173 -0.8810 *MESH_VERTEXNORMAL 460 -0.2231 0.4173 -0.8810 *MESH_VERTEXNORMAL 445 -0.2231 0.4173 -0.8810 *MESH_FACENORMAL 471 -0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 438 -0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 452 -0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 453 -0.4513 0.8443 0.2890 *MESH_FACENORMAL 472 -0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 445 -0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 461 -0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 446 -0.1374 0.2571 -0.9565 *MESH_FACENORMAL 473 -0.4691 0.8777 0.0976 *MESH_VERTEXNORMAL 438 -0.4691 0.8777 0.0976 *MESH_VERTEXNORMAL 454 -0.4691 0.8777 0.0976 *MESH_VERTEXNORMAL 439 -0.4691 0.8777 0.0976 *MESH_FACENORMAL 474 -0.0464 0.0869 0.9951 *MESH_VERTEXNORMAL 432 -0.0464 0.0869 0.9951 *MESH_VERTEXNORMAL 296 -0.0464 0.0869 0.9951 *MESH_VERTEXNORMAL 447 -0.0464 0.0869 0.9951 *MESH_FACENORMAL 475 -0.0464 0.0869 -0.9951 *MESH_VERTEXNORMAL 205 -0.0464 0.0869 -0.9951 *MESH_VERTEXNORMAL 446 -0.0464 0.0869 -0.9951 *MESH_VERTEXNORMAL 461 -0.0464 0.0869 -0.9951 *MESH_FACENORMAL 476 -0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 439 -0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 455 -0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 440 -0.4691 0.8777 -0.0976 *MESH_FACENORMAL 477 -0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 433 -0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 447 -0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 448 -0.1374 0.2571 0.9565 *MESH_FACENORMAL 478 -0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 440 -0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 456 -0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 441 -0.4513 0.8443 -0.2890 *MESH_FACENORMAL 479 -0.2230 0.4173 0.8810 *MESH_VERTEXNORMAL 434 -0.2231 0.4173 0.8810 *MESH_VERTEXNORMAL 448 -0.2231 0.4173 0.8810 *MESH_VERTEXNORMAL 449 -0.2231 0.4173 0.8810 *MESH_FACENORMAL 480 -0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 461 -0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 475 -0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 476 -0.0846 0.2790 -0.9565 *MESH_FACENORMAL 481 -0.2889 0.9524 0.0976 *MESH_VERTEXNORMAL 453 -0.2889 0.9524 0.0976 *MESH_VERTEXNORMAL 469 -0.2889 0.9524 0.0976 *MESH_VERTEXNORMAL 454 -0.2889 0.9524 0.0976 *MESH_FACENORMAL 482 -0.0286 0.0942 0.9951 *MESH_VERTEXNORMAL 447 -0.0286 0.0942 0.9951 *MESH_VERTEXNORMAL 296 -0.0286 0.0942 0.9951 *MESH_VERTEXNORMAL 462 -0.0286 0.0942 0.9951 *MESH_FACENORMAL 483 -0.0286 0.0942 -0.9951 *MESH_VERTEXNORMAL 205 -0.0286 0.0942 -0.9951 *MESH_VERTEXNORMAL 461 -0.0286 0.0942 -0.9951 *MESH_VERTEXNORMAL 476 -0.0286 0.0942 -0.9951 *MESH_FACENORMAL 484 -0.2889 0.9524 -0.0976 *MESH_VERTEXNORMAL 454 -0.2889 0.9524 -0.0976 *MESH_VERTEXNORMAL 470 -0.2889 0.9524 -0.0976 *MESH_VERTEXNORMAL 455 -0.2889 0.9524 -0.0976 *MESH_FACENORMAL 485 -0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 447 -0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 463 -0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 448 -0.0846 0.2790 0.9565 *MESH_FACENORMAL 486 -0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 455 -0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 471 -0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 456 -0.2779 0.9161 -0.2890 *MESH_FACENORMAL 487 -0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 448 -0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 464 -0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 449 -0.1374 0.4528 0.8810 *MESH_FACENORMAL 488 -0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 457 -0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 471 -0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 472 -0.2563 0.8448 -0.4696 *MESH_FACENORMAL 489 -0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 449 -0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 465 -0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 450 -0.1847 0.6088 0.7715 *MESH_FACENORMAL 490 -0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 457 -0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 473 -0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 458 -0.2248 0.7412 -0.6326 *MESH_FACENORMAL 491 -0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 451 -0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 465 -0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 466 -0.2248 0.7412 0.6326 *MESH_FACENORMAL 492 -0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 458 -0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 474 -0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 459 -0.1847 0.6088 -0.7715 *MESH_FACENORMAL 493 -0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 451 -0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 467 -0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 452 -0.2563 0.8448 0.4696 *MESH_FACENORMAL 494 -0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 459 -0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 475 -0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 460 -0.1374 0.4528 -0.8810 *MESH_FACENORMAL 495 -0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 453 -0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 467 -0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 468 -0.2779 0.9161 0.2890 *MESH_FACENORMAL 496 -0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 465 -0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 2 -0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 3 -0.0624 0.6332 0.7715 *MESH_FACENORMAL 497 -0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 472 -0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 479 -0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 473 -0.0759 0.7708 -0.6326 *MESH_FACENORMAL 498 -0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 466 -0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 3 -0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 4 -0.0759 0.7708 0.6326 *MESH_FACENORMAL 499 -0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 473 -0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 9 -0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 474 -0.0624 0.6332 -0.7715 *MESH_FACENORMAL 500 -0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 467 -0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 4 -0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 5 -0.0865 0.8786 0.4696 *MESH_FACENORMAL 501 -0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 474 -0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 480 -0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 475 -0.0464 0.4709 -0.8810 *MESH_FACENORMAL 502 -0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 468 -0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 5 -0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 6 -0.0938 0.9527 0.2890 *MESH_FACENORMAL 503 -0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 475 -0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 481 -0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 476 -0.0286 0.2902 -0.9565 *MESH_FACENORMAL 504 -0.0976 0.9904 0.0975 *MESH_VERTEXNORMAL 469 -0.0976 0.9904 0.0976 *MESH_VERTEXNORMAL 6 -0.0976 0.9904 0.0976 *MESH_VERTEXNORMAL 7 -0.0976 0.9904 0.0976 *MESH_FACENORMAL 505 -0.0097 0.0980 0.9951 *MESH_VERTEXNORMAL 462 -0.0097 0.0980 0.9951 *MESH_VERTEXNORMAL 296 -0.0097 0.0980 0.9951 *MESH_VERTEXNORMAL 0 -0.0097 0.0980 0.9951 *MESH_FACENORMAL 506 -0.0097 0.0980 -0.9951 *MESH_VERTEXNORMAL 205 -0.0097 0.0980 -0.9951 *MESH_VERTEXNORMAL 476 -0.0097 0.0980 -0.9951 *MESH_VERTEXNORMAL 481 -0.0097 0.0980 -0.9951 *MESH_FACENORMAL 507 -0.0976 0.9904 -0.0976 *MESH_VERTEXNORMAL 469 -0.0976 0.9904 -0.0975 *MESH_VERTEXNORMAL 8 -0.0976 0.9904 -0.0975 *MESH_VERTEXNORMAL 470 -0.0976 0.9904 -0.0975 *MESH_FACENORMAL 508 -0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 463 -0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 0 -0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 1 -0.0286 0.2902 0.9565 *MESH_FACENORMAL 509 -0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 470 -0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 477 -0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 471 -0.0938 0.9527 -0.2890 *MESH_FACENORMAL 510 -0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 464 -0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 1 -0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 2 -0.0464 0.4709 0.8810 *MESH_FACENORMAL 511 -0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 472 -0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 477 -0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 478 -0.0865 0.8786 -0.4696 *MESH_FACENORMAL 512 0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 477 0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 19 0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 20 0.0865 0.8786 -0.4696 *MESH_FACENORMAL 513 0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 2 0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 12 0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 13 0.0624 0.6332 0.7715 *MESH_FACENORMAL 514 0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 478 0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 20 0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 21 0.0759 0.7708 -0.6326 *MESH_FACENORMAL 515 0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 3 0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 13 0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 14 0.0759 0.7708 0.6326 *MESH_FACENORMAL 516 0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 479 0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 21 0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 22 0.0624 0.6332 -0.7715 *MESH_FACENORMAL 517 0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 4 0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 14 0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 15 0.0865 0.8786 0.4696 *MESH_FACENORMAL 518 0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 9 0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 22 0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 23 0.0464 0.4709 -0.8810 *MESH_FACENORMAL 519 0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 5 0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 15 0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 16 0.0938 0.9527 0.2890 *MESH_FACENORMAL 520 0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 480 0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 23 0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 24 0.0286 0.2902 -0.9565 *MESH_FACENORMAL 521 0.0975 0.9904 0.0976 *MESH_VERTEXNORMAL 6 0.0975 0.9904 0.0976 *MESH_VERTEXNORMAL 16 0.0975 0.9904 0.0976 *MESH_VERTEXNORMAL 17 0.0975 0.9904 0.0976 *MESH_FACENORMAL 522 0.0975 0.9904 -0.0975 *MESH_VERTEXNORMAL 7 0.0975 0.9904 -0.0975 *MESH_VERTEXNORMAL 17 0.0975 0.9904 -0.0975 *MESH_VERTEXNORMAL 18 0.0975 0.9904 -0.0975 *MESH_FACENORMAL 523 0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 0 0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 10 0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 11 0.0286 0.2902 0.9565 *MESH_FACENORMAL 524 0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 8 0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 18 0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 19 0.0938 0.9527 -0.2890 *MESH_FACENORMAL 525 0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 2 0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 1 0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 11 0.0464 0.4709 0.8810 *MESH_FACENORMAL 526 0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 19 0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 18 0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 33 0.2779 0.9161 -0.2890 *MESH_FACENORMAL 527 0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 11 0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 26 0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 27 0.1374 0.4528 0.8810 *MESH_FACENORMAL 528 0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 19 0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 34 0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 35 0.2563 0.8448 -0.4696 *MESH_FACENORMAL 529 0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 12 0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 27 0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 28 0.1847 0.6088 0.7715 *MESH_FACENORMAL 530 0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 21 0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 20 0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 35 0.2248 0.7412 -0.6326 *MESH_FACENORMAL 531 0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 13 0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 28 0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 29 0.2248 0.7412 0.6326 *MESH_FACENORMAL 532 0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 21 0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 36 0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 37 0.1847 0.6088 -0.7715 *MESH_FACENORMAL 533 0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 14 0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 29 0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 30 0.2563 0.8448 0.4696 *MESH_FACENORMAL 534 0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 22 0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 37 0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 38 0.1374 0.4528 -0.8810 *MESH_FACENORMAL 535 0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 15 0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 30 0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 31 0.2779 0.9161 0.2890 *MESH_FACENORMAL 536 0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 23 0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 38 0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 39 0.0846 0.2790 -0.9565 *MESH_FACENORMAL 537 0.2889 0.9524 0.0975 *MESH_VERTEXNORMAL 16 0.2889 0.9524 0.0975 *MESH_VERTEXNORMAL 31 0.2889 0.9524 0.0975 *MESH_VERTEXNORMAL 32 0.2889 0.9524 0.0975 *MESH_FACENORMAL 538 0.2889 0.9524 -0.0975 *MESH_VERTEXNORMAL 18 0.2889 0.9524 -0.0975 *MESH_VERTEXNORMAL 17 0.2889 0.9524 -0.0975 *MESH_VERTEXNORMAL 32 0.2889 0.9524 -0.0975 *MESH_FACENORMAL 539 0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 10 0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 25 0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 26 0.0846 0.2790 0.9565 *MESH_FACENORMAL 540 0.2230 0.4173 -0.8810 *MESH_VERTEXNORMAL 37 0.2231 0.4173 -0.8810 *MESH_VERTEXNORMAL 52 0.2231 0.4173 -0.8810 *MESH_VERTEXNORMAL 53 0.2231 0.4173 -0.8810 *MESH_FACENORMAL 541 0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 31 0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 30 0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 45 0.4513 0.8443 0.2890 *MESH_FACENORMAL 542 0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 38 0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 53 0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 54 0.1374 0.2571 -0.9565 *MESH_FACENORMAL 543 0.4691 0.8777 0.0976 *MESH_VERTEXNORMAL 31 0.4691 0.8777 0.0976 *MESH_VERTEXNORMAL 46 0.4691 0.8777 0.0976 *MESH_VERTEXNORMAL 47 0.4691 0.8777 0.0976 *MESH_FACENORMAL 544 0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 32 0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 47 0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 48 0.4691 0.8777 -0.0976 *MESH_FACENORMAL 545 0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 25 0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 40 0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 41 0.1374 0.2571 0.9565 *MESH_FACENORMAL 546 0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 33 0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 48 0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 49 0.4513 0.8443 -0.2890 *MESH_FACENORMAL 547 0.2230 0.4173 0.8810 *MESH_VERTEXNORMAL 26 0.2231 0.4173 0.8810 *MESH_VERTEXNORMAL 41 0.2231 0.4173 0.8810 *MESH_VERTEXNORMAL 42 0.2231 0.4173 0.8810 *MESH_FACENORMAL 548 0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 35 0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 34 0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 49 0.4162 0.7786 -0.4696 *MESH_FACENORMAL 549 0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 27 0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 42 0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 43 0.2999 0.5611 0.7715 *MESH_FACENORMAL 550 0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 36 0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 35 0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 50 0.3651 0.6831 -0.6326 *MESH_FACENORMAL 551 0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 28 0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 43 0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 44 0.3651 0.6831 0.6326 *MESH_FACENORMAL 552 0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 36 0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 51 0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 52 0.2999 0.5611 -0.7715 *MESH_FACENORMAL 553 0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 29 0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 44 0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 45 0.4162 0.7786 0.4696 *MESH_FACENORMAL 554 0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 41 0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 56 0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 57 0.3002 0.3658 0.8810 *MESH_FACENORMAL 555 0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 50 0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 49 0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 64 0.5601 0.6825 -0.4696 *MESH_FACENORMAL 556 0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 42 0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 57 0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 58 0.4036 0.4918 0.7715 *MESH_FACENORMAL 557 0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 50 0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 65 0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 66 0.4913 0.5987 -0.6326 *MESH_FACENORMAL 558 0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 43 0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 58 0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 59 0.4913 0.5987 0.6326 *MESH_FACENORMAL 559 0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 51 0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 66 0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 67 0.4036 0.4918 -0.7715 *MESH_FACENORMAL 560 0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 44 0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 59 0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 60 0.5601 0.6825 0.4696 *MESH_FACENORMAL 561 0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 52 0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 67 0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 68 0.3002 0.3658 -0.8810 *MESH_FACENORMAL 562 0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 45 0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 60 0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 61 0.6073 0.7400 0.2890 *MESH_FACENORMAL 563 0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 53 0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 68 0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 69 0.1850 0.2254 -0.9565 *MESH_FACENORMAL 564 0.6314 0.7693 0.0976 *MESH_VERTEXNORMAL 47 0.6314 0.7693 0.0976 *MESH_VERTEXNORMAL 46 0.6314 0.7693 0.0976 *MESH_VERTEXNORMAL 61 0.6314 0.7693 0.0976 *MESH_FACENORMAL 565 0.6314 0.7693 -0.0975 *MESH_VERTEXNORMAL 47 0.6314 0.7693 -0.0975 *MESH_VERTEXNORMAL 62 0.6314 0.7693 -0.0975 *MESH_VERTEXNORMAL 63 0.6314 0.7693 -0.0975 *MESH_FACENORMAL 566 0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 40 0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 55 0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 56 0.1850 0.2254 0.9565 *MESH_FACENORMAL 567 0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 48 0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 63 0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 64 0.6073 0.7400 -0.2890 *MESH_FACENORMAL 568 0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 60 0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 75 0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 76 0.7400 0.6073 0.2890 *MESH_FACENORMAL 569 0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 68 0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 83 0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 84 0.2254 0.1850 -0.9565 *MESH_FACENORMAL 570 0.7693 0.6314 0.0975 *MESH_VERTEXNORMAL 62 0.7693 0.6314 0.0975 *MESH_VERTEXNORMAL 61 0.7693 0.6314 0.0975 *MESH_VERTEXNORMAL 76 0.7693 0.6314 0.0975 *MESH_FACENORMAL 571 0.7693 0.6314 -0.0976 *MESH_VERTEXNORMAL 62 0.7693 0.6314 -0.0976 *MESH_VERTEXNORMAL 77 0.7693 0.6314 -0.0976 *MESH_VERTEXNORMAL 78 0.7693 0.6314 -0.0976 *MESH_FACENORMAL 572 0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 55 0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 70 0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 71 0.2254 0.1850 0.9565 *MESH_FACENORMAL 573 0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 63 0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 78 0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 79 0.7400 0.6073 -0.2890 *MESH_FACENORMAL 574 0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 56 0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 71 0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 72 0.3658 0.3002 0.8810 *MESH_FACENORMAL 575 0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 65 0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 64 0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 79 0.6825 0.5601 -0.4696 *MESH_FACENORMAL 576 0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 57 0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 72 0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 73 0.4918 0.4036 0.7715 *MESH_FACENORMAL 577 0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 65 0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 80 0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 81 0.5987 0.4913 -0.6326 *MESH_FACENORMAL 578 0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 59 0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 58 0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 73 0.5987 0.4913 0.6326 *MESH_FACENORMAL 579 0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 67 0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 66 0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 81 0.4918 0.4036 -0.7715 *MESH_FACENORMAL 580 0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 59 0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 74 0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 75 0.6825 0.5601 0.4696 *MESH_FACENORMAL 581 0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 68 0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 67 0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 82 0.3658 0.3002 -0.8810 *MESH_FACENORMAL 582 0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 80 0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 79 0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 94 0.7786 0.4162 -0.4696 *MESH_FACENORMAL 583 0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 72 0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 87 0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 88 0.5611 0.2999 0.7715 *MESH_FACENORMAL 584 0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 81 0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 80 0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 95 0.6831 0.3651 -0.6326 *MESH_FACENORMAL 585 0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 74 0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 73 0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 88 0.6831 0.3651 0.6326 *MESH_FACENORMAL 586 0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 81 0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 96 0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 97 0.5611 0.2999 -0.7715 *MESH_FACENORMAL 587 0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 74 0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 89 0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 90 0.7786 0.4162 0.4696 *MESH_FACENORMAL 588 0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 83 0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 82 0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 97 0.4173 0.2230 -0.8810 *MESH_FACENORMAL 589 0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 76 0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 75 0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 90 0.8443 0.4513 0.2890 *MESH_FACENORMAL 590 0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 83 0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 98 0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 99 0.2571 0.1374 -0.9565 *MESH_FACENORMAL 591 0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 76 0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 91 0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 92 0.8777 0.4691 0.0976 *MESH_FACENORMAL 592 0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 77 0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 92 0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 93 0.8777 0.4691 -0.0976 *MESH_FACENORMAL 593 0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 70 0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 85 0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 86 0.2571 0.1374 0.9565 *MESH_FACENORMAL 594 0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 78 0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 93 0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 94 0.8443 0.4513 -0.2890 *MESH_FACENORMAL 595 0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 71 0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 86 0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 87 0.4173 0.2230 0.8810 *MESH_FACENORMAL 596 0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 99 0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 98 0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 113 0.2790 0.0846 -0.9565 *MESH_FACENORMAL 597 0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 91 0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 106 0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 107 0.9524 0.2889 0.0976 *MESH_FACENORMAL 598 0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 92 0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 107 0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 108 0.9524 0.2889 -0.0976 *MESH_FACENORMAL 599 0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 85 0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 100 0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 101 0.2790 0.0846 0.9565 *MESH_FACENORMAL 600 0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 93 0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 108 0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 109 0.9161 0.2779 -0.2890 *MESH_FACENORMAL 601 0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 86 0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 101 0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 102 0.4528 0.1374 0.8810 *MESH_FACENORMAL 602 0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 95 0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 94 0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 109 0.8448 0.2563 -0.4696 *MESH_FACENORMAL 603 0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 88 0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 87 0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 102 0.6088 0.1847 0.7715 *MESH_FACENORMAL 604 0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 96 0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 95 0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 110 0.7412 0.2248 -0.6326 *MESH_FACENORMAL 605 0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 88 0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 103 0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 104 0.7412 0.2248 0.6326 *MESH_FACENORMAL 606 0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 96 0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 111 0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 112 0.6088 0.1847 -0.7715 *MESH_FACENORMAL 607 0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 89 0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 104 0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 105 0.8448 0.2563 0.4696 *MESH_FACENORMAL 608 0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 97 0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 112 0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 113 0.4528 0.1374 -0.8810 *MESH_FACENORMAL 609 0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 91 0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 90 0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 105 0.9161 0.2779 0.2890 *MESH_FACENORMAL 610 0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 110 0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 125 0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 126 0.7708 0.0759 -0.6326 *MESH_FACENORMAL 611 0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 103 0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 118 0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 119 0.7708 0.0759 0.6326 *MESH_FACENORMAL 612 0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 112 0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 111 0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 126 0.6332 0.0624 -0.7715 *MESH_FACENORMAL 613 0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 104 0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 119 0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 120 0.8786 0.0865 0.4696 *MESH_FACENORMAL 614 0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 113 0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 112 0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 127 0.4709 0.0464 -0.8810 *MESH_FACENORMAL 615 0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 106 0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 105 0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 120 0.9527 0.0938 0.2890 *MESH_FACENORMAL 616 0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 114 0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 113 0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 128 0.2902 0.0286 -0.9565 *MESH_FACENORMAL 617 0.9904 0.0975 0.0976 *MESH_VERTEXNORMAL 106 0.9904 0.0975 0.0976 *MESH_VERTEXNORMAL 121 0.9904 0.0975 0.0976 *MESH_VERTEXNORMAL 122 0.9904 0.0975 0.0976 *MESH_FACENORMAL 618 0.9904 0.0975 -0.0976 *MESH_VERTEXNORMAL 108 0.9904 0.0975 -0.0976 *MESH_VERTEXNORMAL 107 0.9904 0.0975 -0.0976 *MESH_VERTEXNORMAL 122 0.9904 0.0975 -0.0976 *MESH_FACENORMAL 619 0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 100 0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 115 0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 116 0.2902 0.0286 0.9565 *MESH_FACENORMAL 620 0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 108 0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 123 0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 124 0.9527 0.0938 -0.2890 *MESH_FACENORMAL 621 0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 101 0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 116 0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 117 0.4709 0.0464 0.8810 *MESH_FACENORMAL 622 0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 110 0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 109 0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 124 0.8786 0.0865 -0.4696 *MESH_FACENORMAL 623 0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 102 0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 117 0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 118 0.6332 0.0624 0.7715 *MESH_FACENORMAL 624 0.9904 -0.0975 -0.0976 *MESH_VERTEXNORMAL 122 0.9904 -0.0976 -0.0976 *MESH_VERTEXNORMAL 137 0.9904 -0.0976 -0.0976 *MESH_VERTEXNORMAL 138 0.9904 -0.0976 -0.0976 *MESH_FACENORMAL 625 0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 116 0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 115 0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 130 0.2902 -0.0286 0.9565 *MESH_FACENORMAL 626 0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 123 0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 138 0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 139 0.9527 -0.0938 -0.2890 *MESH_FACENORMAL 627 0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 116 0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 131 0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 132 0.4709 -0.0464 0.8810 *MESH_FACENORMAL 628 0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 125 0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 124 0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 139 0.8786 -0.0865 -0.4696 *MESH_FACENORMAL 629 0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 117 0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 132 0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 133 0.6332 -0.0624 0.7715 *MESH_FACENORMAL 630 0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 125 0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 140 0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 141 0.7708 -0.0759 -0.6326 *MESH_FACENORMAL 631 0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 119 0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 118 0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 133 0.7708 -0.0759 0.6326 *MESH_FACENORMAL 632 0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 127 0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 126 0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 141 0.6332 -0.0624 -0.7715 *MESH_FACENORMAL 633 0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 119 0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 134 0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 135 0.8786 -0.0865 0.4696 *MESH_FACENORMAL 634 0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 127 0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 142 0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 143 0.4709 -0.0464 -0.8810 *MESH_FACENORMAL 635 0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 121 0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 120 0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 135 0.9527 -0.0938 0.2890 *MESH_FACENORMAL 636 0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 129 0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 128 0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 143 0.2902 -0.0286 -0.9565 *MESH_FACENORMAL 637 0.9904 -0.0976 0.0976 *MESH_VERTEXNORMAL 121 0.9904 -0.0976 0.0976 *MESH_VERTEXNORMAL 136 0.9904 -0.0976 0.0976 *MESH_VERTEXNORMAL 137 0.9904 -0.0976 0.0976 *MESH_FACENORMAL 638 0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 133 0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 148 0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 149 0.7412 -0.2248 0.6326 *MESH_FACENORMAL 639 0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 141 0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 156 0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 157 0.6088 -0.1847 -0.7715 *MESH_FACENORMAL 640 0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 134 0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 149 0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 150 0.8448 -0.2563 0.4696 *MESH_FACENORMAL 641 0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 143 0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 142 0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 157 0.4528 -0.1374 -0.8810 *MESH_FACENORMAL 642 0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 136 0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 135 0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 150 0.9161 -0.2779 0.2890 *MESH_FACENORMAL 643 0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 143 0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 158 0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 159 0.2790 -0.0846 -0.9565 *MESH_FACENORMAL 644 0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 136 0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 151 0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 152 0.9524 -0.2889 0.0976 *MESH_FACENORMAL 645 0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 137 0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 152 0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 153 0.9524 -0.2889 -0.0976 *MESH_FACENORMAL 646 0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 130 0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 145 0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 146 0.2790 -0.0846 0.9565 *MESH_FACENORMAL 647 0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 138 0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 153 0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 154 0.9161 -0.2779 -0.2890 *MESH_FACENORMAL 648 0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 132 0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 131 0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 146 0.4528 -0.1374 0.8810 *MESH_FACENORMAL 649 0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 140 0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 139 0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 154 0.8448 -0.2563 -0.4696 *MESH_FACENORMAL 650 0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 132 0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 147 0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 148 0.6088 -0.1847 0.7715 *MESH_FACENORMAL 651 0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 140 0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 155 0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 156 0.7412 -0.2248 -0.6326 *MESH_FACENORMAL 652 0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 153 0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 152 0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 167 0.8777 -0.4691 -0.0976 *MESH_FACENORMAL 653 0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 145 0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 160 0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 161 0.2571 -0.1374 0.9565 *MESH_FACENORMAL 654 0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 153 0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 168 0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 169 0.8443 -0.4513 -0.2890 *MESH_FACENORMAL 655 0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 146 0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 161 0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 162 0.4173 -0.2230 0.8810 *MESH_FACENORMAL 656 0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 155 0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 154 0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 169 0.7786 -0.4162 -0.4696 *MESH_FACENORMAL 657 0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 147 0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 162 0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 163 0.5611 -0.2999 0.7715 *MESH_FACENORMAL 658 0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 155 0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 170 0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 171 0.6831 -0.3651 -0.6326 *MESH_FACENORMAL 659 0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 149 0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 148 0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 163 0.6831 -0.3651 0.6326 *MESH_FACENORMAL 660 0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 157 0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 156 0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 171 0.5611 -0.2999 -0.7715 *MESH_FACENORMAL 661 0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 149 0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 164 0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 165 0.7786 -0.4162 0.4696 *MESH_FACENORMAL 662 0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 157 0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 172 0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 173 0.4173 -0.2230 -0.8810 *MESH_FACENORMAL 663 0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 151 0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 150 0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 165 0.8443 -0.4513 0.2890 *MESH_FACENORMAL 664 0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 158 0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 173 0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 174 0.2571 -0.1374 -0.9565 *MESH_FACENORMAL 665 0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 151 0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 166 0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 167 0.8777 -0.4691 0.0976 *MESH_FACENORMAL 666 0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 172 0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 171 0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 186 0.4918 -0.4036 -0.7715 *MESH_FACENORMAL 667 0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 164 0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 179 0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 180 0.6825 -0.5601 0.4696 *MESH_FACENORMAL 668 0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 172 0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 187 0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 188 0.3658 -0.3002 -0.8810 *MESH_FACENORMAL 669 0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 166 0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 165 0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 180 0.7400 -0.6073 0.2890 *MESH_FACENORMAL 670 0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 174 0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 173 0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 188 0.2254 -0.1850 -0.9565 *MESH_FACENORMAL 671 0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 166 0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 181 0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 182 0.7693 -0.6314 0.0976 *MESH_FACENORMAL 672 0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 167 0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 182 0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 183 0.7693 -0.6314 -0.0976 *MESH_FACENORMAL 673 0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 160 0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 175 0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 176 0.2254 -0.1850 0.9565 *MESH_FACENORMAL 674 0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 168 0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 183 0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 184 0.7400 -0.6073 -0.2890 *MESH_FACENORMAL 675 0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 161 0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 176 0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 177 0.3658 -0.3002 0.8810 *MESH_FACENORMAL 676 0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 169 0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 184 0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 185 0.6825 -0.5601 -0.4696 *MESH_FACENORMAL 677 0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 162 0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 177 0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 178 0.4918 -0.4036 0.7715 *MESH_FACENORMAL 678 0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 170 0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 185 0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 186 0.5987 -0.4913 -0.6326 *MESH_FACENORMAL 679 0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 163 0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 178 0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 179 0.5987 -0.4913 0.6326 *MESH_FACENORMAL 680 0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 175 0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 190 0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 191 0.1850 -0.2254 0.9565 *MESH_FACENORMAL 681 0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 183 0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 198 0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 199 0.6073 -0.7400 -0.2890 *MESH_FACENORMAL 682 0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 176 0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 191 0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 192 0.3002 -0.3658 0.8810 *MESH_FACENORMAL 683 0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 185 0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 184 0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 199 0.5601 -0.6825 -0.4696 *MESH_FACENORMAL 684 0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 178 0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 177 0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 192 0.4036 -0.4918 0.7715 *MESH_FACENORMAL 685 0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 185 0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 200 0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 201 0.4913 -0.5987 -0.6326 *MESH_FACENORMAL 686 0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 179 0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 178 0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 193 0.4913 -0.5987 0.6326 *MESH_FACENORMAL 687 0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 187 0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 186 0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 201 0.4036 -0.4918 -0.7715 *MESH_FACENORMAL 688 0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 179 0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 194 0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 195 0.5601 -0.6825 0.4696 *MESH_FACENORMAL 689 0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 187 0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 202 0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 203 0.3002 -0.3658 -0.8810 *MESH_FACENORMAL 690 0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 181 0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 180 0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 195 0.6073 -0.7400 0.2890 *MESH_FACENORMAL 691 0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 189 0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 188 0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 203 0.1850 -0.2254 -0.9565 *MESH_FACENORMAL 692 0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 181 0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 196 0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 197 0.6314 -0.7693 0.0976 *MESH_FACENORMAL 693 0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 183 0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 182 0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 197 0.6314 -0.7693 -0.0976 *MESH_FACENORMAL 694 0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 194 0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 210 0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 211 0.4162 -0.7786 0.4696 *MESH_FACENORMAL 695 0.2230 -0.4173 -0.8810 *MESH_VERTEXNORMAL 202 0.2230 -0.4173 -0.8810 *MESH_VERTEXNORMAL 218 0.2230 -0.4173 -0.8810 *MESH_VERTEXNORMAL 219 0.2230 -0.4173 -0.8810 *MESH_FACENORMAL 696 0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 196 0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 195 0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 211 0.4513 -0.8443 0.2890 *MESH_FACENORMAL 697 0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 203 0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 219 0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 220 0.1374 -0.2571 -0.9565 *MESH_FACENORMAL 698 0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 196 0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 212 0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 213 0.4691 -0.8777 0.0976 *MESH_FACENORMAL 699 0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 197 0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 213 0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 214 0.4691 -0.8777 -0.0976 *MESH_FACENORMAL 700 0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 190 0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 206 0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 207 0.1374 -0.2571 0.9565 *MESH_FACENORMAL 701 0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 198 0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 214 0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 215 0.4513 -0.8443 -0.2890 *MESH_FACENORMAL 702 0.2230 -0.4173 0.8810 *MESH_VERTEXNORMAL 192 0.2231 -0.4173 0.8810 *MESH_VERTEXNORMAL 191 0.2231 -0.4173 0.8810 *MESH_VERTEXNORMAL 207 0.2231 -0.4173 0.8810 *MESH_FACENORMAL 703 0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 200 0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 199 0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 215 0.4162 -0.7786 -0.4696 *MESH_FACENORMAL 704 0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 192 0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 208 0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 209 0.2999 -0.5611 0.7715 *MESH_FACENORMAL 705 0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 200 0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 216 0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 217 0.3651 -0.6831 -0.6326 *MESH_FACENORMAL 706 0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 193 0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 209 0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 210 0.3651 -0.6831 0.6326 *MESH_FACENORMAL 707 0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 202 0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 201 0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 217 0.2999 -0.5611 -0.7715 *MESH_FACENORMAL 708 0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 214 0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 229 0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 230 0.2779 -0.9161 -0.2890 *MESH_FACENORMAL 709 0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 207 0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 222 0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 223 0.1374 -0.4528 0.8810 *MESH_FACENORMAL 710 0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 216 0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 215 0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 230 0.2563 -0.8448 -0.4696 *MESH_FACENORMAL 711 0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 208 0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 223 0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 224 0.1847 -0.6088 0.7715 *MESH_FACENORMAL 712 0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 216 0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 231 0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 232 0.2248 -0.7412 -0.6326 *MESH_FACENORMAL 713 0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 209 0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 224 0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 225 0.2248 -0.7412 0.6326 *MESH_FACENORMAL 714 0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 217 0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 232 0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 233 0.1847 -0.6088 -0.7715 *MESH_FACENORMAL 715 0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 210 0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 225 0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 226 0.2563 -0.8448 0.4696 *MESH_FACENORMAL 716 0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 218 0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 233 0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 234 0.1374 -0.4528 -0.8810 *MESH_FACENORMAL 717 0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 212 0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 211 0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 226 0.2779 -0.9161 0.2890 *MESH_FACENORMAL 718 0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 220 0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 219 0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 234 0.0846 -0.2790 -0.9565 *MESH_FACENORMAL 719 0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 212 0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 227 0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 228 0.2889 -0.9524 0.0976 *MESH_FACENORMAL 720 0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 213 0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 228 0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 229 0.2889 -0.9524 -0.0976 *MESH_FACENORMAL 721 0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 206 0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 221 0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 222 0.0846 -0.2790 0.9565 *MESH_FACENORMAL 722 0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 233 0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 248 0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 249 0.0464 -0.4709 -0.8810 *MESH_FACENORMAL 723 0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 227 0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 226 0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 241 0.0938 -0.9527 0.2890 *MESH_FACENORMAL 724 0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 235 0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 234 0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 249 0.0286 -0.2902 -0.9565 *MESH_FACENORMAL 725 0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 227 0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 242 0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 243 0.0975 -0.9904 0.0976 *MESH_FACENORMAL 726 0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 228 0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 243 0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 244 0.0975 -0.9904 -0.0976 *MESH_FACENORMAL 727 0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 221 0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 236 0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 237 0.0286 -0.2902 0.9565 *MESH_FACENORMAL 728 0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 229 0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 244 0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 245 0.0938 -0.9527 -0.2890 *MESH_FACENORMAL 729 0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 223 0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 222 0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 237 0.0464 -0.4709 0.8810 *MESH_FACENORMAL 730 0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 231 0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 230 0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 245 0.0865 -0.8786 -0.4696 *MESH_FACENORMAL 731 0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 224 0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 223 0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 238 0.0624 -0.6332 0.7715 *MESH_FACENORMAL 732 0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 231 0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 246 0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 247 0.0759 -0.7708 -0.6326 *MESH_FACENORMAL 733 0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 224 0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 239 0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 240 0.0759 -0.7708 0.6326 *MESH_FACENORMAL 734 0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 233 0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 232 0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 247 0.0624 -0.6332 -0.7715 *MESH_FACENORMAL 735 0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 225 0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 240 0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 241 0.0865 -0.8786 0.4696 *MESH_FACENORMAL 736 -0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 246 -0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 245 -0.0865 -0.8786 -0.4696 *MESH_VERTEXNORMAL 260 -0.0865 -0.8786 -0.4696 *MESH_FACENORMAL 737 -0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 239 -0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 238 -0.0624 -0.6332 0.7715 *MESH_VERTEXNORMAL 253 -0.0624 -0.6332 0.7715 *MESH_FACENORMAL 738 -0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 246 -0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 261 -0.0759 -0.7708 -0.6326 *MESH_VERTEXNORMAL 262 -0.0759 -0.7708 -0.6326 *MESH_FACENORMAL 739 -0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 240 -0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 239 -0.0759 -0.7708 0.6326 *MESH_VERTEXNORMAL 254 -0.0759 -0.7708 0.6326 *MESH_FACENORMAL 740 -0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 247 -0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 262 -0.0624 -0.6332 -0.7715 *MESH_VERTEXNORMAL 263 -0.0624 -0.6332 -0.7715 *MESH_FACENORMAL 741 -0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 240 -0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 255 -0.0865 -0.8786 0.4696 *MESH_VERTEXNORMAL 256 -0.0865 -0.8786 0.4696 *MESH_FACENORMAL 742 -0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 248 -0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 263 -0.0464 -0.4709 -0.8810 *MESH_VERTEXNORMAL 264 -0.0464 -0.4709 -0.8810 *MESH_FACENORMAL 743 -0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 242 -0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 241 -0.0938 -0.9527 0.2890 *MESH_VERTEXNORMAL 256 -0.0938 -0.9527 0.2890 *MESH_FACENORMAL 744 -0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 249 -0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 264 -0.0286 -0.2902 -0.9565 *MESH_VERTEXNORMAL 265 -0.0286 -0.2902 -0.9565 *MESH_FACENORMAL 745 -0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 242 -0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 257 -0.0975 -0.9904 0.0976 *MESH_VERTEXNORMAL 258 -0.0975 -0.9904 0.0976 *MESH_FACENORMAL 746 -0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 243 -0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 258 -0.0975 -0.9904 -0.0976 *MESH_VERTEXNORMAL 259 -0.0975 -0.9904 -0.0976 *MESH_FACENORMAL 747 -0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 236 -0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 251 -0.0286 -0.2902 0.9565 *MESH_VERTEXNORMAL 252 -0.0286 -0.2902 0.9565 *MESH_FACENORMAL 748 -0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 244 -0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 259 -0.0938 -0.9527 -0.2890 *MESH_VERTEXNORMAL 260 -0.0938 -0.9527 -0.2890 *MESH_FACENORMAL 749 -0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 237 -0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 252 -0.0464 -0.4709 0.8810 *MESH_VERTEXNORMAL 253 -0.0464 -0.4709 0.8810 *MESH_FACENORMAL 750 -0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 265 -0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 264 -0.0846 -0.2790 -0.9565 *MESH_VERTEXNORMAL 279 -0.0846 -0.2790 -0.9565 *MESH_FACENORMAL 751 -0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 257 -0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 272 -0.2889 -0.9524 0.0976 *MESH_VERTEXNORMAL 273 -0.2889 -0.9524 0.0976 *MESH_FACENORMAL 752 -0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 259 -0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 258 -0.2889 -0.9524 -0.0976 *MESH_VERTEXNORMAL 273 -0.2889 -0.9524 -0.0976 *MESH_FACENORMAL 753 -0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 251 -0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 266 -0.0846 -0.2790 0.9565 *MESH_VERTEXNORMAL 267 -0.0846 -0.2790 0.9565 *MESH_FACENORMAL 754 -0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 259 -0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 274 -0.2779 -0.9161 -0.2890 *MESH_VERTEXNORMAL 275 -0.2779 -0.9161 -0.2890 *MESH_FACENORMAL 755 -0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 252 -0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 267 -0.1374 -0.4528 0.8810 *MESH_VERTEXNORMAL 268 -0.1374 -0.4528 0.8810 *MESH_FACENORMAL 756 -0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 261 -0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 260 -0.2563 -0.8448 -0.4696 *MESH_VERTEXNORMAL 275 -0.2563 -0.8448 -0.4696 *MESH_FACENORMAL 757 -0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 254 -0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 253 -0.1847 -0.6088 0.7715 *MESH_VERTEXNORMAL 268 -0.1847 -0.6088 0.7715 *MESH_FACENORMAL 758 -0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 261 -0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 276 -0.2248 -0.7412 -0.6326 *MESH_VERTEXNORMAL 277 -0.2248 -0.7412 -0.6326 *MESH_FACENORMAL 759 -0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 255 -0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 254 -0.2248 -0.7412 0.6326 *MESH_VERTEXNORMAL 269 -0.2248 -0.7412 0.6326 *MESH_FACENORMAL 760 -0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 262 -0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 277 -0.1847 -0.6088 -0.7715 *MESH_VERTEXNORMAL 278 -0.1847 -0.6088 -0.7715 *MESH_FACENORMAL 761 -0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 255 -0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 270 -0.2563 -0.8448 0.4696 *MESH_VERTEXNORMAL 271 -0.2563 -0.8448 0.4696 *MESH_FACENORMAL 762 -0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 264 -0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 263 -0.1374 -0.4528 -0.8810 *MESH_VERTEXNORMAL 278 -0.1374 -0.4528 -0.8810 *MESH_FACENORMAL 763 -0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 257 -0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 256 -0.2779 -0.9161 0.2890 *MESH_VERTEXNORMAL 271 -0.2779 -0.9161 0.2890 *MESH_FACENORMAL 764 -0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 268 -0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 283 -0.2999 -0.5611 0.7715 *MESH_VERTEXNORMAL 284 -0.2999 -0.5611 0.7715 *MESH_FACENORMAL 765 -0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 276 -0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 291 -0.3651 -0.6831 -0.6326 *MESH_VERTEXNORMAL 292 -0.3651 -0.6831 -0.6326 *MESH_FACENORMAL 766 -0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 270 -0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 269 -0.3651 -0.6831 0.6326 *MESH_VERTEXNORMAL 284 -0.3651 -0.6831 0.6326 *MESH_FACENORMAL 767 -0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 278 -0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 277 -0.2999 -0.5611 -0.7715 *MESH_VERTEXNORMAL 292 -0.2999 -0.5611 -0.7715 *MESH_FACENORMAL 768 -0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 270 -0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 285 -0.4162 -0.7786 0.4696 *MESH_VERTEXNORMAL 286 -0.4162 -0.7786 0.4696 *MESH_FACENORMAL 769 -0.2230 -0.4173 -0.8810 *MESH_VERTEXNORMAL 278 -0.2231 -0.4173 -0.8810 *MESH_VERTEXNORMAL 293 -0.2231 -0.4173 -0.8810 *MESH_VERTEXNORMAL 294 -0.2231 -0.4173 -0.8810 *MESH_FACENORMAL 770 -0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 272 -0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 271 -0.4513 -0.8443 0.2890 *MESH_VERTEXNORMAL 286 -0.4513 -0.8443 0.2890 *MESH_FACENORMAL 771 -0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 280 -0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 279 -0.1374 -0.2571 -0.9565 *MESH_VERTEXNORMAL 294 -0.1374 -0.2571 -0.9565 *MESH_FACENORMAL 772 -0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 272 -0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 287 -0.4691 -0.8777 0.0976 *MESH_VERTEXNORMAL 288 -0.4691 -0.8777 0.0976 *MESH_FACENORMAL 773 -0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 273 -0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 288 -0.4691 -0.8777 -0.0976 *MESH_VERTEXNORMAL 289 -0.4691 -0.8777 -0.0976 *MESH_FACENORMAL 774 -0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 266 -0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 281 -0.1374 -0.2571 0.9565 *MESH_VERTEXNORMAL 282 -0.1374 -0.2571 0.9565 *MESH_FACENORMAL 775 -0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 274 -0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 289 -0.4513 -0.8443 -0.2890 *MESH_VERTEXNORMAL 290 -0.4513 -0.8443 -0.2890 *MESH_FACENORMAL 776 -0.2230 -0.4173 0.8810 *MESH_VERTEXNORMAL 267 -0.2230 -0.4173 0.8810 *MESH_VERTEXNORMAL 282 -0.2230 -0.4173 0.8810 *MESH_VERTEXNORMAL 283 -0.2230 -0.4173 0.8810 *MESH_FACENORMAL 777 -0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 276 -0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 275 -0.4162 -0.7786 -0.4696 *MESH_VERTEXNORMAL 290 -0.4162 -0.7786 -0.4696 *MESH_FACENORMAL 778 -0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 288 -0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 287 -0.6314 -0.7693 0.0976 *MESH_VERTEXNORMAL 303 -0.6314 -0.7693 0.0976 *MESH_FACENORMAL 779 -0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 288 -0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 304 -0.6314 -0.7693 -0.0976 *MESH_VERTEXNORMAL 305 -0.6314 -0.7693 -0.0976 *MESH_FACENORMAL 780 -0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 281 -0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 297 -0.1850 -0.2254 0.9565 *MESH_VERTEXNORMAL 298 -0.1850 -0.2254 0.9565 *MESH_FACENORMAL 781 -0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 289 -0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 305 -0.6073 -0.7400 -0.2890 *MESH_VERTEXNORMAL 306 -0.6073 -0.7400 -0.2890 *MESH_FACENORMAL 782 -0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 282 -0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 298 -0.3002 -0.3658 0.8810 *MESH_VERTEXNORMAL 299 -0.3002 -0.3658 0.8810 *MESH_FACENORMAL 783 -0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 291 -0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 290 -0.5601 -0.6825 -0.4696 *MESH_VERTEXNORMAL 306 -0.5601 -0.6825 -0.4696 *MESH_FACENORMAL 784 -0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 284 -0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 283 -0.4036 -0.4918 0.7715 *MESH_VERTEXNORMAL 299 -0.4036 -0.4918 0.7715 *MESH_FACENORMAL 785 -0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 291 -0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 307 -0.4913 -0.5987 -0.6326 *MESH_VERTEXNORMAL 308 -0.4913 -0.5987 -0.6326 *MESH_FACENORMAL 786 -0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 285 -0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 284 -0.4913 -0.5987 0.6326 *MESH_VERTEXNORMAL 300 -0.4913 -0.5987 0.6326 *MESH_FACENORMAL 787 -0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 292 -0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 308 -0.4036 -0.4918 -0.7715 *MESH_VERTEXNORMAL 309 -0.4036 -0.4918 -0.7715 *MESH_FACENORMAL 788 -0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 285 -0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 301 -0.5601 -0.6825 0.4696 *MESH_VERTEXNORMAL 302 -0.5601 -0.6825 0.4696 *MESH_FACENORMAL 789 -0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 293 -0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 309 -0.3002 -0.3658 -0.8810 *MESH_VERTEXNORMAL 310 -0.3002 -0.3658 -0.8810 *MESH_FACENORMAL 790 -0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 287 -0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 286 -0.6073 -0.7400 0.2890 *MESH_VERTEXNORMAL 302 -0.6073 -0.7400 0.2890 *MESH_FACENORMAL 791 -0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 294 -0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 310 -0.1850 -0.2254 -0.9565 *MESH_VERTEXNORMAL 311 -0.1850 -0.2254 -0.9565 *MESH_FACENORMAL 792 -0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 307 -0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 322 -0.5987 -0.4913 -0.6326 *MESH_VERTEXNORMAL 323 -0.5987 -0.4913 -0.6326 *MESH_FACENORMAL 793 -0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 301 -0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 300 -0.5987 -0.4913 0.6326 *MESH_VERTEXNORMAL 315 -0.5987 -0.4913 0.6326 *MESH_FACENORMAL 794 -0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 308 -0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 323 -0.4918 -0.4036 -0.7715 *MESH_VERTEXNORMAL 324 -0.4918 -0.4036 -0.7715 *MESH_FACENORMAL 795 -0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 301 -0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 316 -0.6825 -0.5601 0.4696 *MESH_VERTEXNORMAL 317 -0.6825 -0.5601 0.4696 *MESH_FACENORMAL 796 -0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 310 -0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 309 -0.3658 -0.3002 -0.8810 *MESH_VERTEXNORMAL 324 -0.3658 -0.3002 -0.8810 *MESH_FACENORMAL 797 -0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 303 -0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 302 -0.7400 -0.6073 0.2890 *MESH_VERTEXNORMAL 317 -0.7400 -0.6073 0.2890 *MESH_FACENORMAL 798 -0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 310 -0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 325 -0.2254 -0.1850 -0.9565 *MESH_VERTEXNORMAL 326 -0.2254 -0.1850 -0.9565 *MESH_FACENORMAL 799 -0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 303 -0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 318 -0.7693 -0.6314 0.0976 *MESH_VERTEXNORMAL 319 -0.7693 -0.6314 0.0976 *MESH_FACENORMAL 800 -0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 304 -0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 319 -0.7693 -0.6314 -0.0976 *MESH_VERTEXNORMAL 320 -0.7693 -0.6314 -0.0976 *MESH_FACENORMAL 801 -0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 297 -0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 312 -0.2254 -0.1850 0.9565 *MESH_VERTEXNORMAL 313 -0.2254 -0.1850 0.9565 *MESH_FACENORMAL 802 -0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 305 -0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 320 -0.7400 -0.6073 -0.2890 *MESH_VERTEXNORMAL 321 -0.7400 -0.6073 -0.2890 *MESH_FACENORMAL 803 -0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 298 -0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 313 -0.3658 -0.3002 0.8810 *MESH_VERTEXNORMAL 314 -0.3658 -0.3002 0.8810 *MESH_FACENORMAL 804 -0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 307 -0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 306 -0.6825 -0.5601 -0.4696 *MESH_VERTEXNORMAL 321 -0.6825 -0.5601 -0.4696 *MESH_FACENORMAL 805 -0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 300 -0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 299 -0.4918 -0.4036 0.7715 *MESH_VERTEXNORMAL 314 -0.4918 -0.4036 0.7715 *MESH_FACENORMAL 806 -0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 319 -0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 334 -0.8777 -0.4691 -0.0976 *MESH_VERTEXNORMAL 335 -0.8777 -0.4691 -0.0976 *MESH_FACENORMAL 807 -0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 312 -0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 327 -0.2571 -0.1374 0.9565 *MESH_VERTEXNORMAL 328 -0.2571 -0.1374 0.9565 *MESH_FACENORMAL 808 -0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 320 -0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 335 -0.8443 -0.4513 -0.2890 *MESH_VERTEXNORMAL 336 -0.8443 -0.4513 -0.2890 *MESH_FACENORMAL 809 -0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 313 -0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 328 -0.4173 -0.2230 0.8810 *MESH_VERTEXNORMAL 329 -0.4173 -0.2230 0.8810 *MESH_FACENORMAL 810 -0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 322 -0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 321 -0.7786 -0.4162 -0.4696 *MESH_VERTEXNORMAL 336 -0.7786 -0.4162 -0.4696 *MESH_FACENORMAL 811 -0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 315 -0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 314 -0.5611 -0.2999 0.7715 *MESH_VERTEXNORMAL 329 -0.5611 -0.2999 0.7715 *MESH_FACENORMAL 812 -0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 323 -0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 322 -0.6831 -0.3651 -0.6326 *MESH_VERTEXNORMAL 337 -0.6831 -0.3651 -0.6326 *MESH_FACENORMAL 813 -0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 316 -0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 315 -0.6831 -0.3651 0.6326 *MESH_VERTEXNORMAL 330 -0.6831 -0.3651 0.6326 *MESH_FACENORMAL 814 -0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 323 -0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 338 -0.5611 -0.2999 -0.7715 *MESH_VERTEXNORMAL 339 -0.5611 -0.2999 -0.7715 *MESH_FACENORMAL 815 -0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 316 -0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 331 -0.7786 -0.4162 0.4696 *MESH_VERTEXNORMAL 332 -0.7786 -0.4162 0.4696 *MESH_FACENORMAL 816 -0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 325 -0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 324 -0.4173 -0.2230 -0.8810 *MESH_VERTEXNORMAL 339 -0.4173 -0.2230 -0.8810 *MESH_FACENORMAL 817 -0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 318 -0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 317 -0.8443 -0.4513 0.2890 *MESH_VERTEXNORMAL 332 -0.8443 -0.4513 0.2890 *MESH_FACENORMAL 818 -0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 326 -0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 325 -0.2571 -0.1374 -0.9565 *MESH_VERTEXNORMAL 340 -0.2571 -0.1374 -0.9565 *MESH_FACENORMAL 819 -0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 318 -0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 333 -0.8777 -0.4691 0.0976 *MESH_VERTEXNORMAL 334 -0.8777 -0.4691 0.0976 *MESH_FACENORMAL 820 -0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 331 -0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 330 -0.7412 -0.2248 0.6326 *MESH_VERTEXNORMAL 345 -0.7412 -0.2248 0.6326 *MESH_FACENORMAL 821 -0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 338 -0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 353 -0.6088 -0.1847 -0.7715 *MESH_VERTEXNORMAL 354 -0.6088 -0.1847 -0.7715 *MESH_FACENORMAL 822 -0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 331 -0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 346 -0.8448 -0.2563 0.4696 *MESH_VERTEXNORMAL 347 -0.8448 -0.2563 0.4696 *MESH_FACENORMAL 823 -0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 340 -0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 339 -0.4528 -0.1374 -0.8810 *MESH_VERTEXNORMAL 354 -0.4528 -0.1374 -0.8810 *MESH_FACENORMAL 824 -0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 333 -0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 332 -0.9161 -0.2779 0.2890 *MESH_VERTEXNORMAL 347 -0.9161 -0.2779 0.2890 *MESH_FACENORMAL 825 -0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 340 -0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 355 -0.2790 -0.0846 -0.9565 *MESH_VERTEXNORMAL 356 -0.2790 -0.0846 -0.9565 *MESH_FACENORMAL 826 -0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 333 -0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 348 -0.9524 -0.2889 0.0976 *MESH_VERTEXNORMAL 349 -0.9524 -0.2889 0.0976 *MESH_FACENORMAL 827 -0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 334 -0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 349 -0.9524 -0.2889 -0.0976 *MESH_VERTEXNORMAL 350 -0.9524 -0.2889 -0.0976 *MESH_FACENORMAL 828 -0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 328 -0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 327 -0.2790 -0.0846 0.9565 *MESH_VERTEXNORMAL 342 -0.2790 -0.0846 0.9565 *MESH_FACENORMAL 829 -0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 335 -0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 350 -0.9161 -0.2779 -0.2890 *MESH_VERTEXNORMAL 351 -0.9161 -0.2779 -0.2890 *MESH_FACENORMAL 830 -0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 328 -0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 343 -0.4528 -0.1374 0.8810 *MESH_VERTEXNORMAL 344 -0.4528 -0.1374 0.8810 *MESH_FACENORMAL 831 -0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 337 -0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 336 -0.8448 -0.2563 -0.4696 *MESH_VERTEXNORMAL 351 -0.8448 -0.2563 -0.4696 *MESH_FACENORMAL 832 -0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 330 -0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 329 -0.6088 -0.1847 0.7715 *MESH_VERTEXNORMAL 344 -0.6088 -0.1847 0.7715 *MESH_FACENORMAL 833 -0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 337 -0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 352 -0.7412 -0.2248 -0.6326 *MESH_VERTEXNORMAL 353 -0.7412 -0.2248 -0.6326 *MESH_FACENORMAL 834 -0.9904 -0.0975 -0.0976 *MESH_VERTEXNORMAL 350 -0.9904 -0.0975 -0.0976 *MESH_VERTEXNORMAL 349 -0.9904 -0.0975 -0.0976 *MESH_VERTEXNORMAL 364 -0.9904 -0.0975 -0.0976 *MESH_FACENORMAL 835 -0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 343 -0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 342 -0.2902 -0.0286 0.9565 *MESH_VERTEXNORMAL 357 -0.2902 -0.0286 0.9565 *MESH_FACENORMAL 836 -0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 350 -0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 365 -0.9527 -0.0938 -0.2890 *MESH_VERTEXNORMAL 366 -0.9527 -0.0938 -0.2890 *MESH_FACENORMAL 837 -0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 343 -0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 358 -0.4709 -0.0464 0.8810 *MESH_VERTEXNORMAL 359 -0.4709 -0.0464 0.8810 *MESH_FACENORMAL 838 -0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 352 -0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 351 -0.8786 -0.0865 -0.4696 *MESH_VERTEXNORMAL 366 -0.8786 -0.0865 -0.4696 *MESH_FACENORMAL 839 -0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 345 -0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 344 -0.6332 -0.0624 0.7715 *MESH_VERTEXNORMAL 359 -0.6332 -0.0624 0.7715 *MESH_FACENORMAL 840 -0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 352 -0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 367 -0.7708 -0.0759 -0.6326 *MESH_VERTEXNORMAL 368 -0.7708 -0.0759 -0.6326 *MESH_FACENORMAL 841 -0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 345 -0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 360 -0.7708 -0.0759 0.6326 *MESH_VERTEXNORMAL 361 -0.7708 -0.0759 0.6326 *MESH_FACENORMAL 842 -0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 354 -0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 353 -0.6332 -0.0624 -0.7715 *MESH_VERTEXNORMAL 368 -0.6332 -0.0624 -0.7715 *MESH_FACENORMAL 843 -0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 346 -0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 361 -0.8786 -0.0865 0.4696 *MESH_VERTEXNORMAL 362 -0.8786 -0.0865 0.4696 *MESH_FACENORMAL 844 -0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 355 -0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 354 -0.4709 -0.0464 -0.8810 *MESH_VERTEXNORMAL 369 -0.4709 -0.0464 -0.8810 *MESH_FACENORMAL 845 -0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 348 -0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 347 -0.9527 -0.0938 0.2890 *MESH_VERTEXNORMAL 362 -0.9527 -0.0938 0.2890 *MESH_FACENORMAL 846 -0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 355 -0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 370 -0.2902 -0.0286 -0.9565 *MESH_VERTEXNORMAL 371 -0.2902 -0.0286 -0.9565 *MESH_FACENORMAL 847 -0.9904 -0.0975 0.0976 *MESH_VERTEXNORMAL 348 -0.9904 -0.0975 0.0976 *MESH_VERTEXNORMAL 363 -0.9904 -0.0975 0.0976 *MESH_VERTEXNORMAL 364 -0.9904 -0.0975 0.0976 *MESH_FACENORMAL 848 -0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 368 -0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 383 -0.6332 0.0624 -0.7715 *MESH_VERTEXNORMAL 384 -0.6332 0.0624 -0.7715 *MESH_FACENORMAL 849 -0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 361 -0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 376 -0.8786 0.0865 0.4696 *MESH_VERTEXNORMAL 377 -0.8786 0.0865 0.4696 *MESH_FACENORMAL 850 -0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 370 -0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 369 -0.4709 0.0464 -0.8810 *MESH_VERTEXNORMAL 384 -0.4709 0.0464 -0.8810 *MESH_FACENORMAL 851 -0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 363 -0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 362 -0.9527 0.0938 0.2890 *MESH_VERTEXNORMAL 377 -0.9527 0.0938 0.2890 *MESH_FACENORMAL 852 -0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 370 -0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 385 -0.2902 0.0286 -0.9565 *MESH_VERTEXNORMAL 386 -0.2902 0.0286 -0.9565 *MESH_FACENORMAL 853 -0.9904 0.0976 0.0976 *MESH_VERTEXNORMAL 363 -0.9904 0.0976 0.0976 *MESH_VERTEXNORMAL 378 -0.9904 0.0976 0.0976 *MESH_VERTEXNORMAL 379 -0.9904 0.0976 0.0976 *MESH_FACENORMAL 854 -0.9904 0.0976 -0.0976 *MESH_VERTEXNORMAL 365 -0.9904 0.0976 -0.0976 *MESH_VERTEXNORMAL 364 -0.9904 0.0976 -0.0976 *MESH_VERTEXNORMAL 379 -0.9904 0.0976 -0.0976 *MESH_FACENORMAL 855 -0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 358 -0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 357 -0.2902 0.0286 0.9565 *MESH_VERTEXNORMAL 372 -0.2902 0.0286 0.9565 *MESH_FACENORMAL 856 -0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 365 -0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 380 -0.9527 0.0938 -0.2890 *MESH_VERTEXNORMAL 381 -0.9527 0.0938 -0.2890 *MESH_FACENORMAL 857 -0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 358 -0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 373 -0.4709 0.0464 0.8810 *MESH_VERTEXNORMAL 374 -0.4709 0.0464 0.8810 *MESH_FACENORMAL 858 -0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 367 -0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 366 -0.8786 0.0865 -0.4696 *MESH_VERTEXNORMAL 381 -0.8786 0.0865 -0.4696 *MESH_FACENORMAL 859 -0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 360 -0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 359 -0.6332 0.0624 0.7715 *MESH_VERTEXNORMAL 374 -0.6332 0.0624 0.7715 *MESH_FACENORMAL 860 -0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 367 -0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 382 -0.7708 0.0759 -0.6326 *MESH_VERTEXNORMAL 383 -0.7708 0.0759 -0.6326 *MESH_FACENORMAL 861 -0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 361 -0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 360 -0.7708 0.0759 0.6326 *MESH_VERTEXNORMAL 375 -0.7708 0.0759 0.6326 *MESH_FACENORMAL 862 -0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 380 -0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 395 -0.9161 0.2779 -0.2890 *MESH_VERTEXNORMAL 396 -0.9161 0.2779 -0.2890 *MESH_FACENORMAL 863 -0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 373 -0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 388 -0.4528 0.1374 0.8810 *MESH_VERTEXNORMAL 389 -0.4528 0.1374 0.8810 *MESH_FACENORMAL 864 -0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 382 -0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 381 -0.8448 0.2563 -0.4696 *MESH_VERTEXNORMAL 396 -0.8448 0.2563 -0.4696 *MESH_FACENORMAL 865 -0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 375 -0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 374 -0.6088 0.1847 0.7715 *MESH_VERTEXNORMAL 389 -0.6088 0.1847 0.7715 *MESH_FACENORMAL 866 -0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 382 -0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 397 -0.7412 0.2248 -0.6326 *MESH_VERTEXNORMAL 398 -0.7412 0.2248 -0.6326 *MESH_FACENORMAL 867 -0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 375 -0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 390 -0.7412 0.2248 0.6326 *MESH_VERTEXNORMAL 391 -0.7412 0.2248 0.6326 *MESH_FACENORMAL 868 -0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 383 -0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 398 -0.6088 0.1847 -0.7715 *MESH_VERTEXNORMAL 399 -0.6088 0.1847 -0.7715 *MESH_FACENORMAL 869 -0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 376 -0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 391 -0.8448 0.2563 0.4696 *MESH_VERTEXNORMAL 392 -0.8448 0.2563 0.4696 *MESH_FACENORMAL 870 -0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 385 -0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 384 -0.4528 0.1374 -0.8810 *MESH_VERTEXNORMAL 399 -0.4528 0.1374 -0.8810 *MESH_FACENORMAL 871 -0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 378 -0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 377 -0.9161 0.2779 0.2890 *MESH_VERTEXNORMAL 392 -0.9161 0.2779 0.2890 *MESH_FACENORMAL 872 -0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 385 -0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 400 -0.2790 0.0846 -0.9565 *MESH_VERTEXNORMAL 401 -0.2790 0.0846 -0.9565 *MESH_FACENORMAL 873 -0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 378 -0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 393 -0.9524 0.2889 0.0976 *MESH_VERTEXNORMAL 394 -0.9524 0.2889 0.0976 *MESH_FACENORMAL 874 -0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 379 -0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 394 -0.9524 0.2889 -0.0976 *MESH_VERTEXNORMAL 395 -0.9524 0.2889 -0.0976 *MESH_FACENORMAL 875 -0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 372 -0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 387 -0.2790 0.0846 0.9565 *MESH_VERTEXNORMAL 388 -0.2790 0.0846 0.9565 *MESH_FACENORMAL 876 -0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 400 -0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 399 -0.4173 0.2230 -0.8810 *MESH_VERTEXNORMAL 414 -0.4173 0.2230 -0.8810 *MESH_FACENORMAL 877 -0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 393 -0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 392 -0.8443 0.4513 0.2890 *MESH_VERTEXNORMAL 407 -0.8443 0.4513 0.2890 *MESH_FACENORMAL 878 -0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 400 -0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 415 -0.2571 0.1374 -0.9565 *MESH_VERTEXNORMAL 416 -0.2571 0.1374 -0.9565 *MESH_FACENORMAL 879 -0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 393 -0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 408 -0.8777 0.4691 0.0976 *MESH_VERTEXNORMAL 409 -0.8777 0.4691 0.0976 *MESH_FACENORMAL 880 -0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 395 -0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 394 -0.8777 0.4691 -0.0976 *MESH_VERTEXNORMAL 409 -0.8777 0.4691 -0.0976 *MESH_FACENORMAL 881 -0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 387 -0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 402 -0.2571 0.1374 0.9565 *MESH_VERTEXNORMAL 403 -0.2571 0.1374 0.9565 *MESH_FACENORMAL 882 -0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 395 -0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 410 -0.8443 0.4513 -0.2890 *MESH_VERTEXNORMAL 411 -0.8443 0.4513 -0.2890 *MESH_FACENORMAL 883 -0.4173 0.2230 0.8810 *MESH_VERTEXNORMAL 389 -0.4173 0.2231 0.8810 *MESH_VERTEXNORMAL 388 -0.4173 0.2231 0.8810 *MESH_VERTEXNORMAL 403 -0.4173 0.2231 0.8810 *MESH_FACENORMAL 884 -0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 397 -0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 396 -0.7786 0.4162 -0.4696 *MESH_VERTEXNORMAL 411 -0.7786 0.4162 -0.4696 *MESH_FACENORMAL 885 -0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 390 -0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 389 -0.5611 0.2999 0.7715 *MESH_VERTEXNORMAL 404 -0.5611 0.2999 0.7715 *MESH_FACENORMAL 886 -0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 397 -0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 412 -0.6831 0.3651 -0.6326 *MESH_VERTEXNORMAL 413 -0.6831 0.3651 -0.6326 *MESH_FACENORMAL 887 -0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 391 -0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 390 -0.6831 0.3651 0.6326 *MESH_VERTEXNORMAL 405 -0.6831 0.3651 0.6326 *MESH_FACENORMAL 888 -0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 398 -0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 413 -0.5611 0.2999 -0.7715 *MESH_VERTEXNORMAL 414 -0.5611 0.2999 -0.7715 *MESH_FACENORMAL 889 -0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 391 -0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 406 -0.7786 0.4162 0.4696 *MESH_VERTEXNORMAL 407 -0.7786 0.4162 0.4696 *MESH_FACENORMAL 890 -0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 403 -0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 418 -0.3658 0.3002 0.8810 *MESH_VERTEXNORMAL 419 -0.3658 0.3002 0.8810 *MESH_FACENORMAL 891 -0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 412 -0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 411 -0.6825 0.5601 -0.4696 *MESH_VERTEXNORMAL 426 -0.6825 0.5601 -0.4696 *MESH_FACENORMAL 892 -0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 404 -0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 419 -0.4918 0.4036 0.7715 *MESH_VERTEXNORMAL 420 -0.4918 0.4036 0.7715 *MESH_FACENORMAL 893 -0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 412 -0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 427 -0.5987 0.4913 -0.6326 *MESH_VERTEXNORMAL 428 -0.5987 0.4913 -0.6326 *MESH_FACENORMAL 894 -0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 406 -0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 405 -0.5987 0.4913 0.6326 *MESH_VERTEXNORMAL 420 -0.5987 0.4913 0.6326 *MESH_FACENORMAL 895 -0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 413 -0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 428 -0.4918 0.4036 -0.7715 *MESH_VERTEXNORMAL 429 -0.4918 0.4036 -0.7715 *MESH_FACENORMAL 896 -0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 406 -0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 421 -0.6825 0.5601 0.4696 *MESH_VERTEXNORMAL 422 -0.6825 0.5601 0.4696 *MESH_FACENORMAL 897 -0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 414 -0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 429 -0.3658 0.3002 -0.8810 *MESH_VERTEXNORMAL 430 -0.3658 0.3002 -0.8810 *MESH_FACENORMAL 898 -0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 408 -0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 407 -0.7400 0.6073 0.2890 *MESH_VERTEXNORMAL 422 -0.7400 0.6073 0.2890 *MESH_FACENORMAL 899 -0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 415 -0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 430 -0.2254 0.1850 -0.9565 *MESH_VERTEXNORMAL 431 -0.2254 0.1850 -0.9565 *MESH_FACENORMAL 900 -0.7693 0.6314 0.0976 *MESH_VERTEXNORMAL 408 -0.7693 0.6314 0.0976 *MESH_VERTEXNORMAL 423 -0.7693 0.6314 0.0976 *MESH_VERTEXNORMAL 424 -0.7693 0.6314 0.0976 *MESH_FACENORMAL 901 -0.7693 0.6314 -0.0976 *MESH_VERTEXNORMAL 410 -0.7693 0.6314 -0.0976 *MESH_VERTEXNORMAL 409 -0.7693 0.6314 -0.0976 *MESH_VERTEXNORMAL 424 -0.7693 0.6314 -0.0976 *MESH_FACENORMAL 902 -0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 402 -0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 417 -0.2254 0.1850 0.9565 *MESH_VERTEXNORMAL 418 -0.2254 0.1850 0.9565 *MESH_FACENORMAL 903 -0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 410 -0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 425 -0.7400 0.6073 -0.2890 *MESH_VERTEXNORMAL 426 -0.7400 0.6073 -0.2890 *MESH_FACENORMAL 904 -0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 423 -0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 422 -0.6073 0.7400 0.2890 *MESH_VERTEXNORMAL 437 -0.6073 0.7400 0.2890 *MESH_FACENORMAL 905 -0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 430 -0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 445 -0.1850 0.2254 -0.9565 *MESH_VERTEXNORMAL 446 -0.1850 0.2254 -0.9565 *MESH_FACENORMAL 906 -0.6314 0.7693 0.0976 *MESH_VERTEXNORMAL 424 -0.6314 0.7693 0.0976 *MESH_VERTEXNORMAL 423 -0.6314 0.7693 0.0976 *MESH_VERTEXNORMAL 438 -0.6314 0.7693 0.0976 *MESH_FACENORMAL 907 -0.6314 0.7693 -0.0976 *MESH_VERTEXNORMAL 424 -0.6314 0.7693 -0.0976 *MESH_VERTEXNORMAL 439 -0.6314 0.7693 -0.0976 *MESH_VERTEXNORMAL 440 -0.6314 0.7693 -0.0976 *MESH_FACENORMAL 908 -0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 417 -0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 432 -0.1850 0.2254 0.9565 *MESH_VERTEXNORMAL 433 -0.1850 0.2254 0.9565 *MESH_FACENORMAL 909 -0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 425 -0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 440 -0.6073 0.7400 -0.2890 *MESH_VERTEXNORMAL 441 -0.6073 0.7400 -0.2890 *MESH_FACENORMAL 910 -0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 418 -0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 433 -0.3002 0.3658 0.8810 *MESH_VERTEXNORMAL 434 -0.3002 0.3658 0.8810 *MESH_FACENORMAL 911 -0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 427 -0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 426 -0.5601 0.6825 -0.4696 *MESH_VERTEXNORMAL 441 -0.5601 0.6825 -0.4696 *MESH_FACENORMAL 912 -0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 419 -0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 434 -0.4036 0.4918 0.7715 *MESH_VERTEXNORMAL 435 -0.4036 0.4918 0.7715 *MESH_FACENORMAL 913 -0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 427 -0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 442 -0.4913 0.5987 -0.6326 *MESH_VERTEXNORMAL 443 -0.4913 0.5987 -0.6326 *MESH_FACENORMAL 914 -0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 421 -0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 420 -0.4913 0.5987 0.6326 *MESH_VERTEXNORMAL 435 -0.4913 0.5987 0.6326 *MESH_FACENORMAL 915 -0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 429 -0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 428 -0.4036 0.4918 -0.7715 *MESH_VERTEXNORMAL 443 -0.4036 0.4918 -0.7715 *MESH_FACENORMAL 916 -0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 421 -0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 436 -0.5601 0.6825 0.4696 *MESH_VERTEXNORMAL 437 -0.5601 0.6825 0.4696 *MESH_FACENORMAL 917 -0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 429 -0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 444 -0.3002 0.3658 -0.8810 *MESH_VERTEXNORMAL 445 -0.3002 0.3658 -0.8810 *MESH_FACENORMAL 918 -0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 442 -0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 441 -0.4162 0.7786 -0.4696 *MESH_VERTEXNORMAL 456 -0.4162 0.7786 -0.4696 *MESH_FACENORMAL 919 -0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 435 -0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 434 -0.2999 0.5611 0.7715 *MESH_VERTEXNORMAL 449 -0.2999 0.5611 0.7715 *MESH_FACENORMAL 920 -0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 442 -0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 457 -0.3651 0.6831 -0.6326 *MESH_VERTEXNORMAL 458 -0.3651 0.6831 -0.6326 *MESH_FACENORMAL 921 -0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 436 -0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 435 -0.3651 0.6831 0.6326 *MESH_VERTEXNORMAL 450 -0.3651 0.6831 0.6326 *MESH_FACENORMAL 922 -0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 443 -0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 458 -0.2999 0.5611 -0.7715 *MESH_VERTEXNORMAL 459 -0.2999 0.5611 -0.7715 *MESH_FACENORMAL 923 -0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 436 -0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 451 -0.4162 0.7786 0.4696 *MESH_VERTEXNORMAL 452 -0.4162 0.7786 0.4696 *MESH_FACENORMAL 924 -0.2230 0.4173 -0.8810 *MESH_VERTEXNORMAL 444 -0.2230 0.4173 -0.8810 *MESH_VERTEXNORMAL 459 -0.2230 0.4173 -0.8810 *MESH_VERTEXNORMAL 460 -0.2230 0.4173 -0.8810 *MESH_FACENORMAL 925 -0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 438 -0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 437 -0.4513 0.8443 0.2890 *MESH_VERTEXNORMAL 452 -0.4513 0.8443 0.2890 *MESH_FACENORMAL 926 -0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 445 -0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 460 -0.1374 0.2571 -0.9565 *MESH_VERTEXNORMAL 461 -0.1374 0.2571 -0.9565 *MESH_FACENORMAL 927 -0.4691 0.8777 0.0976 *MESH_VERTEXNORMAL 438 -0.4691 0.8777 0.0976 *MESH_VERTEXNORMAL 453 -0.4691 0.8777 0.0976 *MESH_VERTEXNORMAL 454 -0.4691 0.8777 0.0976 *MESH_FACENORMAL 928 -0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 439 -0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 454 -0.4691 0.8777 -0.0976 *MESH_VERTEXNORMAL 455 -0.4691 0.8777 -0.0976 *MESH_FACENORMAL 929 -0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 433 -0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 432 -0.1374 0.2571 0.9565 *MESH_VERTEXNORMAL 447 -0.1374 0.2571 0.9565 *MESH_FACENORMAL 930 -0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 440 -0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 455 -0.4513 0.8443 -0.2890 *MESH_VERTEXNORMAL 456 -0.4513 0.8443 -0.2890 *MESH_FACENORMAL 931 -0.2230 0.4173 0.8810 *MESH_VERTEXNORMAL 434 -0.2231 0.4173 0.8810 *MESH_VERTEXNORMAL 433 -0.2231 0.4173 0.8810 *MESH_VERTEXNORMAL 448 -0.2231 0.4173 0.8810 *MESH_FACENORMAL 932 -0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 461 -0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 460 -0.0846 0.2790 -0.9565 *MESH_VERTEXNORMAL 475 -0.0846 0.2790 -0.9565 *MESH_FACENORMAL 933 -0.2889 0.9524 0.0976 *MESH_VERTEXNORMAL 453 -0.2889 0.9524 0.0976 *MESH_VERTEXNORMAL 468 -0.2889 0.9524 0.0976 *MESH_VERTEXNORMAL 469 -0.2889 0.9524 0.0976 *MESH_FACENORMAL 934 -0.2889 0.9524 -0.0976 *MESH_VERTEXNORMAL 454 -0.2889 0.9524 -0.0975 *MESH_VERTEXNORMAL 469 -0.2889 0.9524 -0.0975 *MESH_VERTEXNORMAL 470 -0.2889 0.9524 -0.0975 *MESH_FACENORMAL 935 -0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 447 -0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 462 -0.0846 0.2790 0.9565 *MESH_VERTEXNORMAL 463 -0.0846 0.2790 0.9565 *MESH_FACENORMAL 936 -0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 455 -0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 470 -0.2779 0.9161 -0.2890 *MESH_VERTEXNORMAL 471 -0.2779 0.9161 -0.2890 *MESH_FACENORMAL 937 -0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 448 -0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 463 -0.1374 0.4528 0.8810 *MESH_VERTEXNORMAL 464 -0.1374 0.4528 0.8810 *MESH_FACENORMAL 938 -0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 457 -0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 456 -0.2563 0.8448 -0.4696 *MESH_VERTEXNORMAL 471 -0.2563 0.8448 -0.4696 *MESH_FACENORMAL 939 -0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 449 -0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 464 -0.1847 0.6088 0.7715 *MESH_VERTEXNORMAL 465 -0.1847 0.6088 0.7715 *MESH_FACENORMAL 940 -0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 457 -0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 472 -0.2248 0.7412 -0.6326 *MESH_VERTEXNORMAL 473 -0.2248 0.7412 -0.6326 *MESH_FACENORMAL 941 -0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 451 -0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 450 -0.2248 0.7412 0.6326 *MESH_VERTEXNORMAL 465 -0.2248 0.7412 0.6326 *MESH_FACENORMAL 942 -0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 458 -0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 473 -0.1847 0.6088 -0.7715 *MESH_VERTEXNORMAL 474 -0.1847 0.6088 -0.7715 *MESH_FACENORMAL 943 -0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 451 -0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 466 -0.2563 0.8448 0.4696 *MESH_VERTEXNORMAL 467 -0.2563 0.8448 0.4696 *MESH_FACENORMAL 944 -0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 459 -0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 474 -0.1374 0.4528 -0.8810 *MESH_VERTEXNORMAL 475 -0.1374 0.4528 -0.8810 *MESH_FACENORMAL 945 -0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 453 -0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 452 -0.2779 0.9161 0.2890 *MESH_VERTEXNORMAL 467 -0.2779 0.9161 0.2890 *MESH_FACENORMAL 946 -0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 465 -0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 464 -0.0624 0.6332 0.7715 *MESH_VERTEXNORMAL 2 -0.0624 0.6332 0.7715 *MESH_FACENORMAL 947 -0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 472 -0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 478 -0.0759 0.7708 -0.6326 *MESH_VERTEXNORMAL 479 -0.0759 0.7708 -0.6326 *MESH_FACENORMAL 948 -0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 466 -0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 465 -0.0759 0.7708 0.6326 *MESH_VERTEXNORMAL 3 -0.0759 0.7708 0.6326 *MESH_FACENORMAL 949 -0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 473 -0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 479 -0.0624 0.6332 -0.7715 *MESH_VERTEXNORMAL 9 -0.0624 0.6332 -0.7715 *MESH_FACENORMAL 950 -0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 467 -0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 466 -0.0865 0.8786 0.4696 *MESH_VERTEXNORMAL 4 -0.0865 0.8786 0.4696 *MESH_FACENORMAL 951 -0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 474 -0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 9 -0.0464 0.4709 -0.8810 *MESH_VERTEXNORMAL 480 -0.0464 0.4709 -0.8810 *MESH_FACENORMAL 952 -0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 468 -0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 467 -0.0938 0.9527 0.2890 *MESH_VERTEXNORMAL 5 -0.0938 0.9527 0.2890 *MESH_FACENORMAL 953 -0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 475 -0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 480 -0.0286 0.2902 -0.9565 *MESH_VERTEXNORMAL 481 -0.0286 0.2902 -0.9565 *MESH_FACENORMAL 954 -0.0976 0.9904 0.0976 *MESH_VERTEXNORMAL 469 -0.0976 0.9904 0.0975 *MESH_VERTEXNORMAL 468 -0.0976 0.9904 0.0975 *MESH_VERTEXNORMAL 6 -0.0976 0.9904 0.0975 *MESH_FACENORMAL 955 -0.0976 0.9904 -0.0975 *MESH_VERTEXNORMAL 469 -0.0976 0.9904 -0.0976 *MESH_VERTEXNORMAL 7 -0.0976 0.9904 -0.0976 *MESH_VERTEXNORMAL 8 -0.0976 0.9904 -0.0976 *MESH_FACENORMAL 956 -0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 463 -0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 462 -0.0286 0.2902 0.9565 *MESH_VERTEXNORMAL 0 -0.0286 0.2902 0.9565 *MESH_FACENORMAL 957 -0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 470 -0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 8 -0.0938 0.9527 -0.2890 *MESH_VERTEXNORMAL 477 -0.0938 0.9527 -0.2890 *MESH_FACENORMAL 958 -0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 464 -0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 463 -0.0464 0.4709 0.8810 *MESH_VERTEXNORMAL 1 -0.0464 0.4709 0.8810 *MESH_FACENORMAL 959 -0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 472 -0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 471 -0.0865 0.8786 -0.4696 *MESH_VERTEXNORMAL 477 -0.0865 0.8786 -0.4696 } } *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *MATERIAL_REF 0 }DarkRadiant-2.14.0/install/resources/preview/tiles.ase000066400000000000000000000061111413722237400227410ustar00rootroot00000000000000*3DSMAX_ASCIIEXPORT 200 *COMMENT "DarkRadiant ASCII Scene Export(*.ase)" *SCENE { *SCENE_FILENAME "unnamed.map" *SCENE_FIRSTFRAME 0 *SCENE_LASTFRAME 100 *SCENE_FRAMESPEED 30 *SCENE_TICKSPERFRAME 160 *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000 *SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000 } *MATERIAL_LIST { *MATERIAL_COUNT 1 *MATERIAL 0 { *MATERIAL_NAME "Plane" *MATERIAL_CLASS "Standard" *MATERIAL_AMBIENT 0.5882 0.5882 0.5882 *MATERIAL_DIFFUSE 0.5882 0.5882 0.5882 *MATERIAL_SPECULAR 0.9000 0.9000 0.9000 *MATERIAL_SHINE 0.1000 *MATERIAL_SHINESTRENGTH 0.0000 *MATERIAL_TRANSPARENCY 0.0000 *MATERIAL_WIRESIZE 1.0000 *MATERIAL_SHADING Blinn *MATERIAL_XP_FALLOFF 0.0000 *MATERIAL_SELFILLUM 0.0000 *MATERIAL_FALLOFF In *MATERIAL_XP_TYPE Filter *MAP_DIFFUSE { *MAP_NAME "Plane" *MAP_CLASS "Bitmap" *MAP_SUBNO 1 *MAP_AMOUNT 1.0000 *BITMAP "\\base\material" *MAP_TYPE Screen *UVW_U_OFFSET 0.0000 *UVW_V_OFFSET 0.0000 *UVW_U_TILING 1.0000 *UVW_V_TILING 1.0000 *UVW_ANGLE 0.0000 *UVW_BLUR 1.0000 *UVW_BLUR_OFFSET 0.0000 *UVW_NOUSE_AMT 1.0000 *UVW_NOISE_SIZE 1.0000 *UVW_NOISE_LEVEL 1 *UVW_NOISE_PHASE 0.0000 *BITMAP_FILTER Pyramidal } } } *GEOMOBJECT { *NODE_NAME "mesh0" *NODE_TM { *NODE_NAME "mesh0" *INHERIT_POS 0 0 0 *INHERIT_ROT 0 0 0 *INHERIT_SCL 0 0 0 *TM_ROW0 1.0000 0.0000 0.0000 *TM_ROW1 0.0000 1.0000 0.0000 *TM_ROW2 0.0000 0.0000 1.0000 *TM_ROW3 0.0000 0.0000 0.0000 *TM_POS 0.0000 0.0000 0.0000 *TM_ROTAXIS 0.0000 0.0000 0.0000 *TM_ROTANGLE 0.0000 *TM_SCALE 1.0000 1.0000 1.0000 *TM_SCALEAXIS 0.0000 0.0000 0.0000 *TM_SCALEAXISANG 0.0000 } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 4 *MESH_NUMFACES 2 *MESH_VERTEX_LIST { *MESH_VERTEX 0 -105.781 -116 -21.7808 *MESH_VERTEX 1 105.781 -116 21.7808 *MESH_VERTEX 2 -105.781 116 -21.7808 *MESH_VERTEX 3 105.781 116 21.7808 } *MESH_FACE_LIST { *MESH_FACE 0: A: 0 B: 1 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 *MESH_FACE 1: A: 1 B: 3 C: 2 AB: 0 BC: 0 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0 } *MESH_NUMTVERTEX 4 *MESH_TVERTLIST { *MESH_TVERT 0 0 -0 0.0000 *MESH_TVERT 1 3 -0 0.0000 *MESH_TVERT 2 0 -3 0.0000 *MESH_TVERT 3 3 -3 0.0000 } *MESH_NUMTVFACES 2 *MESH_TFACELIST { *MESH_TFACE 0 0 1 2 *MESH_TFACE 1 1 3 2 } *MESH_NUMCVERTEX 4 *MESH_CVERTLIST { *MESH_VERTCOL 0 1 1 1 *MESH_VERTCOL 1 1 1 1 *MESH_VERTCOL 2 1 1 1 *MESH_VERTCOL 3 1 1 1 } *MESH_NUMCVFACES 2 *MESH_CFACELIST { *MESH_CFACE 0 0 1 2 *MESH_CFACE 1 1 3 2 } *MESH_NORMALS { *MESH_FACENORMAL 0 -0.201674 0 0.979453 *MESH_VERTEXNORMAL 0 -0.201674 0 0.979453 *MESH_VERTEXNORMAL 1 -0.201674 0 0.979453 *MESH_VERTEXNORMAL 2 -0.201674 0 0.979453 *MESH_FACENORMAL 1 -0.201674 0 0.979453 *MESH_VERTEXNORMAL 1 -0.201674 0 0.979453 *MESH_VERTEXNORMAL 3 -0.201674 0 0.979453 *MESH_VERTEXNORMAL 2 -0.201674 0 0.979453 } } *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *MATERIAL_REF 0 } DarkRadiant-2.14.0/install/scripts/000077500000000000000000000000001413722237400171245ustar00rootroot00000000000000DarkRadiant-2.14.0/install/scripts/brushtest.py000066400000000000000000000013101413722237400215140ustar00rootroot00000000000000# Some interface tests # Test brush manipulation class BrushManipulator(SceneNodeVisitor) : def pre(self, node): # Try to get a brush from this node brush = node.getBrush() if not brush.isNull(): print('Brush information:') print('Number of faces: ' + str(brush.getNumFaces())) i = 0 while i < brush.getNumFaces(): face = brush.getFace(i) print('Face #' + str(i) +' has shader ' + face.getShader()) winding = face.getWinding() for w in winding: print('w.vertex=' + str(w.vertex.x()) + ',' + str(w.vertex.y()) + ',' + str(w.vertex.z())) face.fitTexture(1,1) i += 1 return 1 walker = BrushManipulator() GlobalSceneGraph.root().traverse(walker) print('') DarkRadiant-2.14.0/install/scripts/commands/000077500000000000000000000000001413722237400207255ustar00rootroot00000000000000DarkRadiant-2.14.0/install/scripts/commands/ase_export.py000066400000000000000000000364721413722237400234640ustar00rootroot00000000000000# ***** BEGIN GPL LICENSE BLOCK ***** # # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ***** END GPL LICENCE BLOCK ***** #TODO: # Set the command name so that DarkRadiant recognises this file __commandName__ = 'aseExport' __commandDisplayName__ = 'Export ASE...' # The actual algorithm called by DarkRadiant is contained in the execute() function def execute(): script = "Dark Radiant ASCII Scene Export (*.ase)" author = "Richard Bartlett, some additions by greebo and tels" version = "0.9" import darkradiant as dr # Check if we have a valid selection selectionInfo = GlobalSelectionSystem.getSelectionInfo() # Don't allow empty selections or selected components only if selectionInfo.totalCount == 0 or selectionInfo.totalCount == selectionInfo.componentCount: errMsg = GlobalDialogManager.createMessageBox('No selection', 'Nothing selected, cannot run exporter.', dr.Dialog.ERROR) errMsg.run() return shaderlist = [] geomlist = [] # simple linear triangulation of n-sided poly def triangulate(pointset): tris = [] for count in range(1, len(pointset) - 1): tris.append([pointset[0], pointset[count], pointset[count + 1]]) return tris # skin patch matrix with tris def skinmatrix(pointset, width, height): tris = [] for h in range(height-1): for w in range(width-1): tris.append([pointset[w+(h*width)], pointset[w+1+(h*width)], pointset[w+width+(h*width)]]) tris.append([pointset[w+1+(h*width)], pointset[w+1+width+(h*width)], pointset[w+width+(h*width)]]) return tris def processBrush(brushnode): verts = [] faces = [] numfaces = brushnode.getNumFaces() for index in range(numfaces): facenode = brushnode.getFace(index) shader = facenode.getShader() # Tels: skip if caulk and no caulk should be exported if (shader == 'textures/common/caulk') and (int(GlobalRegistry.get('user/scripts/aseExport/exportcaulk'))) == 0: continue if not shader in shaderlist: shaderlist.append(shader) winding = facenode.getWinding() tris = triangulate([x+len(verts) for x in range(len(winding))]) for x in tris: x.append(shaderlist.index(shader)) faces.append(x) for x in reversed(winding): verts.append([x.vertex.x(), x.vertex.y(), x.vertex.z(), x.texcoord.x(), x.texcoord.y() * -1, x.normal.x(), x.normal.y(), x.normal.z()]) geomlist.append([verts, faces]) return def processPatch(patchnode): verts = [] faces = [] shader = patchnode.getShader() # Tels: skip if caulk and no caulk should be exported if shader == 'textures/common/caulk' and int(GlobalRegistry.get('user/scripts/aseExport/exportcaulk')) == 0: return if not shader in shaderlist: shaderlist.append(shader) mesh = patchnode.getTesselatedPatchMesh() for x in mesh.vertices: verts.append([x.vertex.x(), x.vertex.y(), x.vertex.z(), x.texcoord.x(), x.texcoord.y() * -1, x.normal.x(), x.normal.y(), x.normal.z()]) tris = skinmatrix([x for x in range(len(verts))], mesh.width, mesh.height) for x in tris: x.append(shaderlist.index(shader)) faces.append(x) geomlist.append([verts, faces]) return # Branch on primitive nodes def processPrimitive(scenenode): if scenenode.isBrush(): processBrush(scenenode.getBrush()) elif scenenode.isPatch(): processPatch(scenenode.getPatch()) return # Traversor class to visit child primitives of entities class nodeVisitor(dr.SceneNodeVisitor): def pre(self, scenenode): # Brush? if scenenode.isBrush(): processBrush(scenenode.getBrush()) # Patch? elif scenenode.isPatch(): processPatch(scenenode.getPatch()) # Traverse all child nodes, regardless of type return 1 class dataCollector(dr.SelectionVisitor): def visit(self, scenenode): if scenenode.isBrush() or scenenode.isPatch(): processPrimitive(scenenode) elif scenenode.isEntity(): # greebo: Found an entity, this could be a func_static or similar # Traverse children of this entity using a new walker nodewalker = nodeVisitor() scenenode.traverse(nodewalker) else: print('WARNING: unsupported node type selected. Skipping: ' + scenenode.getNodeType()) # Dialog dialog = GlobalDialogManager.createDialog(script + 'v' + version) # Add an entry box and remember the handle fileHandle = dialog.addEntryBox("Filename:") dialog.setElementValue(fileHandle, GlobalRegistry.get('user/scripts/aseExport/recentFilename')) # Add an entry box and remember the handle pathHandle = dialog.addPathEntry("Save path:", True) dialog.setElementValue(pathHandle, GlobalRegistry.get('user/scripts/aseExport/recentPath')) # Add a checkbox centerObjectsHandle = dialog.addCheckbox("Center objects at 0,0,0 origin") dialog.setElementValue(centerObjectsHandle, GlobalRegistry.get('user/scripts/aseExport/centerObjects')) # Add another checkbox exportCaulkHandle = dialog.addCheckbox("Export caulked faces") dialog.setElementValue(exportCaulkHandle, GlobalRegistry.get('user/scripts/aseExport/exportcaulk')) if dialog.run() == dr.Dialog.OK: fullpath = dialog.getElementValue(pathHandle) + '/' + dialog.getElementValue(fileHandle) if not fullpath.endswith('.ase'): fullpath = fullpath + '.ase' # Save the path for later use GlobalRegistry.set('user/scripts/aseExport/recentFilename', dialog.getElementValue(fileHandle)) GlobalRegistry.set('user/scripts/aseExport/recentPath', dialog.getElementValue(pathHandle)) GlobalRegistry.set('user/scripts/aseExport/centerObjects', dialog.getElementValue(centerObjectsHandle)) GlobalRegistry.set('user/scripts/aseExport/exportcaulk', dialog.getElementValue(exportCaulkHandle)) try: file = open(fullpath, 'r') file.close() prompt = GlobalDialogManager.createMessageBox('Warning', 'The file ' + fullpath + ' already exists. Do you wish to overwrite it?', dr.Dialog.ASK) if prompt.run() == dr.Dialog.YES: overwrite = True else: overwrite = False except IOError: overwrite = True if overwrite: # Tels: Only collect the data if we are going to export it walker = dataCollector() GlobalSelectionSystem.foreachSelected(walker) # greebo: Check if we should center objects at the 0,0,0 origin if int(dialog.getElementValue(centerObjectsHandle)) == 1: #center objects at 0,0,0 xlist = [] ylist = [] zlist = [] for item in geomlist: for vert in item[0]: xlist.append(vert[0]) ylist.append(vert[1]) zlist.append(vert[2]) xcenter=(max(xlist)+min(xlist))/2 ycenter=(max(ylist)+min(ylist))/2 zcenter=(max(zlist)+min(zlist))/2 for item in geomlist: for vert in item[0]: vert[0] = vert[0] - xcenter vert[1] = vert[1] - ycenter vert[2] = vert[2] - zcenter # split objects that do not share the same texture on all faces newgeomlist = [] for x in geomlist: texlist = [] for data in x[1]: texlist.append(data[3]) if len(set(texlist)) > 1: temp = [] for texture in set(texlist): vertlist = [] facelist = [] for data in x[1]: if data[3] == texture: facelist.append(data) usedverts = [] for face in facelist: usedverts.extend(face[0:3]) usedverts = list(set(usedverts)) for index in usedverts: vertlist.append(x[0][index]) newfacelist = [] for face in facelist: newfacelist.append([vertlist.index(x[0][face[0]]),vertlist.index(x[0][face[1]]),vertlist.index(x[0][face[2]]),face[3]]) newgeomlist.append([vertlist, newfacelist]) #del geomlist[geomlist.index(x)] #geomlist.extend(temp) #newgeomlist.append(temp) else: newgeomlist.append(x) geomlist = newgeomlist scene = '''\t*SCENE_FILENAME "{0}" \t*SCENE_FIRSTFRAME 0 \t*SCENE_LASTFRAME 100 \t*SCENE_FRAMESPEED 30 \t*SCENE_TICKSPERFRAME 160 \t*SCENE_BACKGROUND_STATIC 0.0000\t0.0000\t0.0000 \t*SCENE_AMBIENT_STATIC 0.0000\t0.0000\t0.0000'''.format(GlobalMap.getMapName()) materials = str() for x in shaderlist: materials = materials + '''\t*MATERIAL {0} {{ \t\t*MATERIAL_NAME "{1}" \t\t*MATERIAL_CLASS "Standard" \t\t*MATERIAL_AMBIENT 0.5882\t0.5882\t0.5882 \t\t*MATERIAL_DIFFUSE 0.5882\t0.5882\t0.5882 \t\t*MATERIAL_SPECULAR 0.9000\t0.9000\t0.9000 \t\t*MATERIAL_SHINE 0.1000 \t\t*MATERIAL_SHINESTRENGTH 0.0000 \t\t*MATERIAL_TRANSPARENCY 0.0000 \t\t*MATERIAL_WIRESIZE 1.0000 \t\t*MATERIAL_SHADING Blinn \t\t*MATERIAL_XP_FALLOFF 0.0000 \t\t*MATERIAL_SELFILLUM 0.0000 \t\t*MATERIAL_FALLOFF In \t\t*MATERIAL_XP_TYPE Filter \t\t*MAP_DIFFUSE {{ \t\t\t*MAP_NAME "{2}" \t\t\t*MAP_CLASS "Bitmap" \t\t\t*MAP_SUBNO 1 \t\t\t*MAP_AMOUNT 1.0000 \t\t\t*BITMAP "\\\\purgatory\\purgatory\\doom\\base\{2}" \t\t\t*MAP_TYPE Screen \t\t\t*UVW_U_OFFSET 0.0000 \t\t\t*UVW_V_OFFSET 0.0000 \t\t\t*UVW_U_TILING 1.0000 \t\t\t*UVW_V_TILING 1.0000 \t\t\t*UVW_ANGLE 0.0000 \t\t\t*UVW_BLUR 1.0000 \t\t\t*UVW_BLUR_OFFSET 0.0000 \t\t\t*UVW_NOUSE_AMT 1.0000 \t\t\t*UVW_NOISE_SIZE 1.0000 \t\t\t*UVW_NOISE_LEVEL 1 \t\t\t*UVW_NOISE_PHASE 0.0000 \t\t\t*BITMAP_FILTER Pyramidal \t\t}} \t}} '''.format(shaderlist.index(x), x, x.replace('/','\\')) geomobjects = str() for x in geomlist: # x[0] = vertices # vert[0] - vert[2] = vertex coords # vert[3] - vert[4] = texture coords # vert[5] - vert[7] = normal # x[1] = faces vertlist = str() for count, data in enumerate(x[0]): vertlist = vertlist + '''\t\t\t*MESH_VERTEX {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(count, data[0], data[1], data[2]) facelist = str() for count, data in enumerate(x[1]): facelist = facelist + '''\t\t\t*MESH_FACE {0}: A: {1} B: {2} C: {3} AB: 0 BC: 0 CA: 0\t *MESH_SMOOTHING 1 \t*MESH_MTLID {4}\n'''.format(count, data[0], data[1], data[2], data[3]) tvertlist = str() for count, data in enumerate(x[0]): tvertlist = tvertlist + '''\t\t\t*MESH_TVERT {0}\t{1: 10.4f}\t{2: 10.4f}\t0.0000\n'''.format(count, data[3], data[4]) tfacelist = str() for count, data in enumerate(x[1]): tfacelist = tfacelist + '''\t\t\t*MESH_TFACE {0}\t{1}\t{2}\t{3}\n'''.format(count, data[0], data[1], data[2]) cfacelist = str() for count, data in enumerate(x[1]): cfacelist = cfacelist + '''\t\t\t*MESH_CFACE {0}\t0\t0\t0\n'''.format(count) normals = str() for count, data in enumerate(x[1]): normals += '''\t\t\t*MESH_FACENORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(count, x[0][data[0]][5], x[0][data[0]][6], x[0][data[0]][7]) # greebo: use first vertex normal as face normal normals += '''\t\t\t\t*MESH_VERTEXNORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(data[0], x[0][data[0]][5], x[0][data[0]][6], x[0][data[0]][7]) normals += '''\t\t\t\t*MESH_VERTEXNORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(data[1], x[0][data[1]][5], x[0][data[1]][6], x[0][data[1]][7]) normals += '''\t\t\t\t*MESH_VERTEXNORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(data[2], x[0][data[2]][5], x[0][data[2]][6], x[0][data[2]][7]) if len(x[1]) == 0: continue geomobjects = geomobjects + '''*GEOMOBJECT {{ \t*NODE_NAME "{0}" \t*NODE_TM {{ \t\t*NODE_NAME "{0}" \t\t*INHERIT_POS 0 0 0 \t\t*INHERIT_ROT 0 0 0 \t\t*INHERIT_SCL 0 0 0 \t\t*TM_ROW0 1.0000\t0.0000\t0.0000 \t\t*TM_ROW1 0.0000\t1.0000\t0.0000 \t\t*TM_ROW2 0.0000\t0.0000\t1.0000 \t\t*TM_ROW3 0.0000\t0.0000\t0.0000 \t\t*TM_POS 0.0000\t0.0000\t0.0000 \t\t*TM_ROTAXIS 0.0000\t0.0000\t0.0000 \t\t*TM_ROTANGLE 0.0000 \t\t*TM_SCALE 1.0000\t1.0000\t1.0000 \t\t*TM_SCALEAXIS 0.0000\t0.0000\t0.0000 \t\t*TM_SCALEAXISANG 0.0000 \t}} \t*MESH {{ \t\t*TIMEVALUE 0 \t\t*MESH_NUMVERTEX {1} \t\t*MESH_NUMFACES {2} \t\t*MESH_VERTEX_LIST {{ {3}\t\t}} \t\t*MESH_FACE_LIST {{ {4}\t\t}} \t\t*MESH_NUMTVERTEX {5} \t\t*MESH_TVERTLIST {{ {6}\t\t}} \t\t*MESH_NUMTVFACES {7} \t\t*MESH_TFACELIST {{ {8}\t\t}} \t\t*MESH_NUMCVERTEX 1 \t\t*MESH_CVERTLIST {{ \t\t\t*MESH_VERTCOL 0\t1.0000\t1.0000\t1.0000 \t\t}} \t\t*MESH_NUMCVFACES {9} \t\t*MESH_CFACELIST {{ {10}\t\t}} \t\t*MESH_NORMALS {{ {11}\t\t}} \t}} \t*PROP_MOTIONBLUR 0 \t*PROP_CASTSHADOW 1 \t*PROP_RECVSHADOW 1 \t*MATERIAL_REF {12} }}\n'''.format('mesh' + str(geomlist.index(x)), \ len(x[0]), \ len(x[1]), \ vertlist, \ facelist, \ len(x[0]), \ tvertlist, \ len(x[1]), \ tfacelist, \ len(x[1]), \ cfacelist, \ normals, \ x[1][0][3]) # material reference from first face data = '''*3DSMAX_ASCIIEXPORT\t200 *COMMENT "{0} v{1}" *SCENE {{ {2} }} *MATERIAL_LIST {{ \t*MATERIAL_COUNT {3} {4}}} {5}'''.format(script, version, scene, len(shaderlist), materials, geomobjects) # Write the compiled data to the output file file = open(fullpath, 'w') file.write(data) file.close() # __executeCommand__ evaluates to true after DarkRadiant has successfully initialised if __executeCommand__: execute() DarkRadiant-2.14.0/install/scripts/commands/ase_export_blend.py000066400000000000000000000433441413722237400246240ustar00rootroot00000000000000# ***** BEGIN GPL LICENSE BLOCK ***** # # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ***** END GPL LICENCE BLOCK ***** #TODO: # Set the command name so that DarkRadiant recognises this file __commandName__ = 'aseExportBlend' __commandDisplayName__ = 'Export blended ASE...' # The actual algorithm called by DarkRadiant is contained in the execute() function def execute(): script = "Dark Radiant ASCII Scene Export (*.ase)" author = "Richard Bartlett, some additions by greebo and tels" version = "0.71" import darkradiant as dr # Check if we have a valid selection #import time selectionInfo = GlobalSelectionSystem.getSelectionInfo() # Don't allow empty selections or selected components only if selectionInfo.totalCount == 0 or selectionInfo.totalCount == selectionInfo.componentCount: errMsg = GlobalDialogManager.createMessageBox('No selection', 'Nothing selected, cannot run exporter.', dr.Dialog.ERROR) errMsg.run() return shaderlist = [] geomlist = [] blendlist = [] xcenter = 0 ycenter = 0 zcenter = 0 def randfloat(a,b): c=time.clock() return a+(b-a)*((c*1000000)%1) # used for getting the blend height def getBlendHeight(x,p,size): min = 0 max = 0 for i in range(size-1): y = x[i] y[2] if y[2]max: max=y[2] return max*float(p)+min*(1-float(p)) # method checking whether a point is inside an aabb def isInside(x,ab): origin = ab.origin ext = ab.extents min = origin - ext max = origin + ext if (x[0]max.x()-xcenter): return 0 if (x[1]max.y()-ycenter): return 0 if (x[2]max.z()-zcenter): return 0 return 1 # which texture to choose def getColor(x): for bl in blendlist: if (isInside(x,bl)): return 1 return 0 # simple linear triangulation of n-sided poly def triangulate(pointset): tris = [] for count in range(1, len(pointset) - 1): tris.append([pointset[0], pointset[count], pointset[count + 1]]) return tris # skin patch matrix with tris def skinmatrix(pointset, width, height): tris = [] for h in range(height-1): for w in range(width-1): tris.append([pointset[w+(h*width)], pointset[w+1+(h*width)], pointset[w+width+(h*width)]]) tris.append([pointset[w+1+(h*width)], pointset[w+1+width+(h*width)], pointset[w+width+(h*width)]]) return tris # Obsttorte: Method to get the AABB of this Brush def processBlendBrush(brushnode): #ab = AABB(brushnode) origin = brushnode.getFace(0).getWinding()[0].vertex ab = dr.AABB(origin,origin-origin) numfaces = brushnode.getNumFaces() for index in range(numfaces): facenode = brushnode.getFace(index) winding = facenode.getWinding() for x in winding: ab.includePoint(x.vertex) #print(ab.getRadius()) blendlist.append(ab) def processBrush(brushnode): verts = [] faces = [] # Obsttorte: if blend, process seperately if (brushnode.hasShader('textures/common/blend')): processBlendBrush(brushnode) return numfaces = brushnode.getNumFaces() for index in range(numfaces): facenode = brushnode.getFace(index) shader = facenode.getShader() # Tels: skip if caulk and no caulk should be exported if (shader == 'textures/common/caulk') and (int(GlobalRegistry.get('user/scripts/aseExport/exportcaulk'))) == 0: continue if not shader in shaderlist: shaderlist.append(shader) winding = facenode.getWinding() tris = triangulate([x+len(verts) for x in range(len(winding))]) for x in tris: x.append(shaderlist.index(shader)) faces.append(x) for x in reversed(winding): verts.append([x.vertex.x(), x.vertex.y(), x.vertex.z(), x.texcoord.x(), x.texcoord.y() * -1, x.normal.x(), x.normal.y(), x.normal.z()]) geomlist.append([verts, faces]) return def processPatch(patchnode): verts = [] faces = [] shader = patchnode.getShader() # Tels: skip if caulk and no caulk should be exported if shader == 'textures/common/caulk' and int(GlobalRegistry.get('user/scripts/aseExport/exportcaulk')) == 0: return if not shader in shaderlist: shaderlist.append(shader) mesh = patchnode.getTesselatedPatchMesh() for x in mesh.vertices: verts.append([x.vertex.x(), x.vertex.y(), x.vertex.z(), x.texcoord.x(), x.texcoord.y() * -1, x.normal.x(), x.normal.y(), x.normal.z()]) tris = skinmatrix([x for x in range(len(verts))], mesh.width, mesh.height) for x in tris: x.append(shaderlist.index(shader)) faces.append(x) geomlist.append([verts, faces]) return # Branch on primitive nodes def processPrimitive(scenenode): if scenenode.isBrush(): processBrush(scenenode.getBrush()) elif scenenode.isPatch(): processPatch(scenenode.getPatch()) return # Traversor class to visit child primitives of entities class nodeVisitor(dr.SceneNodeVisitor): def pre(self, scenenode): # Brush? if scenenode.isBrush(): processBrush(scenenode.getBrush()) # Patch? elif scenenode.isPatch(): processPatch(scenenode.getPatch()) # Traverse all child nodes, regardless of type return 1 class dataCollector(dr.SelectionVisitor): def visit(self, scenenode): if scenenode.isBrush() or scenenode.isPatch(): processPrimitive(scenenode) elif scenenode.isEntity(): # greebo: Found an entity, this could be a func_static or similar # Traverse children of this entity using a new walker nodewalker = nodeVisitor() scenenode.traverse(nodewalker) else: print('WARNING: unsupported node type selected. Skipping: ' + scenenode.getNodeType()) # Dialog dialog = GlobalDialogManager.createDialog(script + 'v' + version) # Add an entry box and remember the handle fileHandle = dialog.addEntryBox("Filename:") dialog.setElementValue(fileHandle, GlobalRegistry.get('user/scripts/aseExport/recentFilename')) # Add an entry box and remember the handle pathHandle = dialog.addPathEntry("Save path:", True) dialog.setElementValue(pathHandle, GlobalRegistry.get('user/scripts/aseExport/recentPath')) # Add a checkbox centerObjectsHandle = dialog.addCheckbox("Center objects at 0,0,0 origin") dialog.setElementValue(centerObjectsHandle, GlobalRegistry.get('user/scripts/aseExport/centerObjects')) # Add another checkbox exportCaulkHandle = dialog.addCheckbox("Export caulked faces") dialog.setElementValue(exportCaulkHandle, GlobalRegistry.get('user/scripts/aseExport/exportcaulk')) # Add a Spin Button for blending and one for random height #blendHeightHandle = dialog.addSpinButton("Level of blending in percent",0,1,0.05,2) #blendRandomnessHandle = dialog.addSpinButton("Randomness",0,1,0.05,2) if dialog.run() == dr.Dialog.OK: fullpath = dialog.getElementValue(pathHandle) + '/' + dialog.getElementValue(fileHandle) if not fullpath.endswith('.ase'): fullpath = fullpath + '.ase' # Save the path for later use GlobalRegistry.set('user/scripts/aseExport/recentFilename', dialog.getElementValue(fileHandle)) GlobalRegistry.set('user/scripts/aseExport/recentPath', dialog.getElementValue(pathHandle)) GlobalRegistry.set('user/scripts/aseExport/centerObjects', dialog.getElementValue(centerObjectsHandle)) GlobalRegistry.set('user/scripts/aseExport/exportcaulk', dialog.getElementValue(exportCaulkHandle)) try: file = open(fullpath, 'r') file.close() prompt = GlobalDialogManager.createMessageBox('Warning', 'The file ' + fullpath + ' already exists. Do you wish to overwrite it?', dr.Dialog.ASK) if prompt.run() == dr.Dialog.YES: overwrite = True else: overwrite = False except IOError: overwrite = True if overwrite: # Tels: Only collect the data if we are going to export it walker = dataCollector() GlobalSelectionSystem.foreachSelected(walker) # greebo: Check if we should center objects at the 0,0,0 origin if int(dialog.getElementValue(centerObjectsHandle)) == 1: #center objects at 0,0,0 xlist = [] ylist = [] zlist = [] for item in geomlist: for vert in item[0]: xlist.append(vert[0]) ylist.append(vert[1]) zlist.append(vert[2]) xcenter=(max(xlist)+min(xlist))/2 ycenter=(max(ylist)+min(ylist))/2 zcenter=(max(zlist)+min(zlist))/2 for item in geomlist: for vert in item[0]: vert[0] = vert[0] - xcenter vert[1] = vert[1] - ycenter vert[2] = vert[2] - zcenter # split objects that do not share the same texture on all faces newgeomlist = [] for x in geomlist: texlist = [] for data in x[1]: texlist.append(data[3]) if len(set(texlist)) > 1: temp = [] for texture in set(texlist): vertlist = [] facelist = [] for data in x[1]: if data[3] == texture: facelist.append(data) usedverts = [] for face in facelist: usedverts.extend(face[0:3]) usedverts = list(set(usedverts)) for index in usedverts: vertlist.append(x[0][index]) newfacelist = [] for face in facelist: newfacelist.append([vertlist.index(x[0][face[0]]),vertlist.index(x[0][face[1]]),vertlist.index(x[0][face[2]]),face[3]]) newgeomlist.append([vertlist, newfacelist]) #del geomlist[geomlist.index(x)] #geomlist.extend(temp) #newgeomlist.append(temp) else: newgeomlist.append(x) geomlist = newgeomlist scene = '''\t*SCENE_FILENAME "{0}" \t*SCENE_FIRSTFRAME 0 \t*SCENE_LASTFRAME 100 \t*SCENE_FRAMESPEED 30 \t*SCENE_TICKSPERFRAME 160 \t*SCENE_BACKGROUND_STATIC 0.0000\t0.0000\t0.0000 \t*SCENE_AMBIENT_STATIC 0.0000\t0.0000\t0.0000'''.format(GlobalMap.getMapName()) materials = str() for x in shaderlist: materials = materials + '''\t*MATERIAL {0} {{ \t\t*MATERIAL_NAME "{1}" \t\t*MATERIAL_CLASS "Standard" \t\t*MATERIAL_AMBIENT 0.5882\t0.5882\t0.5882 \t\t*MATERIAL_DIFFUSE 0.5882\t0.5882\t0.5882 \t\t*MATERIAL_SPECULAR 0.9000\t0.9000\t0.9000 \t\t*MATERIAL_SHINE 0.1000 \t\t*MATERIAL_SHINESTRENGTH 0.0000 \t\t*MATERIAL_TRANSPARENCY 0.0000 \t\t*MATERIAL_WIRESIZE 1.0000 \t\t*MATERIAL_SHADING Blinn \t\t*MATERIAL_XP_FALLOFF 0.0000 \t\t*MATERIAL_SELFILLUM 0.0000 \t\t*MATERIAL_FALLOFF In \t\t*MATERIAL_XP_TYPE Filter \t\t*MAP_DIFFUSE {{ \t\t\t*MAP_NAME "{2}" \t\t\t*MAP_CLASS "Bitmap" \t\t\t*MAP_SUBNO 1 \t\t\t*MAP_AMOUNT 1.0000 \t\t\t*BITMAP "\\\\purgatory\\purgatory\\doom\\base\{2}" \t\t\t*MAP_TYPE Screen \t\t\t*UVW_U_OFFSET 0.0000 \t\t\t*UVW_V_OFFSET 0.0000 \t\t\t*UVW_U_TILING 1.0000 \t\t\t*UVW_V_TILING 1.0000 \t\t\t*UVW_ANGLE 0.0000 \t\t\t*UVW_BLUR 1.0000 \t\t\t*UVW_BLUR_OFFSET 0.0000 \t\t\t*UVW_NOUSE_AMT 1.0000 \t\t\t*UVW_NOISE_SIZE 1.0000 \t\t\t*UVW_NOISE_LEVEL 1 \t\t\t*UVW_NOISE_PHASE 0.0000 \t\t\t*BITMAP_FILTER Pyramidal \t\t}} \t}} '''.format(shaderlist.index(x), x, x.replace('/','\\')) geomobjects = str() for x in geomlist: # x[0] = vertices # vert[0] - vert[2] = vertex coords # vert[3] - vert[4] = texture coords # vert[5] - vert[7] = normal # x[1] = faces vertlist = str() #bh = getBlendHeight(x[0],dialog.getElementValue(blendHeightHandle),len(x[0])) clist = [] for data in x[0]: clist.append(getColor(data)) for count, data in enumerate(x[0]): vertlist = vertlist + '''\t\t\t*MESH_VERTEX {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(count, data[0], data[1], data[2]) facelist = str() for count, data in enumerate(x[1]): facelist = facelist + '''\t\t\t*MESH_FACE {0}: A: {1} B: {2} C: {3} AB: 0 BC: 0 CA: 0\t *MESH_SMOOTHING 1 \t*MESH_MTLID {4}\n'''.format(count, data[0], data[1], data[2], data[3]) tvertlist = str() for count, data in enumerate(x[0]): tvertlist = tvertlist + '''\t\t\t*MESH_TVERT {0}\t{1: 10.4f}\t{2: 10.4f}\t0.0000\n'''.format(count, data[3], data[4]) tfacelist = str() for count, data in enumerate(x[1]): tfacelist = tfacelist + '''\t\t\t*MESH_TFACE {0}\t{1}\t{2}\t{3}\n'''.format(count, data[0], data[1], data[2]) cfacelist = str() for count, data in enumerate(x[1]): cfacelist = cfacelist + '''\t\t\t*MESH_CFACE {0}\t{1}\t{2}\t{3}\n'''.format(count,clist[data[0]],clist[data[1]],clist[data[2]]) normals = str() for count, data in enumerate(x[1]): normals += '''\t\t\t*MESH_FACENORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(count, x[0][data[0]][5], x[0][data[0]][6], x[0][data[0]][7]) # greebo: use first vertex normal as face normal normals += '''\t\t\t\t*MESH_VERTEXNORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(data[0], x[0][data[0]][5], x[0][data[0]][6], x[0][data[0]][7]) normals += '''\t\t\t\t*MESH_VERTEXNORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(data[1], x[0][data[1]][5], x[0][data[1]][6], x[0][data[1]][7]) normals += '''\t\t\t\t*MESH_VERTEXNORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(data[2], x[0][data[2]][5], x[0][data[2]][6], x[0][data[2]][7]) if len(x[1]) == 0: continue geomobjects = geomobjects + '''*GEOMOBJECT {{ \t*NODE_NAME "{0}" \t*NODE_TM {{ \t\t*NODE_NAME "{0}" \t\t*INHERIT_POS 0 0 0 \t\t*INHERIT_ROT 0 0 0 \t\t*INHERIT_SCL 0 0 0 \t\t*TM_ROW0 1.0000\t0.0000\t0.0000 \t\t*TM_ROW1 0.0000\t1.0000\t0.0000 \t\t*TM_ROW2 0.0000\t0.0000\t1.0000 \t\t*TM_ROW3 0.0000\t0.0000\t0.0000 \t\t*TM_POS 0.0000\t0.0000\t0.0000 \t\t*TM_ROTAXIS 0.0000\t0.0000\t0.0000 \t\t*TM_ROTANGLE 0.0000 \t\t*TM_SCALE 1.0000\t1.0000\t1.0000 \t\t*TM_SCALEAXIS 0.0000\t0.0000\t0.0000 \t\t*TM_SCALEAXISANG 0.0000 \t}} \t*MESH {{ \t\t*TIMEVALUE 0 \t\t*MESH_NUMVERTEX {1} \t\t*MESH_NUMFACES {2} \t\t*MESH_VERTEX_LIST {{ {3}\t\t}} \t\t*MESH_FACE_LIST {{ {4}\t\t}} \t\t*MESH_NUMTVERTEX {5} \t\t*MESH_TVERTLIST {{ {6}\t\t}} \t\t*MESH_NUMTVFACES {7} \t\t*MESH_TFACELIST {{ {8}\t\t}} \t\t*MESH_NUMCVERTEX 2 \t\t*MESH_CVERTLIST {{ \t\t\t*MESH_VERTCOL 0\t1.0000\t1.0000\t1.0000 \t\t\t*MESH_VERTCOL 1\t0.0000\t0.0000\t0.0000 \t\t}} \t\t*MESH_NUMCVFACES {9} \t\t*MESH_CFACELIST {{ {10}\t\t}} \t\t*MESH_NORMALS {{ {11}\t\t}} \t}} \t*PROP_MOTIONBLUR 0 \t*PROP_CASTSHADOW 1 \t*PROP_RECVSHADOW 1 \t*MATERIAL_REF {12} }}\n'''.format('mesh' + str(geomlist.index(x)), \ len(x[0]), \ len(x[1]), \ vertlist, \ facelist, \ len(x[0]), \ tvertlist, \ len(x[1]), \ tfacelist, \ len(x[1]), \ cfacelist, \ normals, \ x[1][0][3]) # material reference from first face data = '''*3DSMAX_ASCIIEXPORT\t200 *COMMENT "{0} v{1}" *SCENE {{ {2} }} *MATERIAL_LIST {{ \t*MATERIAL_COUNT {3} {4}}} {5}'''.format(script, version, scene, len(shaderlist), materials, geomobjects) # Write the compiled data to the output file file = open(fullpath, 'w') file.write(data) file.close() # __executeCommand__ evaluates to true after DarkRadiant has successfully initialised if __executeCommand__: execute() DarkRadiant-2.14.0/install/scripts/commands/check_for_invalid_visportals.py000066400000000000000000000057151413722237400272260ustar00rootroot00000000000000"""Find any visportal brushes in the map with more than exactly one face assigned to the textures/editor/visportal shader. Tracker item: #4397 (http://bugs.thedarkmod.com/view.php?id=4397) Author: greebo Version: 1.1 """ __commandName__ = 'check_invalid_visportals' # should not contain spaces __commandDisplayName__ = 'Test for invalid Visportals ' def execute(): # Returns 1 if the brush is a valid visportal, 0 otherwise def testVisportalBrush(brush, visportalShader): numVisportalFaces = 0 for index in range(brush.getNumFaces()): if brush.getFace(index).getShader() == visportalShader: numVisportalFaces += 1 if numVisportalFaces != 1: return 0 # brush is not OK return 1 # brush is ok class VisportalResults(object): numVisportals = 0 invalidPortals = [] portalsNotChildOfWorldspawn = [] results = VisportalResults() visportalShader = 'textures/editor/visportal' import darkradiant as dr class VisportalChecker(dr.SceneNodeVisitor): def pre(self, node): if node.isBrush(): brush = node.getBrush() if brush.hasShader(visportalShader): results.numVisportals += 1 # Check the parent of this brush (must be child of worldspawn) if brush.getParent().isEntity(): if brush.getParent().getEntity().getKeyValue('classname') != 'worldspawn': results.invalidPortals.append(brush) results.portalsNotChildOfWorldspawn.append(brush) if not testVisportalBrush(brush, visportalShader): results.invalidPortals.append(brush) return 0 # don't traverse brushes return 1 # Instantiate a new walker object and check brushes walker = VisportalChecker() GlobalSceneGraph.root().traverse(walker) # Notify the user about the results msg = '%d visportals checked, %d have errors' % (results.numVisportals, len(results.invalidPortals)) + '\n\n' if results.numVisportals == 0: msg = 'There are no visportals in this map.' if len(results.invalidPortals) > 0: # Unselect everything in the scene before highlighting the problematic portals GlobalSelectionSystem.setSelectedAll(0) # Highlight the brushes one by one for brush in results.invalidPortals: brush.setSelected(1) if len(results.portalsNotChildOfWorldspawn) > 0: msg += '%d visportal brushes are not parented to worldspawn\n' % (len(results.portalsNotChildOfWorldspawn)) msg += 'The problematic visportals have been highlighted.' GlobalDialogManager.createMessageBox('Visportal Test Results', msg, dr.Dialog.CONFIRM).run() if __executeCommand__: execute() DarkRadiant-2.14.0/install/scripts/commands/example.py000066400000000000000000000014401413722237400227310ustar00rootroot00000000000000# Set the command name so that DarkRadiant recognises this file __commandName__ = 'Example' # should not contain spaces __commandDisplayName__ = 'Nice display name for the menus' # should not contain spaces # The actual algorithm called by DarkRadiant is contained in the execute() function def execute(): shader = GlobalShaderSystem.getShaderForName('bc_rat') print(shader.getName()) # the "Global*" variables like GlobalShaderSystem are already exposed to this scripts # The rest needs to imported from the darkradiant module and referred to by the prefix "dr" import darkradiant as dr GlobalDialogManager.createMessageBox('Example Box', str(e), dr.Dialog.ERROR).run() # __executeCommand__ evaluates to true after DarkRadiant has successfully initialised if __executeCommand__: execute() DarkRadiant-2.14.0/install/scripts/commands/export_obj.py000066400000000000000000000264471413722237400234670ustar00rootroot00000000000000# ***** BEGIN GPL LICENSE BLOCK ***** # # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ***** END GPL LICENCE BLOCK ***** # Set the command name so that DarkRadiant recognises this file __commandName__ = 'objExport' __commandDisplayName__ = 'Export OBJ...' # The actual algorithm called by DarkRadiant is contained in the execute() function def execute(): script = "DarkRadiant Wavefront OBJ Export (*.obj)" author = "Python port by greebo, based on original exporter C++ code in DarkRadiant and the ASE exporter scripts" version = "0.2" import darkradiant as dr # Check if we have a valid selection selectionInfo = GlobalSelectionSystem.getSelectionInfo() # Don't allow empty selections or selected components only if selectionInfo.totalCount == 0 or selectionInfo.totalCount == selectionInfo.componentCount: errMsg = GlobalDialogManager.createMessageBox('No selection', 'Nothing selected, cannot run exporter.', dr.Dialog.ERROR) errMsg.run() return # An exportable object found in the map class Geometry(object): name = '' # Name of the object to be exported vertices = [] # Vertices texcoords = [] # Texture coordinates faces = [] # Each face in turn is an array of indices referencing the vertices and texcoords # For simplicity, we assume that the referenced vertices and texcoords always # have the same global index number. def __init__(self, name): self.name = name self.vertices = [] self.texcoords = [] self.faces = [] # An exportable object found in the map class Geometries(object): vertexCount = 0 # Global Vertex Index (every vertex in an OBJ file has a unique number) objects = [] # List of Geometry objects # We put all of the objects we collect in the map into this array # Before we write it to the output stream the vertices can be processed (e.g. centered) geomlist = Geometries() def processBrush(brushnode): # Create a new exportable object geometry = Geometry('Brush{0}'.format(len(geomlist.objects))) numfaces = brushnode.getNumFaces() for index in range(numfaces): facenode = brushnode.getFace(index) shader = facenode.getShader() # Tels: skip if caulk and no caulk should be exported if (shader == 'textures/common/caulk') and (int(GlobalRegistry.get('user/scripts/objExport/exportcaulk'))) == 0: continue winding = facenode.getWinding() # Remember the index of the first vertex firstVertex = geomlist.vertexCount for point in winding: # Write coordinates into the export buffers geometry.vertices.append(point.vertex) geometry.texcoords.append(point.texcoord) # Keep track of the exported vertices geomlist.vertexCount += 1 # Append the face to the list, referencing vertices from firstVertex to the current count # Face indices are 1-based, so increase by 1 each time # Reverse the list to produce the correct face normal direction geometry.faces.append([i for i in reversed(range(firstVertex+1, geomlist.vertexCount+1))]) print('Processed brush geometry: {0} verts and {1} faces'.format(len(geometry.vertices), len(geometry.faces))) geomlist.objects.append(geometry) return def processPatch(patchnode): shader = patchnode.getShader() # Tels: skip if caulk and no caulk should be exported if shader == 'textures/common/caulk' and int(GlobalRegistry.get('user/scripts/objExport/exportcaulk')) == 0: return # Create a new exportable object geometry = Geometry('Patch{0}'.format(len(geomlist.objects))) mesh = patchnode.getTesselatedPatchMesh() # Remember the index of the first vertex firstVertex = geomlist.vertexCount for h in range(0, mesh.height): for w in range(0, mesh.width): point = mesh.vertices[mesh.width*h + w] # Write coordinates into the lists geometry.vertices.append(point.vertex) geometry.texcoords.append(point.texcoord) # Keep track of the exported vertices geomlist.vertexCount += 1 # Starting from the second row, we're gathering the faces if h > 0 and w > 0: # Gather the indices forming a quad v1 = 1 + firstVertex + h*mesh.width + w; v2 = 1 + firstVertex + (h-1)*mesh.width + w; v3 = 1 + firstVertex + (h-1)*mesh.width + (w-1); v4 = 1 + firstVertex + h*mesh.width + (w-1); # Construct the quad geometry.faces.append([v1, v4, v3, v2]) print('Processed patch geometry: {0} verts and {1} faces'.format(len(geometry.vertices), len(geometry.faces))) geomlist.objects.append(geometry) return # Traversor class to visit child primitives of entities class nodeVisitor(dr.SceneNodeVisitor): def pre(self, scenenode): if scenenode.isBrush(): processBrush(scenenode.getBrush()) elif scenenode.isPatch(): processPatch(scenenode.getPatch()) # Traverse all child nodes, regardless of type return 1 class SelectionWalker(dr.SelectionVisitor): def visit(self, scenenode): if scenenode.isBrush(): processBrush(scenenode.getBrush()) elif scenenode.isPatch(): processPatch(scenenode.getPatch()) elif scenenode.isEntity(): # greebo: Found an entity, this could be a func_static or similar # Traverse children of this entity using a new walker nodewalker = nodeVisitor() scenenode.traverse(nodewalker) else: print('WARNING: unsupported node type selected. Skipping: ' + scenenode.getNodeType()) # Dialog dialog = GlobalDialogManager.createDialog(script + ' v' + version) # Add an entry box and remember the handle fileHandle = dialog.addEntryBox("Filename:") dialog.setElementValue(fileHandle, GlobalRegistry.get('user/scripts/objExport/recentFilename')) # Add an entry box and remember the handle pathHandle = dialog.addPathEntry("Save path:", True) dialog.setElementValue(pathHandle, GlobalRegistry.get('user/scripts/objExport/recentPath')) # Add a checkbox centerObjectsHandle = dialog.addCheckbox("Center objects at 0,0,0 origin") dialog.setElementValue(centerObjectsHandle, GlobalRegistry.get('user/scripts/objExport/centerObjects')) # Add another checkbox exportCaulkHandle = dialog.addCheckbox("Export caulked faces") dialog.setElementValue(exportCaulkHandle, GlobalRegistry.get('user/scripts/objExport/exportcaulk')) if dialog.run() == dr.Dialog.OK: fullpath = dialog.getElementValue(pathHandle) + '/' + dialog.getElementValue(fileHandle) if not fullpath.endswith('.obj'): fullpath = fullpath + '.obj' # Save the path for later use GlobalRegistry.set('user/scripts/objExport/recentFilename', dialog.getElementValue(fileHandle)) GlobalRegistry.set('user/scripts/objExport/recentPath', dialog.getElementValue(pathHandle)) GlobalRegistry.set('user/scripts/objExport/centerObjects', dialog.getElementValue(centerObjectsHandle)) GlobalRegistry.set('user/scripts/objExport/exportcaulk', dialog.getElementValue(exportCaulkHandle)) try: file = open(fullpath, 'r') file.close() prompt = GlobalDialogManager.createMessageBox('Warning', 'The file ' + fullpath + ' already exists. Do you wish to overwrite it?', dr.Dialog.ASK) if prompt.run() == dr.Dialog.YES: overwrite = True else: overwrite = False except IOError: overwrite = True if overwrite: walker = SelectionWalker() GlobalSelectionSystem.foreachSelected(walker) # greebo: Check if we should center objects at the 0,0,0 origin if int(dialog.getElementValue(centerObjectsHandle)) == 1: # center objects at 0,0,0 xlist = [] ylist = [] zlist = [] for item in geomlist.objects: for vert in item.vertices: xlist.append(vert.x()) ylist.append(vert.y()) zlist.append(vert.z()) xcenter=(max(xlist)+min(xlist))/2 ycenter=(max(ylist)+min(ylist))/2 zcenter=(max(zlist)+min(zlist))/2 for item in geomlist.objects: for vert in item.vertices: vert -= dr.Vector3(xcenter, ycenter, zcenter) # This string will hold our export data data = str() for x in geomlist.objects: objstr = str() # Group name (g) objstr = objstr + "g {0}\n\n".format(x.name) # Vertex list (v) for vert in x.vertices: objstr = objstr + "v {0} {1} {2}\n".format(vert.x(), vert.y(), vert.z()) objstr = objstr + "\n" # Texture coord list (vt) for texcoord in x.texcoords: objstr = objstr + "vt {0} {1}\n".format(texcoord.x(), 1-texcoord.y()) # reverse V coord objstr = objstr + "\n" # Face list (f) for faceIndices in x.faces: objstr = objstr + "f" for faceIndex in faceIndices: objstr = objstr + " {0}/{1}".format(faceIndex, faceIndex) objstr = objstr + "\n" objstr = objstr + "\n" data = data + objstr # Write the compiled data to the output file file = open(fullpath, 'w') file.write(data) file.close() print('Done writing OBJ data to {0}'.format(fullpath)) # __executeCommand__ evaluates to true after DarkRadiant has successfully initialised if __executeCommand__: execute() DarkRadiant-2.14.0/install/scripts/commands/find_duplicate_entities.py000066400000000000000000000035521413722237400261620ustar00rootroot00000000000000__commandName__ = 'findDuplicateEntities' __commandDisplayName__ = 'Find Duplicate Entities' if __executeCommand__: import darkradiant as dr class EntityCache(dr.SceneNodeVisitor): entities = [] def pre(self, node): # Try to "cast" the node to an entity entity = node.getEntity() if not entity.isNull(): self.entities.append({ 'node': node, 'origin': entity.getKeyValue('origin'), 'model': entity.getKeyValue('model'), 'classname': entity.getKeyValue('classname'), 'rotation': entity.getKeyValue('rotation') }) return 0 # don't traverse this entity's children return 1 # not an entity, so traverse children GlobalSelectionSystem.setSelectedAll(False) entity_cache = EntityCache() GlobalSceneGraph.root().traverse(entity_cache) duplicates = 0 num_entities = len(entity_cache.entities) for i in range(0, num_entities - 1): current_entity = entity_cache.entities[i] for j in range(i + 1 , num_entities): compare_entity = entity_cache.entities[j] if (current_entity['origin'] == compare_entity['origin'] and current_entity['model'] == compare_entity['model'] and current_entity['classname'] == compare_entity['classname'] and current_entity['rotation'] == compare_entity['rotation'] ): compare_entity['node'].setSelected(True) duplicates += 1 if duplicates > 0: result = 'Found and selected %d duplicate entities.' % duplicates else: result = 'No duplicate entities found.' GlobalDialogManager.createMessageBox('Find Duplicate Entities Results', result, dr.Dialog.CONFIRM).run() DarkRadiant-2.14.0/install/scripts/commands/patchsplitter.py000066400000000000000000000302511413722237400241660ustar00rootroot00000000000000__commandName__ = 'SplitPatch' __commandDisplayName__ = 'Split patch' def execute(): MAXGRIDPOWER = 8 # Grid 256 MINGRIDPOWER = -1 # Grid 0.5 class UserError(Exception): pass class TooManyVerts(Exception): pass class TooFewVerts(Exception): pass class Vert: """Holds coords for one patch control vertex.""" def __init__(self, vertex, texcoord): from darkradiant import Vector3, Vector2 self.vertex = Vector3(vertex) self.texcoord = Vector2(texcoord) class Verts: """A 2d matrix (row/col) implemented as a list where each element is a list of Vert objects in one row of the patch.""" def __init__(self, patch=None): self.verts = [] if patch: for rownum in range(patch.getHeight()): row = [] for colnum in range(patch.getWidth()): v = Vert(patch.ctrlAt(rownum, colnum).vertex, patch.ctrlAt(rownum, colnum).texcoord) row.append(v) self.verts.append(row) class PatchData: """Store all of the information needed to reconstruct a patch exactly.""" def __init__(self, patch): self.cols = patch.getWidth() # int self.rows = patch.getHeight() # int self.verts = Verts(patch) self.shader = patch.getShader() # string self.subdivisionsFixed = patch.subdivionsFixed() # bool self.subdivs = patch.getSubdivisions() # Subdivisions def replaceverts(self, verts): self.verts = verts self.rows = len(verts.verts) self.cols = len(verts.verts[0]) def getRows(self, first=0, last=None): """Return a Verts object holding the subset of the patch mesh verts in the specified row range.""" if not last: last = self.rows result = Verts() result.verts = self.verts.verts[first:last] return result def getCols(self, first=0, last=None): """Return a Verts object holding the subset of the patch mesh verts in the specified column range.""" if not last: last = self.cols result = Verts() result.verts = [r[first:last] for r in self.verts.verts] return result def getVertex(self, row, col): return self.verts.verts[row][col].vertex def getTexcoord(self, row, col): return self.verts.verts[row][col].texcoord # Utility functions def getAndValidateSelection(): sInfo = GlobalSelectionSystem.getSelectionInfo() if sInfo.patchCount != 1 or sInfo.brushCount > 0 or sInfo.entityCount > 0 or sInfo.componentCount < 2: raise UserError('Bad selection. Select one patch only, and ' \ '2 or more verts from the same (pink) row or column.') patch = GlobalSelectionSystem.ultimateSelected().getPatch() if not patch.isValid(): raise UserError("This isn't a valid patch. It has some invalid " \ "vertices, or maybe all vertices are in the same spot.") #if not patch.subdivionsFixed(): #raise UserError('You need to fix tesselation on the patch in the ' \ #'Patch Inspector (Shift+S) before splitting it.') return patch def resetPatch(patch, patchdata): """Apply patchdata to the patch, reconstructing it.""" p, pd = patch, patchdata p.setDims(pd.cols, pd.rows) p.setShader(pd.shader) p.setFixedSubdivisions(pd.subdivisionsFixed, pd.subdivs) for row in range(pd.rows): for col in range(pd.cols): p.ctrlAt(row, col).vertex = pd.getVertex(row, col) p.ctrlAt(row, col).texcoord = pd.getTexcoord(row, col) p.controlPointsChanged() def clonePatch(patch): """Clone the existing patch so the new one is automatically part of the same func_static and layer as the original. Return a reference to the new patch.""" patch.setSelected(0) # Clears vertex editing mode patch.setSelected(1) GlobalCommandSystem.execute('CloneSelection') return GlobalSelectionSystem.ultimateSelected().getPatch() # Procedures for identifying the selected verts. # They can't be accessed directly, so move them about to find out at what # distance they cross the bounding box of the patch. Then infer the # selected verts' bounding box, and which row or col they sit on. def distToEdge(patch, direction, axis, gridPower): """Return distance from selected verts' bounding box to the edge of the patch's bounding box. Make sure orthoview is facing right way before calling. SIDE EFFECTS: Leaves selected verts displaced by a small amount. Grid size is changed.""" GlobalGrid.setGridSize(gridPower) stepsize = 2 ** gridPower reverse = 'right' if direction == 'left' \ else 'left' if direction == 'right' \ else 'down' if direction == 'up' \ else 'up' origin = lambda: getattr(patch.getWorldAABB().origin, axis)() extent = lambda: getattr(patch.getWorldAABB().extents, axis)() if direction in ('right', 'up'): boundary = lambda: origin() + extent() comparison = '<=' else: boundary = lambda: origin() - extent() comparison = '>=' starting_boundary = boundary() looplimit = (extent() * 2) / stepsize # Safety valve. Don't let verts move further than the # extent of the patch. Stops an infinite loop crashing # DR if something goes wrong. stepcount = 0 while eval('boundary() %s starting_boundary' % comparison) and stepcount < looplimit: GlobalCommandSystem.execute('SelectNudge' + direction) stepcount += 1 for undostep in range(stepcount): GlobalCommandSystem.execute('SelectNudge' + reverse) return (stepcount - 1) * stepsize def attemptGetVertsLine(patch, tolerance): """Return ('row', 4) or ('col', 2) etc. Designed to be called multiple times with different tolerance if necessary. SIDE EFFECTS: Leaves selected verts displaced by a small amount. Grid size is changed.""" from math import log AABB = patch.getWorldAABB() gridPower = int(log(tolerance, 2)) GlobalCommandSystem.execute('ViewSide') minX = AABB.origin.x() - AABB.extents.x() + distToEdge(patch, 'left', 'x', gridPower) - tolerance maxX = AABB.origin.x() + AABB.extents.x() - distToEdge(patch, 'right', 'x', gridPower) + tolerance minZ = AABB.origin.z() - AABB.extents.z() + distToEdge(patch, 'down', 'z', gridPower) - tolerance maxZ = AABB.origin.z() + AABB.extents.z() - distToEdge(patch, 'up', 'z', gridPower) + tolerance GlobalCommandSystem.execute('ViewFront') minY = AABB.origin.y() - AABB.extents.y() + distToEdge(patch, 'left', 'y', gridPower) - tolerance maxY = AABB.origin.y() + AABB.extents.y() - distToEdge(patch, 'right', 'y', gridPower) + tolerance GlobalCommandSystem.execute('ViewTop') # Find which verts lie in the selected box includedRows = set() includedCols = set() for row in range(patch.getHeight()): for col in range(patch.getWidth()): vert = patch.ctrlAt(row, col) if minX <= vert.vertex.x() <= maxX and \ minY <= vert.vertex.y() <= maxY and \ minZ <= vert.vertex.z() <= maxZ: includedRows.add(row) includedCols.add(col) # Interpret result # Special case: if the user selects the existing seam of a polyhedron like a sphere or cone: if includedRows == set((0, patch.getHeight()-1)) or includedCols == set((0, patch.getWidth()-1)): raise UserError("You've selected the existing seam of a 3d patch. It's already cut " \ "there, so no action has been taken.") if len(includedRows) > 1 and len(includedCols) > 1: raise TooManyVerts() elif len(includedRows) < 2 and len(includedCols) < 2: raise TooFewVerts() elif len(includedRows) == 1: return 'row', includedRows.pop() else: return 'col', includedCols.pop() def getSelectedVertsLine(patch, patchdata): """Return ('row', 4) or ('col', 2) etc. Makes multiple attempts if needed. Mutates patch, so uses patchdata to restore state.""" userGridPower = GlobalGrid.getGridPower() # Start with tolerance = the user's grid size tolerance = 2 ** userGridPower mintolerance = 2 ** MINGRIDPOWER maxtolerance = 2 ** MAXGRIDPOWER lineType, lineNum = None, None while (not lineType) and mintolerance <= tolerance <= maxtolerance: try: print('Patch Splitter: Trying to identify selected verts with tolerance %0.2f' % tolerance) lineType, lineNum = attemptGetVertsLine(patch, tolerance) # has side effects that can't be fixed till search \ except TooManyVerts: # \ is finished, as the fix clears the user's selection tolerance /= 2.0 except TooFewVerts: tolerance *= 2 GlobalGrid.setGridSize(userGridPower) # \ fix the side-effects resetPatch(patch, patchdata) # / if not lineType: raise UserError('Unable to determine selected verts. Try again with different ' \ 'verts from the same row/column. Make sure all the verts are ' \ 'on the same line. Selecting 2 _pink_ verts might help with ' \ 'very twisty patches.') if lineNum == 0 \ or (lineType == 'row' and lineNum == patch.getHeight()-1) \ or (lineType == 'col' and lineNum == patch.getWidth()-1): raise UserError("You've selected the existing edge of the patch. No action has been taken.") if lineNum % 2: raise UserError("You've selected a green line. Patches can be cut only along lines with some pink verts.") return lineType, lineNum # Execution starts here # STEP 1: Validate selection patch = getAndValidateSelection() patchdata = PatchData(patch) # STEP 2: Work out what row or column is selected lineType, lineNum = getSelectedVertsLine(patch, patchdata) print('RESULT: ', lineType, lineNum) # STEP 3: Split the patch newpatch = clonePatch(patch) try: if lineType == 'row': newverts1 = patchdata.getRows(last=lineNum+1) newverts2 = patchdata.getRows(first=lineNum) elif lineType == 'col': newverts1 = patchdata.getCols(last=lineNum+1) newverts2 = patchdata.getCols(first=lineNum) # Make PatchData objects for the 2 new patches. Initialize them with # either of the existing patches then swap out the verts list. newdata1, newdata2 = PatchData(newpatch), PatchData(newpatch) newdata1.replaceverts(newverts1) newdata2.replaceverts(newverts2) # Adjust the patches resetPatch(newpatch, newdata2) resetPatch(patch, newdata1) except Exception as e: # Clean up before reporting error GlobalSelectionSystem.setSelectedAll(False) newpatch.setSelected(True) GlobalCommandSystem.execute('deleteSelected') resetPatch(patch, patchdata) raise # Step 4: Success! leave the new patches selected patch.setSelected(True) newpatch.setSelected(True) import darkradiant as dr if __executeCommand__: try: execute() except Exception as e: GlobalDialogManager.createMessageBox('Patch Splitter', str(e), dr.Dialog.ERROR).run() DarkRadiant-2.14.0/install/scripts/commands/select_all_models_of_type.py000066400000000000000000000027321413722237400265020ustar00rootroot00000000000000# Set the command name so that DarkRadiant recognises this file __commandName__ = 'SelectAllModelsOfType' __commandDisplayName__ = 'Select all Models of same type' # The actual algorithm called by DarkRadiant is contained in the execute() # function def execute(): # Collect all currently selected models selectedModelNames = {} import darkradiant as dr class Walker(dr.SelectionVisitor) : def visit(self, node): # Try to "cast" the node to an entity entity = node.getEntity() if not entity.isNull(): if not entity.getKeyValue('model') == '': selectedModelNames[entity.getKeyValue('model')] = 1 visitor = Walker() GlobalSelectionSystem.foreachSelected(visitor) print('Unique models currently selected: ' + str(len(selectedModelNames))) # Now traverse the scenegraph, selecting all of the same names class SceneWalker(dr.SceneNodeVisitor) : def pre(self, node): # Try to "cast" the node to an entity entity = node.getEntity() if not entity.isNull(): modelName = entity.getKeyValue('model') if not modelName == '' and modelName in selectedModelNames: # match, select this node node.setSelected(1) # SteveL #3690: fixing return values return 0 # don't traverse this entity's children return 1 # not an entity, so traverse children walker = SceneWalker() GlobalSceneGraph.root().traverse(walker) # __executeCommand__ evaluates to true after DarkRadiant has successfully # initialised if __executeCommand__: execute() DarkRadiant-2.14.0/install/scripts/commands/shift_textures_randomly.py000066400000000000000000000013301413722237400262610ustar00rootroot00000000000000# Set the command name so that DarkRadiant recognises this file __commandName__ = 'ShiftTexturesRandomly' __commandDisplayName__ = 'Shift Textures randomly' # The actual algorithm called by DarkRadiant # is contained in the execute() function def execute(): import random import darkradiant as dr class FaceVisitor(dr.SelectedFaceVisitor) : def visitFace(self, face): s = random.randint(0, 100) / 100 t = random.randint(0, 100) / 100 face.shiftTexdef(s, t) visitor = FaceVisitor() GlobalSelectionSystem.foreachSelectedFace(visitor) GlobalCameraManager.getActiveView().refresh() # The variable __executeCommand__ evaluates to true # when DarkRadiant executes this command if __executeCommand__: execute() DarkRadiant-2.14.0/install/scripts/commands/shift_textures_upwards_randomly.py000066400000000000000000000013031413722237400300260ustar00rootroot00000000000000# Set the command name so that DarkRadiant recognises this file __commandName__ = 'ShiftTexturesUpwardsRandomly' __commandDisplayName__ = 'Shift Textures randomly upwards' # The actual algorithm called by DarkRadiant # is contained in the execute() function def execute(): import random import darkradiant as dr class FaceVisitor(dr.SelectedFaceVisitor) : def visitFace(self, face): t = random.randint(0, 100) / 100 face.shiftTexdef(0, t) visitor = FaceVisitor() GlobalSelectionSystem.foreachSelectedFace(visitor) GlobalCameraManager.getActiveView().refresh() # The variable __executeCommand__ evaluates to true # when DarkRadiant executes this command if __executeCommand__: execute() DarkRadiant-2.14.0/install/scripts/commands/test_targets.py000066400000000000000000000047041413722237400240140ustar00rootroot00000000000000"""Find any entities with "target" spawnargs that don't point to a valid entity in the map. Print results to the console, plus show a dialog and offer to select any entities that have missing targets. # 3718 Proposal: RJFerret Script: SteveL """ __commandName__ = 'test_targets' # should not contain spaces __commandDisplayName__ = 'Test for Missing Targets' # should not contain spaces def execute(): g_targets = {} # entityname : [targets] g_missing = {} # entityname : [missingtargets] import darkradiant as dr class TargetFinder(dr.SceneNodeVisitor): def pre(self, node): if node.isEntity(): n = node.getEntity() name = n.getKeyValue('name') targs = [t[1] for t in n.getKeyValuePairs('target')] g_targets[name] = targs return 1 # Instantiate a new walker object and get list of entities/targets walker = TargetFinder() GlobalSceneGraph.root().traverse(walker) # Find any targets that don't exist, and count all targets entities = g_targets.keys() targetcount = 0 for ent in entities: targetcount += len(g_targets[ent]) missing = [] for targ in g_targets[ent]: if targ not in entities: missing.append(targ) if missing: g_missing[ent] = missing # generate report msg = '%d entities found with %d targets' % (len(entities), targetcount) + '\n\n' if not g_missing: msg += 'No missing targets found' GlobalDialogManager.createMessageBox('Missing targets', msg, dr.Dialog.CONFIRM).run() else: msg += 'Missing targets:\n' for ent in g_missing.keys(): for targ in g_missing[ent]: msg += '%s -> %s\n' % (ent, targ) print(msg) # output to console msg += "\nThe list of missing targets has been printed to the console." msg += "\n\nDo you want to select all entities with missing targets?" response = GlobalDialogManager.createMessageBox('Missing targets', msg, dr.Dialog.ASK).run() if response == dr.Dialog.YES: class Selector(dr.SceneNodeVisitor): def pre(self, node): if node.isEntity() and node.getEntity().getKeyValue('name') in g_missing.keys(): node.setSelected(True) return 1 GlobalSceneGraph.root().traverse(Selector()) if __executeCommand__: execute() DarkRadiant-2.14.0/install/scripts/dialogtest.py000066400000000000000000000013701413722237400216360ustar00rootroot00000000000000# Test creating a new dialog dialog = GlobalDialogManager.createDialog("Test") # Add a label dialog.addLabel("Testlabel") # Add an entry box and remember the handle entryHandle = dialog.addEntryBox("Entry") # Add a spin button dialog.addSpinButton("Spinner", 0, 10, 0.5) # Add a combo box, the options must be passed in the form of a StringVector options = StringVector() options.append("Test1") options.append("Test2") dialog.addComboBox("Test", options) # Add a simple checkbox dialog.addCheckbox("TestCheckbox") if dialog.run() == Dialog.OK: dialog = GlobalDialogManager.createMessageBox("Result", "User pressed OK, entry is: " + dialog.getElementValue(entryHandle) + "", Dialog.CONFIRM) dialog.setTitle("Result Popup Message") dialog.run() DarkRadiant-2.14.0/install/scripts/init.py000066400000000000000000000001661413722237400204440ustar00rootroot00000000000000# Called at DarkRadiant startup import sys print('DarkRadiant init.py called, this is Python {0}'.format(sys.version))DarkRadiant-2.14.0/install/scripts/materialtest.py000066400000000000000000000223251413722237400222000ustar00rootroot00000000000000import os import darkradiant as dr # Some interface tests print("bc_rat can be modified" if GlobalMaterialManager.materialCanBeModified('bc_rat') else "bc_rat cannot be modified") bcRatCopy = GlobalMaterialManager.copyMaterial('bc_rat', 'bc_rat_copy') print("Got a copy of bc_rat named {0}".format(bcRatCopy.getName())) print("The copy can be modified" if GlobalMaterialManager.materialCanBeModified(bcRatCopy.getName()) else "The copy cannot be modified?") try: bcRat = GlobalMaterialManager.getMaterial('bc_rat') bcRat.setEditorImageExpressionFromString('this is gonna blow') except RuntimeError as e: print('An exception has been thrown: {}'.format(e)) print("Removing the copy again...") GlobalMaterialManager.removeMaterial(bcRatCopy.getName()) print('Create an empty material named textures/python/blah...') newMaterial = GlobalMaterialManager.createEmptyMaterial('textures/python/blah') print("The new material can be modified" if GlobalMaterialManager.materialCanBeModified(newMaterial.getName()) else "The new material cannot be modified?") renameResult = GlobalMaterialManager.renameMaterial(newMaterial.getName(), newMaterial.getName() + '_renamed') print("The rename operation was successful" if renameResult else "The rename operation failed") # Do something with the new material print('The existing material reference now has the name {0}'.format(newMaterial.getName())) filename = 'materials/_python_test.mtr' newMaterial.setShaderFileName(filename) newMaterial.setEditorImageExpressionFromString('textures/common/caulk') newMaterial.setSortRequest(45.3) print('Surface Type: {0}'.format(newMaterial.getSurfaceType())) print('Cull type: {0}'.format(newMaterial.getCullType())) print('Clamp type: {0}'.format(newMaterial.getClampType())) print('Flags: {0}'.format(newMaterial.getMaterialFlags())) print('Surface Flags: {0}'.format(newMaterial.getSurfaceFlags())) print('Deform Type: {0}'.format(newMaterial.getDeformType())) print('Deform Expression #1: {0}'.format(newMaterial.getDeformExpressionString(0))) print('Deform Decl Name: {0}'.format(newMaterial.getDeformDeclName())) print('Spectrum: {0}'.format(newMaterial.getSpectrum())) print('DecalInfo.stayMilliSeconds: {0}'.format(newMaterial.getDecalInfo().stayMilliSeconds)) print('DecalInfo.fadeMilliSeconds: {0}'.format(newMaterial.getDecalInfo().fadeMilliSeconds)) print('DecalInfo.startColour: {0}'.format(newMaterial.getDecalInfo().startColour)) print('DecalInfo.endColour: {0}'.format(newMaterial.getDecalInfo().endColour)) print('Coverage: {0}'.format(newMaterial.getCoverage())) print('Light Falloff Map Type: {0}'.format(newMaterial.getLightFalloffCubeMapType())) print('Renderbump Arguments: {0}'.format(newMaterial.getRenderBumpArguments())) # There are a couple of pre-defined sort requests, corresponding to the engine code newMaterial.setSortRequest(dr.Material.SortRequest.NEAREST) newMaterial.setClampType(dr.Material.ClampType.NOREPEAT) # clamp newMaterial.setCullType(dr.Material.CullType.NONE) # twosided newMaterial.setPolygonOffset(0.3) newMaterial.setMaterialFlag(dr.Material.Flag.NOSHADOWS) newMaterial.setSurfaceFlag(dr.Material.SurfaceFlag.LADDER) newMaterial.setSurfaceFlag(dr.Material.SurfaceFlag.NONSOLID) newMaterial.setSurfaceType(dr.Material.SurfaceType.WOOD) newMaterial.setSpectrum(5) newMaterial.setIsFogLight(1) newMaterial.setIsBlendLight(0) newMaterial.setDescription("New Material") stageIndex = newMaterial.addStage(dr.MaterialStage.Type.BLEND) print('Material has now {0} stages'.format(newMaterial.getNumStages())) newMaterial.removeStage(stageIndex) diffuseStageIndex = newMaterial.addStage(dr.MaterialStage.Type.DIFFUSE) diffuseStage = newMaterial.getStage(diffuseStageIndex) bumpStageIndex = newMaterial.duplicateStage(diffuseStageIndex) bumpStage = newMaterial.getStage(bumpStageIndex) print('Material has now {0} stages'.format(newMaterial.getNumStages())) # Edit some stage parameters editableDiffuseStage = newMaterial.getEditableStage(diffuseStageIndex) editableDiffuseStage.setStageFlag(dr.MaterialStage.Flag.IGNORE_ALPHATEST) editableDiffuseStage.clearStageFlag(dr.MaterialStage.Flag.FILTER_LINEAR) editableDiffuseStage.setMapType(dr.MaterialStage.MapType.CUBEMAP) editableDiffuseStage.setMapExpressionFromString("env/sky1") editableDiffuseStage.setBlendFuncStrings(["gl_one", "gl_dest_alpha"]) editableDiffuseStage.setAlphaTestExpressionFromString("sinTable[time]") editableDiffuseStage.addTransformation(dr.MaterialStage.TransformType.SCALE, "time", "global0") rotateIndex = editableDiffuseStage.addTransformation(dr.MaterialStage.TransformType.ROTATE, "time*0.5", "") editableDiffuseStage.updateTransformation(rotateIndex, dr.MaterialStage.TransformType.SCALE, "time*0.5", "0.5") editableDiffuseStage.removeTransformation(rotateIndex) editableDiffuseStage.setColourExpressionFromString(dr.MaterialStage.ColourComponent.RGB, "0.4*time") editableDiffuseStage.setConditionExpressionFromString("parm4 > 7") editableDiffuseStage.setTexGenType(dr.MaterialStage.TexGenType.REFLECT) editableDiffuseStage.setTexGenType(dr.MaterialStage.TexGenType.WOBBLESKY) editableDiffuseStage.setTexGenExpressionFromString(0, "0.1") editableDiffuseStage.setTexGenExpressionFromString(1, "0.2") editableDiffuseStage.setTexGenExpressionFromString(2, "0.3") editableDiffuseStage.setVertexColourMode(dr.MaterialStage.VertexColourMode.MULTIPLY) editableDiffuseStage.setClampType(dr.Material.ClampType.NOREPEAT) editableDiffuseStage.setPrivatePolygonOffset(-1.2) editableDiffuseStage.setRenderMapSize(dr.Vector2(640, 480)) editableBumpStage = newMaterial.getEditableStage(bumpStageIndex) editableBumpStage.setSoundMapWaveForm(1) editableBumpStage.setMapType(dr.MaterialStage.MapType.VIDEOMAP) editableBumpStage.setVideoMapProperties("videos/blah", 1) for stage in newMaterial.getAllStages(): print('Stage type: {0}'.format(stage.getType())) print('Stage map type: {0}'.format(stage.getMapType())) print('Stage map expression: {0}'.format(stage.getMapExpressionString())) print('Stage flags: {0}'.format(stage.getStageFlags())) print('Stage clamp type: {0}'.format(stage.getClampType())) print('Stage texgen type: {0}'.format(stage.getTexGenType())) print('Stage texgen expression #1: {0}'.format(stage.getTexGenExpressionString(0))) print('Stage blend func strings: {0},{1}'.format(stage.getBlendFuncStrings()[0], stage.getBlendFuncStrings()[1])) print('Stage colour expression RED: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.RED))) print('Stage colour expression GREEN: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.GREEN))) print('Stage colour expression BLUE: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.BLUE))) print('Stage colour expression ALPHA: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.ALPHA))) print('Stage colour expression RGB: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.RGB))) print('Stage colour expression RGBA: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.RGBA))) print('Stage vertex colour mode: {0}'.format(stage.getVertexColourMode())) print('Stage render map size: {0}'.format(stage.getRenderMapSize())) print('Stage alpha test expression: {0}'.format(stage.getAlphaTestExpressionString())) print('Stage condition expression: {0}'.format(stage.getConditionExpressionString())) print('Stage vertex program: {0}'.format(stage.getVertexProgram())) print('Stage fragment program: {0}'.format(stage.getFragmentProgram())) print('Stage has {0} vertex parameters and {1} fragment maps'.format(stage.getNumVertexParms(), stage.getNumFragmentMaps())) print('Stage private polygon offset: {0}'.format(stage.getPrivatePolygonOffset())) for transform in stage.getTransformations(): print('Stage transform type: {0}'.format(transform.type)) print('Stage transform expression1: {0}'.format(transform.expression1)) print('Stage transform expression2: {0}'.format(transform.expression2)) for v in range(0, stage.getNumVertexParms()): parm = stage.getVertexParm(v) print('Stage Vertex Parm #{0}: {1}'.format(parm.index, ' '.join(parm.expressions))) for f in range(0, stage.getNumFragmentMaps()): fm = stage.getFragmentMap(f) print('Stage Fragment Map #{0}: {1} {2}'.format(fm.index, ' '.join(fm.options), fm.mapExpression)) newMaterial.swapStagePosition(diffuseStageIndex, bumpStageIndex) print("The new material has been modified" if newMaterial.isModified() else "The new material is not modified?") print('\n\nFull Material definition:\n{0}\n{{{1}}}\n\n'.format(newMaterial.getName(), newMaterial.getDefinition())) GlobalMaterialManager.saveMaterial(newMaterial.getName()) print("After save, the material is not modified" if not newMaterial.isModified() else "After save, the material is still modified?") newMaterial.clearMaterialFlag(dr.Material.Flag.NOSHADOWS) newMaterial.clearSurfaceFlag(dr.Material.SurfaceFlag.NONSOLID) newMaterial.setSurfaceType(dr.Material.SurfaceType.DEFAULT) fullPath = GlobalFileSystem.findFile(filename) + filename print(fullPath) os.remove(fullPath) print("Removing {0} again...".format(newMaterial.getName())) GlobalMaterialManager.removeMaterial(newMaterial.getName()) print('--- Done ---') DarkRadiant-2.14.0/install/scripts/patchtest.py000066400000000000000000000011541413722237400214760ustar00rootroot00000000000000# Test patch manipulation class PatchManipulator(SceneNodeVisitor) : def pre(self, node): # Try to get a patch from this node patch = node.getPatch() if not patch.isNull(): print('Patch information:') print('Dimensions: ' + str(patch.getWidth()) + 'x' + str(patch.getHeight())) mesh = patch.getTesselatedPatchMesh() print('Mesh dimension: w=' + str(mesh.width) + ', h=' + str(mesh.height)) for v in mesh.vertices: print('Mesh vertex: ' + str(v.vertex.x()) + ',' + str(v.vertex.y()) + ',' + str(v.vertex.z())) return 1 walker = PatchManipulator() GlobalSceneGraph.root().traverse(walker)DarkRadiant-2.14.0/install/scripts/test.py000066400000000000000000000255161413722237400204660ustar00rootroot00000000000000# Some interface tests import darkradiant as dr # Test the Registry interface value = GlobalRegistry.get('user/paths/appPath') print(value) worldspawn = Radiant.findEntityByClassname("worldspawn") worldspawn.setKeyValue('test', 'success') print('Worldspawn edited') # Test the EClassManager interface eclass = GlobalEntityClassManager.findClass('atdm:func_shooter') print(eclass.getAttribute('editor_usage').getValue()) # Try creating a func_shooter entity if not eclass.isNull(): shooter = GlobalEntityCreator.createEntity(eclass) modelDef = GlobalEntityClassManager.findModel('tdm_ai_citywatch') print('ModelDef mesh for tdm_ai_citywatch = ' + modelDef.mesh) # Test iterating over C++ std::map for anim in modelDef.anims: print(anim + " = " + modelDef.anims[anim]) # Test implementing a eclass visitor interface #class TestVisitor(EntityClassVisitor) : # def visit(self, eclass): # print(eclass.getAttribute('editor_usage').getValue()) #eclassVisitor = TestVisitor() #GlobalEntityClassManager.forEachEntityClass(eclassVisitor) # Test implementing a model def visitor interface #class TestModelDefVisitor(ModelDefVisitor) : # def visit(self, modelDef): # print(modelDef.mesh) # #modelDefVisitor = TestModelDefVisitor() #GlobalEntityClassManager.forEachModelDef(modelDefVisitor) # Test traversing the scenegraph class SceneWalker(dr.SceneNodeVisitor) : def pre(self, node): print(node.getNodeType()) # Try to get a model from this node model = node.getModel() if not model.isNull(): print('Node is a model') else: print('Node is not a model') return 1 walker = SceneWalker() GlobalSceneGraph.root().traverse(walker) # Test traversing the current selection class Walker(dr.SelectionVisitor) : def visit(self, node): # Try to "cast" the node to a brush brush = node.getBrush() # If the Brush is not NULL the cast succeeded if not brush.isNull(): print(brush.getNumFaces()) else: print('Node is not a brush') # Try to cast the node to a patch patch = node.getPatch() # If the Patch is not NULL the cast succeeded if not patch.isNull(): print('Node is a patch') else: print('Node is not a patch') # Try to get a model from this node model = node.getModel() if not model.isNull(): print('Node is a model') else: print('Node is not a model') visitor = Walker() GlobalSelectionSystem.foreachSelected(visitor) # Visit every selected face class FaceVisitor(dr.SelectedFaceVisitor) : def visitFace(self, face): print(face.getShader()) visitor = FaceVisitor() GlobalSelectionSystem.foreachSelectedFace(visitor) print('Map name is ' + GlobalMap.getMapName()) print(GlobalMap.getEditMode()) # Switching Map Modes GlobalMap.setEditMode(MapEditMode.Merge) GlobalMap.setEditMode(MapEditMode.Normal) # Point File Management is visible print(GlobalMap.showPointFile("test.lin")) print(GlobalMap.isPointTraceVisible()) # Enumerate the point files available for the current map print("Point files found: " + str(len(GlobalMap.getPointFileList()))) for path in GlobalMap.getPointFileList: print("Pointfile: " + path) # Try to find the map's worldspawn worldspawn = GlobalMap.getWorldSpawn() if not worldspawn.isNull(): # Cast the node onto an entity worldspawnent = worldspawn.getEntity() if not worldspawnent.isNull(): print('Spawnclass of worldspawn: ' + worldspawnent.getKeyValue('spawnclass')) else: print('There is no worldspawn in this map yet') # Test the entity visitor interface class TestEntityVisitor(dr.EntityVisitor) : def visit(self, key, value): print('Worldspawn has spawnarg: ' + key + ' = ' + value) if not worldspawn.isNull(): tev = TestEntityVisitor() # Cast the node onto an entity worldspawnent = worldspawn.getEntity() worldspawnent.forEachKeyValue(tev) # Try to retrieve all keyvalues starting with "n" keyvalues = worldspawnent.getKeyValuePairs('t') for kv in keyvalues: print('Keyvalue ' + kv[0] + ' = ' + kv[1]) # Test the commandsystem GlobalCommandSystem.execute('texscale "0 0.1"') # Test the GameManager interface print('Mod path = ' + GlobalGameManager.getModPath()) game = GlobalGameManager.currentGame() print('Current game type: ' + game.getKeyValue('type')) print('VFS Search paths:') vfsPaths = GlobalGameManager.getVFSSearchPaths() for path in vfsPaths: print(path) # Test FileSystem (VFS) class TestFileVisitor(dr.FileVisitor) : def visit(self, filename): print('Found file: ' + filename) filevisitor = TestFileVisitor() GlobalFileSystem.forEachFile('skins/', 'skin', filevisitor, 99) filecontents = GlobalFileSystem.readTextFile('skins/tdm_ai_guard_citywatch.skin'); print(filecontents) # Test the Grid Interface print('Current grid size = ' + str(GlobalGrid.getGridSize())) # Test the ShaderSystem interface class TestMaterialVisitor(dr.MaterialVisitor) : def visit(self, shader): if not shader.isNull(): print('Found shader: ' + shader.getName() + ' defined in ' + shader.getShaderFileName()) # Disabled code, takes very long in TDM # materialVisitor = TestMaterialVisitor() # GlobalMaterialManager.foreachMaterial(materialVisitor) material = GlobalMaterialManager.getMaterialForName('bc_rat') if not material.isNull(): print('Material ' + material.getName() + ' is defined in ' + material.getShaderFileName()) # Test finding a model class ModelFinder(dr.SceneNodeVisitor) : def pre(self, node): # Try to get a model from this node model = node.getModel() if not model.isNull(): print('Model information:') print('Filename: ' + model.getFilename()) print('Model path: ' + model.getModelPath()) print('Surface count: ' + str(model.getSurfaceCount())) print('Vertex count: ' + str(model.getVertexCount())) print('Poly count: ' + str(model.getPolyCount())) materials = model.getActiveMaterials() print('Active Materials:') for material in materials: print(material) for i in range(0, model.getSurfaceCount()): surface = model.getSurface(i) print('Surface: ' + str(i)) print(' Default Shader: ' + surface.getDefaultMaterial()) print(' Active Shader: ' + surface.getActiveMaterial()) print(' PolyCount: ' + str(surface.getNumTriangles())) print(' Vertex Count: ' + str(surface.getNumVertices())) s = Vector3(0,0,0) numverts = surface.getNumVertices() for v in range(0, numverts): meshvertex = surface.getVertex(v) s += meshvertex.vertex print(' Sum of all vertices: ' + str(s.x()) + ',' + str(s.y()) + ',' + str(s.z())) return 1 walker = ModelFinder() GlobalSceneGraph.root().traverse(walker) # Test the ModelSkinCache interface #allSkins = GlobalModelSkinCache.getAllSkins() # #for skin in allSkins: # modelskin = GlobalModelSkinCache.capture(skin) # print('Skin found: ' + modelskin.getName()) v = dr.Vector3(6,6,6) v += dr.Vector3(10,10,10) print(v) # Test patch manipulation class PatchManipulator(dr.SceneNodeVisitor) : def pre(self, node): # Try to get a patch from this node patch = node.getPatch() if not patch.isNull(): print('Patch information:') print('Dimensions: ' + str(patch.getWidth()) + 'x' + str(patch.getHeight())) w = 0 while w < patch.getWidth(): h = 0 while h < patch.getHeight(): # Push the vertex around a bit ctrl = patch.ctrlAt(h,w) ctrl.vertex += dr.Vector3(0,0,10*(h-w)) h += 1 w += 1 patch.controlPointsChanged() return 1 walker = PatchManipulator() GlobalSceneGraph.root().traverse(walker) # Test the SelectionSetManager interface class SelectionSetWalker(dr.SelectionSetVisitor) : def visit(self, selectionset): print(selectionset.getName()) walker = SelectionSetWalker() GlobalSelectionSetManager.foreachSelectionSet(walker) selSet = GlobalSelectionSetManager.createSelectionSet("TestSelectionSet") selSet.assignFromCurrentScene() selSet.deselect() selSet.select() selSet.clear() if selSet.empty(): GlobalSelectionSetManager.deleteSelectionSet("TestSelectionSet") print('') soundshader = GlobalSoundManager.getSoundShader('tdm_ai_lady_alertdown_to_idle') if not soundshader.isNull(): print('Name of this sound shader: ' + soundshader.getName()) radii = soundshader.getRadii() print('Minimum radius in meters: ' + str(radii.getMin(1))) print('Maximum radius in meters: ' + str(radii.getMax(1))) fileList = soundshader.getSoundFileList() for i in range(0, len(fileList)): print(' Sound file used by this shader: ' + fileList[i]) if (len(fileList) > 0): GlobalSoundManager.playSound(fileList[0]) # Test SelectionGroup interface group = GlobalSelectionGroupManager.createSelectionGroup() print('Created group with ID: ' + str(group.getId())) # Test traversing the current selection class GroupAdder(dr.SelectionVisitor) : def visit(self, node): group.addNode(node) visitor = Walker() GlobalSelectionSystem.foreachSelected(visitor) print('The group contains now ' + str(group.size()) + ' items') # Deselect the group GlobalSelectionGroupManager.setGroupSelected(group.getId(), 0) # List nodes in this group class SelectionGroupWalker(dr.SelectionGroupVisitor) : def visit(self, node): print('Group Member: ' + node.getNodeType()) gropWalker = SelectionGroupWalker(); group.foreachNode(gropWalker) camview = GlobalCameraManager.getActiveView() print(camview.getCameraOrigin()) camview.setCameraOrigin(dr.Vector3(50,0,50)) # Layer Functionality def printLayers(): class LayerPrinter(dr.LayerVisitor): def visit(self, layerID, layerName): print(layerID, layerName) layerPrinter = LayerPrinter() GlobalLayerManager.foreachLayer(layerPrinter) print("=================") print("Layers:") printLayers() print("Test create") print(GlobalLayerManager.createLayer("One")) print(GlobalLayerManager.createLayer("Two")) print(GlobalLayerManager.createLayer("Forty-two", 42)) print(GlobalLayerManager.createLayer("TwoAgain", 2)) printLayers() print("Test delete") print(GlobalLayerManager.deleteLayer("NotALayer")) print(GlobalLayerManager.deleteLayer("TwoAgain")) printLayers() print("Test get") print(GlobalLayerManager.getLayerID("Forty-two")) print(GlobalLayerManager.getLayerName(42)) print("Test exists") print(GlobalLayerManager.layerExists(123)) print(GlobalLayerManager.layerExists(42)) print("Test rename") print(GlobalLayerManager.renameLayer(42, "Forty-two")) print(GlobalLayerManager.renameLayer(42, "Two")) print(GlobalLayerManager.renameLayer(42, "HHGTTG")) print("Test active") GlobalLayerManager.setActiveLayer(3) print(GlobalLayerManager.getActiveLayer()) GlobalLayerManager.setActiveLayer(2) print(GlobalLayerManager.getActiveLayer()) print("Test visible") GlobalLayerManager.setLayerVisibility("One", False) print(GlobalLayerManager.layerIsVisible("One")) GlobalLayerManager.setLayerVisibility("One", True) print(GlobalLayerManager.layerIsVisible("One")) GlobalLayerManager.setLayerVisibility(1, False) print(GlobalLayerManager.layerIsVisible(1)) GlobalLayerManager.setLayerVisibility(1, True) print(GlobalLayerManager.layerIsVisible(1)) GlobalLayerManager.setSelected(0, True) GlobalLayerManager.moveSelectionToLayer(1) DarkRadiant-2.14.0/install/ui/000077500000000000000000000000001413722237400160525ustar00rootroot00000000000000DarkRadiant-2.14.0/install/ui/aboutdialog.fbp000066400000000000000000002001631413722237400210370ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect aboutdialog 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY AboutDialogPanel -1,-1 wxTAB_TRAVERSAL bSizer1 wxVERTICAL none 12 wxALL|wxEXPAND 0 bSizer2 wxHORIZONTAL none 6 wxALL 0 1 1 1 1 Load From Art Provider; darkradiant:logo.png; 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_bitmap1 1 protected 1 Resizable 1 0 6 wxLEFT 1 bSizer3 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY DarkRadiant x.y.z 0 0 0 1 AboutDialogAppTitle 1 protected 1 Resizable 1 0 -1 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Build date: 2014-08-04 0 0 0 1 AboutDialogBuildDate 1 protected 1 Resizable 1 0 -1 6 wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY https://www.darkradiant.net/ This product contains software technology from id Software, Inc. ('id Technology'). id Technology 2000 id Software,Inc. DarkRadiant is originally based on the GPL version of GtkRadiant. The Dark Mod (www.thedarkmod.com) 0 0 0 1 m_staticText5 1 protected 1 Resizable 1 0 -1 12 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT 0 bSizer4 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY wxWidgets Properties 0 0 0 1 AboutDialogHeader1 1 protected 1 Resizable 1 0 -1 12 wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Version: 0 0 0 1 AboutDialogWxWidgetsVersion 1 protected 1 Resizable 1 0 -1 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY OpenGL Properties 0 0 0 1 AboutDialogHeader2 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 1 bSizer5 wxVERTICAL none 6 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Vendor: 0 0 0 1 AboutDialogOpenGLVendor 1 protected 1 Resizable 1 0 -1 6 wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Version: 0 0 0 1 AboutDialogOpenGLVersion 1 protected 1 Resizable 1 0 -1 6 wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Renderer: 0 0 0 1 AboutDialogOpenGLRenderer 1 protected 1 Resizable 1 0 -1 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY OpenGL Extensions 0 0 0 1 AboutDialogHeader3 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,70 1 AboutDialogOpenGLExtensions 1 protected 1 Resizable 1 -1,70 wxTE_MULTILINE|wxTE_READONLY|wxTE_WORDWRAP 0 wxFILTER_NONE wxDefaultValidator 12 wxALIGN_RIGHT|wxBOTTOM|wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CLOSE OK 0 0 0 1 AboutDialogOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/aboutdialog.xrc000066400000000000000000000117201413722237400210630ustar00rootroot00000000000000 wxVERTICAL wxALL|wxEXPAND 12 wxHORIZONTAL wxALL 6 undefined.png wxLEFT 6 wxVERTICAL wxBOTTOM 6 -1 wxBOTTOM 6 -1 wxTOP 6 -1 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT 12 wxVERTICAL wxBOTTOM 6 -1 wxLEFT 12 -1 wxBOTTOM|wxTOP 6 -1 wxEXPAND|wxLEFT 12 wxVERTICAL 6 -1 wxTOP 6 -1 wxTOP 6 -1 wxBOTTOM|wxTOP 6 -1 wxEXPAND|wxLEFT 12 -1,70 wxALIGN_RIGHT|wxBOTTOM|wxRIGHT 12 0 0 DarkRadiant-2.14.0/install/ui/addpropertydialog.fbp000066400000000000000000000671321413722237400222710ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY AddPropertyDialogPanel 500,300 wxTAB_TRAVERSAL bSizer3 wxVERTICAL none 6 wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Description 0 0 1 m_staticText3 1 protected 1 Resizable 1 0 -1 6 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 Description 1 protected 1 Resizable 1 -1,90 wxTE_MULTILINE|wxTE_READONLY|wxTE_WORDWRAP 0 wxFILTER_NONE wxDefaultValidator wxSTATIC_BORDER 5 wxALIGN_RIGHT 0 bSizer4 wxHORIZONTAL none 5 wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 1 CancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY OK 0 0 1 OkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/addpropertydialog.xrc000066400000000000000000000030771413722237400223140ustar00rootroot00000000000000 500,300 wxVERTICAL wxLEFT|wxRIGHT 6 -1 wxALL|wxEXPAND 6 -1,90 0 wxALIGN_RIGHT 5 wxHORIZONTAL wxALL 5 0 wxALL 5 0 DarkRadiant-2.14.0/install/ui/camwnd.fbp000066400000000000000000000427041413722237400200230ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect camwnd 1000 none 0 CamWnd . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY CamWndPanel 500,300 wxTAB_TRAVERSAL camSizer wxVERTICAL none 0 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 bSizer2 wxHORIZONTAL none 3 wxBOTTOM|wxEXPAND|wxLEFT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 CamToolbar 1 1 protected 1 Resizable 5 1 wxTB_HORIZONTAL|wxTB_NODIVIDER 0 Load From Art Provider; darkradiant:wireframeMode16.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_RADIO wireframeBtn wireframeBtn protected Render in wireframe mode Load From Art Provider; darkradiant:solidMode16.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_RADIO flatShadeBtn flatShadeBtn protected Render in flat shaded mode Load From Art Provider; darkradiant:textureMode16.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_RADIO texturedBtn texturedBtn protected Render in fullbright textured mode Load From Art Provider; darkradiant:lightingMode.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_RADIO lightingBtn lightingBtn protected Render in lighting preview mode protected Load From Art Provider; darkradiant:media-playback-start-ltr.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_NORMAL startTimeButton startTimeButton protected Start Render Time Load From Art Provider; darkradiant:media-playback-stop.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_NORMAL stopTimeButton stopTimeButton protected Stop Render Time protected Load From File; ../bitmaps/view_cubicclipping.png 0 wxID_ANY wxITEM_CHECK clipPlaneToggleButton clipPlaneToggleButton protected Enable or disable far clip plane Load From Art Provider; darkradiant:farClipIn.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_NORMAL clipPlaneInButton clipPlaneInButton protected Clip plane in Load From Art Provider; darkradiant:farClipOut.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_NORMAL clipPlaneOutButton clipPlaneOutButton protected Clip plane out protected Load From Art Provider; darkradiant:grid_toggle.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_CHECK drawGridButton drawGridButton protected Draw 3D Grid DarkRadiant-2.14.0/install/ui/camwnd.xrc000066400000000000000000000100231413722237400200350ustar00rootroot00000000000000 500,300 wxVERTICAL wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 wxHORIZONTAL wxBOTTOM|wxEXPAND|wxLEFT|wxTOP 3 1 5 Render in wireframe mode undefined.png 1 Render in flat shaded mode undefined.png 1 Render in fullbright textured mode undefined.png 1 Render in lighting preview mode undefined.png 1 Start Render Time undefined.png Stop Render Time undefined.png Enable or disable far clip plane ../bitmaps/view_cubicclipping.png 1 Clip plane in undefined.png Clip plane out undefined.png Draw 3D Grid undefined.png 1 DarkRadiant-2.14.0/install/ui/conversationcmdeditor.fbp000066400000000000000000001756331413722237400231670ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY ConvCmdEditorMainPanel 250,280 wxTAB_TRAVERSAL bSizer5 wxVERTICAL none 12 wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Actor 0 0 1 ConvCmdEditorActorLabel 1 protected 1 Resizable 1 0 -1 18 wxEXPAND|wxLEFT|wxRIGHT 0 bSizer11 wxHORIZONTAL none 6 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ConvCmdEditorActorChoice 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 12 wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Command 0 0 -1,-1 1 ConvCmdEditorCommandLabel 1 protected 1 Resizable 1 0 -1 18 wxEXPAND|wxLEFT|wxRIGHT 0 bSizer61 wxHORIZONTAL none 6 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ConvCmdEditorCommandChoice 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 12 wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Command Arguments 0 0 1 ConvCmdEditorCmdArgLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ConvCmdEditorArgPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL 3 wxBOTH 1 12 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 1 6 12 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Command Properties 0 0 1 ConvCmdEditorPropertiesLabel 1 protected 1 Resizable 1 0 -1 18 wxEXPAND|wxLEFT 0 bSizer611 wxHORIZONTAL none 3 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Wait until finished 0 0 1 ConvCmdEditorWaitUntilFinished 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 bSizer8 wxHORIZONTAL none 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 1 ConvCmdEditorCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY OK 0 0 1 ConvCmdEditorOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/conversationcmdeditor.xrc000066400000000000000000000076601413722237400232060ustar00rootroot00000000000000 250,280 wxVERTICAL wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT 18 wxHORIZONTAL 6 0 wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT 18 wxHORIZONTAL 6 0 wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT 12 1 3 6 12 1 wxALL 12 -1 wxEXPAND|wxLEFT 18 wxHORIZONTAL wxALL 3 0 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxLEFT 6 0 wxEXPAND|wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/conversationdialog.fbp000066400000000000000000002330131413722237400224370ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect conversationdialog 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY ConvDialogMainPanel 500,500 wxTAB_TRAVERSAL bSizer5 wxVERTICAL none 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Conversation Entities 0 0 0 1 ConvDialogEntityLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 1 bSizer61 wxHORIZONTAL none 6 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ConvDialogEntityPanel 1 protected 1 Resizable 1 -1,120 0 wxTAB_TRAVERSAL bSizer7 wxVERTICAL none 5 wxEXPAND 0 ButtonSizer1 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 ConvDialogAddEntityButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 0 1 ConvDialogDeleteEntityButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Conversations 0 0 0 1 ConvDialogConvLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 1 bSizer6 wxHORIZONTAL none 6 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ConvDialogConversationPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer9 wxVERTICAL none 12 0 ButtonSizer wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 ConvDialogAddConvButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Edit 0 0 0 1 ConvDialogEditConvButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Move Up 0 0 0 1 ConvDialogMoveUpConvButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Move Down 0 0 0 1 ConvDialogMoveDownConvButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 0 1 ConvDialogDeleteConvButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Clear 0 0 0 1 ConvDialogClearConvButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 bSizer8 wxHORIZONTAL none 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 0 1 ConvDialogCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY OK 0 0 0 1 ConvDialogOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/conversationdialog.xrc000066400000000000000000000140351413722237400224650ustar00rootroot00000000000000 500,500 wxVERTICAL wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxRIGHT 6 -1,120 wxVERTICAL wxEXPAND 5 wxVERTICAL wxBOTTOM|wxEXPAND 6 80,-1 0 0 wxEXPAND 6 80,-1 0 0 wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxRIGHT 6 wxVERTICAL 12 wxVERTICAL wxBOTTOM|wxEXPAND 6 80,-1 0 0 wxBOTTOM|wxEXPAND 6 80,-1 0 0 wxBOTTOM|wxEXPAND 6 80,-1 0 0 wxBOTTOM|wxEXPAND 6 80,-1 0 0 wxBOTTOM|wxEXPAND 6 80,-1 0 0 wxBOTTOM|wxEXPAND 6 80,-1 0 0 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxLEFT 6 0 0 wxEXPAND|wxLEFT 6 0 0 DarkRadiant-2.14.0/install/ui/conversationeditor.fbp000066400000000000000000004476231413722237400225040ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY ConvEditorMainPanel 500,650 wxTAB_TRAVERSAL bSizer5 wxVERTICAL none 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Properties 0 0 1 ConvEditorPropertyLabel 1 protected 1 Resizable 1 0 -1 18 wxEXPAND|wxLEFT|wxRIGHT 0 bSizer11 wxVERTICAL none 6 wxBOTTOM|wxEXPAND|wxTOP 1 bSizer12 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Name: 0 0 1 m_staticText4 1 protected 1 Resizable 1 0 -1 0 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ConvEditorNameEntry 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxLEFT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Actors must be within talk distance 0 0 1 ConvEditorActorsWithinTalkDistance 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxLEFT|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Actors always face each other while talking 0 0 1 ConvEditorActorsMustFace 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 2 wxBOTTOM|wxEXPAND|wxTOP 0 bSizer13 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Let this conversation play 0 0 1 ConvEditorRepeatCheckbox 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 9999 0 -1 0 1 ConvEditorRepeatTimes 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS 0 -1 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY times at maximum 0 0 1 ConvEditorRepeatAdditionalText 1 protected 1 Resizable 1 0 -1 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Actors 0 0 -1,-1 1 ConvEditorActorLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 1 bSizer61 wxHORIZONTAL none 6 wxEXPAND|wxLEFT|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,160 1 ConvEditorActorPanel 1 protected 1 Resizable 1 -1,160 0 wxTAB_TRAVERSAL bSizer7 wxVERTICAL none 5 wxEXPAND 0 ButtonSizer1 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 1 ConvEditorAddActorButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 1 ConvEditorDeleteActorButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxTOP 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Validate all 0 0 1 ConvEditorValidateActorsButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Commands 0 0 1 ConvEditorCommandLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 1 bSizer6 wxHORIZONTAL none 6 wxEXPAND|wxLEFT|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,200 1 ConvEditorCommandPanel 1 protected 1 Resizable 1 -1,-1 0 wxTAB_TRAVERSAL bSizer9 wxVERTICAL none 12 0 ButtonSizer wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 1 ConvEditorAddCommandButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Edit 0 0 1 ConvEditorEditCommandButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Move up 0 0 1 ConvEditorMoveUpCommandButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Move down 0 0 1 ConvEditorMoveDownCommandButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 1 ConvEditorDeleteCommandButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 bSizer8 wxHORIZONTAL none 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 1 ConvEditorCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY OK 0 0 1 ConvEditorOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/conversationeditor.xrc000066400000000000000000000211621413722237400225130ustar00rootroot00000000000000 500,650 wxVERTICAL wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT 18 wxVERTICAL wxBOTTOM|wxEXPAND|wxTOP 6 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 5 -1 wxALIGN_CENTER_VERTICAL 0 wxBOTTOM|wxLEFT 6 0 wxBOTTOM|wxLEFT|wxTOP 6 0 wxBOTTOM|wxEXPAND|wxTOP 2 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 60,-1 0 -1 9999 wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxLEFT|wxRIGHT 6 -1,160 wxVERTICAL wxEXPAND 5 wxVERTICAL wxBOTTOM|wxEXPAND 6 80,-1 0 wxEXPAND 6 80,-1 0 wxEXPAND|wxTOP 6 80,-1 0 wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxLEFT|wxRIGHT 6 wxVERTICAL 12 wxVERTICAL wxBOTTOM|wxEXPAND 6 80,-1 0 wxBOTTOM|wxEXPAND 6 80,-1 0 wxBOTTOM|wxEXPAND 6 80,-1 0 wxBOTTOM 6 80,-1 0 wxBOTTOM|wxEXPAND 6 80,-1 0 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxLEFT 6 0 wxEXPAND|wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/convertmodeldialog.fbp000066400000000000000000002011351413722237400224260ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect convertmodeldialog 1000 none 0 MyProject3 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY -1,-1 ConvertModelDialogMainPanel 560,-1 wxTAB_TRAVERSAL bSizer23 wxVERTICAL none 12 wxALL|wxEXPAND 1 bSizer13 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Input File 0 0 0 1 InputPathLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 bSizer5 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY File Path: 0 0 0 1 m_staticText91 1 protected 1 Resizable 1 0 -1 6 wxLEFT|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 Select a file 0 1 InputPathFilePicker 1 protected 1 Resizable 1 wxFLP_DEFAULT_STYLE 0 wxFILTER_NONE wxDefaultValidator *.* 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 InfoPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL InfoPanelSizer wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Model Information 0 0 0 1 InfoLabel 1 protected 1 Resizable 1 0 -1 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Output File 0 0 0 1 OutputPathLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 2 wxBOTH 1 12 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 2 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Output Format: 0 0 0 1 m_staticText8 1 protected 1 Resizable 1 0 -1 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 "ASCII Scene Export (.ase)" 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 OutputFormatChoice 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY File Path: 0 0 0 1 m_staticText9 1 protected 1 Resizable 1 0 -1 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 Select a file 0 1 OutputPathFilePicker 1 protected 1 Resizable 1 wxFLP_DEFAULT_STYLE 0 wxFILTER_NONE wxDefaultValidator *.* 12 wxALIGN_RIGHT|wxLEFT|wxTOP 0 bSizer9 wxHORIZONTAL none 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 0 -1,-1 1 CancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Convert 0 0 0 -1,-1 1 ConvertButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/convertmodeldialog.xrc000066400000000000000000000117101413722237400224510ustar00rootroot00000000000000 560,-1 wxVERTICAL wxALL|wxEXPAND 12 wxVERTICAL wxBOTTOM 6 -1 wxEXPAND|wxLEFT 12 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxLEFT|wxRIGHT 6 Select a file *.* wxEXPAND | wxALL 0 wxVERTICAL wxBOTTOM|wxTOP 6 -1 wxBOTTOM|wxTOP 6 -1 wxEXPAND|wxLEFT 12 2 2 0 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxALL|wxEXPAND 5 0 ASCII Scene Export (.ase) wxALIGN_CENTER_VERTICAL 0 -1 wxALL|wxEXPAND 5 Select a file *.* wxALIGN_RIGHT|wxLEFT|wxTOP 12 wxHORIZONTAL wxLEFT 6 0 0 wxLEFT 6 0 0 DarkRadiant-2.14.0/install/ui/difficultyeditor.fbp000066400000000000000000002656311413722237400221310ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect difficultyeditor 1000 none 0 DifficultyEditor . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY DifficultyEditorMainPanel 669,238 wxTAB_TRAVERSAL MainHBox wxHORIZONTAL none 0 wxEXPAND 1 LeftVBox wxVERTICAL none 5 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,-1 1 DifficultyEditorTreeViewPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL 350,120 bSizer21 wxVERTICAL none 6 wxEXPAND|wxTOP 0 DifficultyEditorButtonPanel wxHORIZONTAL none 5 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 DifficultyEditorAddSettingButton 1 protected 1 Resizable 1 0 Add a new item to this difficulty level wxFILTER_NONE wxDefaultValidator 6 wxLEFT|wxRIGHT 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 0 1 DifficultyEditorDeleteSettingButton 1 protected 1 Resizable 1 0 Delete the selected item from this difficulty level wxFILTER_NONE wxDefaultValidator 5 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Refresh 0 0 0 1 DifficultyEditorRefreshButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 DifficultyEditorSettingsPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL 300,-1 bSizer22 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Setting 0 0 0 1 DifficultyEditorSettingLabel 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 0 2 wxBOTH 1 0 fgSizer3 wxFLEX_GROWMODE_SPECIFIED none 3 0 6 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Classname: 0 0 0 1 m_staticText11 1 protected 1 Resizable 1 0 -1 6 wxEXPAND 1 bSizer7 wxHORIZONTAL none 6 wxBOTTOM|wxEXPAND|wxLEFT|wxTOP 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ClassNameTextBox 1 protected 1 Resizable 1 ; ; forward_declare 0 Entity class to modify. Enter an exact class name or start typing to autocomplete. wxFILTER_NONE wxDefaultValidator 6 wxALL 0 1 1 1 1 Load From Art Provider; darkradiant:treeView16.png; wxART_TOOLBAR 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 ChooseClassButton 1 protected 1 Resizable 1 wxBU_EXACTFIT ; ; forward_declare 0 Use the entity class chooser dialog to select an entity class wxFILTER_NONE wxDefaultValidator 6 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Spawnarg: 0 0 0 1 m_staticText12 1 protected 1 Resizable 1 0 -1 6 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 DifficultyEditorSpawnarg 1 protected 1 Resizable 1 0 Spawnarg to modify on the selected entity class wxFILTER_NONE wxDefaultValidator 6 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Argument: 0 0 0 1 m_staticText13 1 protected 1 Resizable 1 0 -1 6 wxEXPAND 1 bSizer23 wxHORIZONTAL none 6 wxTOP|wxBOTTOM|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 DifficultyEditorArgument 1 protected 1 Resizable 1 0 Modification to make to the selected spawnarg wxFILTER_NONE wxDefaultValidator 6 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 DifficultyEditorApplicationType 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALL|wxALIGN_RIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Save 0 0 0 1 DifficultyEditorSaveSettingButton 1 protected 1 Resizable 1 0 Commit the above changes into the list in the left-hand panel wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 DifficultyEditorNoteText 1 protected 1 Resizable 1 wxST_NO_AUTORESIZE 0 -1 DarkRadiant-2.14.0/install/ui/difficultyeditor.xrc000066400000000000000000000162411413722237400221450ustar00rootroot00000000000000 669,238 wxHORIZONTAL wxEXPAND 0 wxVERTICAL wxEXPAND 5 350,120 wxVERTICAL wxEXPAND|wxTOP 6 wxHORIZONTAL 5 Add a new item to this difficulty level 0 0 wxLEFT|wxRIGHT 6 Delete the selected item from this difficulty level 0 0 5 0 0 wxEXPAND|wxLEFT 12 300,-1 wxVERTICAL wxBOTTOM 6 -1 wxEXPAND 5 3 2 0 0 1 wxALL|wxALIGN_CENTER_VERTICAL 6 -1 wxEXPAND 6 wxHORIZONTAL wxBOTTOM|wxEXPAND|wxLEFT|wxTOP 6 Entity class to modify. Enter an exact class name or start typing to autocomplete. wxALL 6 Use the entity class chooser dialog to select an entity class 0 0 undefined.png wxALL|wxALIGN_CENTER_VERTICAL 6 -1 wxALL|wxEXPAND 6 Spawnarg to modify on the selected entity class wxALL|wxALIGN_CENTER_VERTICAL 6 -1 wxEXPAND 6 wxHORIZONTAL wxTOP|wxBOTTOM|wxLEFT 6 Modification to make to the selected spawnarg wxALL 6 0 wxALL|wxALIGN_RIGHT 6 Commit the above changes into the list in the left-hand panel 0 0 wxALL|wxEXPAND 5 -1 DarkRadiant-2.14.0/install/ui/entityclasschooser.fbp000066400000000000000000001431031413722237400224720ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect entityclasschooser 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY EntityClassChooserMainPanel 500,300 wxTAB_TRAVERSAL bSizer1 wxVERTICAL none 12 wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 EntityClassChooserSplitter 1 protected 1 Resizable 0.0 300 6 1 6,-1 wxSPLIT_VERTICAL wxSP_3D 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 EntityClassChooserLeftPane 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer2 wxVERTICAL none 6 wxEXPAND|wxRIGHT 0 2 wxBOTH 1 6 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 2 6 0 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Defined in: 0 0 0 1 EntityClassChooserDefFileNameLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY - 0 0 0 1 EntityClassChooserDefFileName 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 2 wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Description: 0 0 0 1 EntityClassChooserUsageLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,90 1 EntityClassChooserUsageText 1 protected 1 Resizable 1 -1,90 wxTE_MULTILINE|wxTE_READONLY|wxTE_WORDWRAP 0 wxFILTER_NONE wxDefaultValidator 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 EntityClassChooserRightPane 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer4 wxVERTICAL none 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT 0 bSizer3 wxHORIZONTAL none 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CANCEL Cancel 0 0 0 1 EntityClassChooserCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ADD Add 0 0 0 1 EntityClassChooserAddButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/entityclasschooser.xrc000066400000000000000000000070371413722237400225240ustar00rootroot00000000000000 500,300 wxVERTICAL wxALL|wxEXPAND 12 6,-1 300 0 0 vertical wxVERTICAL wxEXPAND|wxRIGHT 6 2 2 6 6 1 0 -1 6 -1 wxTOP 2 -1 wxEXPAND 0 -1,90 wxVERTICAL wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT 12 wxHORIZONTAL wxALL|wxEXPAND 5 0 0 wxALL|wxEXPAND 5 0 0 DarkRadiant-2.14.0/install/ui/exportasmodeldialog.fbp000066400000000000000000002707721413722237400226300ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject3 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY -1,-1 ExportDialogMainPanel 560,-1 wxTAB_TRAVERSAL bSizer23 wxVERTICAL none 12 wxALL|wxEXPAND 1 bSizer13 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Output File 0 0 1 ExportDialogOutputLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 2 wxBOTH 1 12 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 2 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Output Format: 0 0 1 m_staticText8 1 protected 1 Resizable 1 0 -1 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 "ASCII Scene Export (.ase)" 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ExportDialogFormatChoice 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY File Path: 0 0 1 m_staticText9 1 protected 1 Resizable 1 0 -1 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 Select a file 0 1 ExportDialogFilePicker 1 protected 1 Resizable 1 wxFLP_DEFAULT_STYLE 0 wxFILTER_NONE wxDefaultValidator *.* 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Export Options 0 0 1 ExportDialogOptionLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 bSizer20 wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Center Objects around Origin 0 0 1 ExportDialogCenterObjects 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Skip Surfaces textured with Caulk 0 0 1 ExportDialogSkipCaulk 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Replace Selection with exported Model 0 0 1 ExportDialogReplaceWithModel 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Use Entity Origin as export Origin 0 0 1 ExportDialogUseEntityOrigin 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Export Lights as Objects (small octahedrons) 0 0 1 ExportDialogExportLightsAsObjects 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxALIGN_RIGHT|wxLEFT|wxTOP 0 bSizer9 wxHORIZONTAL none 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 -1,-1 1 ExportDialogCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Export 0 0 -1,-1 1 ExportDialogExportButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/exportasmodeldialog.xrc000066400000000000000000000123211413722237400226350ustar00rootroot00000000000000 560,-1 wxVERTICAL wxALL|wxEXPAND 12 wxVERTICAL wxBOTTOM 6 -1 wxEXPAND|wxLEFT 12 2 2 0 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxALL|wxEXPAND 5 0 ASCII Scene Export (.ase) wxALIGN_CENTER_VERTICAL 0 -1 wxALL|wxEXPAND 5 Select a file *.* wxBOTTOM|wxTOP 6 -1 wxEXPAND|wxLEFT 12 wxVERTICAL wxBOTTOM|wxTOP 6 0 wxBOTTOM|wxTOP 6 0 wxBOTTOM|wxTOP 6 0 wxBOTTOM|wxTOP 6 0 wxBOTTOM|wxTOP 6 0 wxALIGN_RIGHT|wxLEFT|wxTOP 12 wxHORIZONTAL wxLEFT 6 0 wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/filterdialog.fbp000066400000000000000000001462321413722237400212200ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect filterdialog 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY FilterDialogMainPanel 500,323 wxTAB_TRAVERSAL bSizer5 wxVERTICAL none 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Filters 0 0 0 1 FilterDialogTopLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 1 bSizer6 wxHORIZONTAL none 6 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 FilterDialogTreeViewPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer9 wxVERTICAL none 12 0 ButtonSizer wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 FilterDialogAddButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY View 0 0 0 1 FilterDialogViewButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Edit 0 0 0 1 FilterDialogEditButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Copy 0 0 0 1 FilterDialogCopyButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 0 1 FilterDialogDeleteButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 bSizer8 wxHORIZONTAL none 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 0 1 FilterDialogCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY OK 0 0 0 1 FilterDialogOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/filterdialog.xrc000066400000000000000000000074151413722237400212440ustar00rootroot00000000000000 500,323 wxVERTICAL wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxRIGHT 6 wxVERTICAL 12 wxVERTICAL wxBOTTOM|wxEXPAND 6 0 0 wxBOTTOM|wxEXPAND 6 0 0 wxBOTTOM|wxEXPAND 6 0 0 wxBOTTOM|wxEXPAND 6 0 0 wxEXPAND 6 0 0 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxLEFT 6 0 0 wxEXPAND|wxLEFT 6 0 0 DarkRadiant-2.14.0/install/ui/filtereditor.fbp000066400000000000000000002072611413722237400212470ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect filtereditor 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY FilterEditorMainPanel 500,300 wxTAB_TRAVERSAL bSizer5 wxVERTICAL none 12 wxALL|wxEXPAND 1 bSizer10 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Name 0 0 0 1 FilterEditorTopLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 FilterEditorNameEntry 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Rules 0 0 0 1 FilterEditorRuleLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND 1 bSizer6 wxHORIZONTAL none 6 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 FilterEditorTreeViewPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer9 wxVERTICAL none 12 0 ButtonSizer wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 FilterEditorAddButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Move Up 0 0 0 1 FilterEditorUpButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Move Down 0 0 0 1 FilterEditorDownButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 0 1 FilterEditorDeleteButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Filter rules are applied in the shown order. "Match" is accepting regular expressions. "Object"-type filters can be used to match "patch" or "brush". 0 0 0 1 FilterEditorHelpText 1 protected 1 Resizable 1 0 -1 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 bSizer8 wxHORIZONTAL none 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY OK 0 0 0 1 FilterEditorOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 0 1 FilterEditorCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Save 0 0 0 1 FilterEditorSaveButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/filtereditor.xrc000066400000000000000000000117411413722237400212700ustar00rootroot00000000000000 500,300 wxVERTICAL wxALL|wxEXPAND 12 wxVERTICAL wxBOTTOM 6 -1 wxEXPAND|wxLEFT 12 wxTOP|wxBOTTOM 6 -1 wxEXPAND 12 wxHORIZONTAL wxEXPAND|wxRIGHT 6 wxVERTICAL 12 wxVERTICAL wxBOTTOM|wxEXPAND 6 0 0 wxBOTTOM|wxEXPAND 6 0 0 wxBOTTOM|wxEXPAND 6 0 0 wxEXPAND 6 0 0 wxALL 5 -1 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND 0 0 0 wxEXPAND|wxLEFT 6 0 0 wxEXPAND|wxLEFT 6 0 0 DarkRadiant-2.14.0/install/ui/findandreplacedialog.fbp000066400000000000000000002420621413722237400226700ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY 500,200 FindReplaceDialogMainPanel 500,200 wxTAB_TRAVERSAL bSizer1 wxVERTICAL none 12 wxALL|wxEXPAND 0 4 wxBOTH 1 0 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 2 3 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Find: 0 0 1 m_staticText1 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 FindReplaceDialogFindEntry 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 Load From Art Provider; darkradiant:folder16.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 1 FindReplaceDialogFindSelectButton 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 Load From Art Provider; darkradiant:texture_pick.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 FindReplaceDialogFindPickButton 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Replace: 0 0 1 m_staticText3 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 FindReplaceDialogReplaceEntry 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 Load From Art Provider; darkradiant:folder16.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 1 FindReplaceDialogReplaceSelectButton 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 Load From Art Provider; darkradiant:texture_pick.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 FindReplaceDialogReplacePickButton 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 12 wxLEFT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Search current selection only 0 0 1 FindReplaceDialogSearchCurSelection 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxALL|wxEXPAND 0 bSizer3 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY x shader(s) replaced. 0 0 200,-1 1 FindReplaceDialogStatusLabel 1 protected 1 Resizable 1 200,-1 0 -1 0 wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 bSizer2 wxHORIZONTAL none 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Find and Replace 0 0 1 FindReplaceDialogFindButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Close 0 0 1 FindReplaceDialogCloseButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/findandreplacedialog.xrc000066400000000000000000000131041413722237400227060ustar00rootroot00000000000000 500,200 wxVERTICAL wxALL|wxEXPAND 12 2 4 3 0 1 wxALIGN_CENTER_VERTICAL 0 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 6 wxALIGN_CENTER_VERTICAL 0 undefined.png 0 wxALL 5 undefined.png 0 wxALIGN_CENTER_VERTICAL 0 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 6 wxALIGN_CENTER_VERTICAL 0 undefined.png 0 wxALL 5 undefined.png 0 wxLEFT 12 0 wxALL|wxEXPAND 12 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 200,-1 -1 wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 wxHORIZONTAL wxLEFT 6 0 wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/fonts/000077500000000000000000000000001413722237400172035ustar00rootroot00000000000000DarkRadiant-2.14.0/install/ui/fonts/FreeMono.ttf000066400000000000000000012376541413722237400214560ustar00rootroot00000000000000 FFTMT x?GDEFyXk18PGPOS68vGSUBLprep\ɻyBH@7 h_< ȸ0'ȸ0'8  8ZX  xX/]1 @ GNU @  8 `XdXXXXX\XqXWXiXX&XXqXHXXHXXqXqXqXTX`XiX`XXiXqXXXXHX3XNXXiX X+X?X+X+X+X?X5XqXTX+X?X XX3X+X3X+X\XHX(X XX(X3XgXXqXXqXXXHXXTX?X?XiX?X+X\XX?X\X X5XHXX?XTXgX+X+XXX3X3XsXXXX\XXXqX?XgX3XXBXXXX?XHXHXXXXHXXXX+XOXXXXX?XXXXqX X X X X X X X?X+X+X+X+XqXqXqXqXXX3X3X3X3X3XvX(X(X(X(X(X3X+XXHXHXHXHXHXHX XTX?X?X?X?X\X\X\X\XHX5XHXHXHXHXHXHX5X+X+X+X+X3XX3X XHX XHX XHX?XTX?XTX?XTX?XTX+X?XX?X+X?X+X?X+X?X+X?X+X?X?X?X?X?X?X?X?X?X5X+X5X+XqX\XqX\XqX\XqX\XqX\XX|XTXX+X?XFX?X\X?X\X?X\X?X4X+X\XX5XX5XX5XX5X5X3XHX3XHX3XHX X X+XTX+XTX+XTX\XgX\XgX\XgX\XgXHX+XHX+XHX+X(X+X(X+X(X+X(X+X(X+X(X+XXX3X3X3XgXsXgXsXgXsXiXXX,XX.XX?X?XTXXX:XXDX+X2X\XXWX?X0XXXqX+X?X\X:X XX5X3X3XHXXXXX<X\XgXfXQX+XX+XHX(X+XNX+XX3XgXsX`XPX_XXXTXPX_XXXXX3XXXXXXX|XXX X XHXqX\X3XHX(X+X(X+X(X+X(X+X(X+X?X XHX XHX X X?X?X?X?X+X?X3XHX3XHX`X_XXXXX?X?XXXX5X XHX X X(X5X XHX XHX+X?X+X?XdX\XqX\X3XHX3XHX$XTX+XTX(X+X(X+X\XgXHX+XpX|X5X+XXgXsX XHX+X?X3XHX3XHX3XHX3XHX3X3XXHX?XXXTXTX?X?X?X?XCXgXgXgXLXX?X?XMX4X2X+X3X3X\XXX\X\XXX X X XX5X6XHX X+XpXTXTX4XTXiXTXTX<X<XgXWXWXWXQX+X+X+XFXXXX3XQXsXsX_XpXXXX?XHXIXgXMXSXX?X\X?XXX)XX XXXXXX%XXHX XXzXXXXWXwXfX{XXXXXXX,XXXXXXXXXXXXXXXXXXXX,XXXXXXXXXXXXXXXXXXX2X2X2X2X2XdXZXX7XdXXXXXXXXXXXXXXXxXxX;CC9CC4twCCCCG]nkXU9zA7J;N:<LFE!A6|9;ARAOBnQmb wBXXXXXXXXXXX XXXXX X+X>X X+XgX5X3XqX+X X XXEX3X3X+XfXHX3X.X(XXFXqX3X?XX5XX+X?X<X=XDXXzX5XqXXFX:X+X5X|XHXRXX^X+X+X+X%XX"X+XZX+XHX+X+XpXBX0XX0XQX+XPXYX+X'XdX3XX+X+XX>X@X\XqXqXTXX XX-X3X2X3X X,X+X>X X+XX\X3X3X-X9X X5X3X3X+X?XHX2XX(X2XIXXXX X+X@XX XHXQXlXrX7X?X XgXAXAXFXXX4XAXHXAXXTXfX3XX3X5X`X X X@X XlXJXXXX?X?X+XrXJXgX\X\XX"XX+XFXAX3X>XX+XXXX X XXX&XX&XX"X3X XX XXX+(GnX3XAX+XlX+XX>XrX>XrX>XrXX X\XgX$XFX$XFX$XFXX X5XRX5XRXXX?XTX?XTXHXzX3XX3XX(X3XXXJX`XJX`XJX`XXXXXqXX X$XFX9XXX5XRX5XAXJX`X X4XqX XHX XHX X X+X?X2XLX2XLXX X\XgX`X_X3XAX3XAX3XHX3XHX3XHX@XJX2X3X2X3X2X3XIX`X>XrX X X\XgX9XXX3X?XXX-XFX)X)X+XX"X"X:X)X X5XX?XX.X)XkX5XX!XXZXX=X*X+XX@X X)X X\X*XAX\XGXX3XZXXXXXXXX X4X+X!X,X+X}X5XX5X5XIXXGX8X5XGXBXPX6X[XXGX5X]X XGX5X,X,XgX5X?XyX XiXHXZX,XXXdX1XX<X<XX<X<XXX<XXX<X<X<X<X<XXX<X<X<X<X<X2X1X<X3XXZXZXZXXXfXjX]X5XdXdXAX@XgXcX5XfXcX:XdX]X5XjX5X5X4XbX5XhX@XjX5XfXPXLXfX2XjX.XnXbXuXWX]XeXX+X+XHXX X\XHX3XJX2X XTX+XXhXXhX>X4XXBXHX@X X2X#XX3XJX*X3X9X?XXJXgXXXHXX5X XXhX(XXTX+X\XLX&X2X XMX;XHXZX X\X)X2X?X?X?XX4X+X2X&X(X+X(X X#XX3X3XHXQXX>X<X2XX+XXXGXGXGXGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzX3XXXXXX~XXXXXXXXXXXXnXX3XXXXiXXXXiXXMXXXXX3XXXXVXXXXvX3XZX XHX+XX+XX+XX?XTX+X?X+X?X+X?X+X?X+X?X+X?X+X?X+X?X+X?X+X?X+XiX?X?X5X+X5X+X5X+X5X+X5X+XqX\XqX\X+X?X+X?X+X?X?X\X?X\X?X\X?X\X X X X X X XX5XX5XX5XX5X3XHX3XHX3XHX3XHX+XX+XX+XTX+XTX+XTX+XTX\XgX\XgX\XgX\XgX\XgXHX+XHX+XHX+XHX+X(X+X(X+X(X+X(X+X(X+X XX XXXXXXXXXXXX(X3X(X3X3X3XgXsXgXsXgXsX+X+XX3XHXiX XHX XHX XHXXX XHX XHX XHX XHX XHX XHX XHX XHX+X?X+X?X+X?X+X?XXXX&X+X?X+X?XqX\XqX\X3XHX3XHX3XHXXXX0X3XHX3XHX3XHX3XHX3XHX3XHX3XHX(X+X(X+X(X+X(X+X(X+X(X+X(X+X3X3X3X3X3X3X3X3X?X?X?X?X?X?X?X?XXXXXXXXXXXXXXXXXXX~XX5X5X5X5X5X5X5X5XXXXXXXXXXXfXiXXXOXoXXXXXXXXXHXHXHXHXHXHXX XXXXX+X+X+X+X+X+X+X+XXXXX+X+X+X+X+X+X+X+XXXXXXXXX?X?XXX5X5XXXHXHX+X+X+X+X?X?X?X?X?X?X?X?XXXXxXXXXX5X5X5X5X5X5X5X5XXXXXXXXX+X+X+X+X+X+X+X+XXXXXXXXX?X?X?X?X?X?X?X X XXX XXXXXX5X5X5X5X5XXXXX3XXXXjXjXfXX`XZXqXqXXXXXX+X+X+X+XXX+X+X3X3XXXXXXX+X+X+X+X+XXXXXFXXXXXXXXXXXXXXXXXHXHXXXXXXXX2XBX]XVXX|X|XXXXX3XXXXXXXXXX"XXXiXXXiXXX?X%X=XpXXXdXdXXXHX2XXXX&XXiXOXQXQXqXXdXqXjXXdXHXhXXXXXXHXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXX?X?X+X?X XXXXX<X?X X+XHXgX+X?X X>X? 6@)XXX?XX?X X X\X+XX!X"X"X1XVXVXuXXX XX4X+X3X(X#X+X XXX1XFXFXX+X X?X+X<X<XX<X>XXX2X7X7X3XjXXbXXXXXXXXXXXX8XXqX1X!X%X+X%X XXX(XXX?X?X+X X\XOXX XXX+XX?X3X"X"X\XTX?X X)XX6XXXXpX{XxXX(X(XMXMX(XX(XX)X>X*XX*XXX)XFX)XFXXXXiXXiXX*X)X(X(X+X&X;X9X!X!XXX!X1XXX)X+X)X)X*XJX*X!X!X8XX8X8XX2XXXX,X*XX*XXX X?XX+X+X#X+X+X&X&XsX&X&XsXX3X3XqXHXHXHX`X`XqXXXXXX%XXXFX1XCXXXXX<X<XGXIXX8XXnX8XXnXnXnX;X;XX<XHXHX<X\X\X\XXfXX\XJXJXHX3X3X3X\X\XJX\X3XdX3X3X3X3X3X3X.X.X3X3X3X3X3X3X3X3XX3X3X3X3X3XAXNX3X3X%X%XXXXdXHXNX+X;XHXNXHXNXXXXXHXFXHXFXHXFXHXFX3X3X3X3X3X3X3X3X3X3XIXIXIXJX>XJX>XHXHXXXXX#X#X#X#X#X2X2X2X2X3X'XXXXX3XwXIX"X3X3XyX"X{X{X_XyXHXHXXX\X4XdX<X<X<XXX-X-X+X+XXXXHX\X\X\XXXLX8X8X3X3XGXGXxX3XNXNXXXXX8X8XFXHXHXFX4X3X3X3XHXNXHXFX_X`XHXHXXCX$XX7X2XXXXXX"XX"XX(XX(XHX#XX7XXHXX'XX'XXYXdXdXX XX>XXXX+XXPXXXXXX#X#XHXHXXXXX)XIXXX#XX+XXXXHXXX+XXXXHXXX+XXX#XGXX#XXX+XXX#XHX3X\XNXHX+X\X\XXXXJXJXXX+X?XXX+X?XXXXX<XXXXX2XXXXXXXXXX#X#X#X#XXXXXXXXXTXTXTXQXXQX,X,X,XdXXdXX,XXXcXXcXXX<X<X X XXXX"XXXXXXX(X(X(XXXXXXXWXWXXXXX@XXXXXX+XX XX,X8X.X#X#X-XX&XXjXsXXXuXhXoX~X+X!X+X+X+X"X$X#XXrX!X#XaX_XiXZXX!X(XXXjXjXjXjX XX X#X XbXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,XXXX,XXXXXXXXXXXXXXXXXXXXXX,XXXXX XX,XXXXXX,XXX2X2X2X2X2X2X2X2X2X2XXX2X2XXXXX#X#XXXTXTXXXyXyX#X#XXX9X9XXX^X_X#X#X#X#XYX#X#X#X#X#X#X#X#X#X#X#X#X,XXXXX#X,X,X#X#X#X2X2X2X2XX2X2X2X2X2X#X#X#XX2X2X2X2X#X#X#X#X2X2X2X2X2X}X}X2XX/X<XXXXxXZX#X2X2X2X&X2X&X2X2X8XPXPXX#X#X2X2X2X2X2X2X2X2X#X#X#XXX7XvXvXvX@XX8XXXVXX:XXXXXXXX XXXHX,XTXXHX,XQXXXX6X6XmXxX=XJXJXJXJXJXJXX#XXXXXX-X X X[XMX#X-XXYXYXXXX X XXX}X}X-X-XXX X X X X X X X XXlXlXlXkXkXkXkXpXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXlXlXlXlXkXkXkXkXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXpXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+X(X(X(XEX3X?X?X?X@XX*XXX?X>X?X?XXX2X2X2X2X#X#X#X#XXXXXXX+X#XXXYXYXxXxXXXXXXcXXXXXXSXSXSXSXSXSXSXSXSXSXSXSXSXSXUX)XSXSXSXSXSXSXSXSXSXSXSXSXSXSXSXSXSXSXSXSXSXS#'GGXS)MG BZ<<<<<<<<H3131<<<<<<<<<<<<<21<3<<<<""~ 37IMZuz~dhmrw}V_EMWY[]} d q ! !!!"!$!'!+!.!2!;!D!K!N!!!!!"#######'#,#z#####$!$$$J$i&& &&&&&)&7&S&g&o&''''''(***?+ ++++T./6<>ADO $7PKPtz~fjpt|1Ya HPY[]_ p t !! !! !$!&!)!.!2!5!A!K!M!S!!!!"########)#6#|####$$#$@$`%&&&&&&(&.&9&`&i&''''''(***?++++S.8>@CF|{zyxub`VUTRQMHF0*]wuthgMJGFED410/.-,*'% {f_^[OIHEE/NJI"`ed}    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ardeixpkQvj As E Fgw9 l|"cnT )m}b : yjq|}~zk,K*PXJvY#?+X=YK*PX}Y ԰.-, ڰ +-,KRXE#Y!-,i @PX!@Y-,+X!#!zXYKRXXY#!+XFvYXYYY-, \Z-,"PX \\Y-,$PX@\\Y-, 9/- , }+XY %I# &JPXea PX8!!Ya RX8!!YY- ,+X!!Y- , Ұ +- , /+\X G#Faj X db8!!Y!Y- , 9/ GFa# #JPX#RX@8!Y#PX@e8!YY-,+X=!! ֊KRX #I UX8!!Y!!YY-,# /+\X# XKS!YX&I## I#a8!!!!Y!!!!!Y-, ڰ+-, Ұ+-, /+\X G#Faj G#F#aj` X db8!!Y!!Y-, %Jd# PX<Y-,@@BBKcKc UX RX#b #Bb #BY @RX CcB CcB ce!Y!!Y-,Cc#Cc#-KPXYF+X!YKRX!Y+\X E+D E+DY+3))((((hl(T(h\  ( l h d X   \`hH`D(d8 tD,t,hx4 L !|!"$""#$#x##$d$%&@&x'8'|($()),)<)**T*+++,,,--L--./l0\00011,1D1\12222233(3@3X3344404H4`45X5p55556<6677747L7d8,8899909H9`9x9:0:H:`:x:::; ;;;;<< <<<<<==>P>h>>>>>>??(?@?P??@@@4@L@d@AAAAABBB4BLBdB|BBCPCCDD(D@DXDpDE\EtEF<FFFGGG,GDG\GtGGGGGHdHHIII0IHI`IxIJxJJJJJKKL(L@LXLpLLLLLMMMNNNOPOhOOPP|PPPPPQ Q$Q<QTQlRRRRRRSS S8SPShSSSTU U0UV0VW4WXXXhXYTYYZDZTZ[d[\|]]]^X^__`aabbbccddeefLffgdghXhi4ijDjk8klHlmmnno8op<pq0qqrr\rlrrrs\stTuuvXvpvvvvvwww0wHxx(xy yyzPzhzzzzz{x|| |8|P|h||||||}d}~t4@Xp8Xp0H`x 8Ph(@X4 8d| $<T @`H<Xl@(\X,Th|X Tt XD<<$l4|4DX00@`x Td 8dP<P 0DXl Pd0t`X<d” Hxô<PĐĤĸ$HpńŘ8L`tƈƜ`tLjǜǰD`tȈȜȰ(<Ɉɜɰ(`tʈʜp˄˘ˬ,@Ť,͔ͨ0DTh|ΐά0DXtψϜϰ,@ЄД<TфќѴ,<LҐ ӌӜӬ$Դ,<ՄՔդ<Lt׌פ׼؀xH l@PݬL\0߸|@((@`<T |H0H`xLt$4\l,Ph`p$ 0|pt8xx XhllPD@(8H`p(@Xp  x 0  8  |  `p(@Xx`$dxL$8\XX\ !,!"\"#H#$$h$%\%&d&'D'(H()h)*d++,d-$-4-L-d.../h/0|112233x33344 404@4X4p4455,5D5\5t5555556 6$6<6677 787P7h77777788\8889x::;;(;8;H;X<<=D=>0>?(??@`AAxAB<BC(CDDDEdEFhFGlGH\HIxIJTJJK<KLLM@MPMNNN$NdNtNNO|OPhPQ\QRRxRSdSTTUUV VWWWX4XY YYZlZ[p[\ \0\\\]]^^___\_`0`aaDaab bPbxbcc,c`cccddPdddePefffgghh<hhiPij<jtjkLkl4lmmmnHnoPopp`ppqqrHrsDstu u\uvvwtwx\xyyz{@{|p} }~~,|H@$8L`p,  0@4(8@DL \LxllTPdx,dP`p,p|\t,<lD \8h8\@L4\ @@p<h8H(T$\ Xt(Ph@,D\t4d|@X4Ld|”¬ $<TlÄÜL $<T,D\tƌƤƼ4Ld|ǔǬ $<TlȄȜȴd|4Lxː˨ 8Ph̘̰̀,D\tόϤϼ4Ld|H`(@Xp҈ҠҸ0H`xӐӨ 8PhԀԘ԰(@XpՈՠո44Ld|۔۬ $<(@Xp݈ݠݸ0H`xސި\tߌߤ߼4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld|(`\t4Ld| $<Tl$<Tlhx(@Xp ,T|H|$D0Hh0D0xl ( t    T p       @ p     4 4 4 4 4 4 4    D l  4H\p8h|x4`0044@ D !"X"l"""""# #d##$0$D$%%%%&&$&8&L&`&'()`**+,,-P-.x/ /0l01X122334t45x6x7789:0:::::::;;;(;8;H;;<<<=0=D=X=|====>> >@>`>>>>???(?|?@H@A ABBBC8CCCDDD$DEEEFFG(GGHxI$I4IDITIdIJJLJKK|KL4LLMlMNlNOlOOPPPQPQRRdRS`STdTUVTVWWlWWX,XXYtYZ[ [[\\L\\] ]L]^^4^_L_`l`a`abLbcdcd$ddelefdfffgg|gghphi8iijjdkkhk|l(l<lLllm@mhm|mmnnn0n@nxo$op ppq(qrTrxrrs\sxssstLtuvwy4z{{| |4|P|||||}}\}~8~~8Ph$<h  0L|`0Hd0Dx@Xp< 8Pl $p4dxPpTlLd0ph((L`4H<Tldx(<,DX<Ph$Xh<$ (<XxDl($h|dd(@Xp(44 8P<Tlh,D\tÌäü4Ĉ 8`Ǩ,<L\tȌȤȼɨXʠʼ(̐HxϸДhш4xҌH|ӤԨtHdלװ$H\l؀ذ0L`٬(`ڤ,Lۀۜ۸$T<ݸ|`pXl<P,T|4TtDl 4\| ,Ll(dT Hh,`@T4PlH0Pp0Pp0X,X$LxHp8d 8` PL@p@hDx0\0` 8<Ht<Xt$Lp4Pl  ( @ \  lPl,LlXt  4Px@\ Ld Dd8hp\  d   !!t!""@"p""##P#l####$$$L$t$$%%@%h%%&,&h&&'T'((((P(x((())0**+,H,-d-..t../x/0401112|233445585566L67T88:,:; ;`?@@@@A4ABCtD,EHEFG(GIIJ JKKLLMN4NpNO0OOP4PPQ0QR$RStSST TTTU\UxUUV@VVVWWLW`WWX XhX|XXY8YYZ|[[[\(\\]]]^^^,^X^^__h_``L`aaPab$bbc(ctcd,deeef@fg4gh$hiTiijjjk<kl0llmXmnLno\ppLpq qrrs(st4tuDuvtwwxxxy@yyz\z{P{||p|}d}~x l@0@ThDh\Px8THX,(H44D8,`p(P,<(<pt(p4h|@8 (tńtǠ(p4d|@TdҔ8Ԥ0րDش|\ۈ0ݘ\ p80(XD`|$x4Pl8`x0X<Xt@Td|X `\(x8plHXp80<t  l| D0HDt ,   0 H ` |       ( @ X p        0 H ` x        8 0d33!%!!dN3!hj#"'4&5463232+"&46R-  3F **;\ 3"'73"'"4"4\$$$$\<@7##"&5457#"54;7#"54;7623763232+32+#"&54#3A[ WY NQ&[Y[ PS [ [$ ~~ ~qD%4.54675432632#"'.#"#"=.'#"=432326.EPE.Q?!,I.4I.EPE.ZL#HW7@S$,7,6P44<(=+!) <.;PwwO 0=Wc !,<%2#"&46"32654&2#"&46"32654&#"&547%632i4GH23HH2#12#"214GH23HH2"22#"21 { I52HIfI&2$#32#%2H52IIfI&3F33"%2z z  i/8!'#"&5467.5463262&#"6732+32#/32-C;V;4"I2!!  ! 2,o+ &qi(/>)70@^@4M7$1F  1>E:FS+)V ;)/F;l\3"'"2\$$&\%4>32#".&=D ' d C54'&54632#"& ' d C<=D h ;GI mNJn q\)54327632#"/#"&54?'&54632 Q  RQ  Q  + *p  pp  p* H #"=#"54;543232#@oT 73#"&547υ   H+ !"543!2nvt %32+"&46' (( ((t%8&&8%q #"&547632  G yH   qj "&=462'"326=4&hhhhDNQADNQ_dvvdwk^Yb^Ybqd32#!"54;#"&54?Aq  dq Tj"4632!5432!57>54&#"#"&hmMIo5[:vF+V93S  -ghD-OU$M"4N<- `j/4>32#"&546232654&#"543254&#"#"&}'V3KeA&;B{V; *N1DcjIN:*;   ('YA:D U3Lk; T:;Un1A i\%!5332+32+"54;5#xT"""LЩ/va`\&"#"5!2+632#".463232654&<'>& I;MdsY'M3 *N2I\Ob nT_y!  &&bOCTj,"&#"632#"&5463232654&#"!(TL1=iDcdIYp{ / J<8KK41# 3%DtG&znLQp QQX@;V1i\5!#"=!#"&547u  !#LA qj'"&547&5462&"32654"32654&wpnnpfiixrOO98P=UU=54'#"&54632#"&546.#"32>!(TL1=iDcdIYp{ / 9J<8KK41# (%DtG&znLQp wQQX@;V1v %32+"&4632+"&46' (( (( (( ((t%8&&8%-&8&&8&o^ 73#"&54732+"&46Ӆ   (( ((  &8&&8&H, %#"'-632  _ c C 3%w !"543!2!"543!2 DDNN,4632 #"&547-&N ^ c  A)>32#"=>54&#"#"532+"&46 >?(PbG^XMP>=D UE8L,)D%E+2?"),,ip-6"&=4632+5#"&546354&#"32>3275"32+WknUD[! :NaOB3DWVI*5 _@;L7+>or\EH5=S/4D~c]~ (:-&/ O3 $%!32+"54;#"54;32+"54;'#6Ox%LGpl%+3*7#"543!2#!"54332654&+4.+326|6IbUaD_@RJ7O&M65J)S>J.-d?Z<.,;&%A?@+4>325432#"'.#"3267632#"&5? "2Z9eHgCSvX4R(  4T,fE7J<+Ep.DYGZ*0  &+ e+37#"54;2+"5434.+3265h"aa'Q5Hp)j8k66ۑwb--+3'32+"54;#"543!#"=!35432#"=66Ƒb--?2@/"3275#"54;2+#"&=46325432#"'.;>Z)|lFIZa{mcC`6N@Ifu"4vJi6[&65'33!32+"54;#"54;2+!5#"54;2+32+"54;6-x66x.6q332#!"54;#"543!2#@? TG3#"&'54323265#"543!2#oM0V6KI=U( Jk)1DR:e+<32732+"54;#"54;2+%#"54;2+32+.'K66K-vIP88W7VGݴmw?3!5432!"54;#"54;2#=``  Q3,%##32+"54;#"54;32+32+"54;#F.J"cd"Ja\23"!#32+"54;#"54;#"54;2+4K"6j1J"13%@ 2#"&46"32654&,jghhVzzVU{y@y)Җgl+3!732+"54;#"54;2#'32654&+66PmvUA^U;_a)J43I3%@%0"#"&54?.546263232632#"&"32654&>0_ ZUqБh6(*G5 IE4VzzVU{yY Aj||{( $pҖgl+M3$-732+"54;#"54;232+./32654&+K66Ik/@=9BU9rJhU6]?a0 Rkzg)D0-E\@7%4.546325432#"'.#"#"'#"=4323264M[M4iOV<R:>Q4M[M4tZj?bDF]*4?2BY;g-m9`>@ps $xp(03332+"54;'32+"54;7'#"54;2+7#"54;2+E>@n+-o 3%3&%32+"54;5#"54;2+7#"54;2+Biio&(n g3)55!#"=!!5432vH]:;v:4\ 32+32#Aa3zq#"'&54632G    H    @\ #"54;#"543aS(qbg#"/#"&47,   g   X!5XK22@#"/&54632r  r vd  d  H ,463232+5#"&5463254&#""&5&#"326}&F[6_YfFVu^;MD7.b &45YzF5CSG9AQG%- Z;/'/(\#632#"'#"54;#"543"32654&Ik[~ZnF_66JhhJIig\g]^hX jkjJNkT%%#"&546325432#"'.#"32762"7Z/bd]?]?SghRmN  X !$|`c7 [(7gROeH ?G\#32+5#"&46325#"543"32654&6_GoYYnH6}JhhKJhg\YihjLMjjKNj?%!3267632#"&54632!."` nQ/b  De`e`v fdO_ 8a[{@DRQi\*".#"32+32#!"54;#"54;54632.A1>bXXWCFE'/&=O=7G ?F2'532++"54;26=#"&4632"2654&_6`Ert3GBiUyyUjgFbbbaNSl@^H3a|{)bcbFIb+'\-4&#"32+"54;#"54;>3232+"54;D7*7) -.6_&F.FY-- -9!0  .&O=\p32#!"54;#"5437#5@v;OhhFp#"543!+"54;265#5WD2A;xCFXB3hh?\)7#"54;#"54;7#"54;2+32+"54;'_66_/- \\32#!"54;#"543@u\  Q7>3263232+4&#"32+4&#"32+"54;#"543p0 @!7:+>"J(26"J'27"m""4$GG@,?+R<-RO51"32+"54;#"54;>3232+"54;54&?! --"K+B/CZ"m"A  OE0#N:+;H 2#"&546"32654&,`^__NmmNMnl_\^\)jkjJOjF(>32#"'32+"54;#"543"2654&(R9]}~\pCb66JhhhfR4,yz` cFGcbFIb?FG'532+32+"54;5#"&4632"32654&_66bCq\~~]ooKggKJigOR`zy)bcbFIbT""&#"32#!"54;#"54;>324"IS`KtEV&(< X*0LOf?10 g6%4.546325432#"'.#"#"'#"=432326D``DaJU4H98JD``DoU`=Z@BXu%(2,1@.E"(+  909K6 S"14+3$32+3267632#"&5#"54;5432<4*_  @GTJJ&. -C8 w+ !5#"&5#"54;327#"54;32#Tb2#".#"#"&54632* R%B;   L,E;'& P0/ R0/[h632#"&574#"&46;2-  nF **qv/4>754322632#"'.#"32>32#"=.q H4?)>0DYWB,; b2I^7,=2 kj$= 'S@?S(.qqi?B732+32>32#!"543>54'#"54;&54632".#"cZ9 1##7h^S:3N -)<`#hG&7mEU$;T@ =g_2>7#"&54?&547'&54626327632#"/#""32654&9  8#"7  8,:9-7  7"#7  8/6773II32JH8  8/6;+8  7##7  8/6:,8  8#"I34II25I3%3@%32+32+"54;5#"54;5#"54;'#"54;2+7#"54;2+32#AVVtn''nv<dd<@\"542"542@((((A N B[1E%+543232654&/&5467&546;#"=#">54&/&'#"f L9(5;HA8/ L4%6PH 1AoG+ 8($PC"-/EmE-41&CS:$.+G#-c 2"&4632"&46((c((TB%0<%#"&=463242#"'.#"32>22#"&46"32654&<";ZR9+.$4"+=C.& }z~x{jgm "Z;-!,463232+5#"&5463254&#"#"&5&#"32U,8?65,7K:-$C *+7"7/%,#+6 , ; $??632"'?632"'?          H !"543!#"5|H+TB )4@32+"4;5#"4;232+&/32654&+72#"&46"32654&$`.;& '96?8*1'MCz~x{jgmf$$$4), (6$w$z})jiki@#"4;2((Z| 2#"&546"264,:U)=*,==VH#"=#"4;543232#!2#!"4@on-((((d46323542#57>54&#"#"&@-+A;}$&+)  =<) Es'+{& ' d."#"&54632#"&5463232654&'&54632654&,  E",<.:G2%M :$"34($'@ %5'+$4,?$ "**  #"&54?632r  r  Wd  d +8!7#"5#"4;327#"4;32+5#"6_3(eRJs"KPe9&()2[((;KO \%-.=46;2+32+"547#+"54;5\qyb=>bHa:MMP r Q/;$ `32+"5432#"&546?G'A `$   A 2#"&546"2654->UW<=VVk\@AZAAV>;VV=54&#"#"&  ^  G'A *@-+A;}$&+) b   }$   =<) Es'+{& ' Dd.=TX"#"&54632#"&5463232654&'&54632654&"&54763246;5#57332+32+"75#}  E",<.:G2%M :$"34($'Q  ^  . 9  U9k@ %5'+$4,?$ "**  cb   + 9"$9$qQ'#"&546754323275432#"&46;2cLPbG^WNP>325432#"'.#"3267632+#"&5463232654+5.5? "2Z9eHgCSvX4R( &#Z) A,#> ,.llE7J<+Ep.DYGZ*0 # ';$  EM+ #o(+#n(+"jt(+"j_(q #o(,q#n,q"jy,q"ja,3.#"54;5#"54;2+"54;4.+32+3265hMM"^^"w )F+Gqh8h,<1#}O2"d13% #o23% #n23%"jx23%"b23%"j`2vd!762"/#"&54?'&54632,     7     (0]'/7#"&54?&546327632#"'&#" 32654A  EBhVHB  FChZB ;IVzl;JVz3R  WXr|BS  XSx|l;i[;i^(0 #o8(0#n8(0"jx8(0"j`83% #n<+3(732+"54;#"54;2+32#'32654&+66PmvUA^U;oFO_a)J43I\:%4.+"54;2654&#"32+"54;4632#"&5432326,A9&:B,*@n6Y:@W:HA3F  $.20H$3!*>8%S5QS?<'.T]D1%FH"oDH"nDHr"jDHD"DHO"jDH"~ D B2?G4632>32!32>2#"'"="&5463254&#"#"&5&#"32%.#"Gb%>@$IHH2.! ])J2(8TkL),3%$> ,# J;.3B*Yz .&'-}kLb BM"DT@6G <#2 ] "*6'5TS>%#"&5463232654+5.546325432"'.#"32762%1K+A,#> ,-2K'd]?(\?SghRmN  X;$  C*1>(c7 [(7gROeH ?"o H?"nH?p"jH?O"jH\"o\"n\t"j\O"jHl,7.54632?2#"&54632&'#"&547"32654&. /e_ KKX`_^)@)5D[ WNmmNMnl%  0* "@Sl^\c1* jkjJOj5D"QH"o"RH"nRHv"jRHD"RHO"jRH!"43!22"&5462"&546n((((5#+7"&4?&54632762#"32654&#"B  B9_R>@  @;_P3BNm2ANm#D  CBS]1B  AAV]Y(jLD&jLD+"oX+"nX+r"jX+O"jX3F%"n\FN(>32#"'32+"54;#"543"2654&(R9]}~\pCb66JhhhfN4,yz`cFGcbFIb3F%O"j\ O"m\$H"mD O"|{$Ho"|D eY3482632#"&547#"54;'!32+"54;#"54;32#3 #  1$(MuL86Ox%:Jpl{   :$!)"`%He,4@46323232632#"&5467#5#"&5463254&#""&5&#"326}&F[6%+  1$(#*=YfFVu^;MD7.b &45YzF5 %"   +CSG9AQG%- Z;/'/(? #n&T"nF?"jy&To"jF?"}e&TO"}F?"kr&T"kF+"kp'?\#`8G3?G\&232+32+5#"&546325#"54;5#"54;"32654&666_FoZZmH6_JhhKIigJQa]\`+jLMjjJOj+"m\(?"mH+"||(?p"|H+"}a(?\"}H+e$3<2632#"&547!"54;#"543!#"=!35432#"=#!5432  1$(Mn66ۑ::{   :$b--w+"?e+12632#"&547#"&54632!3267632!."  1$(6f`e` nQ/b  5@5v fd{   2!b[{iO_  $"2"kDRQ+"kp(?"kH?2"j u*?F2"jJ?2"| |*?F2m"|J?2"} g*?F2^"}J?82@'*?F2"_J5'"jx++'#jK5'3?C32+32+"54;5!32+"54;#"4;5#"54;2+!5#"54;2+!!.66-x66x)(T(eeeD+'\94&#"32+"54;#"4;5#"54;32+>3232+"54;D7*7) -.666_&F.FY-- -9!0 (6_(z.&O=q"c,\D"q"m[,\"mq"||,\n"|qe3+2632#"&5467!"54;#"543!2+32  1$(#*? % {   + %"\ep&*2632#"&5467!"54;#"54;32#5  1$(#*v & X;{   +O $"hhq"}c,\32#!"54;#"543@vO;36#"&'54323265#"54;2#!32+"54;#"54;2#FI/> (%8-_m,,, Pe*0)JBe|Fp*.#"54;+"54;265#532+"54;#"5437#5QzWD2A0;@B8l;xCFXB3hhOhhTG"jln-F&j+8<3'.?8\'NF?"ny/\#nO?83'/\8\'O? @#`/\\#`O?3'y/4\'yO+3-7632!5432!"54;5#"&54?5#"54;2#  <`j  ~` P  \ޡ>  J\\&763232#!"54;5#"&54?5#"543?X  lW  ku\3  >2  =2"nt15"nQ823'158'Q2"ks15"kQ"Q` 5 A*4&#"32+"54;#"54;632#"&5463232P=aK--"KKeIi> .i+q|`qES 595232654&#"32+"54;#"54;>32#"&546,.;A7! --"K+B/CZV=> A3J+;  OE0#N:?X 3%"m]2H"mR3%"||2Hm"|R3%"6p2Hz"6R N3$135432!"&5463!#"=#35432#"=%;#"Rrm;N-X= =X-\}q` )NK..KN B"*5632!32>2#"&'#"&54632.#"'"32654&+-W//I0.! ])-ME*>\[>)H +Y-DD.,ED=r1`BJd B@79>\Y>&6mnnGJn+M"nu5T"n U+8M3'5T8'U+M"kq5T"k U\"nw6g"nV\"jp6gr"jV\S@M#"&5463232654+5&'#"=43232654.546325432#"'.#"4M[M4lXA,#> -/\1bDG\4M[M4iOV<R:>Q'0C3F\;$  B <p1DI7*4?2BY;g-Qh2fSA,#> ,.T.Z@BXu%(2,1@.E!)+ "pH;$  B , S"14\"kn6g"kVHS33232654+5#"54;##"=!#"&=#32+#"&546,.ii ilA,#> r QIrr I/;$ +C3"zWH"kq7+e#`WH3(32+32+"54;#"4;5##"=!#"&=#Accii`` Q((Irr I+305#"54;543232+32+3267632#"&=#"43JJ<4*_  @GTKewwe(~&. -C8((0"c8+D"X(0"m[8+"mX(0"|}8+m"|X(0 "~x8+"~ X(0"6s8+z"X(e03:2632#"&547#"&5#"54;2+3265#"54;2+  1#)<'Tr"J[CB\J"!//!{  !2$tUQD\]CQ-J/(,"+e,42632#"&5467#5#"&5#"54;327#"54;32  1$(#*)TbbXXWCFE'/&KO=7G \ 1"32654&%5#"54;32+632#"'#"54;#"543BJhhJIig6_Ik[~ZnF_66jkjJNk+Tg]^hX3832654&+4.+326!2#!"54;#"32#"&46@RJ7O&M65JRIbUaD66%! %9<9<.,;&%AS>J.-d?Z!  7R4,3g\ ("32654&'632#"'#"54;#"543!2#BJhhJIigIk[~ZnF_66jkjJNkg]^hX .%N 3%4.+32632#!"54;#"&54?54327632&M65JA_0aD62  FJ  &%Ar24?Z#  0B%3  N 532654&#"'632#"'#"54;#"&54?54327632hJIigKJhIk[~ZnF_6-  AO  kjJNkUg]^hX  -C'7  ?@+72326=4&#"#"=432632#".54S #H.XvSCgHe7Y3# f+S5!}&ZGYD.pE)325462#"&54&##"'.#"3267632#"&5? "2Z9eH4R7   gCSvX4R(  4T,fE7J<+E%;8& !$p.DYGZ*0  &+ eT2%#"&546325462#"&54&##"'.#"32762"7Z/bd]?4R7   ]?SghRmN  X !$|`c7 %;8& !$[(7gROeH 33 ,4.+3265!2+"54;#"32#"&46'Q5HpCaa"F$! &8<>j8k   7R4:,3&35!#"=!2+32#!"&54>;5#"66Da0_{J5ЕiQCb^@54 /FL\ ("3264&7!"543!2+32+5#"&54632KgiIJhhh66_FnZ~[kIkNJjkjXh^]gD9 -J+3)##"=43235!#"=!2+32#!5432!66>:--bw2@\@;"3267632#"=#"&54675.546325432#"'.#";2#)IX]FDb?jZt<2'1iOV<R:>QWA0@57ID1pH^I5HA,BY;g- ' A3b--;J Wj-"&#"32+#"&546323265#"54;54632)3?``V=> ..;``W@> 6 @3W?X A3WA[ ?x<46325462#"&54&##"'.#"3275#"54;2+#"&5?mcC4R7   `B>Z)|lFIZa{>i6%;8& !$[&66N@Ifu"4v0"3=%3254.'#"54;2+7#"54;2+#"&54>, !<o&(n  50/6& &"%5Z  !("#:IN56-E\8%#"'.5'54+"32+"54;#"54;>323265#"54;EG;@. D$3-.6_-)5&-)Jst8L9 % ]5 %"&432A%2;=fD) D "!G9(EW q3#5#"543!2+32+32#!"54;5#"43?dd_A((+f3?32+.'32+"54;#"54;2+%#"54;2#"&5463265.#IP88W7VGQK66K-v$<8& !$ mwI4R7   ?j2"&#"7#"54;2+32+"54;'#"54;4632k)3?/-._6W@> 6 @3'A[ \\!+32#!"54;5#"4;5#"54;32 baaub) (:&f<2763232+"54; 32+"'"&54;'#"&54?'#"543H  Jn85n  N  P^f 1  40 T86  87 Q37!5#"'#"&5#"54;327#"54;327#"54;2+32#0 @!7:+>"J(26"J'27"m""4$GG@,/+R2-RT3&7"&546323265#"54;#"54;2+#?4> ,!(6jJ"4:@V A35H1"32+"54;#"54;>3232+"54;4&?! --"K+B/CZ"m"A  OE0#N:J+;3%@.3U )"32654&32674&#"&54632+#"&4632,VzzVU{y8:$! &8;%BghhPҖgl   7R4UzyHN *"32654&732674&#"&54632+#"&54632,NmmNMnl4?$! &8;%4^__HjkjJOj   7R4=T\^\R~ 3"32654&'63232+"54;4.#""&54632TY\QR[Z)f?:W(!(3<pspf!qlnoIJ* "G)~~T /"3264'63232+"54;4&#"#"&54632tJK9:L62^)9..#!=-?gCGdcH+lPKfj{<;1?!'.32#"'32+"54;4632hhfLJh)3?(R9]}~\pCb6W@> GcbFIbc @34,yz`_A[ ZI,C\:@+/& 2)7'q?  --  ?.#*+B2*4 |$ {j_    \@774>54&#"#"=4326323267632#"=#"&\4M[M4Q>:R7654&#"#"=432632D``DXB@Z=`Uo1MOL J89H4UJa>-1'&(41"S 6K9*6  +("E.@fAQj '"2654#"&54'"&4632326322##2#>=V7L77&@W;., I"""X?& $56J5[Ar3A +9342326=#"&5#"54;543232+3267632#"&546..;KSGTJJ<4*_  V=> A3;!C8 ww&. c?X 3'"32#"&463!#"&=#32+"54;q$! &8<$ ii   7R4r I+j/"&#"32+3267632#"&5#"54;54632l)3?<4*_  @GTJJW@> 6 @3-&. -C8 -A[ H93 #"&5##"=!#"&=#32632>=V ;., X?:Irr I3A (u2#"&5#"54;2+3265#"54;2674&#"&54632#sTUr"J[CB\J$! &8;% UtsVQD\]CQ   7R4+>5232+5#"&5#"54;327#"54;2674&#"&54632"KTb75##"=33>54&/53#"=#+.W&8-}MRS1\+= AD A_+6&Z%4';[,ae``.?.532+#"&5#"54;2+,(+^ 4U]51M 0# NPx:=%337#"54;2+32+"54;5#"32#"&46;2#(nii$! &8<$o    7R43Fj52 32+"54;7#"54;2+#"54;2674&#"&54632#AGs46n$! &8;%xxK   7R4g3!!5432!57#"4;75!#"=!32#6:vMj]Q;(v:(s%7##"=!32+!5432!57#"43(x^}GjM7`$(8a$(`3/"&54?##"=!2+632#".463232654&#" ?&,MdsY'M3 *N2I\O?4\:7` nT_y!  &&bOCT(P30".#"32>32#"&54632'#"543!#"=#&@&?O\I2N* 3M'YsdM,&? :TCOb&&  !y_Tn `7_b0%".#"32>32#"&546;'#"543!2+l  "/AJ2$<'  !C"JZSE  ȴ  Z>Ek%% UMs~ X8A#".5>32>54&#"#"54?#"&543!2+2#"3267632r;2E8^C),88"   (51$H25E=1-Mh)7 2+<6 1#-   ~/%22$% ,Tj0+!5432!57#"4;>54&#"#"&5463232 ]J:vW:$V93S  mMIo15 <$M<(99 4N<- -ghD$:3P3,"#"=#"&543!2+632#".463232654&<'>& - GI;MdsY'M3 *N2I\Ob nT_y!  &&bOCT_*7"="543!2+6;2#"&546232654&#" %P\QG>Y7-97=G 0 y JD@R2 9160 327543232654&'5#"54;5#"54;2+32+#".D=>PMXii--ii^GbP(?>"D)"?2+E%Qoo6,L8EUF )%654&#"32+"54;#"54;7>32I10$+DMb66_3#R.%W;G)5#"54;2+#".'5432qY((  _2s   S+e  "FGp-135432!"54;#"54;2##"54;+"54;265#5``QzWD2A0; CFXB3hh|Fp*#"54;+"54;265#532+"54;#"543QzWD2A0;@B8xCFXB3hh X3C#"=4323265#"54;2##32+"54;#"54;#"54;2+0R*$u2+f&Z*u"jS1ZD%6Q(@&FGp"6:!#32+"54;#"54;#"54;2+#"54;+"54;265#54K"6jJ"QzWD2A0;ACFXB3hh FGp3GK4.#"32+"54;#"54;>;232+"54;#"54;+"54;265#5a8*  --"K'*"BT"m"QzWD2A0; ++  OE5N:OCFXB3hh O"kq$H^"kDq"kq,\l"k3%"kq2H^"kR(0"kq8+^"kX(0 #q+"ql(0%/9I#"&5#"54;2+3265#"54;2#%2"&4632"&467#"&54?632sTUr"J[CB\J((r  r  LhhL0Z)|lFIZa{mcC`6N@Ifu".??E4vJi6[&6?F2 4"2654&+"54;27#"4;6=#"&4632532+32#Fbbba~MIqBPMb66_C19b@,377UMɆCC& -2"C6q15"C< Q O 04>H#"&54?632!32+"54;#"54;32+"54;/#2"&46"2654:r  r  f6Ox%LGplc'67L77?2##2#d  d v^5'$56J5!"""H &~&Dv N"vq B^"v(0#v5"v O#0$H#SD O#1u$HV#SD+#(?z#H+#Hu(?I#OHd#!,\z# q#Xu,\I#W3%#"2Hz#"R3%#Xw2HI#XR$M#5Tz#.U+M#;t5TI#dU(0#"8+z#X(0#Zw8+I#?X\8@&6g8'VH83&7+83&Wp@6%".54?654&#"#"=432632#"54?>54&# 'Q>:R54&' J89H4UJa M(  %& 5 f +("E.@1- !J+%V V#I5'"kq++' #kKF:A*32+"54;4&#"32+"54;#"54;632--P=aK--"KKeIiq|`qESg93%2326=!55!#"=!!5432#"&546..;H]:V=> A3*;v:4?X s9#2326=!5##"=!!5432#"&546..;-^V=> A3*$T7`$8?X O"}_$HO"}D+S3@232654+5#"54;#"543!#"=!35432#"=#!5432##"&546,.66ۑ:A,#> r Qb--w/;$ ?D27!.".4632!3267632#"&5463232654+hv fdZw`e` nQ/b  DA,#> ,.DRQ {iO_ 6/;$  3% #qH"ql3% #qH"ql3%"}e2HM"}R3% #qH"qu3%"qX<3F% "q\F#"543!+"54;265WD2AxCFXB3H De?G !"32654&43232+5#"&4632JhhKJhgg6_GoYYnHjLMjjKNjYih' fj ,32654&#"7"&#"632#"'#"54;4632hJIigKJJ)3?Ik[~ZnF_6W@> kjJNk @3g]^hXA[ T(7232654&#"#"=432632#".546g #O4RhgS?]?]db(K4( keORg7([ 7c`| T|/5".546325432#"'.#"354632#"&5764#"HEe3d]?]?Sg+S:7029  )B>*FF&c7 [(7gR :8"D3?9.gb |I?9\ ,"32654&#"&=#"&46325#"54;32632JhhKJhgQ>=VGoYYnH6_;.. jLMjjKNjX?ihz3A ?j ,%4&#"326"&#"32+5#"&463254632gLJhhKJh)3?6_GoYYnHW@> NjjLMjj @3[YihA[ ?723267!4632#"&546%."V,V8Qn `d`eD df V_Oh{[a8 EQRD? HGC)1%#"&/#"&'%&#"#"&54632732632'32654*. `Hqn9p/b  D@k!:+ !6fRh ) ,.[{H>T 892J KeI$g@7326=432#"=#"&54>75'&46325432#"'.#";2+"XB@Z=`Uo .aJU4H98JDP0D-A u(41"S 6K9(  b@.E"(+ ) g@%4.+"54;2654&#"#"=432632#"'#"=432326 A-D0PDJ89H4UJa. oU`=Z@BXu  ) +("E.@b  (9K6 S"14gT732632#"&/#"'#"=43232654.+"54;2654&#"#"=432632:+ !*. = oU`=Z@BX A-D0PDJ89H4U/PwJ ) 3% (9K6 S"14(  ) +("E.L <747>32#".'.732654.+"54;2654&#"LEZ.Ja= oU%  G,jBX A-D0PDJ8`OJ@13% (9K  Z@O%S4(  ) +F !%#"543!32++"54;26=#"543;;WD2A)OFXB3?Fj 1%4&#"26"&#"+"54;26=#"&463254632aGFbbb)3?+3Grt3GBiUyyUjAW@> Ibbcb @3:.6H3a|{aA[ ?F &"2654&5432+"54;26=#"&4632Fbbbaa+3Grt3GBiUyyUjbcbFIb8SC:.6H3a|{M2"3275#"&54;2+#"&=46325432#*#"'.+Sbg`;>u  OUm|`T; QWA6JN\  v&hX7Nq( C &48('/%3#"54;2++"&=47#"54;2+274+2o% %o1%S{J3%%2LL-!!2&.8632#"=.#""&547&#"#"=43263263232654E5H5^5H4F!V@@V"<"!S/Z/IH0Z/S99uPw".."w+E' KR3'j64&#"32+"54;4632#"&#">3232+"54;D7*7) -.W@> )3?&F.FY-- -9!0 A[ @3s.&O=39j:"&#">32#"&5463232654&#"32+"54;4632W)3?&F.FYV=> ,.;D7*7) -.W@> 6 @3s.&O=?X A3J-9!0 A[ \p$#5#"54;5#"54;32+32#!"54;>;vphhX%#"&5#"4;32>32A%2;=fD) D "!G9 (W 32#!"546;#"&543!2#Aw  yy  x   O  \\0746325#"54;32>2#"'32#!"54;5&#"#"&\L,$u/* R%'*   R&'& P# \\&0325#"54;32+32#!"54;5#"&=464&'; u 2'33Y/2   6"%1n)/9\#"&5#"54;32632>=Vu;.. X?cz3A b7\?%"54?#32#!"54;#"54;!2+32#".'&5463232654&#"*xk5 ESZJ"C!  '<$2JA/"  ~sMU %%kE>Z  Q P\ FQ75#"'#"&5#"54;327#"54;327#"54;2+32#0 @!7:+>"J(26"J'27"m""$GG@,+R -R  9@232654&#"32+4&#"32+"54;#"54;>32632#"&546=..;(26"J'27"m""J0 @!7:+>U=> A3i+R<-RO4$GG@,?X 95"#"&546323265#"54;>3232+"54;54&?! V=> -.;"K+B/CZ"m"A  ?X A3E0#N:+;595"32+"54;#"54;>3232632#"&54&?! --"K+B/CZ;.. >=VA  OE0#N:3A X?P+;6(!#32+"546;#"&54;#"&54;2+1@  - ] ?  k   O B  H 2#"&546.#"!26,`^_iIHjtjk_\^\F\]E(E^^ K%.75463!#"=#35432#"=#35432!"&#; |y5KKr$u\nh Xiq`\wMOS^+(!9"32>=43232654&'.#"&'#"&5467>3233_:*"  77= T UG*0*&IT1]B;g 8d7Q&( 1)xG6G!"&P;5332+#5#"&53;#"4&+3265p D0"-5?N D0"-5?N-?%163,W<(163,)*J;(+J;1,Q6%2+6%T UqT[  q49C+7232675#"543!2+32632#"&=#"&546I4"IS<`;.. >=VEV&(< I*0L^3A X??10 TF""&#"32#!"54;#"54;>324"IS`KtEV&(< X*0Li f?10 i9&"&#"32632#"&5#"54;>324"IS;.. >=VKtEV&(< X*0L3A X?f?10 T)"54;546;2+"32`WD2AFXB3T8"54;4&+"54;232#A2DW`3BXF^<)4732+"546;#"&46;232+.'74.+326?  -- @^@:*;2 28K4)$ a;]  M E/$99I XIx2<)473>732++"&46;#"&54;2+4&+32>q4K82 2;*:@^@ --  ?];a $)IX I99$/E M  2g9B%4.546325432#"'.#"#"'32632#"&=432326D``DaJU4H98J>Qh2oU`=;.. >=VZ@BXu%(2,1@.E"(+ "89K6P3A X?"14Wj"&#"#"&5463232654632)3?V=> ..;W@> 6 @3l?X A3A[ Wj,"&#"32+#"&54632327#"54;654632)3?`kI.> .<P^W@> 6 @3[*3 4 A[ Wj#"&54&#"#"&5463232632>=V?3( >@W;., ;X?3@ [Ar3A Qj '2654&""&#"#"&4626546322##2#,.;W@&77L7V=> <"""N A3rA[5J65$ &?X +3 W#+83$32+3267632#"&5#"54;5432<4*_  @GTJJ=&. -C8w+*232+32+5#"&=#"54;5#"54;!5#"54;!327"""KTb=V-^;., X?0$T7`$83A s +%3267&'7+"&=#5##"=!3546;2v)/>0  -^ѣ6"%1)/ ),P O$T7`$2'33_b07"54?#"&543!2+32#".'&5463232654&#"  ESZJ"C!  '<$2JA/"  ~sMU %%kE>Z  p8 H'&#"3267#"/#"&54632654&#"#"54?#"&543!2+2(Q   ),8$35A/"   /E"%m+% - . =%3-+4_>Z   ~'>=6aA$>3232+"54;5>54&#"#"5 >?(PbG^--XMP>=DUE8L,%E+2?")A$#"=&#"32+"54;5.54632D=>PMX--^GbP(?>D)"?2+E%,L8EU3$7543232654&'5#"54;2+#".D=>PMX--^GbP(?>"D)"?2+E%,L8EU?8B+4>325432#"'.#"3267632#"&5? "2Z9eHgCSvX4R(  4T,fG7J<+Ep.DYZ*0  &+ eH "32+"&4672#"&546"32654&' (( (("`^__NmmNMnl %8&&8%_\^\)jkjJOjI!)7#"&54;2#!"5463732654&+4+326- @VKpU< V8C;10;)O >-8!!K/B '" "S'g8";2+"32654."&54>75&54632.8JDP0D-A XB]I"@.Uo =aJ+E,+P+ )  (4`j&0jK9( %31@'0)u  OUmNq( %;8& !$C &WA6JN\  v&hXS ;%#32+"&546;#"&54;2+35#"54;2+32+"546;- { % j--j & | -ě   O    F"p*#5+"&5>;#"543!32+";267;gb4 7MR1D m$85' &Fphh!IPC/5<O  ( />8?E N\\35432!"546;#"&46;2#s SS  xl O   ?Fj 0%4&#"326"&#"32+"54;5#"&463254632gLKggKJi)3?6bCq\~~]oDW@> Ibbcb @3`zy`A[ A2>3232+32+"54;5#"54;5>54&#"#"5 >?(PbG^ii--iiXMP>=DUE8L,6ooQ%E+2?")A2#"=&#"32+32+"54;5#"54;5.54632D=>PMXii--ii^GbP(?>D)"?2+E%Qoo6,L8EU)9\ -732654&#"73%25#"54;335432!5#"&546R2-:=,,R6_V/E=LkiLNjk]O7@$8a1A~b^b=\ Q732654&#"725#"54;!2+32#".'&5463232654&#"#"54?#32+5#"&546B, 07=,,FR6_ ESZJ"C!  '<$2JA/"  &O[0@=@whMNjk@~sMU %%kE>Z  1A]^ S\ 5AE%3267&'7#"&546325#"54;33546;2+"&=%32654&#"73)/V/E=2R6_=6"%1>0  2-:=,,)/[1A~b^@$2'33# ),P OLkiLNjk]OK3C%32654.546325432#"'.#"+"&=#"54;543232+@F;UU;OH(0=168;UU;]S=VJJ@@;3)%(2,2?E/)":0;IX?ww3AFj<"&#"#"&=#"54;543232+32654&54&546323)1B#Z:=VJJ||90-?#[=> 6 :-7TX?ww3A=+A ;S |O6OW32+327&546325432#"54&#"354632#"&="'#"&5#"54;5432>54#"//<4 ;`T+8"O9@H8&./10KJ  0)#GTJJ%=/84&.8ve~ [%:eT)6!D4>8/;5b `C8 w#">I9?\CG".#"3632#"&5463232654&#"32#!"54;#"54;546323.A1>>O>PF9> .772?E-NDDWCFEZ'/&=ESN:@W D0J,:ZO=7G OP\63"54;#"54;32654.546325432#"'.#"#"W>H;UU;OH(0B-68;UU;]S 0(#%/*2;E0&! :1:F%2\!35432!"54;#"54;8W$8a O: A#'##"54;2+73#"54;2+#'##"54;2+73#"54;2+2[Y3To5HV3YE2oS2[Y3To5HV3YE2o77H4#"=!#"&=#"=!#"&=q   p pkp p E&h.73275#"54;2+32+5#"&54#"#"&54632A0D3-.6_8,=X>( 744-;c$&N<Ot BU9Wh732632#"&=#"&54#"#"&546323275#"54;2+   5.88,=X>( 744A0D3-.*4@ VAl$&N<Ot BU-;czt-4&#"32+"54;#"54;>3232+"54;{,$%V#>--:V%  S 3(  64&#"32+"54;4632#"&#">3232+"54;,$$V9)( !).-:U%  +; )"J3(  u#"54;+"54;265#5y9,TS +& -9 +!CC ""&#"32+"54;5#"54;>32"05t>1L-7' 1  C)  W "232675#"54;2+32+5#"&546e!06t>0K-7'- 1  C)  w5+232675#"54;2+32632#"&=#"&546!06t>&((8-7'U 1 !* 9)b)  f_$-3>732++"54;#"54;2+32654&#V%7+%(*ZE0##o1c$7D0CO F5?)= 9 -,{ %#'#'#"54;2+737#"54;2+ <9"6 I#/8!:-!H  Ц {%%'#"54;+7#"54;2+32+"54;!z K"ki#G *S    v 3#"&5465&PW   &]]Av #7632KPW   v 3#"&5465&PW   v #"/K*  W , 2654#,##(57&""!4'$5, "&5467",&75(##!5$'4!"">32#"=>54&#"#"5))4@.= 923)(,  7-$2}- )#"=&#"#"=.54632 ,()329 =.@4)),) -}2$-7 S #"/7632n   > b` S fXsS #"&54?#"',> aa n  S hXs#"/#"&47,  kk  l  XX  '&54632762,  kk  m  XX  @{"=42@((cbb@qv@CE@l[ql8~N:~Pr 32"/&54"54?62#d6666p p_p pr 32"/&54d66p p,ub,uc #"4;54232B(B(BB(oxX54232+"=#"43(BB(BoBB(BB(@#"4;2((l2267632"&54>-^c 2"&46,(c( 2"&46"2654,'67L77?2##2#5'$56J5!"""e2632#"&5473j  1$(M/:{   :$!)"]2632#"&#"#"&54632j0 ?V &  AW-. 40- 10y#"&54?632"&4?632#a  b  b  b  Q^  ^  ^  ^ 732632#"&/._+ !*. ;b3J )!#"&54?'&546327632#"/ //  //  //  //   //  //  //  // t#+7#"54;2+#"&547'#"54;2+274+k!H zv I g    0! 2  u32+"54;#"543:hhLu  S  74.546325432#"'.#"#"'#"=432326,?>,?07" /%$1(5D H7>(  ;)+9@  *- %%1#6 "332+"54;'32+"54;7'#"54;2+7#"54;2+>xV*df,WxjHXY Ht  aa  tf UU w$#"=&#"32+"54;5.54632 ,((429U=.@4)(X,) -  2$-7 2 !"5!"4M}( (2 !"43!542"5U((a(} 2 !"43!42"5U((|(b 2 %!"43!42"5U(((& 2 3"43!42MU((d )42!2(U(Z{ 7!2#!"542U(((P8'&54632762,  kk  m  XX  7!!"43!2!"43!2LLr((b((dW\87632'&54632,> aa vn  8X=8#"/7632n   d< `^ 8X88~X~mo'R~\955vDn 32+"5jB((Bn "=#"43n(BjB(n]W|[zx85432!5432 U~~ Ux8 !5432 )~ U;8"7632!2#!#"'< BTB nT ) CCevCej9o]Ce@q@!"43!2RL((Cel|c}4ucjt0!"&=4>7&#"&546;2  26  8&(4L      63 )68w1~CeyCek{l${"=42"=42((x((cbbbbCey&54632#"/&54632"'  b   b  Q  ^  ^  ^  Ce#}@|GiH |27_U` a  :.9=CO8/vrNB" "=#"4;542(BB(&(&B5.)]x54&#"&54632+"&546;26! &8;%B B$  7R4  8v4nEPx-kEMX8:zNU7{o92326=3#"&546..;)V=> A3*0?X 9#"&=332632o>=V);.. X?0*3A c}d9gzjh89~X8f 3#"&547DJ  4 zS!zeYJ`A8 7] 2325432325432#"'#"&54L66 1./2,0+ 9 9 .34-JDlkZ;E] kNPp|f:I\ | A9i? v]v1]9#".5332632>-!)%. :(#/ o^q#"&54?632jW W  v  ##"&54?6322"&4632"&46W W    v  B  Wk# v 32+"&46' (( ((&8&&8&Ok#GVm#/ k#$7Lk#('Ui#0Im#,"7"2 O3$+3%>3732+"54;#"543!"=!66()b O3)"54;#"54;32%!#4x%x)+3(g3=5'3+3%@$/%#"=##"&=463235432'2#"&46"32654&  sjghhVzzVU{y--  00حy)Җglq3,+<3. O3 732+"54;#"54;32+"54;#lOx%L) Q30231E3 '7"=!#"=!#"=##"&=4632354322!54632!54t   | 2dd--  00 ee 3%@233'7+"54;#"&543!2+32+"&54;!32, - 56 " "+33fA)57'5!#"=!!5432|ʨ4<:yH373%3<.*309#";5#"&46;5#"543!2+32+32#!"54332654&#"B^U;2.OmuU us UumO.s2;U^BJ43IY_a<?G !"32654&43232+5#"&4632JhhKJhgg6_GoYYnHjLMjjKNjYih3"32654&#"'543267654&IAR)F=d:@t; "G3CML6Kgj]E+ <\M@'B JA_u((U/2#1AedFHH!-8=F!!+32+"4;5#"4;2+#"4;!A= n58n((y((L(D(832#"&54767.546325432#"=&#"2654.#"P>cK1b]/9 &6G;69*2Rf,5*Nj77 *V7Z\\^1: 3$8<'N'&oL*E( mOL87E732>75432##"'"=#"&5'467&54632#".#";2+"48    .:@].+NO@S]  +@'1? & *,w>  JB7 #? 96HB  ##2)$ &6zF\.##"=!;232+"54;654#"&5467^F4=-'-=" ~-"?S=I37`$AeK/A$/8 ?&-Y?SyC5F,"32+"54;#"54;>3232+4&?! --"K+B/CZ"KA  OE0#N:H+;qj "&=46226=!"!54&hhhhDNQADN$Q_dvvdwD^b'^b%#"&5#"4;32>32A%2;=fD) D "!G9 (W F(3#"54;#"54;7#"54;2+32+"54;'_66_/-O:&f%32+"54; 32+"54;'#"54;2n85n G^U 9T+8w5!!##"54;2+3>5#"54;CFt91b)5@ D#F*x+?[]-(+ZCX-|F\<;2+3232+"54;76=4#"&5467&54?##"=!$7%4 4TB& ~/+|Lr\P,B^#3  04j/! $@FFUi%9P 7`= HRR%!2+32+"54;#32+"54;#"54m~""x--w!"OOB&2#"'32+"54;'4676"32654&=Wz\n@b6D3,6N`eIHe^z_\|[`@k+fHIefHJd^n1754>;2432#"=&#32#"&46326=4'#"&^,IV0 ;12:]@ KQ*$ 5Lv=\4#E0KO#/*  &h+ 72654&""&546763!2+J^`abGZx./.K Y#<bOLhjg)[>Q('  Bs5E#=+) %#"&5#"5463!2+32>32A%2;  D) D "!G9  W +)%26=#"54;2+#"=#"4;(:M15]U4^<A6(PN(.E%8! )%+#5#"&=#"54;;3226=4+! @-+--?O2 $\3(2b(; 3,d1)*F;)2y*+9!YF)("4;7#"54;2+32+32+"54;7G@1-4 L)5y(( "F-\-7;462326532++"&=#"&=#"4;=-  *%2V -H9)  +9H)R1-  6' :K L:(+(="&547#"4;2+32>=432327654'#"4;2+#"&'IT7m1:*"  7@#:2n6UG*0*\^S((P]7Q&( 1)Z/6[Q((S_b%Z;"j2+);"j>H"8+)" >+("$Bpf &03254&+"32+".4>;2#;2654#B69K(>: ^H5Q++O5D` N:8BD7;gw"$"-!E[32#"&'#"&46;2326=4&#";2+"&r&F-ShhSEb! , "fDNQA 5 t5I;*wdviY   ^Yb!/8)   0(3 %#5&5476327>32#"'&#")  $   C3%%#5#"&54?6327>32#"'&#"2)f  r $Y  d  0("jBJQF\ ;4&+3265%;#"+"&=#".=4>;546232<(163,?%163, @-+  5(; @-+  5(; 2+6%2+Q6%)* *+)* *++(="&547#"543!2+#"&'""+32>=432327654'IT76UG*0*K`1:*"  7@#:\^SS_b%P]7Q&( 1)Z/6[QPnT2'#"+"'5;254.#.546;TDaaD)J;)   `lɯ =C)*$.(A  RYYm'#"#";2>54.5463ldYG&@; 6 9%1/ERE/~(ki4.%!/ (  B1{+3$#"=#32+"54;#"543!#"=!32_66Ƒ)--b'1("4;7#"54;2+32+'32+"54;7'OIp.*{1 L~&2usy(۱( xdB#/2#"'32#".='4676"32654&=Wz\n@CIC32#"32+32Dh26W5M`cJCe8(NA(_AE_+&kC,q+&kjsw61326=4&#"32+"54;##"=!"=#6732#T=QHDL%6x|t(|)O RamO`S84+ItrL ?AKj>&iq@@/4>32542"5.#"!2#!327632#"&5@ #3Y7dJ((hCSuXbL  4T,fE9I;)Ep.DYZZ  &+ e\@6q3,q"jr,TG3-H3,532+"54;##"&=432325#"54;2#32654&#T(UwnPst6$; .:3732+"54;#"543!"=!66()b 63%765#"543!2+3#"=!#"=;#"Yc<)""bbb"+3(P3N2+7#"54;2+32+.'32+"54;5#"54;>7'#"54;2+5#"543^V2=98RKd3?589=2V34pXu"9r]Xp4\@<2654&#"#"=432632#"'#"=43232654&+"543"AWQ>:Rx6>N"M6x.)=1.133%3#"54;2+32#!"54;#"54;2+3#"54;2+@6.,66.)O35)"54;#"54;2+3#"54;2+3#"54;2+3#"5&Z[[J-3##"=32+32+"54;32654&#@UvmP6);U^A ba_I34J Q30932+"54;#"54;2#32+"54;#"54;2+32654&#ee7UvmPe;U^A a_I34J+2!32654&#'32#!"54;#"54;2+;U^AUvmP66v"I34J)a_@@/72326=!"543!54&#""=42632#".54T "H.XuSCh((Jd7Y3# f7h5}&ZYD.pE)32"&'#32+"54;#"54;2+%"32654&s`fpspJWZSZ[RQ\Y9s~~ސonlq /3-5#"3##"54;>7&546;2+32+"54;6UhJr9UB9=@/kI66K$E-0D)gzkR 0a?]HDQr#.%"&54>;5432"&#">32'"32654&~~ $3K_@<0BH,)E8[~JhhJIig_`:HP-/&P#?,.WjkjJNkl(7#"54;2+"546373254+32654&+%FI Y<@ L^veo/'PC^)O IB$$*)r#"=#32+"54;#"543!--"M[O7(%765#"543!2+3#"=!#"=73#"M"ea·) %[[) O?H MS!#"54;532+"54;67'#"54;2+5#"54;2+7#"54;2+32+"54;.'32do#?Re0c#o#c0eR?##E.oAAo.E#g@%4.+"54;2654&#"#"=432632#"'#"=432326 A-D0PDJ89H4UJa. oU`=Z@BXu  ) +("E.@b  (9K6 S"14A3%5#"54;2+32+"54;532+"54;#"54;2# -x""x--w!"xx3+OA&XF(3#"54;#"54;7#"54;2+32+"54;'_66_/-OX*7325#"543!2+32+"54;#+"&'5432"M""x-J"A7O>4%,32+32+"54;##'#32+"54;#"54;k""m"}~(nbwOOA3!5#"54;2+32+"54;5!32+"54;#"54;2# -**--w!"xxOHRA%!2+32+"54;!32+"54;#"54\""x--w!"OOFSTFf!#"=#32+"54;##"5f-.[P[3F%\F`="+45#"&46;5#"54;32+32+"543";3#32654&F\~}]F6^F]}~\F6LfhJDlDDJhfzyeyzbIFbSbFIb3%[5')"54;#"54;2+!#"54;2+3#"5r"-- "m"8OO`23275#"54;2+32+"54;5#".=#"54;2#>&H "m""m"%A-"xx # P3%3#"54;2+32#!"54;#"54;2+3#"54;2+A"m"! j""m")OOO L5)"54;#"54;2+3#"54;2+3#"54;2+3#"5# k##k""!k!>OOO@#32+32+"546;##"532654+@%:@<@ #p›2$cIf> OZ#%S N19%#"54;2+32+"543#32+"546;#"54;232654+-x""x*:@<@ pB2$c)OOIf> O#%Sl!#32+"546;#"54;232654+%:@<@ #%q=2$cxIf> O#%SJ,723267!"543!.#"#"=432632#".546^ #O3LgeM?\=_dc>n6 kXGJ[7([ 7c`|+/ &07#32+"54;#"54;2+3>32#"&"32654͗.."x.[`^Y(nnNMmOWw_\s#jkjJNX'/%#"&546;2+32+"54;532+"54;#";X^9A<@ "$r$.3#bI32? O"&S?l&C6?\&j+i\D%+"54;2>=4&#"32+"'54;#"54;5#"54;32+>3231A@$&D7$ -.666_D'D[%9O% @-,:  "6_(!K@rb'J+%#"&546325432#"'.#"!2#!32762"7Y0cd_=\?MegLlN  X "#|`c7 [(7[JGXH gV\pL\["jFpM"6+332+"54;#+"'5432325#"543!2#32654+`\9A<@J<"V3#bJxI32?O>;7"&S<5=32+"54;5#32+"54;#"54;2+35#"54;2#32654+^d9A<@ !cc! ^^3#bRxI32?O"&S+'\>%4&#"32+"'54;#"4;5#"54;32+>3232+"54;D7$ -.666_D'D[--,:  "(6_(!K@Fb&Al"C63F%\&|>)!#5#&54;#"54;2+!#"54;2+32D0""x--w!"PPOOD4>"&5467#"4;2+32>=43232654&'#"4;2+#"&'D[ m1#K,*/ +&,S!2n^H+@A{:#((7p -$ "- m;#((#;t(!+(B8`#,32#!"54;##"=35423#"&=#32654&#ƧUvmP7d( `;U^AKa_6_00_ 6I34J-732654+'#"=354323#"&=#32+"546;қ2$c _:@<@ #)#%S&O00O &_If> #<@L%2>32#"&=#32+"54;#"54;2+354632542#".#"32+"9 &!>/`DWZDr`p( 5#OYm& )#$h kEp${][ O32%#2+"54;5#32+"54;#"54;32+"54;'#plk"v6!i%y%u%8l%ۼ O2%'#2+"54;5#32+"54;#"54;32+"54;'#ljk"s6i%y%u"2oƉ``O``3@D7#3732+"54;#"54;2+3#"54;32+"54;'32+"54;57#p:_6&((},m-%q!8l k#pl&*%P448'&543!232+.'32+"54;5#"54;>737#n&n&11" 85?3d3?588=U(^<#=]C]r99r]Wp4,&2/37'&54;232+.'32+"54;5#"54;>737#XXD?8:FdG88!7d(H!ORaM  Ie[H3wP36:?C332+.'32+"54;532+"54;#"543!2'#>7#737#d1=785?3dFPWY-<+}(^=4oW]r9 fp5? &>6:37##>#"543!232+.'32+"54;5#"5437'#$(HS%_tXD?8:FdG8EG*wc$-N!ORaM  IeyyJ3!"F-\A3%@"2N6 J3!#"54;2+33"=# MO(  [J!##"54;2+33"=#PF)Am(,xx] J&lJ]&D&')B+(r'*')(i5432%#"&5 > d~ Ie~ Gi UnH 3n&H2267632"&54 32+"54;#"54;2+5#"54;2+3#"=#"54;>-wD \wAn5H%5#"54;2+3#"=#"54;532+"54;#"54;2#2267632"&54 -x"=i--w!"x$>-+H'32+"54;#"4;546232#32654&#UvmP666  ;U^Asa_(L L(I34Jl'732654+'5463232+32+"546;#"43қ2$c) --:@<@ #-)#%S+ +(`If> $(+344632654&+327'#"/+32+"54;#"54;2  H?U;>  I(466PmJAc I&>3I = J_FO3@F<$4632654&#"327'#"/#"'32+"54;#"54;>32C  J?fLJhhJ,$D  D2!32+"54;#"543!54266( br5432!32+"54;#"543--"[O>3$32+32+"54;#"4;5#"543!"=!6556((@(ybr%5#"543!#"=#32+32+"54;5#"43"MNN--*!W((>0322326=4&+32+"54;#"543!"=!32#"&546W..;]A:66(ƬUwV>> ' A3e4JbaFk?X rD32326=4&+32+"54;#"543!#"=#32#"&546 ..;E9Z--"MVN^V>> A3-1O??X nP3Q%#"=#.'32+"54;5#"54;>7'#"54;2+5#"54;2+7#"54;2+P*5?3d3?589=2VdV2=9)w]r99r]Xp44pX nMU%#"=#"54;.'32+"54;532+"54;67'#"54;2+5#"54;2+7#"54;2+MUR?#o#?Re0c#o#c0)w.E##E.oAAo\S@R2654&#"#"=432632#"&5463232654+5&'#"=43232654&+"543"AWQ>:R ,.X5bDF]XI=7;21B<-g;YB+BG6F^;$  B >p1DI75@gSV232654+5&'#"=43232654.+"54;2654&#"#"=432632#"&546,.M5Z@BX A-D0PDJ89H4UJa. hQA,#> r B/ S"14(  ) +("E.@b  (7J;$ $n538%3#"=#.'32+"54;#"54;2+%#"54;2+SI76L3&J66J"v.DUD)w;]6+  :cFn*%3#"=#"54;'#"54;#"54;7#"54;2+Iu_66_/)wO$43@32+.'"=#"'32+"54;#"54;2+35427#"54;2+Lq'8X"`B(J66J8(v1yvqzIZa;F4%32+"54;'"=##"54;#"54;35427#"54;2+-(_66_(l/֭~AYObFl$43B32+%#"54;2+32+.'32+"54;#"4;5#"54;2+QQ"v.DUD8X76L3&J6;;6J(g :cE;]6+ (3F432+7#"54;2+32+"54;'#"54;#"4;5#"54;++/-_6@@6_U(=(#438!2+%#"54;2+32+.'32+"54;##"5J"v.DUD8X76L3&J6c3 :cE;]6+ [ *37#"54;2+32+"54;'#"54;##"5 /-_6cO[5n'35%#"=#"54;5!32+"54;#"54;2+!5#"54;2+'~66-x66x)wRn5%#"=#"54;5#32+"54;#"54;2+35#"54;2+i--w!"x--x")wO5k35#32+"54;5!32+"54;#"54;2+!5#"54;#"5Ac.66-x66 RV5#32+"54;5#32+"54;#"54;2+35#"54;#"5,c"x--w!"x--xOd3?2326=4&+32+"54;#32+"54;#"543!2+32#"&546..;I5`.66-R\IcV>> ' A3'7N9?X DI?2326=4&+32+"54;#32+"54;#"543!2+32#"&546p,.;E9X"x--w!">"TN^V>> A3-1OOH??X ?|@19"&=4>325432#"'.#"354632#"&576=4#"Eh "2Z9eHgCSvZ7029  )B>fS7J<+Ep.DYGZ3?9.SXb 2O>IT|/5".546325432#"'.#"354632#"&5764#"HEe3d]?]?Sg+S:7029  )B>*FF&c7 [(7gR :8"D3?9.gb |I?e@<2632#"&547#"&=4>325432#"'.#"3267632j  1$(0f "2Z9eHgCSvX4R( W3:{   0eS7J<+Ep.DYGZ*0 &K !)"Te82632#"&547#"&546325432#"'.#"32762j  1$(1 bd]?]?SghRmN  P;:{   0|`c7 [(7gROeH ; !)"Hn3%#"=#"54;##"=!#"&=#i )wIrr Izm%#"=#"54;##"=%#"=v.tdt(wO[[3%3&%32+"54;5#"54;2+7#"54;2+Biio&(n 9:'#"54;2+3#"54;2+32+"54;)AD)23#Oe{3%30%#"4;#"54;2+7#"54;2+32+32+"54;^^o&(neeii( (8:132+"54;5#"4;#"54;2+3#"54;2+32#B23aO)AD)P#||(sO((n035%#"=#"54;'32+"54;7'#"54;2+7#"54;2+0u>@n+-o)w3n%5%#"=#"54;'32+"54;7'#"54;2+7#"54;2+%uAD o.0n)wn&3+#!#"54;2+3#"=!"54;##"=!#"5d6.JfdD w[ +#3#"54;2+3#"=!"54;##"=!#"5"d"m"8"cDxO[O[Jn33%#"=#"54;5#".'5#"54;2+3275#"54;2+~6 E%!.4x6sK)6x)w#35`n4%#"=#"54;5#".=#"54;2+3275#"54;2+^"%A-"x->&H "m")w #J39%675#"54;2+32+"54;5"=.'5#"54;2+542<=#6x.6 5 (>N x6 `(-ZY"0/j`:%"=".=#"54;2+542675#"54;2+32+"54;5B(%("x-N(8"m""m"8799J31>3232+"54;5&#"32+"54;#"54;2+ E%!.4x6sK)6x.vB#35`2%5.#"32+"54;#"54;2+63232+"543>&H "m""R%A-"x) #O@<%54&"#"&=#"&4632#";54>32!3267632[vv 4T,f&%;9% !%& "2Z97Y3# EX4R( 3 YY &+ e4R7   7J<+)32!3267632#"&'#"&4632#"3hv fd6 Ze` nQ/b  D`%;9% !%DRQESliO_ 8|[4R7   e@N%54&"2632#"&547#"&=#"&4632#";54>32!3267632[vv  1$(0 f&%;9% !%& "2Z97Y3# EX4R( R1:3 YYF   0e4R7   7J<+)32!3267632hv fd  1$(1`%;9% !% Ze` nQ/b  D1:DRQP   0|[4R7   SliO_ ' !)"q3,P"|ql M_"|$3>2326=4&+32+"54;#"54;2+%#"54;2+32#"&546 ..;WGJ66J"vK[qV>> 3 A3e:D\Kk?X FD42326=4&+#"54;#"54;7#"54;2+32#"&546..;E9Z_66_/#N^V>> A3-1OH??X 9n'3-7325#"543!2+3#"=#"54;##"&=432b! /QI~66$:P'wB%'*"Xn,7325#"543!2+3#"=#"54;#+"&'5432"M"=i-J"A7wO>593723265!32+"54;#"54;2+!5#"54;2+#"&546,.;6-x66xV=> A3:?X R972326=#32+"54;#"54;2+35#"54;2+#"&546..;-w!"x--x"V=> A3OX?X 5n'35!32+"54;#"54;2+!5#"54;2+3#"=#"54;6-x66xI~6wAn5!5#"54;2+3#"=#"54;5!32+"54;#"54;2# -*Eq--w!"xxwOJm33%75#".'5#"54;2+3275#"54;2+32+#"5KQ F$!.4x6sK)6x.~(#35x`n4%5#".=#"54;2+3275#"54;2+32+#"=%A-"x->&H "m""^) #w nQ3.%##32+"54;#"54;32+3#"=#"54;#F.J"cd=Ja\w4n%.32+3#"=#"54;##'#32+"54;#"54;k"=^"}~(nbwwOOq332#!"54;#"543!2#@?  O&f|qHY&| O&fjrH[&j N3 B+&k|q?\&|2@)%265".=!54&#"#"54>32nvv7Y3# X4R(  4T,f "2Z YY)n3%#"=#"54;#"543!"=!_56()wbrn#"=#3#"=#"54;#"543!Hu-"M[wO Q"jp N["j\@<32+"3267632#"=#"&54675.546325432#"'.#"60=IX]FDb?jZt;3'1iOV<R:>QW7@57ID1pH^I6GB+BY;g-75'&46325432#"'.#";2+"XB@Z=`Uo .aJU4H98JDP0D-A u(41"S 6K9(  b@.E"(+ ) 993/23265##"&=432325#"543!2+#"&546,.;6$:! /QV=> A34B%'*"'?X X9.23265#+"&'5432325#"543!2+#"&546..;J""M"V=> A3>7X?X 3%@4?FGTD3::Z-<3I732+"54;#"54;2+7'&546327#"54;2+#"/32+.'J66J#  )V"v|*  2.DUD8X76L3&)h  $@Z(  ,b :cE;]6+ F=3#"54;#"54;7'&546327#"54;2+#"/32+"54;'_66_U%  +7/X+  1R-OC  %+E% +A)oD39".'#"&5#"54;2+32>5#"54;2+2/83 0Yn#KYC$9"L" y =)xTNE^'/% N2! r)7C+4&#"!2#!32+"54;46232+"54;]ACYtL#qo#fxHZ^DmOVuuV9+FD +272+32+"5473'#"&5464&#"3264R- JJ6fCo]}~gKLefKLfD%3?.*mZ{[]yJbbbcQC2232+32+"54;4&#"32+"54;5460K)YY#k[B%;!f#pC"1<,mOD^'0# 99Wt"03/"&5#"54;2+!2#!32>=#"54;2+'Xo#KuYC$9"e"pySNdE^'/% 99Wu"6B (#"&54632!"'"=423!24&#"326&kmlm7+((!Av8zZ[z{Z[y֎kl#t8(HZxyYZxy:3#"/!"54;#"54;2+!!3 F__7&Q ; Ed)Q )1C$4&#"!2#!"54;46232+"54;]ACY~6#qo#fxHZ^DOVutW1 T?1<4&#"32+"54;4>3232#"&##"'&5!46#32765fTOkK# /W7Z,'-0_5 %2/&wBaiM;.A5&sP69R)h$c T4$+*P5<3 ."&54>;5#"54;2+32+'2>=#"Wp"1<-`"__pW$9"D^ZxW.I) Wu)'/% ZCE^;31>3232+"54;54&"32+"54;#"54;2+ "H)Rq#fZ[AA"b !yR%%C_^0?2)"54;#"54;2+!542;bbb* 5P37%26=#"54;2+#".=#32+"54;#"54;2+3s4L$fYO64n#f[LF\Wo)Q8dXJ.&<  #!"43!2#"&546324&#"326 s0kmlmgzZ[z{Z[y' (֎klZxyYZxy)132%2>=#"54;2+32+"54;5#"&=#"54;2+,,B -y##:aYn#KY&80BLxTE^k;#%4.#"54;2654&+"54;2"5>)ASQ0Eg9(b(%+84)5O<+D/\5AH*232#!"5432;27>54&#"32+54632;&#"F6v54( 4>Dy^M]ox`fLMN'> ?#XU5YK'0' *@^xbN(&^}FGVEC#4&#"32+"54;546232#'"4;]ADX$p#qoJ4xHZ^D11XsuV(!94!()"54;#"54;>;2+"3232'4&+!%!:JK;6$%vRv>zYGwU>O(8-rQ@ZK4/".5#"54;2+32765#"4;2"54&+ )6.#KW=S/L_("(G ,I-NAbY+N*|+',<1#Z]2%4&+"4;2654&#"#"=42632+"543!26g1\_1QT5*= (>OIj9&.ED2A%7;\(<+0@^0.XA(E_/3N8:3)%#"&5#"54;2+32>=#"54;2+%O6OnX%W;)>M"32#"'.54632'4'.+"4;2"=&'&#"D*H'! 4T,mG-'fbM).2:<6(8I1M*  &  ', G-RFgH<# (/*+$2?-Y*2C%463232+"54;4&#"32+"54;hpXVn#K[BCZL"xSxtWOHZ^D+J$0#"&#%&543237"&546324&#"326 !lGW$bab)mOPlmOMog/& /_'dabaPijOPjk?C64>3232+"54;4.'32+"54;"32+"54;W.[>\s#V ?,#o#CV$o#x#A@'qZO-8'Z]D9@H4*432#!"'"=432;2767&#!"=4;2654&+!2>>g1* '=[' B%D9[8%0|X.2U>:&)]$$.f\/>8d6Ne NC+463232+32+"54;4&#"32+"54;^pXVlPP#K[BCZL"xSxtW1(OHZ^D)13(%2>5#"54;2+#"&5#"54;2+,$9"L"pUYn#KY'/% NWuxTNE^ '4/32675#"54;2+32+"54;5#"&=#"54;2+|XA;^"e.^>_Tp-pWK]W7*T{V&\@6*2C$463232+"54;54&"32+"54;hpXUo#o#ZZ"xSxuV11HZ^DAR*4%2654&+"4;.=4632+"&543232654&"e=xXnnWzC8VonYNaFG`H`clruVX?5''G[\`K\GE]KD#52#"'!2#!32+"54;5"4;5464.#"32>K[tuWqBdo9\\| 56Gb*>2.D#DlQTiX(JK([p+? RA+? -.3%@2Z<,3:%#"5&'#"=4325.547>;2+"4&'>.[>Y9X9PX4>8WX $="A>A>IL>W66":r0@AB237RI-2 62 FZc.v`n[2632+"#"&5463j0 ?|&  A-. 4- /C?S 432#"54623254#""5)4[F  1:I8({3,WT ,078CL'763232# T  2L#T  2 Q1"&5#"54;327#"54;327#"54;32+5#"'73#L#45#L"28"K#L54@ 6N  *S,S)8DD4B-+2#"=4&#"!2#!32+"5473#"54;6JC]L1;[d59_FbNRk1Ah7Wa+BF!,232+32+"54;5#"&5464&#"3264R- JJ9dCo]}~gKLefKLf%3?.Z{[]yJbbbc!BC7232+32+"54;4&#"32+"54;#"4;>/%:"[[.qA5!</."K!<!) 3< $T*A,0<$232+5#"&5#"4;!2#!32754#LRaMB#*2#"'32+"54;#"4;6.#"!326Caz}]nD88aJfHJe` cBAb}Y\zZ*KZF]\G(;532+32+'2>=#"Wp"1<-K#`_pW$9"D^ZxW.I) Wu)'/% [CE^5B=-232+"54;54&#"32+"54;#"4;6C&; #n"B20C)."KM!* /902A*MIB#!"54;#"54;!2jXVB==3%#"&5#32+"54;#"4;3327>?#"4;32+5%7#"4;32+"54;5.C #n"C1#:#L/I"2'p/9$*K5<-232+"54;54&#"32+"54;#"4;6C&; #n"B20C)/.!JM!* /902*MGOa&2%+5#"&5467'&54;'&5432+32'4&#"326OLEwblQC_BsC_}#glN[cmOPlP``X{ H = F_NlrHOjjBBR/232+"54;4&#"32+"54;#"54;6M+? U+>.()..#LM!1(=-8 #T=MP<'%#!"54;#"54;546;2+"324.+3BAA51?NQn(%7+PU>T(m|S1H!6)=,46;2+"32+5#"&5#"4;3275'&3 c7`ROM]B2#!"54;#&=42;2w0D(&DFF$ I BQ;"&5#"54;327#"54;327#"54;2+32+"54;5#"'73#L#35"L"28#o##^54@ 6N *S,S8DDGB-%32#!"54;7&+"&=463232654&#"&wV:%/acb=#lP)C' -F#&<+$aQ- B/:Pj)1&5 1232+"54;7654&#"32+"54;#"4;>M,D PUPF.4@2/."K(F+$ '/(:T*>(%,%+5#"&5#"4;327#"4;32LSbM?F2Jy$#!"54;'"54;XX((S BP<7232+4&"32#!"543?#"&5#"54;327#"4;673#L#8@ nn4273#L#35"L6N D*31;N *S*;i e(2#"&#"32+32#!"54;#"54;5469fb$0@dYYZe -)?T?9GHRZB<07>.54325.547>;2+32+"54;"4&'>CzX9PX4>8WX $="nPdZA>A>IL>WWB0@AB237%J[I/0 62 F,<232+5#"&5#"4;32754#LRa=#"&546;#"'32+547'&< :?5 ^| ;>5 ^| 8,~  d6| 8,~  f4|<0232#!"&5463!4.+"&5463Z 4 I ('%    %&(  -3"&54676754&'.'#"&546;2#"/^5S #)I Q(,$ V$4# `'%   #>)   9*<!"&5463!2+#"&5  Y     ] < &74632#"&!2#"&5.'.'!"&546_   +JW   #'   PW %&%   @"&5#"&5463@  Y 4   #"&5463!2+"&5} $ ~     ] <*2#"&5.'##"&54>7#"&5463}'-    (%&;  W #>) %&%( :  3/  )3".5#"&546;32>5##".4?3#135 ^ ($'j$'( ^s  ~ !G2  &%(  (&% ǧ@"&=#"&5463@  Y    <82#"&5.'#"&5463T13   ($'  !G2 '$(   <%2#!"&546;>=.'.'#"&5463T'- MS &%(  %& #>)NY   (&%%'   <i!"&54?>=!54632!  I  +  ~ u-+< !.'72!4?#"&5463hi (%&'- E*K h&%( )#>))*K  <02!"&546;.'#"&5#"&546;72326kR_  ($'eh    :}.H_  '$( h    uu8@"&5#"&5463@  Y l k  32!"&546;4.'#"&546*IX (%'$ OQ  &%(   <.754?#"&5463!2+".;76=.'a*K %+P 13h &$I (%&o)*K  0(O "GAhn&% I&%( <$7#"&546;3>7#"&546;#!"&5463B] I8 %""V ( AR )  I3*  TP  <8*2#"&54.'#32+54?#"&5463}'-   ($'eh *K #>) %&( h  >)*K  <32#!"&5463!2>=.'#32+54?#"&5463}'-  $%&(  ($'eh *K #>)  (&%&%( h!  =.&K  <875#"&546;#"&5'5#"&546;Y  YZ   Vd "  F2"75#"&546;!"&5463!55#"&546;QY 5 Y   UT  R"  C18%3".54?6=!"&5463!#"&54632 ] -a     "  7"7  <!2#"&5.'.'!"&546P+JW   #' PW %&%   3:032+3267#"&546;#!32+3#"&546\ 2Q?6 "2 `' <)^ 52   r0P  #3  r  *2#"&5.'.'#+"&546;>7#"&5463}13   $'|+ $0)Z  !G2 %'# ˂  !65  Z"&5#"&5463#"&5#"&5463  Y P  Y 4   4   Z"&=#"&5463!"&5#"&5463  Y T  Y    4   Z"&=#"&5463#"&=#"&5463  Y P  Y       ;r\3"'^<4\$$;\ 3"'73"'^<4^<4\$$$$fl(#"&5472654./7sRSt ^]%8:2#K8CQ]\R+9,%BHHB*63'SWjl'7"&54>7&54&"&''657324.'326^**pr)4X&2#$ (0l"$"0F@[DCZ.1@! 9,P[[P-E%="G ?D a[1*'.(*++FBEF]H"3#"&5467654&"&54624.'326yVWxJ;f9P8!MnM*+$#-0 851cHGdTa`U=^~(89''(6NN6 % (9#$>+(:4 '5'ELL5B#'3#"&547&#".#52.54632632'"32654&#VKEP( )/DX>f- <Ǘ05)Y@5*)3EU>@^USC:AEJHG!-9$G192105) 47EHS( /4J&Al!.:27"&54>7#"&'5>26=4&#"4&#"3260QUFaec* %5HJ3":6&.,,cP76ON78OGRH[ ?bEFdcG!Ei I5,3K-7!&5A/0@7OP67ON@d,'654.#"#"&546326324&#"32()G+ +F6FOHM?+#7>A>46<@1r8S-IV<1*)/3O8bFOi..m:6ML71Cge&'654&#"&54632G ?f;=d$ G{JKzQ\ QF:ZX<%S WVIoncH'%4&'#532654&'7#"&5473265W00?1G" 4*;#vSTuPC`EDb(=N$G1, 8(.QZNRbbRTA5ECMMC5#@'654#"#54'.#"#54&#".#"'67.54>3262632#G@>##?$ >c@VGZ(z&;U9A*+`,b+m^[\{#RIWJ{H  5,>, # /J14&&&&fl'#"&463254&".546324&"32hGHggH[0__!tRSs$RrRQ:9OdhhGALMA,&Pb`QrSR9:Qcl+#"&#">32#"&5463232674&#"3261WK0EK(IggIHfZ>K%0QR:7TR9;QOE0 %ffgH:>[ 9RT7:QQ:e#'654&#"#5&#"&54632632E>.60 #$56.>ECEA((CECUaXJ;P!*0R^\S3<1*CHIC8M$-%&# E=3ID0HN]H14.'>73267#"&5473265#"&'7326B' 2+2J-xUWxN AcHFc:IM7:E$0-(80# ')Sb`UTA 9AFKLE& 7NM</:85d2'>54&#"#5&#"&54>765363262$"050 #"7d>E6VWY#$^I\5A(&D0S4!&>9R=:`cSMq@+,(WKuF88fjl"&5332654.5463"qq$\BC[ 4(7! P^^PAIIA /!&#$%  75D#i (>%".54>7&5462&4&"24&"24'"&5472>#6dd6&K5!:P:"%4%%4%$4&&4{ :P9{.WvW.>m_88_m>8\X?-'99'.5a4$$4&w4%%4%;(99(;7_U22U_5H#>"&5472654&#"#54&#"#"&5473267>32632#nqPB]Z+-#3&(8E'!-!0"2-AV]^UX>:AEJIFb+) &5>)50 %+&!.''@-4H$8C%26=4&#"#"&54632632#"&547326=4'52'4&"326D7%/RIKVVHE*);4KB+kZUs # ]IHZSArB@;:@0-M&6*+8GliJIh//L4ML!A:X_ZS"( !GHIG%Z$y:SS:=RSbL&"&547265#"&546;&'>tuMAb`+>@+8V?GT]^TR@7@DJIDv,):,@5-  ,5B#6'>54&#"#4654&#"&#"&'63&=4632>32#+,09('9$;&(9QC[+ p 78\N7K'=#7N!;Y./UJ'89&X&98'EHxqS J}E6MA#M6hH'"&5473265#"&547326=3lpO! [GHVU'@cMN10g$U\\UQB5%FGFG"1R@>M/1=X/Y@l*5"&46324&#"#54&#".54632>324&#"26opoQk0.!0 #<+)<-P9K(7 /E%XCBZZYO\\\C!/@59I*;<)*-1$8Q>!EWAFG@AFGjf*"#4632#"'632'654&'4&#"326,EY$^C5LgA-)=aTn$!!\7%5H++2Q^3DvK5?ORuTIMKCA]%7`6:5G#632654&+5232654&'.53#"&547# mlKS;$ 19$#" # '5,"N\3?7N)ocI54&#"#4654&#"! &54632>32#Q1"5#4 5=F1B"91FjrI)$"1. / , /*&V 1F: F@LH HT%'#"&546732654&'5#"&5463254&#"#"''65332632673'.#"32 o3B~TVH;hqGEiA4P72EF16Q#- *$'!'8@![3g&)"21#2dR4PUWQ;N ZBB@A1<IE21FO%:E\U:'Kh1/&1D1fl"&5376324&"26ss$v(Rt$__]]Q__R bPAMLADII2H&]%32654'7#"&/+"'673264&#"?'.#"&546327654&+532T   ;Z3#. HO,=G296+$#23" ,)G=,$ +==#+ ( #J#4!A E,2G4 2F2.z3! ( &>+>$-c $,<jlG2#".54732654&#"#532654&'&#"#53254&#"#"&'73>/))77#;A#1S>A13@^6@ & j)$ . gH 2 9:$7#2 5= &C&8A2>4%+ /9&8$)'$6+D.r*Zf32654#"#"546;2654&#"#"546;27>54.'&543232#"&'&'#"&54>7>32>54&#"'4?0;R= % K0* &  ''/ !$4+,$%eGNo  !w4 .HTM09Ag<(F:m '( !5#34!4"OFY!]  r. =4&#"  s&.U;54&+5326=#"'7327F:8G4W`4.<9+.TN/Z@F%NpTVdhg]`h@kb;8T-  &H1@\ lNuHm8#"&54726=4&+46;7>54&#"&54632&#"32jMLkJ=VzVJ4& -;A)1@C.%50.*#7W,$4!KZYKL=1xDE<&4J =-(A?1.C!/#*U7)FUWk,5##"&546;5+"&546;23#3'54&+";5#"26_bDE`bD0_4HH384H___4$8#44$_06MLlLDbaEDbXH43II3X$X|X$45#%3ނLlKK]8Xe HTFc{0+3'+M35H37?3 97"3264&7#"5432654&#"#"&5467>75#"54;2++>=,*>>Yw^MmlN;`/LCY\ M@)2+#"&5463232654&#"542654&#"$3- Kt`fpscdoJS[\RQ\Y3$'7s} monlq\p%32#!"54;4327#5@ ;)ohhH@C32+#"'#"=43232654&'!"54;&546325432#"'.#"g*1tZj?bDF]30dTiOV<R:>Q0 A+$GI^Hp1DI7,/#WBY;g-54#"!6-Y3U{yWjghR:+424:!<F"B2 29gly|W[B%AfED;J36%2#"&54654&#"32#!"54;#"543!2+632326 /<2;#(?%2,7B"  .7Dx)N+&2&3,"&543232>7#"54;2+#"54;2+&6  $-n*.p:SF1 .7"Q 'gg O3$TG3-+3(D3"*37463235#"54;2+3###"&264&"yP83K.HKˠT,L48'8N99N%pPA1/2CN88N8h@-2+>54&#"#"5463232#!"54;#"543V=Q^FR?]kYvbon<n_KISH7(*[[a=3+3#"&54623>=!#"&54623>5462!54&"=5()7  !!3()7  !ts=\]j%;8& "%%;8& "$UttIC]]Ch3%%32#!"54;#"543!2+35432#"=#7?)-->3 4$@6?72327.54323265#"54;2+#"'#".546654&"y 03'-!)ac)!-'5J .#1881*539> J+#H9669HCu8:@LL&"%WVwOnVUoOD3 3#"54;2+3#"54;2+# z<m58mDj98n>Cmp $ B3'5.54632"54&#"#"&546324&#"32> 6 ?(1E(.  $%&AE(ZoccXS[R?\`@+A":96&*$Q:(9'(1L-C_/^_Iv6MHT&0H3)2#"&=4323254&#"32+"54;46SPmOQ1N?tU;>W6m3_FK\9:,0!%~3I<+z;U@@:%4&+#"=43232#"&=4>325432#"5.#"326=):U'@G%f "2Z9dJhCSvXHb$=--P14Q-eS7J<+Ep.DYGZS O3,!##32+"54;#"54;32+32+"54;#D."m"cd"m" 2&C5%32#!"54;5.##"=432254&#"#"=>32_!-$#/"V326541# #</>5->N1 D^-O?" &-& ("2'%4fLXDc&:G<<+0B!-9C8ZU@%1%#"&546235#"54;2+32+"54;52654&#"s`fpspJWZSZ[RQ\Ys~~ސonlq3%33!32+"54;#"54;2+!5#"54;2+32+"54;6-x66x.6J 3-"#"547675#"543!2+#".546232654&*#839>\t~c/Z7"  NlRhg\\}]`|$!  HeORg*.30732>7#"54;2+#"54;2+#".54;2#PD #)n*.p8U#"+nï5*I'ei j^3%@.93*%275#"54;2+#"&5#"54;543232+:IIKZaGTJJ>"4C8 ww&.?2@*D<*7267>3232+"54;.#"#"&5432h(E0&C Pn$F/0(A),4'b(>51S,:8.+;2"J3g3=J3A4>3232#!"54;5#".5#"54;2+;54&#"32+"543V2L-No_ .)%,-%="V<!>'-1CkJQ 3 $0:R1%R@ 572654&#""&5463263232632#"&54654#"S[\RQ\YTfpscKe2,<" $(&@@onlq)}^Q)F+& ,9Q *$H3!%35432!54323##"=!#"&=#A8  )Irr IIrr I>=6"&54632#"'#"&54632327&54323254&#"f:Kj"UBO7MNL %%2@: (:R:#5A{UR9 k6w )D&]dM2Uv^j5#@/8"5432654#"#"5467&#"#"=4>32632'2654(&v'-!)ac)!-'4 0"1881]EB9>+2H9669H+@",LL[MCCwOnVUoO O@.:"54>54#"#"#"54326;23&54632632'654#"32'p9}</  o\Q"'/+!>"+? :9)%G!(%3, GQ >=B23267&54632#"54&#"3254&#"#"&54632#"'#"&546y %%2@ 6"%3/61R:#5f:Kj"UBO7MNL )D&]d!'E[]EAQ/- )]^I8^QAN;g-<7010VnI (03 )#"&5#"54;2+!5#"54;2#!3265sTUr"J32#"&'##"&5463234&=#"54;2#32654&"!"1LT ;'AJ("<1GlpW67 14 $68"!3+T "#"#(jOugIAO74([wJu7:3>H>7MA/ /(+26' ;:T3"%32+"54;5!5335432#"='5#6KTOx/+}(*+2\35%#"&54623275#"543!2+632#".#"32#!"54;$ %R )/?&,L   ,P &'&R $L D >H%4&#"326'>7.4632>32#"&4>54#"632#"&544#"36,8%$98%)4[ '"(1+$ -) $C.UQ20Sp!76D64S2%%B(#%  -'* )LE?AE;>Bw&23;7"54;2654&+32+"54;#"54;232+"54;4.//JhU6K66Ik+ 9@+*D0-E]?a0 ).N*+K-!2%3#"543!2+3275432#"&5`(UQ0 A41tZj?bDF]4M[M4iO9@4B1# $GI^Hp1DI7*4?2BY52;3&%"5432#"&5##"=!2+32654&;T B.UE8`1>8:<M6+3!_fRTGA&'7H3$#"54;2+32+"54;#"=432rZYYZ f7Z3&!"54;#"=4325!#"=!2+32#*Z66f7b O39\@6)/@*3#"54>32632#"&54>54&#"#"54#"2654!)ac>a,C)O,>Q% $$47:&F9>95Dx33J,.L  #3,4`twOnVUoO2&@ ,4>%4&#"26&5462"&5467'"&54676264&"264&#"#""$"88D879B9 ~} 9B9#"$""$"$""#r!78@88%I0HH0F(sA#1QQ1$AZZA$1QQ1$C>//>/\ 88@87?@ !5432!"54;4632#"54&#"=`EU.B 8:>1|Rf_-(*5G?3/?@&<3#.72+ =#"&5463235#"54;2+!54&#"3#3265!K)+<8'%5JK$*.>=/JhhF2.CB/OO**!.)hLTTL4$@6?"&54654&#"#"5467&#"32+"54;4>32632'2654 03'-!)ac)!-'5J .#1881*539>M J+#H9669HCu8:@LL&"%WVwOnVUoO+332&@/32+"54;4&#"326542#".5!2TP>0L0#  ->0Ea(|T9I6%Lp_Oi2(<@a5 N>Ne &>pI(m&23#"=32+3#"54;2+#( h F b(03=732+"54;#"54;2+7632#"&54654&#"32+"54;766Kg:"$*-6J;b4"> ,B - +<3.(0D$#"&546325#"54;2#4&#"32*]@^~}]rBf`fLJgfKL=M5y][{ZqbbJIc L@:%632''#"&5463277#"/#'#'&#"326?3730 &0(( IHfpscJI ((0&   qQ\YT9=   <<<31@*}";02<<<2000f4lq&f/00#W@J"32675#"54;2+32632#"&'#".54>325432#"'.#8# (>'%/-k(!. >.: I=C]1+;4cC`$5+9!:(1 3A C6 -UdAHn?' 6[&69C1<F".54632327.54323267.5432#"'654&#">54&"*53 03&*'ac+"*#*X.MT5-.fA425= 7">&"%W J+#C8779C}`o=U]XGG12>K>24$T4t$nVUo]3%@ *2#"&46.'3267654&#",jgh/E(&@-zV4\/yW6]/F( &A@yK)11(02i>\.4l?6*10)3%C/:"#"54>32#"&5463232>54&>54#"!!"-BuBhR:+4!6-Y36b824:!< #3A #FK6Qr|W[BB"B2 29hEjV%AfED;H@ #4&#"6&54632#"54323264 $30' 0L08KgQV%ZED_]#8# U|32"&=4632#"=&#""32654zc8axyyS2S7KIBbcONd"(\Y[_^\f)VC1~UFGFFJ>=L"&54632#"'#"&54632327&='#"54?3737632#'3254&#" f:Kj"UBO7MNJ %%2@:    #(:R:$4 @{UR9 k5w )D&]dM3M + 3000+ %+ w`j>\#:724>32#"'#"=.5462654&#"542>54&#"S  "G3ZI)F=~gE4 5p4dj]*.<1CM  s/2T9'B JA]^*2  IMDFJ (-81A<35727>75#"54;2+#"&543232654&#"#'4&54R 8 2"ZZV[0>)H6PL&1 L4$G%,2\\|^?*6%_USf"+%{2&j5">3232+"54;54&#"32+"54;4632"54&5&F.FY--D7*7) -.hNFe(IAb.&O=-9!0 BZI3 1;@E2#'#.#"3275#"54;2+#".54>32776( : -01=- #/L0FIZaNn9'8J7)'+ /  >00+$ 4`?<(3"4/VeAJp<%  2%'7›t/#'#3'g{#37{#"54327#37 !{#&547537'$$  / - -+F # # 33F  g]]CF %*2#"'#&47362374&'>'&"'2/F > jk , lkP=$//#> !"""$!0#<9&gLRTMLK k* MO*o8n99WM*( #3'{0 #'#33g {H #5'#335'g:{%'#57'537oojinnijy/{{.Y.{{t#.4673t" }>0q/P"Chd/J/_ q/O:#3:g{t#.4673t" }>0q//0/5%dev[YusUvif\ #&54632\""+  +!!'#3<{'#&5473****< 35 ] 53 ij'7'Û淶X#'#7'7'77'((''WF # #33#F g]{]qi #'#7'7'ﰰ''Ûκ淶= '#'773=/L.M #'##7'337 (''< '#'573<~~~//L '#5573nnAЀ-|F #&*-##5'#'737533'''5'/5F SS MM '>sNSq=COtoUBgb`![[ ߥ=G9Gpdn #'#3735#'5'5#'~~~~j(j~~~~j(jg{͕͕~~3%4>73#4&'#3'8E5evXeAj>*Uqe e:3:4%#'5573'7rnnnnrrr--/݈#3gPV%##5#53#53533#3[ZZ\\YY[ tt !hh!Lk #"&4632k$#$<,,<,k#89 '#75'37oNooNo8]v '##73'0٧s3%&4>7.533>53#4&'#3'8E5ev[YudevXeAj>*/vifsqe eZ#4>753#5.%4&'>Z*\>Wn!/9,WmhBK_K^_Z?wYi?e:(jg[\ 8O3#~X$H8#~XD+"}o%"}sE+h3#}i%Q\#}RE+3#q%\#qE?S"vqTS^"v+"}k'?G"}sG+i3#}j'?]G\#}^G+3#q'?G\#q G+T3)5232654+5#"54;#"54;2#"&5464.+3265,.""a]A,#>  'Q5Hpq Pj8h.;$  ,. YYnH6}JhhKJhg\YM+;$  FhjLMjjKNj+C3#jY'?8G\#jNG+ :B#"/&54632!5432!"54;#"543!#"=!35432#"=#"4;2r  r =:>66ۑ\d d  k}X(v)K((?"C6q+ 9A#"&54?632!5432!"54;#"543!#"=!35432#"=#"4;2`r  r  :>66ۑ\d  d k}X(v)I((?"vq+C3#jY(?8#jNH+o3#k(?i#eH+S"|{?Dn"|+"}o)i#}I?2"q Y*?F2"q J5'"}o++'"} tK5Y'3#}Z++T'\#}UK5'"jj++'#jK5S'3J232654+5#"54;#"54;2+!5#"54;2+32+"54;5!32+#"&546T,./-x66x.667A,#> r Q/;$ +S'\D232654+5#"54;#"54;>3232+"54;54&#"32+#"&546R,.0.6_&F.FY--D7*7) -.A,#> r Q .&O=-9!0 /;$ 5f'3#||++f'\#||Kqq3#m,\np#jLq '1;#"&54?63232#!"54;#"543!2#%2"&4632"&46r  r  k?((d  d O((\#v+<"vz.?#vN+n<3#}o.?j\#}kN+<3#q.?\#qN?f3#}g/\h\#}iO?f"q`\h#q?3#q/\\#qO?C3#jY/\C\#jYO Q"vq0 Qs"vP Q"}^0 Q["}P iQ3#}j0 jQ#}kP2"}^15\"}Qm23#}n15n#}oQ23#q15#qQC23#jY15C#jYQ3% %=#"&54?6322#"&46"32654&'2632#"&#"#"&54632r  r  jghhVzzVU{y0 ?V &  AWd  d slޛ$\ar. 40- 10H#v3% )A2"&4632"&462#"&46"32654&'2632#"&#"#"&54632(([jghhVzzVU{y0 ?V &  AW((slޛ$\a|. 40- 10H"ju3% &.#"/&546322#"&46"32654&7#"4;2r  r 8jghhVzzVU{yd d  slޛ$\a^((H"C>q3% %-#"&54?6322#"&46"32654&7#"4;2r  r  pjghhVzzVU{yd  d slޛ$\a^((H"vq+"v|3Fq"vS+"}l3Fa"}S+M"}l5TZ"} U+nM3#}o5To#} pU+nM"qXTo"q +M3#q5T#q U\"}o6g["}V\O@#}P6gK#}LV\ CS2"&464.546325432#"'.#"#"'#"=432326#"&54?632"(&>JK>&iOV<R:>Q&>KJ>&tZj?bDF] r  r   (j!*4';P5\)6;-( 7(BT@e-=BHd  d g#}\ CT2"&464.546325432#"'.#"#"'#"=432326'&54632762,(&>JK>&iOV<R:>Q&>KJ>&tZj?bDF]  kk  (k!*4';P5\)6;-( 7(BT@e-=Bm  XX  g#}#\O"}pgK["}H"}l7+"}]WHl3#}m7+^3#}_WH3#q7+3#qWHC3#jY7+83#jNW(W03#jX8+X#jYX(g03#c8+d#`X(803#jN8+8#jNX(0 5M#"&54?632#"&5#"54;2+3265#"54;2#'2632#"&#"#"&54632r  r  %sTUr"J[CB\J0 ?V &  AWd  d LhhL0q::^"C>ZD"vq::^"vZD"j]::["jZD"}b::]"}ZoD3#}p:t:#}uZ(0"}];3%["}[(0"j^;3%["j[3%"}_<3F%\"}\g"jq=sp"j]g`3#}a=s`#}a]g3#q=s#q]+'\#qK+"j\W:"~Z3F%"~\H&#bDi#}A jO3#}k$H\#}]D O #0v$H#SD i#vzHn#vDO #C*#CgW a #1vHd#4 O 8<M2632#"&#"#"&54632!32+"54;#"54;32+"54;'##"/#"&47j0 ?V &  AWO6Ox%LGplj  kk  . 40- 10*l  XX  H# jO"j{?H\p"j@ O 04G#"&54?632!32+"54;#"54;32+"54;'# 2267632"&54r  r  6Ox%LGpl>-H"va O 15H#"/&54632!32+"54;#"54;32+"54;'# 2267632"&54r  r 6Ox%LGpl>-H"C$j O !BFY"&=4>7&#"&546;2!32+"54;#"54;32+"54;/#2267632"&54  26  8&(4!6Ox%LGpl>-H#Sr O 8<O2632#"&#"#"&54632!32+"54;#"54;32+"54;'# 2267632"&54j0 ?V &  AWO6Ox%LGpl>-H# jO"|q?H\p"|@+n3#}o(?_#}`H+ 'Jv(?#O H+"b(?4"H+#vw?l#vN #C:#CXQb #2v&X#(+ ):R7!5432!"54;#"543!#"=!35432#"=#"/#"&4?2632#"&#"#"&54632:>66ۑ  kk  0 ?V &  AWk}X(v)l  XX  . 40- 10?#+n"jqW?_r"jXq 'Uv,\#W qk3#}l,\ip#}jL3`%@#}a2H\#}]R3% #Xv2H#X R3 #vHn#vN% #CF#CSKb #2v0c#33% "->2632#"&#"#"&546322#"&46"32654&'#"/#"&47j0 ?V &  AW1jghhVzzVU{yW  kk  . 40- 10slޛ$\al  XX  H#3`%"jqkH\q"jl3U#vbHN"vc3U#CRbHN"CI%c3U #TvbHN#Yc3U#bHN"#c3aU#}bbHYN#}Zc(\03#}]8+a#}bX(0 #Xv8+#? X(u#vq+>"vr(u #C5q+>"C+r(u #Yvq+>#@r(u#q+>f" r(^u#}_q+^>5#}_r3%"C"|<3F%c"C(\3m%3#}n<3F%#}`\3% #Xv<3F%#X\3%"c<3F%4"\?G"I*?G"*?G"V*?G"c*?G"W *?G"d*?G"X*?G"e*OQ#I OS# ^#V% Em#c Ej#W Ck#d @#XE D#e! J"I."."V."c."W/."d..Mg#I EGg# ?Xn#VPXj#cP}Nk#WFWm#dO5F"I05F"&05F"V05F"c05F"W05F"d05F"X05F"e 0Hf#I !Lf#%m#V[m#c ]xk#WQyj#dR#X8[#e7^"I2"2f"V2i"c2"W2"d 2O"X2o"e2h#Ii#*No#VEg\e#cHuJj#W6cXj#dZqX#XrqX#efqH"I8H"8H"V8H"c8H"W8H"d/8Bd#I" Sd#.tj#VOxh#cSpj#W8Ksj#dQN+)"I>+)">+)"V>+)"c>+)"W>+)"d>+)"X>+)"e>Zf# 5h#cdm#dg#K1+("IB+(" B+("VB+("cB+("WB+("d/B+("XB+("eB+f#I"9i#"'kj#V"Yuh#c"cfg#W@"Toj#dS"]p#Xb"^p#e:"^?G"u*?G"*"u ." .5F"u05F"-0"u2"2H"u8H"8+)"u >+)" >+("uB+("B?9G"?9G"?9G"?9G"?9G"?9G"?9G"?9G";VQ#H 9;VS#H&9;~^#H@9w;cm#H9;ij#H49;wk#H:9;\#H'9;Z#H)959"59"58"58"59"58"59"59"8Hf#H868Lf#H868m#Hs68m#Hw68xk#Hh68yj#Hi68W#HP68#Hx6+8("+9("+8("+8("+9("+8("+8("+8("8+f#H8689i#H@68kj#Hi68uh#Hv68fg#Hj68oj#Hp68*#H/68(#H16?GY"|*?G"q*?9G"?8G"*?9G"%?G="J*?9G="@ O"|~ O"qP Sm#u yj# * 8O3#H6 U 3#"'&54?N@  5i`%#"'3326324u) 9$#/" M 3#"'&54?N@  5i`]2632#"&#"#"&54632j0 ?V &  AW-. 40- 10!+2632#"&#"#"&546322"&4632"&46j0 ?V &  AW((. 40- 10J((59"58"059"'5FA"J059A"ODp#u<Qj#IRm#u+Xj# 138%3#H6&u>I&G0#JIjY"|2j"q2f"s2&t2`0"J2Z"K2q"|~q"qPi#uj#04&uJ&!#J+)Y"|>+)"q>+)"s>+)>B"I:B":+)="J>+)"K>3%"|~3%"qPWg#u2Xg#3f##&54632#"/2"&4632"&46  W x  v   L  a&54632#"'  W v   +8(" +8("B+8("G+(="JB+8(="yBm#u%g#Pj#u">,i#&"F83#H6"q\ #"/5B  @5`i5+ !"543!2+H.H. !"543!2nW. !"543!2< W.uF 8X&BBqv #57632fva -qOWg\ 3#"'&54?va -\Oj%o 73#"'&54?va -oO2W\ #"/5- a\OOBqv'R.]W\&iV{&W\'V+|\47263543232+#"5#"|_d|\'47263543232+32+#"=#"54;5#"|_Q 2#"&46.'9:()9:Q:()9:R8VPP}}]T %2#"&546+TT %2#"&546#2#"&546T3%T  72#"&54632"&46:#"&54d((T(^y"4f #-7AK2"&46"2654& #"&547%6322"&46"2654&72"&46"2654&.@AZAA--->-,@ v .@AZAA--->-,.@AZAA--->-,fB/-AB\A"-@.- !-z  z  B/-AB\A"-@.- !-"B/-AB\A"-@.- !-Rf #=IT_2"&46"2654& #"&547%632632#"'#"'#"&46326232654&#"4&#"326'4&#"326.@AZAA--->-,@ v y";.@A-;" =;" =-AA-;""v3/-, -", -- ,, -- ,fB/-AB\A"-@.- !-z  z  4B/-A4444B\A44o#+- !-- !,-@.. !,-@..W\ 3#"&547}  \ iV\&aWV\''9W\ #"/FF  \ iW\&aWV\'9'[#"/#"&47,  kk  l  XX  ?8?632"'?     %%#"&4?'&462     =3  'I2"&46!2"&462"&462"&46762"/#"&54?'&54632o(|(((     K(((h(Ȏ     pj-9#"'&5463232+"&46 #"'&5463232+"&46-  -  3F **F **A 6%32+"&46>32#"=&5'&54632654&#"#"5  >?(PbG^ yP>=DU,,UE8L,) :G2?"){WBdR2326432#"&54yc754.5432#"54>=.*;;*)(  =,%%,= #VA"EQ]>32#"=>54&#"#"5%>32#"=>54&#"#"532+"&46!32+"&461-NR:YS@@< 91-NR:YS@@<  Q  SG;K*)D#E-3> )D SG;K*)D#E-3> ),,,,&Hj:F#"'&5463232+"&46>32#"=>54&#"#"532+"&462-  7 >?(PbG^XMP>=D 3F **UE8L,)D%E+2?"),,'j:F#"'&5463232+"&46>32#"=>54&#"#"532+"&46r-   >?(PbG^XMP>=D 3F **UE8L,)D%E+2?"),,i5!#"=!#"&547ul  f#LA O \%-32+"547#+"54;#"54;2'>=4&'@aHb>=byq\:MM:HHTC/V  W?a.   $HHf37332+32+"4;5#Ojj7  `'?  >  $>c(""&=32+>32#".5463232654&48 ,>F48,)/'$bF16H3('+t'2#"&#"632"&=463265&#"[< 8N,31440CAb7 )'"A=t \A7C4$ChINq(+/Z4f#"&547##"=3` ^ @ , 8n%"&547&5462&"2654"2654X@?Z?@;=T=G@#$>$$>*'D';+<<+:3'99'4p"('|.&%p "267&#"7.54672#"543232658G#${)3/940D@dG<"2Q8S.&44H5$ChJVnVBE+"=#"54;543232#= SSU` `VV "54;2#&$ t4632. C #< ((FCU/Zp4lNX254;54&'"32+"&54;5"&54;2>3232+"X&"Q ! 2 #(;C  ! 0'B@?{@Ct@;u@F@:@>@>@=@:@==<'b 8tP8NXK#/%232+5#"&5463254&#"#"&547>5&#"326.0AF5?0=Q@%+&!@ [\$'/<$ 61'!+3(/9 # 0!L!3267632#"&54632%3.#" A/";  ['Ea[BEY ;*);(,4  ]C>UWH ,%,+L #"&54632'"32654&\AA\\AB[/BB//BA?YYA?ZZ/@..A@-0@Kl02+"54;'32+"5437'"54;2+7#"546;2#VPQVoaH BD  GaMMk^@@ ^LG?rJPX&'#"&54?.=4>?63276325432#"'&'>7632##"&54?&''   325432#"'.#"#"54;>32#".#"23267632#"&5? "2Z9eHgCSv`H3\0('2 !4R(  4T,fE7J<+Ep.DYGL{ Z9#/ -&*0  &+ e+355#"54;5#"543!#"=!32+32+32+"54;5#"543|666pppp668b8?BC%2>32#!"543>7#"54;&'#"54;&54632".#"32+32+ 1##6lj ^QS:3N -)<nc XU9)&7kC3;T@ =)5 hG Q;FL>3263276232+4'32+5"&54?#"54;#"543754&#"32?&#"p0 @!7:!  !"J "J  ^""}w'27"  264$GG (  ((?z  O-RR23@DHKN!#'#32+"54;5#"54;5#"54;5#"54;35#"54;2+32+32+'5##3'##3'4K"55556juJ"!!!!)((j}`!&/m~S.;nGB.C BNNBBBBBBB):(<.%2674632+46322"&=.+#"&55"      (&%~  )+.I 9  '$( ] ?G 1;"32654&7"54;5#"54;32+32+5#"&46325"543!2#JhhKJhge6_=;6_GoYYnHjLMjjKNjT6_OYih @G%2>32#"&'#"54;5#"54;>327632#"&54654&#"!2#!!2#!W,C .N,_  \4_ S?Kn,y $`<a^  $,fR<Rn+<3AD732+"54;5#"54;5#"54;2+37#"54;2+32+32+.'+K6556K?-v'=+8W4Q>9ݴlnxH3B%32+"54;5#"&54?5#"&54?5##"=!#"&=#762762AiiZ  p^  t V  lZ  p)<  KD?  MIrr I9  HD<  Kg87 8>54&#"2654.''#"&54?7.5432#"54[ /+&0<"Tp20 R6Q& $2M_$[;7P6%)!&7LFH8&@dqg wB-$:m!pH/Ai+3=BI3267!32+"54;#"54;5#"54;5#"54;232+32+#'!&+!654'(F6555567Y c>,E!aA/0(,5/XA?2p3>#"=.=46754325432#"'.'275#"54;2+'Pk}fS<R;FI2iY_)-H' e( mJd0[#4"3+(4>,I\r O3@D3'#32+32+32+"54;'!32+"54;7#"54;7#"54;7#"54;3'נJ\L6&7%L86O73BXgHx̂I;;;;>@Q73267632#"=#"&547#"54;>7#"543!654&#"#"=43263232+!2#!]FDb?jZt3?cKQ>:R754325432#"'.'267632#'DZ .R3YAZ=3Q( 4S,)Lgg%[S4G<->p*B+/ &+!- {SGO}{|w\_<  < 'y'yyo'y'y'yxy: 2#"544&#"326?!!!#.QB VWzW:4&#"62#"54 32ȱxeDeȯ(gwx< 6f!E"#*.45<>23:<."#*23:>4f 8%qS]HKb*; %ydzyiv#,!lYmlZk!4'UE@>GT(2QLa"0 4%VA@j]g kWl^P[ZQ]88M/ -!K9@8 '974'&'!"3!267#!"'3!2654'&'#!"&547>3!2$$>I$#H33H$R9-# *=u'6Xc%#"&546325462".#"32>32"&547632%463232+5#"&5463254&#"#"&5&#"32>"E&=OQ>:'  -"3782!1Y  ^  DU,8?65,7K:-$C *+7"7@ TACW% = ?85; b   e/%,#+6 , ; $K^3Bdo%4.54632432#"'.#"#"'#"=432326"&547632%463232+5#"&5463254&#"#"&5&#"32(,?>,A08-$$.=^"J8<'8)+70  ^  %U,8?65,7K:-$C *+7"7O !*+ L1 6 b   N/%,#+6 , ; $?@)/4>325432#"'.#"3267632#"&5? "2Z9eHgC7-7>4R(  4T,fe<E7J<+Ep.DC%*0  &+ exAYGVC A4632#"&264&"2>32#"&=>32542#"'.'.#":#(49$%7\'$0$",*> &'E.cZ/D%* SE7>32!5432!"54;5.54675#"54;2+5462#".'5'F/=`6ED7``-   #)*.. 1R<=UFF = =30: MP =L2#"&546"2654%#"&546325462".#"32>327"&547632>UW<=VVk\@AZA"E&=OQ>:'  -"3782!1  ^  V>;VV=327"&547632&"O2 #(;Ct"E&=OQ>:'   G3782!1  ^  ! 0'd TACW% = 4?85; pb   \@R+@9#".5432326=##"=432354&#"#"=432632f,T4  (R4XvSCgHe9Z2" ESe +&  0*Z--YD.pE+3232+"]-480*>36-.o6_60N.3232+"546;7654&#"32+"546;  T6_5  U0N.36-.S  :I P$  ;w.&=2   %,!0   1.882632#"&54>32327>7#"&#"#"&54672!];8 (,9M7R (3:!" &% c0  K,!LVmq|-;C 2emjZ1 $*BV3*6232654&=47#"#"5463!2##"&54-)<)9 1#C#7)S:3NW=)(hG&7nE3#;T@VB*".#"32>32#!"543>54&54632-)<)9 1##7)S:3N=)(hG&7mE-;T@ux267654#""&54>7>3232>32#"&'&547v8 -g 5C31iF.$7!  ]>!,/R1  6Ifp+G2]55 d1!71.J =%2654&#"'3#!"54;#"54;54323543232#>32#"&';6*H@<%%@JEP9!>UcMhmIHocW&Axeiy>B3"&#"54;#"54;2+#32+"54;3PJ"47(3 = J3 @2"&546"2654#"4;2#"54;32+##"&=43232#12E119, , (6j4)"- 1$!11#"1 ((&r&&)#XX& 3b+4j5?%#"'332>54.#"#"&547&53>324'326*L2m(';:. @-20/+(..(+CV/JUC.ZR3"%*DH$-I5&1Q0%)+M#0CG.WeCoR1JV0zAYRC4-+3 %732+"54;#"54;2#&+32?65466PmvUA )8_a (8<3%@%05"#"&54?.546263232632#"&'32654&#">0_ ZUqБh6(*G5 IE+4U{yW3,)HY Aj||{( $gl]Mts(1>_>327#7632&547>54.'#.5463232654.##"&54654&) @!6 *!!qF h!# z 7%$  (3!( 1C84 $() '6   )Ci1bc>   p'GH,*   F#M3-132654&+"543!232+.'#32+"54;3DJhU6kIk/@=9BU9V(0$D0-E]?a0 Rkzg+M39B%#"&54?.'#32+"54;#"54;2763232+&'%32654&+i  K7#K66Ik5&L  I$9'rJhU6<  4(/]?a0$64  3"?G+D0-E R?5`4.546325432#"'.#"#"'#"=432326+"54;5#'32+"54;5#"54;732+32'9:'<,,# ) #)(99(C37$ 3%'0yU%R S%U ;SQ< M '"&2! ;!  (#)6)@&&*X3Da35432#"54;#"546;2#35432#"54;#"54;#"=#35432#"=32+"54;##"=3#"&=#JJM G#m!8 >u7`L É8aJa8VBkk BV3G32+"54;5##"=3#"&=+"54;5#'32+"54;5#"54;732+3265G U%R S%U ;SQ< Ijj I1'375#!#"=!!5432!5U8!: H)#v:4;F3"F) "X) 2+<3. O?H+3 )33<<0<>o$#!"546;5#"546;3#5BB" zNC# zvdd22 iiy4@r3+JNt%2+"543'2+"5437'"54;2#7"54;2##32+"543#"54;2+"54;/#'32+"543"54;#"=#35432#"=!5*%$->9. ''d4K_E4  'Gz&Ɲhhvv`H^rI&u&2%B*d273/T373#"54;2+32#!5432!q```= 3%3<X3j HS&/6"&f$&fb)O`#utOf#tY#uX`#tXf#"tYXc#uQ#Xf#L"B`##{XBd##QH`##{XHc#"uQHd##Q8Hf"#3`"{Xq3,1'3#3!2+32#!"54;#"54wkkAkk  !73!2+32#!"54;#"54#3#3#<KK!KKgggg3)%33#732#!"54;#"54;26;2# #s956% fc '$'u) (E*+,332#"&##"'"#"54;26#! %," 3(E*%33##"56;26;2+32#!"56;73#e'$* cf "659D) *G( .3#'%3#32#!"56;#"56;26;2+#9s_'$,OR "(*)*G(G3'+73##32#!"56;#"56;263!2+3lq) UK-;> " H(()*G(J32732+7#"54;2+32+"54;'32+"54;#"5437'*,xx(n"2xx4**pB3)(03;E32732+32+"54;'32+"54;7'#"54;2+7#"54#38++3xx2"n(xy-BB3)J37;#;2#!"54;'32+"54;7'#"54;2+7#"543!2+#||! ddp"||Zdd!)1 ?3/?@&+3' Q30\pLOp##53#532#!"54;#"54;3#"543;;=WlU8a0phhhhOOMp 0#53#53#532#!"54;#"54;3#"54;3#"543;;;=-67`-V6phhhhhhOOO Qp)-!##32+"54;#"54;2+3#"54;2+%#5FH'A5oM;xOOhh:YVp%)!##"54;2+3+"54;32+"54;#7#5F|A )M&M;xOOhh+<p(,0%#32+"54;###"54;2+3#"543%#5##5Dm57UFI L7B;2;)OxOx.hhhhcp,0483#3732#!"54;###"54;2+3#"543%#5##5##5D?57UFI L7Bo;2;-;xOO)Ox.hhhhhh? p<@%32+"54;'32+"54;#"54;37'#"54;2+7#"54;2+%#5i L LR 'PBmXP;:D;۲Oqqhh3%["+p@#532+"54;'32+"54;7'#"54;2+7#"54;2+3#"543;=" LR K mXP;:DTin'phhqqO":p159?%#32#!"54;'32+"54;7'#"54;2+7#"5437#5##5#3Dm LR K mXP;:;2;Ti)OxqqhhhhO\\OTF?G\G QP)%#"/7632!2#!  `Tb mm 56& "/#"5#"&54?  46 ln< `Vb 6%"&54?!"543!'&54632L bT`  65 mm& 74632432762'& 64  nl bV`  ?%%"&54?!#"/7632!'&54632n bb  `6`  66 mm 55 mm,%74632#"&54?#"/7632'& 66 mm 55 mm b:b  `` pg%#"/#"/#"/  >i { k > {f!7"&54?#"&5&5437#"'#&=7 k = f  >h xm4632'&54632'&5475632'&x   ? k  i =  m27327432276 h>     = k (0-%".54?##"/76323763232+Y $b  `.  %h}- H6 mm 5[  IZ (0-23'&54632#"&54?##".54?#"54;76 %`  b-  $x. I5 mm 6Z  H[ M v*#'>32#.#"#"/".M)T.'Y('C('>#)19v  , !$/- % )+e /{M v,%".#""54632>?"54>7#"&54?,''C'  (Y $,W,b1)# % -.$! ,     e+)(0+%#"/##"/76323763232+ Nb  `N `b Y6 mm 5X 56+7"&54?5#"&54?#"/#"/#"=Y6 mm 5X 56 Nb  `N `b (0 X2 X2)%%#"/##"/763237632 b  ` Y6 mm 5X JJ>/%74?'&546323'&54632#"&54?##"&> `  b JJ X5 mm 6Y*62!5432#"=!#"/7> `jb   4ac6 ln "/32+"54;#"&54?  4ac6 ln< `mb *6%"&54?!#"=432!'&463f bj`   6ca4  nl&27462#"54;2+7632'.  4ac6 ln `kb , /32+"5474632#"&54?#"/7632'&  66 mm 55 mm  b:b  `` )'#!#"/7632!267&+"&546;284b  ` &A& &1;c&16 mm 51  2F7'46;2+"3!'&54632#"&54?!"&5F;1& &A& `  b48c%2  15 mm 61&)'2+"&=##"/76323546;23267.'6.9  b  `6**49%!d #2E E6 mm 5$-;2Z F7'446;23'&54632#"&54?#"&=#"&554&'3F4**6`  b  9.6! d$2;-$5 mm 6E E2#,$ ?;2>7327'&'463"'4?#".#"#"&'#.'?2"  `  )  b* -b )  ` !5 Q m 6! 6 R m 5X;23'&54632#"&54?##".54?##"/7632376_ %`  b-  $b  `. I5 mm 6Z  H6 mm 5[ 4463263277632'&d΁ e}Q  d5" o4\ 2IQ0i#"/76323"&5#N  `  b 1mm 5 F64?#"&53'&54632#"& b  `  1 6 o5 mmi%3462##"/7632N b  `  6F 5 mm X* %4632!"&5463!7632'&& 6 p4 nl bF  `  ) 2!462!#"/76 bE  `  6F 5 mm( (7632/4724>32#"'4&#"6 ln 4 *I/8P'PB)>!b  `32763'&5>324&-@! *E-2L(4 S l6L`$>A% :@/#2G9 ` *  b\q+g0; '"543!2#"/#".'#"/1a     i i k %.Z0> &69;!#"/?2!5432#"5#"=432!'&5463#"'4? b    `jDj` * b6 ln 4aca4 S l 6;!(4.'##"/#"/#"&54226" > i)9nfh(w[2$ k>Z7#"'"54657[w(hfn9)i '.Z.> "WqsSam  `Vb .mm 56mm 56+/F@)1/%4?!"543!'&54632#"&!2#!#"/7632L bT`  > bV`  . 65 mm 65 mm)/%#"/7632!2#!#"/7632!2#!  `Tb  `Tb .mm 56mm 56*&. 1"/#"5#"&54?"/#"5#"&54?  46 ln  46 ln< `Vb  `Vb J1/%4?!"543!'&54632#"&4?!"543!'&54632#"&L bT`  bT`  . 65 mm' 65 mm*&. +%'&54632432762'&54632432762nl 64   nl 64   bV`   bV` !a %%#"&54?!"543!2%7632!2#!"54 `  `T:m 5 m 5 !a %7&543!2#!#"'%#!"543!'&54632)` *:T`  5  5 8 H$)32+#7##/?237332+3{.g    (t23   HH.337'#73'&'463"'4?##7##/?23737#7^ !d  .k    (!*  c    28H(37'#7"'4?##7#"54;7#"54;733'&'463 n  ~.t(d g 4  8&!2#!#/?2!2#!|    T   &'#"5"&5>7"/#"5L  b 4   e  2 !"543!'&5763"&56?!"543!7V    z2    %76327672/472432  b |[   e  6H#)&'463"'4>?!#/?2!7'! !d      9'yw  c   \ !'#"&5?"/7632/46327'7     } i!!      )",+'%"&54?'#"/#"54;76323'&54632Z bG`c*",,b^>`  67c-,b65 mm*.#!#"/7632!2!55!.  F)HJQ^*CEE@*.X2E@5 %#7#3'#"&54?+32'&54;CECEHJ$HJ     O37#"54;2+##"54;2+#3;N9M9qw )?;j-2#"&54632654.#"#"&546.#"326|pYIdcDi=07;+! / +74KK8naJ-  /CpaI=Q]]V@>7*  ,K`m>-  /Lfm{3]P+-333%!+,:3(+-3X3& ;2+"&546;2+"!2#QgU eg Vf Tk  gh  gV  &8>#7;2+"'#"&54?.546;763232+32#'7#"4-}V ##1  0;Egs8  0R eY Y`Vf9Z  h  g yGhx  g   (gVsn;2+"&46;2+"!2#:/HPPHd />abk&>0&39=?#"&46;7&+"&46;27632+#"&54?#"&46;267#73&Z T$ +'?  ?6?ee,  $` SUg`MF     tEg]  L  kT̤rsnC/ ~3p(".543!2+32+"&54;!32+"54;b - 56,F  kk3oRqo'!!76;2#!"=47&=43!2+"'ܮ4WGrM H. !2#!"54cn.H sXHt#y\`3 "&547632  ^  b   `3&54632"'h  ^    b  qw }|lQt32+ #"5437TB5X$it.="#"&54632#"&5463232654&'&54632654&32+ #"543}  E",<.:G2%M :$"34($'7TB %5'+$4,?$ "**  X$it)46;5#57332+32+"75#32+ #"543n 9  U9kY7TBu 9"$9$X$i%*0326?.#"32+"&'#"&46326;2+"N@4;&5H86.@=OCXXCP<32326546~ *  @,/'6  "5 M.@7 $"R.H8"=265474.#"2#"&#"#"'#"&54>32326546326.   @+*  @,/53':  "51:&$"R   N 2'N.@018 $"R.H,,J2AP2632632#"&#"+"'#"'#"&54>3232654626547&#"#26547&#"%%#%( @,/!,)#(7  "5  @ j  @  'N.@8 $"R.H$"R& N$"R& Nn07A#".#"#"&54>32326=.546754632>54&'"& @D\\D,/'6  "HbbH51 Z3 W;:V 8"8>ESak32".'#"'#"&54>32326=.5467546;267>54&'26=#"'".'63254&#"327"+ @'QD4,/53':  "E==E51/f;+*23)b "!+O @#,. !%, Mr YHAV.@018 $"^:9]t.H,,#i;G F40N$" 2Mki J$/7w}547&'26=#7#"26=+547&'32&+3272632632".'+"'#"'#"&54>32326=.5467546>4&@ P H%  7 H@:97 %'$%)  @5CB6,/!+*#(7  "9IH:55-98F*23 f& Mf$"zz:$"|z1g& Mf0 Mq_v^.@8 $"a@=an.H'OfQM`Nn&Q#"&54>323265#"546754632#".'7632'&547632454&'"&@,/'6  "7'&547632454&'"&#"&#"7632#"&54>32326=.546754632@0F ;1H6)Z'Ng iF !9N|.@7 $"{kIHhg.Hn&V>7#"&#"#"54?.'"&#".'#"/#"&54>32326=.546754632@5J0 >F1)ZMg\?  Ca |.@7 $"{kIHhg.H;#yN#yANy; V^#yKy<#yK#y#yBKyBH#yH'q#yKy<E#y#y#yB#yB\?#y"y \\%2>2#".#"#"&54632* R%B;   L,E;'& P0/ R0/\\2#".#"#"&5463232>&Q  %9D,L   ;B\P &'/0P /0`@/%"&'.#"32#"&5463232654&#"&4632)L>-A@. =VV=/&27.@A- Vf$2>32#".#"#"&54632n(  G&4*#  B, 6! X7A7+, W7A+p '@\^074632763232>2#"'#"&54>?.#"#"&\L,F N+* R%"1I + &   R  "'& P& "%V  J' J& SH^E4632763232>2#"'32+#"&547#"54;>7.#"#"&\L,$) ) 0 * R% (  n/       KR!Q ` '& PT+ c  3y%&  3%'C7#"4;7#"4;763232+32+#"&5472>2#".#"#"&546324 4+ * R%B;   L,E;R(h(6 &(h(U '& P0/ R0/3%"P2>32#"'32#!!2#!#"54?#"54;7#"54;7.#"#"&546327632" R%5FG7 '.HFB# %  L, !8 6  P TqX  ?qi &' RZ  W\&  S\^U#"'32>2#".'#"&547&#"#"&546327.#"#"&54632763232>2R%#* R%*2 8   R&"     L,+) 0 * PD '& Pd p OD RQ _ '& J '& S \#& ' O 3y%'  dY%2326432#"&54"4&#"#"&54632yc54'# D:z)""3z%E& ~3z%/|X 3z%&j 3z%/jX 3z%J/  3z%'  3z%J/Pr  zI/Ip/H/G 3z%/"  3^%'7#"4;7#"4;763232+32+#"&5474(  4+ (h(O ?(h(U 3k% !"543!2'!"543!2!"543!2 DDD3 %;7".54?#"54;7#"54;7#"543!763232+32+!2#! n51(   15'  BqgU  CgqT 33%'  uA E'?NA&!;3%' ?3%'! ?%g'8#"4;7#"4;763232+32+#"&547"'-632ٙ4 4' 6{ E (S(, (S(A ز    %g'9#"4;7#"4;763232+32+#"&547#"&547-&54632ٙ4 4' YE | (S(, (S(A     rC#%#"'-632#"'-632C & &    rC#4632 #"&54?'&74632 #"&54?'& % %    \1727632#"'#"&54>7&547.54664!    EE  !    FF  7$$#\7"  ~y"  7"  '{"  ``bd A%"4&#"##"&54?#"&546?"#"&543232?632>5432c< V  D*5 [F)Ttc< ^  L'/ UD)RpY,- { $ "?ID',-  " != JD&H &)%#"/#"&54?'%76327632%7 o  pg  OW [ BC|  X  0 K}XN&)4632632#"&54?#"&54?'&7N x  zW  ?G wb  Hw  ]  ( Bxa+ S36%#!#"&54?#"54;7'%76327632"/!24  %#v/B  $P }k lTqZ ASt  ?%  :m  oyY5;S477632!2#!#"&54?#"54;7#"&54?'&546327Va  \\R4  %%Ls \ C  HZ A7  Kt  vKH s&m Nr&!l H CF"&4?#"&546?'%76327632#"/32>2#".'7 %   @&>*  \ J 8>2) R%2$+1i9M h ! Kfv  F3 Ir o.''& P"`NCF"&4?#"&546?#"&54?'&54632763232>2#".'7 %   @&({ @ :  :2>2) R%2$+1/M h ! KoD Z~ z  [.''& P"O>##"'-632"&54?'&54632  &  &   >#4?'&54632 #"&"'-632 & 2&     <?B"&54?'&546327'?6327632#"/#"&4?77'7 7:q l+   *>h b   *~E-  > ;7632#"'.#Hdzr  YY  rzd(/W6  00  6W/F)   [R2H 32432>7632#"'.#432#"'.#Hdzr  YY  rzd:aV]!  %1.(/W6  00  6W/v(/\=  He'F,4#"#"&54767&'&546323#"#"&547>3 dzr  YY  rzd#]ia   ^Va:O(/W6  00  6W/o(/V7 =\/H o'  [fF p'  \eH 3054326?63267632#"'&'#"&54?&#?Hn7t  Ta(  EK  :  {Q0 (  8L  907  o?  F 30563232#"#"&54?#"&5476?&'&5463267&  qU3u:z  XW%  B J  8'  ( 5G  {:87  l?33q7"&463!2#!"3!2#HPPH4:6;54qabG87K3q cM53%.7#"&54?.546;763232+32#%#"3S  KCKPH]  Uryy:6;5q  `EHb  )G87K3%.7632+#"&54?#"54;#"54332654&#`]  UCJPHS  Ksy,y5;6:  aEHa  )K78G3& c3' d3)2;7"&463!7632+32+!2#!#"&54?#"54;?#"3HPPH#   ID4  -J :6;5ab,   eF  -e)G87K36=%2#!#"&54?#"54;7#"54;7&#!"543!27632+326543  6Hy4%,  *5PHGi5;%F  -b:  70VHabsK7E31#"54?#"4;763232+'"&463!2#!"3!2# 1 HPPH4:6;54^ Q(/ (abG87K31#"54?#"4;763232+7!"543!2654&#!"543!2 1 345;6:4HPP^ Q(/ (K78GbaI/#"&=432326=42#"/763232+ef| hRMp(  d{}f g~~g TilQoo 78I"y I& zJq 7!2#!!2#JsqS>q pX5J'  p>' qH !"5!"5H((>fH tX?' "&5462.'#5#65#?桢+ m\*ӿossr]\m *\m?' "&5462."!26?桢+0ssr]]vv]*]vvD) 2#"&54%&"'64'2डtsHH;;f;YF(toot@::HK*J;D* 2#"&54%"&2654'डts`9HAU_9A)tooty]RBH9(^RA9#5& & #5'~ #5)5@54327632#"/#"&54?'&546327"32654&'2"&546 Q  RQ  Q  _^]Zkܛ$+ *p  pp  p* ]_]\(mnom#5'N #5'{ 2& 3!35+33535#2绻) ̾(2& 7!5!!!5!\^*6^( 2& 3!7'%'726ӶѴ Ҷ!cҵ2&& & q31I7#"5432!2#!\F+'%I X1:G"543!2+#"59:V XGI7#"543232++I7#"543232+32++g31I7#"5432!2#!!2#!\FF+gwI 7#"5432#"543232+f++I$I $7#"5432#"5432#"543232+rdf+++";I!7#"5432!2#!!2#!#"5432rrc+g+31I#7#"5432!763232+"&54?#\    +    31I*.7#"5432!763232+32+"&54?#?!\Ak  VFiXl  VW+  fg  f)ggyI$.%#"54323763232+#"&54?##"5432 j  T9Y  Cag+w  ^d  K+"CI 377#"5432#"5432!763232+32+"&54?#?#Kb e  P4WLe  OzK++  fg  f)gg{F.%#".54632654&'->54'#"&54>3212 )  AA  ) 219֢(#&6 6 6 6&<v{F W1_NT75%CHyNT XHp' H& /BQ #"2654&%2#"&'##"&46323>y""0""R'9:(#76$)9:*!46)"""#(:()9-#".:R8+ !*BQ X\Q %2654&"'#"54;>32#"&""0""G6$)9:*!4"""##".:R8+4!% '%#"=432#"=432#"54;2!#"54;2Ab̐d97"543!2+#"5Zl<.' l<3' <3' D0).'46232'.'0   q `  w  (dD03"&54762%!(    +    (-+2#".5473#"',    #    -+2 X'+- X+-#"&542326542-gi(z^\~(eglYN? t^y H+6A76232+"/#"&54?#"4;'&5463272"&5462"&546,  zz   {{  ((7  z({   {(z  W`\RX 7'757nn;{<;{Jwww\RX %'7/͖tn3wwww.W;{\RX X4%#"/#"&54?'&54632   !  4747632#"/#"&!     L& Q86 [B@86 T03q,7"&463!2#!"3!2#%"&5463!2#!"3!2#HPPH4:6;54/632==qabG87KS/'*32/3q M5G3754632#"=4&#"#"754632#"=4&#"#"Hef| hRMp UX8:U ;,(@ g~}h UhlQ CNNC 36<- G Wx"5432#"=4'#"5#"=46@Tk/>U]<<OBd :/CO3%F37!#"=##"=#"54;5#"54;54323543232+32+'5#u??)?gg)ggN, ^2N,' U2!sR@'f 'f@ f sR@ W'{/fV%f'{/fVef8 FN8 EBF, ^TH 3 6$#"#"&54767&'&5463236#".'&546323 dzr  YY  rzd:aV^   bh]#(/W6 00 6W/v(/\= 7V/H YHM64327&#"4326?6326763201#"'&'#"'&'#"54?7HDFc> w;D 4^'  @F  4L   ^& ' F C @$4' ' *4   @7!)13265472#"'#".54?&5463276&#",6B^A T-vRG8T T-wSF7Tw,4C_"k"^B6 U7GSu-T U7IRt-Tw"]A8,2&Y 37%!'24`( #"/#"&547   &8~ XX'qx (&q'qx (6 %!2+#"(~"A %#"5#"43!A(6 X"A X|0#753@)*S(((|A3##53((T(0|%#33#@)))S((@|%#573((((SH #"=!2#q#5  Sa2%&54>& ,>j@-.@i9NNa$48' (82#7,7232654&#"76".54?&54632#"' :4COooMPp*; ?6`^_T@? ;*oONpnND5: ?AU_6?4?[,7;FQ\%#"&=#"&546;5#"&4632354632+324&#"3265#4&+32654&#"35#"326?>,->|?X>>,CC,>>,->|>-,>>,CC,>(''C'|)'C'''''CC'''->>-BB,?>-,?{?X??,CC,??X?{?%''C'{{k'B''*C'''B'''HnX]1 !#('@  8@81Q 8 @'8@Q XX8 46;2"&54&#">4/- *,b8ND/ -1+Y8@  XXd%"4&#"#"&54632ch 37/!!73'3#fD$~pon@茌(@ooooZ#"'632   h ``  Z4632#".547&   F  NNXh Xh+-E %7%%'7%"=42#"'&54?632#"/&547632-((U  U jU  U ؕ(||bb1  1  -1  1  W!"54;#"543!2+32< ^CP!%!!Pph^(X&  UX& UX&  UX& UX. 9 U#5F#!#"=.54675432>4&@ggfgVwx~Wuuig Й@F ~WY#5& H3763232+"&54?#"543  ʥ  +    H3&5463232+"/#"54;h        X& UX& UX& UX&! U)F%%#"/76323543232+#"5#  `vxb mm 56I0F%%"&54?##"5#"54;54323'&54632_ bzx`  65 mmX& UX& U#5%-2#"'#"&547'&546326327654&#"0kK HZnT  EF^LX=[F9mkN 7orN  /DVA`_GAY\&:V&q +-F 336323##"533+)3YWX&  UX& U:U%,%2#!"54;5.54675432>54&55GG57JK6'54Q&12(bR76RS96Sa_='*=<''<HM3&"/32+#"=#"54;5#"&54?  46 lnc `b X& U:&qY +-F'3##"5#3632#@& W(3;YX&  UX& U:G%,"543!2+#"=.5467557>54&96HI56II6'34O&32rS86R~}S77Rr<((=<')=H#746325#"54;543232+762'& 64  nl b`  X& U\&q +-3&q?&q &q#5&q G& X&  U#5&  X& U:'Xp +-'Xpq'X q'X#5'X" HF3432>=3#"'.5H+PTMX+v[ao\^ aR^~ }g3F(7"&46;543232+32+#"=#"3HPPHLL:6;5qabggqq)G87K\c'OaN,c'l!Ho+&+-3#+!>32##"&5467!632.#"+u ?!Z,u  pvL6(*<3 j3 D  .C#'/'\j6"63232754&#".#"326%54622#"&'"&54,DNE; QPB;QA@Lhh hSOg A^0/$9b0/$by@ww  vn  \F)!#"5&#"#"&54632543232>2#"'@*   L,%* R%&# R '& P&qeX& A UX&" UJ.%.#"?3>32##"&467'363232w>6 r\\)M  = l  B*7E;/*Χ D ' +z 0/J)'#&#"#"&5463273>2#'. < ;.)   L, 5 _$ ; m*g,3I 1hD Ru& B +2B:+(B?G&*q&Uq& 4q+(& 6q?G*8W@EK$#!67632#"'&/&54325467#"'&5&'&54767542!54'36W!,4G I**I G4 7$$7(6$!*_IH (((< >  %L L%  =$% 1/12/0 !!/ 01,33D656D9V+#!"5#"4;2!4;V`_u v(U(jV1%%+32+"=#+"4;5#"54632.#"V"xtty!$ih((lpl8"5.46742@1@@1(1@@1(I32JMIfIM<m/D`T) W'+}d4)+}4)+}4)D)X#q#qg/D)D)S!-5=Oas463232+5#"&5463254&#"#"&5&#"326'#"4;2!#"4;2%'&547632#"'&547632#"%#"'&54?632%#"'&54?632X-;$>:B.8L='2,$@',4@("#9bbbb/\\\ \f\\\\-# +6/%*5.: &n((((N! " ! " " ! "  ! X3!2##3.5462654&#}[[,21>LLfMebP[\`96\` ^BDbgNMf2&p"5423#353#53E((Uo(\(( (XX 4%7'#7 '37&'+32>#"=#"=435432,8,Ժ8B++8%*  *%88Ժq$3K2/ 6 CbD 6W*2.5432#"54>7#"+"4;2?63#!"43!+  ?*)@  +.-T:+!Ci<& )<;) %=VV(VV(( WD m67'5'67'7&'#773&/542763232+#"/"=&'#"'&54?&'#"54;67'&5476326^i$<.Li%<.jj.54%!."'xah&$qq{|}|@o2:fph=X4==XIBK#"&5472654&#"&'632#"/#"&547654&54632326327#"'X}2ⓓpE1L[~|Y  _/8  X58}[L,Lono 4 X 30_ XL98 :F&' Tt rV]$+"5!+"4;43!23VnmWZX((#("XG#46;2#"+"4;2653547"26izHUUv>} 8iYY\]^e(jWBc.(eF@oRl?g#5!7#"543!2+7', #5 OX#5!7#"543!2+%!'7,:z 漼#5 QX?y$+"4;6#!"43!+"4;"+"4;?jjkkjj((((((((D %#'73'#3DqLJX!%!!X^(;# gU W 048<DS#5#532#53#53##54;#!"=#535''754;5332#53#53#53#"=33!73"&'($8r__^^(/99*9z((((((( 4( FnKTq:v ((((( 4(Ei 8ccc/$P(3. I! V 7LTX\`h#5#532#53'#53#53#53##54;#535!53#5'"543!237&'#5ᘀ537+5353%#53#53#53#"=33V(&((^^((((9(M^ Y((m*,j6(# (Sw(&(U((K^^^^M(9.(iY(ji.B((S?i`gLI ILFB(j((((*X%9%#!"&=4>75735##%54&'!3!2>X!#f* #G!p)|*#E8'#-48 P@8/B8V#oo @tC-Et@{B+BX_$,1%+"&=46;254&+";26"''.''&5X[[[[(ExyDExyDA+(:u[[[[yDDyyDE;*] !*T8 #7632(  - T8| 3#T(( T #"&/&3  (V -Q8 ]XX8 #3((Q  [XX,8##32م(,8T 3#,(( , 2+3(:d8, cXX8,  bd,  aXX8 "#4632DV(nTB;"NX,8@ 3#4.'>5(05 ()GN.*5G) Ս9 /I.,+G/ %&8! 2#"&53Tn(V;XN";B8@ #@( c8@ iXX8, #67.53@(05 ()GN.*5G)+9 /I.,+G/ %&8!c@  gXX8@ 3#(( 8X!5XxPP<8 65463<~~ XrV rV<8 "&54.'2~&DE-VrX9P)Vr 8:l '5!#''%5!j4/0(@7uA6@*+ : 373!57 !5%H(0=q @6+zX !#"=!#"5.X`X tX Xs/ tX uX"8A 3#&54632^)j, ; X !5X PPX5!5X5PPXT!5XTPP#Xs%!5XsPP +"5476;((q $+"'&5423(((p(/""=.5467542>54&'#?gd(cg(UsvR(VqsTfh[[hgn}VYz~}(/"("=.54675#"43!2+>54&'#?gd(cgUsvR(VqsTfh[[hgX((}VYz~}(/"(32#!"4;5.5467542>54&'#?gd|cg(UsvR(VqsTfhF((Fhgm}VYz~}:%+"=#"547542'#:((5(.__jj{{:!%+"=#"5475#"43!2+'#:(5(.__T((T{{:!%+32#!"4;5#"547542'#:|(5(.J((Jii{{>,746324232>?632#"'"5&#"#"N>4>(@3  O=4?(?3> Ak6C8  Bi6T7< ->274632#"43!2+32>?632#"'"5&#"#"N>4>@3  O=4?(?3> Ak6-((8  Bi6T7< ->2746324232>?632#"'32#!"4;&#"#"N>4>(@3  O=4?|?3> Ak6B8  Bi6((?7< -W +"5#"43!((G(W #!"4;423|(-((G }X |XJ#!2#!"546;2+!#"43ZO2  + ;&H)32##"/76322654#552>53B]c@  wg*HJPre<"RW; jv)}xCE+KxT@!7!5!(( R'%#!"543!42!2#!"43!#!"43!+"4;R(Ik77ppct((s((t((RO!%+#!"=#"54;543!232#5!5!RRDDnRCnnllPX&".+"&'+"#"546;2>32;2D l&%l =-l  #l-=P)9 **9)8X XVD%#!"&=>;2#D)!- )-&&| |+-E& jW. Nt#!"54763!2!!N  ?Ac L (T,82!2#".'!"547>#32>%." $   2++/  $!         - ?9 .   2 !  ,.v/1%/8/u8*y/6/2+n.-y/7/;n6#-v/(/7;n#0v/4u/1(-0v/(/27|=u/$/&.z&.u/%/(/uc7/6,h%rwje6/+Yv7:esd9//^y)BdXd8/7Dd9Uxud7/)8d)gwhf7/&Tr5-foe9/6Pt6,j~d7/6_r,4d+4t/(//'!t/'/&y+0t/'/&+3t/'/&+/t/'/&"3v/$/.p1$8y/1x/6<#9v/(/7%;x/& /$1{rl//(do0.l!9y/6/8%#6u/(/6&ad7/)Sw6;i_c5/6Eh*Kpib7/5[w6;gZe;/6Ej8M{b6/6gq38b!7t/'/(/~((%5432!5432 *U~~ U=g/1 M /. 9"=#+"=4234;29((|j%"5!"543!42((I(I_!j+"5#"542!42((3(D!_Ij Wj#%#!"=423#"=43!2"=#3542((_((f zN - 5#'N"zNUU@ #53#53#3@Xq Aa #53#3#53A__AA#4 #53#3#34__``XBB K !#53#53#53K__b!#3#3..h..JXX ,"32654&'2"&54632+"54;#"&547/mlkgxGKW  0lmkj({|}|^. XX 8"32654&'2"&546463235432#57>54&#"#"&/mlkgx>?4F2{/"D 0lmkj({|}|*DD+ ..r$M<*C XX G"32654&'2"&5464632#"&546232654&#"5432654&#"#"&/mlkgxK6FF&+#\B6S 22BG.,B/5")  0lmkj({|}|==+%$,$-Q= ""5 7!$ XX .2"32654&'2"&546#57332+32+"54;=#/mlkgxT|70lmkj({|}|/KtXX >"32654&'2"&546"#"=32+>32#"&546323254&/mlkgx'A 6MO"32654&'2"&546"&#">32"&5463232654#"/mlkgx; 5RN$]zf`R&K '%KaK0lmkj({|}|&\\ 1C7Rr[sq+ !<$mOXX )"32654&'2"&5465##"=3#"&547/mlkgx˦m  0lmkj({|}|FA XX -5@"32654&'2"&546#"&5467.5462&"3265"32654/mlkgx% J?BG#CnCQ'*$Z34,+50lmkj({|}|0+9FC<,-&(-:;,'(@K("r0'(..'&XX XXXX "/E"32654&'2"&546#"&54632'"32654&'32+"54;#"&547/mlkgxKD)(@80,Am( -/\# 0lmkj({|}|QusSaovM^J-L#ZBH`*'  X@!!X@(XT!!XTP8@ 3#(( 8T 3#PP X@ 3+53#53ddddd@((((XT 3+53#53dddddTPPPP8@  #=3#5@(((pd8T  #=3#5TPPPpdX@ #5;#!#53#53тFAAAA(((((XT #5;#!#53#53тFAAAAPPPPP8@  #5#553#5@(((((;gggg8T  #5#553#5TPPPPP;gggg8X@!!#@(@( 8XT!!#@(TP48X@!!#TP@( 8XT!!#TPTP48@@#!5@(@(8@T#!5@(TP8T@#!5TP@(8TT#!5TPTPX 3!( (X 3!(4PX 3!P (X 3!P4P@ !5!3@((@ !5!3@(PT !5!3TP(T !5!3TPP8X 3!!( ( 8X !!#3@((TP48X #3!!#P( ( 8X 3!!#(P@ ( 8X #3!TPP  (8X #3!!#P(4P48X !!#33@P(TP48X 3!!P4P48@ #!5!3@(((8@ !5!3#((P8T #!5!3@(P (8T 3#!5!3@P(@(8T 3#!5PP@(8T #!5!3@(P4P8T 3#!5!3@P(TP8T #!5!TP P8X@!!#!X(@( 8XT !!#!5!@(@@( P8XT 5!!#!5@(@P4(8XT!5!!#X(PP48X@#!5!TPX ((8XT #!5!!TPT P(8XT !5!5!!#TP(P48XT!!#!XPTP4X 5!3!(( (X !5!3!@(P (X !5!3!!((4PX !!5!3@(TPPX 3!!5P@ ((X !5!3!TPP (X !5!3!!P(4PX !5!3!XPP48X !5!3!!#((( ( 8X 3!!#!5((T ( P8X #!5!3!@((4(4P8X !5!3!!#((P4P48X 3!!#!5P(@ ( (8X #!5!3!TP( ( (8X !5!3!!#PP( ( 8X ##!5!3!T(P4P (8X #5!5!3!!#P((4P48X 3!!#!5!3@P(T( P8X 533!!#!5(P@4P4(8X !5!3!!#P(P4P48X !!#!5!3@P(TP4P8X #!5!3!TPP P (8X 3!!#!5PP@4P4(8X !5!3!!#PPP4P4X@#53#53X(((XT#53#53XPPP8@ ##@((( >>8h ##hxxx >>X|!!5!!XX((8| 3#3#((x(( 8X| !!!!@D(P(\8X@ !####|(P(@(  8X| !#+!!T(P(|(\D(8@| #!5!5!5@(|(P(8|@ ####5|(P(@ (8|| ##5!5!(T|4(4(X %3!!!(D\(P(X !3333X(P(  X  33!!T(TT\((D@ %!5!5!5!3@((P(| !53333|(P(( |  !53;!5!(P(TT((8X 3!!!!(\(P(\8X  33#+3T((P(( ( 8X  3##4333!(T(CC((\\(8@ #!5!5!5!@( (P(8|  ###533|(P(( (8|  #3632##!53|((tMC(4D4(8X| !#!=!X(X(\(P((8X@ !#####X(P(@(  8X| 5!##5!"%##654'43X(U(CT(((ww(\̈wX  %!5!%5!3!XX((P(\(X !533333X(P((  X  !!3!53#"56533X|tMC((D̉w(4wT\8X !5!3!!!!#!5!((T(\(P(\(8X ###533333##TP((P(( (  ( 8X  ##5)##33)533(T(((((\\((48X@ 3#"#46ddcQ(g@(Qc,ug8@@ 2#4&+5dug(Qcd@gu,cQ(@  =XXX "&53;ug(Qcdgu,cQ(8X 6"ʴ,8X 7X""8i  ' 7 C&""&"", 22,@!!,@(,@ 3#(( ,X@ D,8@, E ,T!!,TP,T 3#PP ,XT H,8T, I XT!5!5!!,,,(P8T 33#(P, XT!5!!,,,P(8T #3##P(, ,X !!X 8X!!XK}8X25!!X28X5!!X8X,!!X, 8X!!X8X&!!X&8X!!X8X !!X 8  !!  8 !!> 8w !!w 8, !!, 8 3# 8 3# 8K 3#KK ,8X !!,, 8& #'+/37;?CGKOSW[_cgkosw%3#'3#'3#%3#'3#'3#3#'3#'3#%3#'3#'3#3#'3#'3#%3#'3#'3#%3#'3#'3#%3#'3#'3#%3#'3#'3#%3#'3#'3#222222222222,222222222222,222222222222,222222222222,222222222222222222222222222222222^222222222222222222222222222222<8X #'+/37;?CGKOSW[_cgkosw{%3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#22d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d2222222222222222222222222222222222222222222222222^222222222222222222222222222222222222222222222222222222222222222222x8X  #'+/37;?CGKOSW[_cgkosw{ #'+/37;?CGKOSW[_cgkosw{3#3#53#53#53#53#53#53#53#53#3#3#53#53#53#53#53#53#53#53#3#3#53#53#53#53#53#53#53#53#3#3#53#53#53#53#53#53#53#53#3#3#53#53#53#53#53#53#53#53#3#3#53#53#53#53#53#53#53#53#3#3#53#53#53#53#53#53#53#53#3#3#53#53#53#53#53#53#53#53#3#3#53#53#53#53#53#53#53#53#3#3#53#53#53#53#53#53#53#53#3#3#3#'3#3#3#'3#73#'3#73#'3#73#'3#73#'3#73#'3#73#'3#73#(000000000000000000//2000000000000000000//2000000000000000000//3000000000000000000//2000000000000000000//2000000000000000000//2000000000000000000//2000000000000000000//2000000000000000000//2000000000000000000//d0020000200002002002002002002002002002002002002002002002//0400000000104000000001B0400000000104000000001B0400000000104000000001B0400000000104000000001B0400000000104000000001t0040b041+0b0b0b0b0b0b0b0b0b0b0b0b0b0c1X !!X } 8X 3# KK 8,,!!,, ,8X,!!,,, ,, !!, 8X !!!,, 8X !!!,,,)8X !!!X 8X !!!X ,,X !!,, 8X !!!!,,,+ 8X !!!,,,2&3!2 2&3!%!!24\ (2&;4>;!2!"'./3!27>75&'./!2 8  ,8 <  (  * }"  ,8  ,<   *  (2& 753!%!!4\}} (2& !5%!5!!5%!5!!Z\\\\(YKK(KKK(K 2& 73##!3##!!KK(KYKK(K (\\\\(2& #'+/37;?C%353535#35353535#35353535#35#3#35##3!@KKKKKKKKKKKKKKKKKKKKKKKKKKKKKsKKsKKKsKKsKKsKKKsKKsKKsKKKsKKsK(KYKK(K 2& !!5+5%332 'ު\ުx ̥x2& !#75373& ͥxޥ (ުƪx 2& !$'+%3'5'7'35'7'7'?#'?#'!!E(D}UUUUUUDDDUUUUUUrDD`ED lD`DDUUUUUU9DDEEUUUUUUrD`DaD( 353735#53ת((2&,3!2,2&,3!%!5!24\,(3!, 3!%3#, (?,3!22,?,3!%!7!22:&\,(#5)5 #5% ! (N()7%'!7mAA(jj(T 5 T %5 y %充 %'7]n;{@y % y%'%uSCH#5 5:#5! l v:%'%#7'mAj99  99W    ?充757n@{;^ 7%^_75%HC#5! ,    #5%7' ,  8  #5 %'77' ,    #5 2#"&467"32654&'2"&546.'9:()9:+_^]Zkܛl:P::R8~]_]\(ڜomY? 77+Ҝ?&#5 "32654&'2"&546/_^]Zkܛ]_]\(ڜom #5%/7?GQ[en2"&42"&42#"&5462#"&546'"&5462$"&462462"$462"%4632"&4632#"462"&462"&$      R        +            "     X  2    z       b  a  #5 !2"&54667&'>4&0kܛ'$#P'$$LZ08*01ڜom)@Ch)hCo7`I_l_#5 )2"&46"264&'"32654&'2"&546.2IIhIJ4#32F22 _^]ZkܛJ34IJhH(1#$22F2]_]\(ڜom#5 2"&5460kܛڜom#52654&'2"&546-]Xkܛ>]\(ڜom#5"32"&46+[]pܛ\]moڜ#5!4&#"4632#"&K„]\(mnom ]Xkmn#532654632#"&K\]monm[]pnm#5 "3267#2"&546/_^]kܛ]_] ڜom#535"4632#"&J^'mnom Zkmn#,!"&5463,ooon,5!2,onoX!"32654&Ԙ*:9)(:9XX8R:9)(:XX 2#"&5467"2654&%!!/V~XY~\pܛeXZY|2monm#,XX5>32!#!#5.#"K\X#X#gm, Z|}Y , ikX, 3!33267%!#"&'5##mgX\,, ki Y}|Z# 0 ##5>73/ X{(hzW g, 9 '3#5.'-h({X(g Wz,9 %3>753#- X{(h(zW g#0 %#.'53/h({X((g Wz# 55.#"#5>32 X\(mg Y}|Z ki #53#"&'533267 (gm(\X ik Z|}Y2&!&  2&)& 2&3!22&!2 Q "2654&'2#"&46-""0""'9:()9:)"""#(:()9:R82&3!'3#2 (2&)!#& 4\2&7!!Z4(4 2&!!\(\( 2& 3!#332( \\#5 %2"&46 !,( (N(#5%!  (N(#5%!, (N(XX "32654&'2"&546/mlkgx0lmkj({|}|2& 7!#!!35Z ( ̾2& %3!3!%35#@\4( (2& 5!35!!5#\ (\42& #!5#!#3 ̾\ (#5 2"&46#32654&35(pܛX^vPtmoڜ)Vw_Wu#5 !"&462'>54&#"35(kܛXWv^XtPڜom)W_wV(Qu#5 !"&5462'53.#"%#>0pܛX^vKPtmoڜ)Vw_Wu#5 2"&5463267#7.'0kܛXWv^XtPڜom)W_wV(Qu2&3% !2:^y^2&! 2y^ ^2&) & :^2&3!%!!26^ (2&3!2 }K7!%!!}^%K^&}K7!}^K^2& !& ^  DD#5AS_kw#"/&54>32%2#".54?6#"/&54>327#"&46;22#".54?65462"&#"&46;25462"&"&=46 * *2 * * * *8< < f * *   < <   5JL55LL * *6 * *| * *   f * *B< <   < < LjLL55L/#7&54632>322#J#.V?';):<@l*(2 <23"&5462326=462>2&#"&#"&#"&#"%+  (  !  !  !  !  3' 2 X`E[[E    5 &6F72#"&546"32654&7632#"&54'7632#"&547632#"&543IJ00JH2!12 #-/  s  sZ  NZMG32I(1"!13!2\ \  2P(!%"/"&54?'&546376272I  I 53о  o  P(!=%"/"&54?'&546376272"/#"/7632'&547I  I 53O%' | 6ss6 о  o  P ]^ x%25432#"546;'6  I%  J Z+5432#"546;'7!"&5!2  I    J  + #5 $463""32654&'2"&546_^]Zkܛ  ]_]\(ڜom2& q2&3!%!!4>32632#'&24\   K  !\ ( u4 2&/3!%!!2#"/#".54?'&54>327624\h     ((    &&3&547#"&463!53#5#"&547&54P$I!#$f!$\4 $D( ($" 4 22#37+#3!2+PP$!f$#!I\ 4 "$((!"$ 4&&%-5=3&547#"&463!53#5#"&547&547!"3!35#"";5#";P$I!#$f!$ $ ) d d\4 $D( ($" 4 _7(7_2& 2'@22'/7?#37+#3!2+'!264&#3264&+#3264&3264&#PP$!f$#!I$ ܤ d \ 4 "$((!"$ 47_7_78, 8(@P`?%"/"&='&546325#"&46;5#"&46;546232+32+T  h T X X  X X h \1 < 1  T  N N  T  < P`+#"&46;5#"&46;546232+32+"&5 X X  X X   Z  T  N N  T   :;%#"&=46235#"&46;2+35462"&=#32+"&46;   d  d   d  dd  d   d  d   #5 2"&546'67654&'7550kܛ SS'xUΦWvA8TڜomYuY8GWԋWEZ;#5 $.#.46724&#2"463232654&'2"&46`[>/2BG/.=`pܛ  6  \(58TEI-](moڜ2& 35!%5!%5!2  dddddd2& 53%#55!%5!^ ddddd dddd2& 35!'53%#=!2dddddddddd2& 53%#553%#55!^,dddddddddddd2& 7#553!5!5,  dddddddddd2& 53%#553%#=!^,ddddd dddddddd2& %3+5373+53'!!^ddd dddddd2& 53%#553%#553%#5^,,ddddddddddddddd#5&2<7"5462#"'."&463"6463"'"32654&'2"&546TzT ;T<Q_^]Zkܛ->>- &&    ]_]\(ڜom#5&2<72267632"&546463"6463"'"32654&'2"&546>-^    ]_]\(ڜom#5&07"2654#"#"&'.3>4&'"3>4&'"'2"&546\\A./A%  Ikܛ1DD1 )*0! 0 !0! 0 {ڜom DD#5AS_kw#"/&54>32%2#".54?6#"/&54>327#"&46;22#".54?65462"&#"&46;25462"&"&=4654&#26 * *2 * * * *8< < f * *   < <   >XY??YZB,/CA/.B * *6 * *| * *   f * *B< <   < < Y~YY??Y-B?./BAI#%#"567>4&'&'432>54.'Ԟ&GPPG&BUC/0EW?jCDk=*97I#.464632#"&BUC/0EW?jCDk=*9햹 44 v A"32654&'.543226763232+"&=#"&46;5.546.2DRvTTtT   x2@KkkLKj(Bh3>32356732+"=#"&54>54&#"#"W29=Y ( & ($ &=FG:ou    14X0+2- 8>g;"&5#"&5467356323+632;2+"5454&U/B  I I H K8bU^]Bj^E.A4   H F YY1F  K%(Kc=nFR#+"547654'&5463235423>76;2+"'.'##"&5467"32654&Z <7 gg :; Z(f 2C bb 7< f*>J0-M<(31 34|:^2 eXX^  /Z>bb>L=  Rcc[ 2^:G+-MH2/A &1"!165:ga%2+"=#"&46;5.=#"&54?632#"/5"&54?632#"'6=#"&54?62"' }(w wXl 7 7   7 7   87 mV  ii  UP 88 y 88  u 88 PUVm -%2#!"&546;:#4.#2>  %&F(:!(77]A53/WN@CMX-(  E  %2,A' (86Xo)"&54&#"#"54632632#"5654&#"?  J56:QF;>5_BW@1)V` W\J8-IaLMbG.6L:h 8%2>54&"2#".5467.54322654&54-2M)rss-AHAH)8J0<]1 J@DGus,9(VopUVgRB,7nL7.5463232>7632#"'632X4>v`26d2=0U'-T+ +9m>. *- 5 &.**56RU G88#+(4 r 1+  ")"%  Wd -9Z%2654&#"23267#"&54632#".547"32654&%".#">32#"&54>3231 34V"2Y8j,NJ01J9`j<2^?1z31 34#,gE*.LJ0-N'=VU01]@11"!165V! `W L/-ML.YC #1"!165V"K0-MI1GlA(J:9D4632.546323265462#"&54>54&#"#"&264&#"A7# B,kuw-6-0 "-  E20H-5-kb-5-A67Ax&))& /(4DOJ)nn,Z@X*1*% 6AI./`BS$YrGAk;4CD+H+-"!->Xi]j4>7&54&""&54.#""&54&#"&4632>32632>32#".'#"&7>54&#"/?$:%   "     $ %!C))  <- /#    Q %-&<1(36JJ6V '(B>V ,T  "#>#%V`S^uOY+ ? .WdZFtjX$U 07!2#!"&46232+"=654&"+"&46;546+ CZw Aj@  z\(   \e  OHJM  _bWhP#"&54#""&54.#""&54&#"&4632>32>3232>7#"&46;2"&5/(&*4"  8   + # #$  #1% $: o  % >;@@T (3%T 6J  7 "#YOT"0 %  o V[+7#"&546;2"&="/#"&54?'&562c       d      S]2B"&463!2632#"&547"&54767>732654&#" ! M8K #jlK\xYSby ' /&9>Qm]&55   1&vo`ov=6*n - ;T(ZL[d;Q8q%".#"#".#"#"&5463232>3232654&54632".#"#".#"#"&5463232>3232654&54632(  .(5 9$)#*&  :#(  .(5 9$)#*&  :/9//9/1:1q CU0;0/8//8/8  ,@A/9//9/1:1q CU0;0/8//8/8  ,@AQq;##"&54767#"&46;&'&5463236763232+#"'&       $a  V  T  aa  T  U  aHC)%3!527>7#"&54>7#":!$7u7$!*D,=$9=< -25)=,D+A##A+B=+%=26X7.M01'6 +=,,@:.'.5463267632">54&#"#".'&-CY2#F3E) )92H,9(3!+3  7=9&.+3'   / =qtAI&4F=$-.E0.\G:+=:D-!'UIJQ'*..'"=TD &'67>7.+/:=80||0j.%xC'3B1l,WV(4(J:8%!5>7#"&54632&5462>32#"7 &8$z$9%  A4JC0 KjK   0CJ4Y/%&/# M55J-)3HH3)- J55MHC !K%3&'3254.'3263!527>7#"&54>7#".  !@Z+0:82-0*E!$7u7$!*D,=$9=< -25)=,Dm $OP(#(G.,E'$*&*O-+A##A+B=+%=26X7.M01'6 +=,,?>32.'.54632-H,2H+CE? CY2#F3a=9E0,\UWm6=qtAI&4FQD &'6(/:=C'3B1lJ: 5v%3.'32654&#">54&"&#"32>!5>7"#"&54632&5462>32#".. N  g.>6,Y,V,  ]",6>.+# &8$z$8&   4JC0 KjK   0CJ47!c  _3-+' (! /;;/%#'+-3(#9(( M55J-)3HH3)- J55M"6@3"&54632462'15#  4$%  !@$3"&54632462"&54.''15#  !((!  "*:4$%  '"2(G/ 4G*!6<"&54632%#"&54632'15#4$'15#R4$% 'a!$% R!6<"&546325%#"&546325%'15#4$'15#R4$% a!$% R!aMam| 4&#">>32462:H!& 5k\%TO  '@9@amMMh xY[ #53%++=+7m793=V\575375377#5#5577YY++YYYY++YY+W(!((!(>!8J 6462"!!!&&< |&&ZzJ$462"&462"!!!f&&&&]< |b&&&&ZzJ$462"462"&462"!!!&&L&&&&]< |&&S&&&&ZzJ#'6"&4626"&462462"&462"!!!&&&&@&&&&]< |&&&&&&&&ZzJ'+/6462""&4626"&462462"&462"!!!&&"&&&&@&&&&]< |&&5&&&&&&&&ZzJ'/37$462"&462""&4626"&462462"&462"!!!g&&&&@&&&&@&&&&_< |&&&&0&&&&&&&&ZzS$#!"'&542632!S!(L(( l!! #5&  Sp $#!"43!42!S((((6P8(2"&463!2#!"&5463!2#!"2654&#"B\Z]]n}|o2DF0/FE\\\\7΍(vw(D12DDdCP8 "U8U2#"&54?654'.54Rm+P+H1Rm+P+H1\LTSJs5 \LSSKs6 U4632#"54>7654/&mR1H+P+mR1H+P+\  6sKSSL\  5sJST-+2#y X' 3D%#"&547632"&46;2+";2# yHPPH97;5S   |bcH76L 3D 'OD[Y+#"5#"4;43230(c(cMV4.543!2#!#"54>s & q-V<.(nwI~#5"y+ -+K &X@H%26=42#"&=42342@_(x|(^()e|fYn #!"43!422#"&54I(,(IL.Yn .5XR-X7'#"4;5#"43'75gggnnXwwww((;{<;{R-X 0@RIX?'%32+'#"4;5#"4;732+nnPnn(>>>>>>>>@;@;(ww((ww( I%#!"=#"4;543!2!Invv(([q I 3R\ 32#!!2+3Ebb(^^Sz\ #"543!!"5433b^S(z}[2 #&' 6   >[  df}["547 &547563    >y AC -+[2 #&' 6'2 #&' 6   >   >[  df  df-+[%"547 &547563 "547 &547563 ?   >   >y AC  AC 0O/2#"&54323264&#">32#".'&5432>cdc32#"'.5432.#"32>32#"&54632>11:oMRrrR%D*n>cb^-* ,% %, 'Kgrr &$%$%%2%$$#&$$&$&$'$& ".#"&546327#"&5463272#"&546#2#"&546 $%$&'%$&%$%$&$%#94$$%~%$&$$$#&$%$%p 2#"&546&$%$$%$% 2#"&546'2#"&546%$%$%$%$>$&$&$&$& 2#"&546#2#"&546%$%$&%%$$4$$%$%$& #2#"&5462#"&54672#"&546%$%$&$%$%$%$>$%$&$%$%$&$& 2#"&54672#"&546%$%$%$%$:$&$&$&$& "#"&5463272#"&546'2#"&546 $%$%$%$&$%#94$$%$%$%$%$% #2#"&54672#"&5462#"&546%$%$%$%$&$%$:$&$&$&$&$%$% ".#"&5463272#"&546#"&54632'2#"&546 $%$%$%$e'%$&?&$%#94$$%$%$%?%$&$$%$%p 2#"&54672#"&546&$%$&$%$>$%$&$%$% #2#"&54672#"&546'2#"&546%$%$%$%$%$%$>$&$&$%$%$&$& "2#"&546#"&5463272#"&546%$%$e$%$%$%$=$%$%$4$$%$%$% #/2#"&5462#"&54672#"&546'2#"&546%$%$&$%$%$%$%$%$>$%$&$%$%$%$%$&$& !#"&5463272#"&54672"&546 $%$%%$%$%%2%$$#&$$4$$%$'$& ".#"&5463272#"&54672#"&546#2#"&546 $%$%$%$%$%$&$%#94$$%$%$%$$#&$%$% "-#"&5463272#"&546#2#"&54672"&546 $%$%%$%$&$%$%%2%$$#&$$4$$%$&$&$'$& ".:#"&5463272#"&546#"&5463272#"&546#2#"&546 $%$%$%$e'%$&%$%$&$%#94$$%$%$%?%$&$$$#&$%$%p 2#"&546&$%$$%$% #"&546322#"&546$%$%$%$94$$%z$%$% 2#"&546'2#"&546%$%$&$%$:$%$&$%$% "2#"&546'2#"&54672#"&546%$%$&%%$%$%$]$4$$%$&$&$%$% 2#"&546#2#"&546%$%$%$%$$%$%$%$% !2#"&546#"&546322#"&546%$%$f$%$&$%#]$4$$%$4$$%z$%$% #2#"&546#2#"&54672#"&546%$%$%$%$&$%$:$%$&$%$&$%$% !-2#"&546#"&546327#"&54632'2#"&546%$%$f$%$&'%$&?&$%#]$4$$%$4$$%~%$&$$%$%p #"&546322#"&546$%$&?&%%$##&$$&$& "#"&54632#"&54632'2#"&546$%$%$%$%%$%$94$$%;$#&$$$%$% "2#"&546'2#"&54672"&546%$%$&%%$%%2%$]$$#&$%$&$'$& ".2#"&546'2#"&54672#"&546#2#"&546%$%$&%%$%$%$%$%$]$4$$%$&$&$$#&$%$% "2#"&546#"&546322"&546%$%$f$%$%%%2%$]$$#&?$#&$$'$& !-2#"&546#"&546322#"&546#2#"&546%$%$f$%$%$%$&$%#]$4$$%$4$$%z$$#&$%$% #.2#"&546#"&54632'2#"&54672"&546%$%$f$%$%>&$%$%%2%$]$$#&?$#&$$&$&$'$& !-92#"&546#"&546327#"&5463272#"&546#2#"&546%$%$f$%$&'%$&%$%$&$%#]$4$$%$4$$%~%$&$$$#&$%$%p 2#"&54672#"&546&%%$&%%$:$%$&$%$& "#"&54632'2#"&546'2#"&546$%$%$%$%$%$94$$%$%$%$%$% #2#"&54672#"&5462#"&546%$%$%$%$&$%$:$&$&$&$&$%$% ".2#"&54672#"&546#2#"&54672#"&546%$%$%$%$&%%$%$%$]$4$$%$%$%$&$&$%$% #2#"&546#2#"&54672#"&546%$%$%$%$%$%$:$&$&$&$&$&$& !-2#"&546#"&5463272#"&546'2#"&546%$%$f$%$%$%$&$%#]$4$$%$4$$%$%$%$%$% #/2#"&546#2#"&54672#"&5462#"&546%$%$%$%$%$%$&$%$:$&$&$&$&$&$&$%$% !-92#"&546#"&5463272#"&546#"&54632'2#"&546%$%$f$%$%$%$e'%$&?&$%#]$4$$%$4$$%$%$%?%$&$$%$%p "#"&546324#"&54632'2#"&546$%$&$%$&%%$##&$4$$%$&$& ".#"&54632'2#"&5467#"&54632'2#"&546$%$%$%$X$%$%%$%$94$$%$%$%~$#&$$$%$% "-2#"&54672#"&546#2#"&54672"&546%$%$%$%$&%%$%%2%$]$$#&$4$$%$%$&$'$& ".:2#"&54672#"&546#2#"&54672#"&546#2#"&546%$%$%$%$&%%$%$%$%$%$]$4$$%$%$%$&$&$$#&$%$% "-2#"&546#"&5463272#"&54672"&546%$%$f$%$%%$%$%%2%$]$$#&?$#&$$4$$%$'$& !-92#"&546#"&5463272#"&54672#"&546#2#"&546%$%$f$%$%$%$%$%$&$%#]$4$$%$4$$%$%$%$$#&$%$% ".92#"&546#"&5463272#"&546#2#"&54672"&546%$%$f$%$%%$%$&$%$%%2%$]$$#&?$#&$$4$$%$&$&$'$& !-9E2#"&546#"&5463272#"&546#"&5463272#"&546#2#"&546%$%$f$%$%$%$e'%$&%$%$&$%#]$4$$%$4$$%$%$%?%$&$$$#&$%$%l 72#"&546%$%$$&$&l 6#"&546322#"&546$%$&$%$X4$$%8$&$&l 72#"&5462#"&546%$%$%$%$Y$%$&z$&$&l "6#"&546322#"&54672#"&546$%$%$%$&$%$X4$$%z$%$%$&$&k 72#"&54672#"&546%$%$&%%$5$%$%$%$&k "72#"&54672#"&5462#"&546%$%$&$&$&$%$|$4$$%$%$&z$&$&k #72#"&5467#"&54632'2#"&546%$%$X$%$&>%$%$Y$%$&~##&$$&$&k ".72#"&54672#"&54672#"&54672#"&546%$%$&$&$%$%$&$%$|$4$$%$%$&$%$%$&$& %#"&546322#"&546 $%$&%$%$=##&$[$%$% "$#"&546322#"&546'2#"&546 $%$%$%$%$%$X4$$%7$%$%$&$& #%#"&546322#"&54672#"&546 $%$&?&$%$%$%$=##&$$%$%$%$% ".$#"&546322#"&54672#"&546'2#"&546 $%$&$%$%$%$%$%$X4$$%z$%$%$%$%$&$& #%#"&54632'2#"&5462#"&546 $%$&?%$%$%$%$=$#&$$%$%z$%$% ".$#"&54632'2#"&5462#"&546'2#"&546 $%$%$%$%$%$&%%#X4$$%$%$&y$%$%$%$& #/%#"&54632'2#"&54672#"&54672#"&546 $%$&?%$%$&$%$%$%$=$#&$$%$%$%$%$%$% ".:$#"&54632'2#"&54672#"&54672#"&546'2#"&546 $%$%$%$&$%$%$%$&%%#X4$$%$%$&$%$%$%$%$%$& 72#"&5462#"&546&%%$%$%$Y$%$&z$%$% "$#"&546322#"&546'2#"&546 $%$%$%$%$%$X4$$%{$&$&$&$& #72#"&5462#"&546#2#"&546&%%$%$%$&%%$Y$%$&z$%$%$&$& ".$#"&546322#"&5462#"&54672#"&546 $%$%$%$&$%$%$%$X4$$%{$&$&$%$%$&$& "72#"&54>#"&5463272#"&546&$%$X$%$%$%$Y$&$&4$$%$%$% ".$#"&54632'2#"&54672#"&546'2#"&546 $%$%$%$%$%$&%%#X4$$%$%$&$&$&$%$& ".72#"&54>#"&5463272#"&546#"&54632&$%$X$%$%$%$e'%$&Y$&$&4$$%$%$%?%$&$ ".:$#"&54632'2#"&54672#"&5462#"&54672#"&546 $%$%$%$%$%$&$%$&%%#X4$$%$%$&$&$&$%$%$%$& #%#"&546322#"&54672#"&546 $%$&%$%$%$%$=##&$$%$&$%$% ".$#"&546322#"&54672#"&546'2#"&546 $%$%$%$%$%$%$%$X4$$%{$&$&$%$%$&$& #/%#"&546322#"&5462#"&54672#"&546 $%$&%$%$&$%$%$%$=##&$$%$&$%$%$%$% ".:$#"&546322#"&5462#"&54672#"&546'2#"&546 $%$%$%$&$%$%$%$%$%$X4$$%{$&$&$%$%$%$%$&$& #/%#"&54632'2#"&54672#"&54672#"&546 $%$&?%$%$%$%$%$%$=$#&$$%$%$%$&$%$% ".:$#"&54632'2#"&54672#"&54672#"&546'2#"&546 $%$%$%$%$%$%$%$&%%#X4$$%$%$&$&$&$%$%$%$& #/;%#"&54632'2#"&54672#"&5462#"&54672#"&546 $%$&?%$%$%$%$&$%$%$%$=$#&$$%$%$%$&$%$%$%$% ".:F$#"&54632'2#"&54672#"&5462#"&54672#"&546'2#"&546 $%$%$%$%$%$&$%$%$%$&%%#X4$$%$%$&$&$&$%$%$%$%$%$& %2#"&5462#"&546%$%$&$%$$&$&$%$% "2#"&546#"&546322#"&546%$%$e$%$%$%$:$%$&4$$%8$&$& #2#"&5462#"&5462#"&546%$%$&$%$&%%$$$#&$%$&z$%$& ".2#"&546#"&546322#"&54672#"&546%$%$e$%$&$%$%$%$:$%$&4$$%z$%$%$&$& #%2#"&5462#"&54672#"&546%$%$&$%$%$%$$&$&$%$%$&$& ".2#"&546#"&54632'2#"&5462#"&546%$%$e$%$%$%$&%%#:$%$&4$$%$%$&z$%$& #/2#"&5462#"&5467#"&54632'2#"&546%$%$&$%$X$%$%>&$%$$$#&$%$&~$#&$$&$& ".:2#"&546#"&54632'2#"&54672#"&54672#"&546%$%$e$%$%$%$&$%$&%%#:$%$&4$$%$%$&$%$%$%$& #2#"&546#"&546322#"&546%$%$e$%$&%$%$9$%$%##&$[$%$% ".2#"&546#"&546322#"&546'2#"&546%$%$e$%$%$%$%$%$:$%$&4$$%7$%$%$&$& #/2#"&546#"&546322#"&54672#"&546%$%$e$%$&?&$%$%$%$9$%$%##&$$%$%$%$% ".:2#"&546#"&546322#"&54672#"&546'2#"&546%$%$e$%$&$%$%$%$%$%$:$%$&4$$%z$%$%$%$%$&$& #/2#"&546#"&54632'2#"&5462#"&546%$%$e$%$&?%$%$%$%$9$%$%$#&$$%$%z$%$% ".:2#"&546#"&54632'2#"&5462#"&546'2#"&546%$%$e$%$%$%$%$%$&%%#:$%$&4$$%$%$&y$%$%$%$& #/;2#"&546#"&54632'2#"&54672#"&54672#"&546%$%$e$%$&?%$%$&$%$%$%$9$%$%$#&$$%$%$%$%$%$% ".:F2#"&546#"&54632'2#"&54672#"&54672#"&546'2#"&546%$%$e$%$%$%$&$%$%$%$&%%#:$%$&4$$%$%$&$%$%$%$%$%$& "2#"&5462#"&5462#"&546%$%$&%%$%$%$$4$$%$%$&z$%$% ".2#"&546#"&546322#"&546'2#"&546%$%$e$%$%$%$%$%$:$%$&4$$%{$&$&$&$& ".2#"&5462#"&5462#"&546#2#"&546%$%$&%%$%$%$&%%$$4$$%$%$&z$%$%$&$& ".2#"&546#"&546322#"&54672#"&546%$%$e$%$&$%$%$%$:$%$&4$$%z$%$%$&$& !-2#"&5462#"&54>#"&5463272#"&546%$%$&$%$X$%$%$%$$4$$%$&$&4$$%$%$% ".:2#"&546#"&54632'2#"&54672#"&546'2#"&546%$%$e$%$%$%$%$%$&%%#:$%$&4$$%$%$&$&$&$%$& !-92#"&5462#"&54>#"&5463272#"&546#"&54632%$%$&$%$X$%$%$%$e'%$&$4$$%$&$&4$$%$%$%?%$&$ ".:F2#"&546#"&54632'2#"&54672#"&5462#"&54672#"&546%$%$e$%$%$%$%$%$&$%$&%%#:$%$&4$$%$%$&$&$&$%$%$%$& #/2#"&546#"&546322#"&54672#"&546%$%$e$%$&%$%$%$%$9$%$%##&$$%$&$%$% ".:2#"&546#"&546322#"&54672#"&546'2#"&546%$%$e$%$%$%$%$%$%$%$:$%$&4$$%{$&$&$%$%$&$& #/;2#"&546#"&546322#"&5462#"&54672#"&546%$%$e$%$&%$%$&$%$%$%$9$%$%##&$$%$&$%$%$%$% ".:F2#"&546#"&546322#"&5462#"&54672#"&546'2#"&546%$%$e$%$%$%$&$%$%$%$%$%$:$%$&4$$%{$&$&$%$%$%$%$&$& #/;2#"&546#"&54632'2#"&54672#"&54672#"&546%$%$e$%$&?%$%$%$%$%$%$9$%$%$#&$$%$%$%$&$%$% ".:F2#"&546#"&54632'2#"&54672#"&54672#"&546'2#"&546%$%$e$%$%$%$%$%$%$%$&%%#:$%$&4$$%$%$&$&$&$%$%$%$& #/;G2#"&546#"&54632'2#"&54672#"&5462#"&54672#"&546%$%$e$%$&?%$%$%$%$&$%$%$%$9$%$%$#&$$%$%$%$&$%$%$%$% ".:FR2#"&546#"&54632'2#"&54672#"&5462#"&54672#"&546'2#"&546%$%$e$%$%$%$%$%$&$%$%$%$&%%#:$%$&4$$%$%$&$&$&$%$%$%$%$%$&p %2#"&546%$%$$&$& $#"&546322#"&546$%$%$%$X4$$%8$&$& %2#"&5462#"&546&$%$&$%$Y$%$&z$&$& "$#"&546322#"&54672#"&546$%$&$%$&%%#X4$$%z$%$%$%$& %2#"&546'2#"&546&$%$%$%$5$%$%$&$& "$#"&54632'2#"&5462#"&546$%$%$%$&%%#X4$$%$%$&z$%$& #%2#"&546'#"&54632'2#"&546&$%$e$%$%>&$%$Y$%$&~$#&$$&$& ".$#"&54632'2#"&54672#"&54672#"&546$%$%$%$&$%$&%%#X4$$%$%$&$%$%$%$&p %#"&546322#"&546$%$%>&$%$=$#&$[$%$% "$#"&546322#"&546'2#"&546$%#%$%$%$%$X4$$%7$%$%$&$& #%#"&546322#"&54672#"&546$%$&&$%$%$%$=##&$$%$%$%$% ".$#"&546322#"&54672#"&546'2#"&546$%$&$%$%$%$%$%$X4$$%z$%$%$%$%$&$& #%#"&54632'2#"&5462#"&546$%$&%$%$%$%$=##&$$%$%z$%$% ".$#"&54632'2#"&5462#"&546'2#"&546$%$%$%$%$%$&%%#X4$$%$%$&y$%$%$%$& #/%#"&54632'2#"&54672#"&54672#"&546$%$&%$%$&$%$%$%$=##&$$%$%$%$%$%$% ".:$#"&54632'2#"&54672#"&54672#"&546'2#"&546$%$%$%$&$%$%$%$&%%#X4$$%$%$&$%$%$%$%$%$&p %2#"&5462#"&546%$%$&$%$Y$&$&z$%$% "$#"&546322#"&546'2#"&546$%#%$%$%$%$X4$$%{$&$&$&$& #%2#"&5462#"&546#2#"&546&%%$%$%$&%%$Y$%$&z$%$%$&$& ".$#"&546322#"&5462#"&54672#"&546$%$%$%$&$%$%$%$X4$$%{$&$&$%$%$&$& "%2#"&546&#"&5463272#"&546&%%$e$%$%$%$Y$%$&4$$%$%$% ".$#"&54632'2#"&54672#"&546'2#"&546$%$%$%$%$%$&%%#X4$$%$%$&$&$&$%$& ".%2#"&546&#"&5463272#"&546#"&54632&%%$e$%$%$%$e'%$&Y$%$&4$$%$%$%?%$&$ ".:$#"&54632'2#"&54672#"&5462#"&54672#"&546$%$%$%$%$%$&$%$&%%#X4$$%$%$&$&$&$%$%$%$&p #%#"&546322#"&54672#"&546$%$%>&$%$&$%$=$#&$$%$&$%$% ".$#"&546322#"&54672#"&546'2#"&546$%#%$%$%$%$%$%$X4$$%{$&$&$%$%$&$& #/%#"&546322#"&5462#"&54672#"&546$%$&>%$%$&$%$%$%$=##&$$%$&$%$%$%$% ".:$#"&546322#"&5462#"&54672#"&546'2#"&546$%$%$%$&$%$%$%$%$%$X4$$%{$&$&$%$%$%$%$&$& #/%#"&54632'2#"&54672#"&54672#"&546$%$&%$%$%$%$%$%$=##&$$%$%$%$&$%$% ".:$#"&54632'2#"&54672#"&54672#"&546'2#"&546$%$%$%$%$%$%$%$&%%#X4$$%$%$&$&$&$%$%$%$& #/;%#"&54632'2#"&54672#"&5462#"&54672#"&546$%$&%$%$%$%$&$%$%$%$=##&$$%$%$%$&$%$%$%$% ".:F$#"&54632'2#"&54672#"&5462#"&54672#"&546'2#"&546$%$%$%$%$%$&$%$%$%$&%%#X4$$%$%$&$&$&$%$%$%$%$%$&p %2#"&54672#"&546%$%$&$%$5$%$%$&$& "$#"&54632'2#"&5462#"&546$%#%$%$%$%$X4$$%$%$&z$&$& #%2#"&54672#"&546'2#"&546&$%$%$%$&%%$Y$%$&$$#&$%$& ".$#"&54632'2#"&546'2#"&54672#"&546$%$%$%$&$%$%$%$X4$$%$%$&$%$%$&$& #%2#"&54672#"&546#2#"&546&$%$%$%$%$%$5$%$%$&$&$&$& ".$#"&54632'2#"&546#2#"&5462#"&546$%$%$%$%$%$&%%#X4$$%$%$&$%$&z$%$& #/%2#"&54672#"&546#"&54632'2#"&546&$%$%$%$f$%$%>&$%$Y$%$&$$#&?$#&$$&$& ".:$#"&54632'2#"&546#2#"&54672#"&54672#"&546$%$%$%$%$%$&$%$&%%#X4$$%$%$&$%$&$%$%$%$&p #%#"&54632'2#"&5462#"&546$%$%>&$%$&$%$=$#&$$%$%z$%$% ".$#"&54632'2#"&5462#"&546'2#"&546$%#%$%$%$%$%$%$X4$$%$%$&y$%$%$&$& #/%#"&54632'2#"&546'2#"&54672#"&546$%$&>%$%$&$%$%$%$=##&$$%$%$%$%$%$% ".:$#"&54632'2#"&546'2#"&54672#"&546'2#"&546$%$%$%$&$%$%$%$%$%$X4$$%$%$&$%$%$%$%$&$& #/%#"&54632'2#"&546#2#"&5462#"&546$%$&>%$%$%$%$%$%$=##&$$%$%$%$%z$%$% ".:$#"&54632'2#"&546#2#"&5462#"&546'2#"&546$%$%$%$%$%$%$%$&%%#X4$$%$%$&$%$&y$%$%$%$& #/;%#"&54632'2#"&546#2#"&54672#"&54672#"&546$%$&>%$%$%$%$&$%$%$%$=##&$$%$%$%$%$%$%$%$% ".:F$#"&54632'2#"&546#2#"&54672#"&54672#"&546'2#"&546$%$%$%$%$%$&$%$%$%$&%%#X4$$%$%$&$%$&$%$%$%$%$%$&p "%2#"&54>#"&54632'2#"&546%$%$Y$%$&$%$Y$&$&4$$%$%$% ".$#"&54632'2#"&54672#"&546'2#"&546$%#%$%$%$%$%$%$X4$$%$%$&$&$&$&$& ".%2#"&54672#"&54672#"&546#2#"&546&%%$%$%$%$%$&%%$Y$%$&$4$$%$%$%$&$& ".:$#"&54632'2#"&54672#"&5462#"&54672#"&546$%$%$%$%$%$&$%$%$%$X4$$%$%$&$&$&$%$%$&$& !-%2#"&54672#"&546#"&5463272#"&546&%%$%$%$f$%$%$%$Y$%$&$4$$%$4$$%$%$% ".:$#"&54632'2#"&546#2#"&54672#"&546'2#"&546$%$%$%$%$%$%$%$&%%#X4$$%$%$&$%$&$&$&$%$& !-9%2#"&54672#"&546#"&5463272#"&546#"&54632&%%$%$%$f$%$%$%$e'%$&Y$%$&$4$$%$4$$%$%$%?%$&$ ".:F$#"&54632'2#"&546#2#"&54672#"&5462#"&54672#"&546$%$%$%$%$%$%$%$&$%$&%%#X4$$%$%$&$%$&$&$&$%$%$%$&p #/%#"&54632'2#"&54672#"&54672#"&546$%$%>&$%$&$%$&$%$=$#&$$%$%$%$&$%$% ".:$#"&54632'2#"&54672#"&54672#"&546'2#"&546$%#%$%$%$%$%$%$%$%$X4$$%$%$&$&$&$%$%$&$& #/;%#"&54632'2#"&54672#"&5462#"&54672#"&546$%$&>%$%$%$%$&$%$%$%$=##&$$%$%$%$&$%$%$%$% ".:F$#"&54632'2#"&54672#"&5462#"&54672#"&546'2#"&546$%$%$%$%$%$&$%$%$%$%$%$X4$$%$%$&$&$&$%$%$%$%$&$& #/;%#"&54632'2#"&546#2#"&54672#"&54672#"&546$%$&>%$%$%$%$%$%$%$%$=##&$$%$%$%$%$%$&$%$% ".:F$#"&54632'2#"&546#2#"&54672#"&54672#"&546'2#"&546$%$%$%$%$%$%$%$%$%$&%%#X4$$%$%$&$%$&$&$&$%$%$%$& #/;G%#"&54632'2#"&546#2#"&54672#"&5462#"&54672#"&546$%$&>%$%$%$%$%$%$&$%$%$%$=##&$$%$%$%$%$%$&$%$%$%$% ".:FR$#"&54632'2#"&546#2#"&54672#"&5462#"&54672#"&546'2#"&546$%$%$%$%$%$%$%$&$%$%$%$&%%#X4$$%$%$&$%$&$&$&$%$%$%$%$%$& %2#"&546#2#"&546&%%$&$%$$%$&$&$& !$#"&54632#"&546322#"&546$%$$%$&%%#X4$$%$4$$%8$%$& #%2#"&546#2#"&5462#"&546&$%$&$%$&$%$Y$%$&$%$&z$&$& !-$#"&54632#"&546322#"&54672#"&546$%$$%$&$%$&%%#X4$$%$4$$%z$%$%$%$& #%2#"&546#2#"&54672#"&546&$%$&$%$%$%$5$%$%$%$%$&$& !-$#"&54632#"&54632'2#"&5462#"&546$%$$%$%$%$&%%#X4$$%$4$$%$%$&z$%$& #/%2#"&546#2#"&5467#"&54632'2#"&546&$%$&$%$X$%$%>&$%$Y$%$&$%$&~$#&$$&$& !-9$#"&54632#"&54632'2#"&54672#"&54672#"&546$%$$%$%$%$&$%$&%%#X4$$%$4$$%$%$&$%$%$%$& #%#"&54632#"&546322#"&546$%$&$%$&%$%$=##&$##&$[$%$% !-$#"&54632#"&546322#"&546'2#"&546$%$$%$%$%$%$%$X4$$%$4$$%7$%$%$&$& #/%#"&54632#"&546322#"&54672#"&546$%$&$%$&?&$%$%$%$=##&$##&$$%$%$%$% !-9$#"&54632#"&546322#"&54672#"&546'2#"&546$%$$%$&$%$%$%$%$%$X4$$%$4$$%z$%$%$%$%$&$& #/;%#"&54632#"&54632'2#"&54672#"&54672#"&546$%$&$%$&?%$%$&$%$%$%$=##&$$#&$$%$%$%$%$%$% !-9$#"&54632#"&54632'2#"&5462#"&546'2#"&546$%$$%$%$%$%$%$&%%#X4$$%$4$$%$%$&y$%$%$%$& #/;%#"&54632#"&54632'2#"&54672#"&54672#"&546$%$&$%$&?%$%$&$%$%$%$=##&$$#&$$%$%$%$%$%$% !-9E$#"&54632#"&54632'2#"&54672#"&54672#"&546'2#"&546$%$$%$%$%$&$%$%$%$&%%#X4$$%$4$$%$%$&$%$%$%$%$%$& #%2#"&546#2#"&5462#"&546&%%$&%%$%$%$Y$%$&$%$&z$%$% !-$#"&54632#"&546322#"&546'2#"&546$%$$%$%$%$%$%$X4$$%$4$$%{$&$&$&$& #/%2#"&546#2#"&5462#"&546#2#"&546&%%$&%%$%$%$&%%$Y$%$&$%$&z$%$%$&$& !-9$#"&54632#"&546322#"&5462#"&54672#"&546$%$$%$%$%$&$%$%$%$X4$$%$4$$%{$&$&$%$%$&$& ".%2#"&546#2#"&54>#"&5463272#"&546&%%$&$%$X$%$%$%$Y$%$&$&$&4$$%$%$% !-9$#"&54632#"&54632'2#"&54672#"&546'2#"&546$%$$%$%$%$%$%$&%%#X4$$%$4$$%$%$&$&$&$%$& ".:%2#"&546#2#"&54>#"&5463272#"&546#"&54632&%%$&$%$X$%$%$%$e'%$&Y$%$&$&$&4$$%$%$%?%$&$ !-9E$#"&54632#"&54632'2#"&54672#"&5462#"&54672#"&546$%$$%$%$%$%$%$&$%$&%%#X4$$%$4$$%$%$&$&$&$%$%$%$& #/%#"&54632#"&546322#"&54672#"&546$%$&$%$&%$%$%$%$=##&$##&$$%$&$%$% !-9$#"&54632#"&546322#"&54672#"&546'2#"&546$%$$%$%$%$%$%$%$%$X4$$%$4$$%{$&$&$%$%$&$& #/;%#"&54632#"&546322#"&5462#"&54672#"&546$%$&$%$&%$%$&$%$%$%$=##&$##&$$%$&$%$%$%$% !-9E$#"&54632#"&546322#"&5462#"&54672#"&546'2#"&546$%$$%$%$%$&$%$%$%$%$%$X4$$%$4$$%{$&$&$%$%$%$%$&$& #/;%#"&54632#"&54632'2#"&54672#"&54672#"&546$%$&$%$&?%$%$%$%$%$%$=##&$$#&$$%$%$%$&$%$% !-9E$#"&54632#"&54632'2#"&54672#"&54672#"&546'2#"&546$%$$%$%$%$%$%$%$%$&%%#X4$$%$4$$%$%$&$&$&$%$%$%$& #/;G%#"&54632#"&54632'2#"&54672#"&5462#"&54672#"&546$%$&$%$&?%$%$%$%$&$%$%$%$=##&$$#&$$%$%$%$&$%$%$%$% !-9EQ$#"&54632#"&54632'2#"&54672#"&5462#"&54672#"&546'2#"&546$%$$%$%$%$%$%$&$%$%$%$&%%#X4$$%$4$$%$%$&$&$&$%$%$%$%$%$& #%2#"&54672#"&5462#"&546&$%$%$%$&$%$5$%$%$&$&$%$% !-$#"&54632'2#"&546#"&546322#"&546$%$%$%$e$%$%$%$X4$$%$%$&4$$%8$&$& #/%2#"&54672#"&5462#"&5462#"&546&$%$%$%$&$%$&%%$Y$%$&$$#&$%$&z$%$& !-9$#"&54632'2#"&546#"&546322#"&54672#"&546$%$%$%$e$%$&$%$%$%$X4$$%$%$&4$$%z$%$%$&$& #/%2#"&54672#"&5462#"&54672#"&546&$%$%$%$&$%$%$%$5$%$%$&$&$%$%$&$& !-9$#"&54632'2#"&546#"&54632'2#"&5462#"&546$%$%$%$e$%$%$%$&%%#X4$$%$%$&4$$%$%$&z$%$& #/;%2#"&54672#"&5462#"&5467#"&54632'2#"&546&$%$%$%$&$%$X$%$%>&$%$Y$%$&$$#&$%$&~$#&$$&$& !-9E$#"&54632'2#"&546#"&54632'2#"&54672#"&54672#"&546$%$%$%$e$%$%$%$&$%$&%%#X4$$%$%$&4$$%$%$&$%$%$%$& #/%#"&54632'2#"&546#"&546322#"&546$%$&>%$%$e$%$&%$%$=##&$$%$%##&$[$%$% !-9$#"&54632'2#"&546#"&546322#"&546'2#"&546$%$%$%$e$%$%$%$%$%$X4$$%$%$&4$$%7$%$%$&$& #/;%#"&54632'2#"&546#"&546322#"&54672#"&546$%$&>%$%$e$%$&?&$%$%$%$=##&$$%$%##&$$%$%$%$% !-9E$#"&54632'2#"&546#"&546322#"&54672#"&546'2#"&546$%$%$%$e$%$&$%$%$%$%$%$X4$$%$%$&4$$%z$%$%$%$%$&$& #/;%#"&54632'2#"&546#"&54632'2#"&5462#"&546$%$&>%$%$e$%$&?%$%$%$%$=##&$$%$%$#&$$%$%z$%$% !-9E$#"&54632'2#"&546#"&54632'2#"&5462#"&546'2#"&546$%$%$%$e$%$%$%$%$%$&%%#X4$$%$%$&4$$%$%$&y$%$%$%$& #/;G%#"&54632'2#"&546#"&54632'2#"&54672#"&54672#"&546$%$&>%$%$e$%$&?%$%$&$%$%$%$=##&$$%$%$#&$$%$%$%$%$%$% !-9EQ$#"&54632'2#"&546#"&54632'2#"&54672#"&54672#"&546'2#"&546$%$%$%$e$%$%$%$&$%$%$%$&%%#X4$$%$%$&4$$%$%$&$%$%$%$%$%$& ".%2#"&54672#"&5462#"&5462#"&546&%%$%$%$&%%$%$%$Y$%$&$4$$%$%$&z$%$% !-9$#"&54632'2#"&546#"&546322#"&546'2#"&546$%$%$%$e$%$%$%$%$%$X4$$%$%$&4$$%{$&$&$&$& ".:%2#"&54672#"&5462#"&5462#"&546#2#"&546&%%$%$%$&%%$%$%$&%%$Y$%$&$4$$%$%$&z$%$%$&$& !-9E$#"&54632'2#"&546#"&546322#"&5462#"&54672#"&546$%$%$%$e$%$%$%$&$%$%$%$X4$$%$%$&4$$%{$&$&$%$%$&$& "-9%2#"&54672#"&5462#"&54>#"&5463272#"&546&%%$%$%$&$%$X$%$%$%$Y$%$&$4$$%$&$&4$$%$%$% !-9E$#"&54632'2#"&546#"&54632'2#"&54672#"&546'2#"&546$%$%$%$e$%$%$%$%$%$&%%#X4$$%$%$&4$$%$%$&$&$&$%$& "-9E%2#"&54672#"&5462#"&54>#"&5463272#"&546#"&54632&%%$%$%$&$%$X$%$%$%$e'%$&Y$%$&$4$$%$&$&4$$%$%$%?%$&$ !-9EQ$#"&54632'2#"&546#"&54632'2#"&54672#"&5462#"&54672#"&546$%$%$%$e$%$%$%$%$%$&$%$&%%#X4$$%$%$&4$$%$%$&$&$&$%$%$%$& #/;%#"&54632'2#"&546#"&546322#"&54672#"&546$%$&>%$%$e$%$&%$%$%$%$=##&$$%$%##&$$%$&$%$% !-9E$#"&54632'2#"&546#"&546322#"&54672#"&546'2#"&546$%$%$%$e$%$%$%$%$%$%$%$X4$$%$%$&4$$%{$&$&$%$%$&$& #/;G%#"&54632'2#"&546#"&546322#"&5462#"&54672#"&546$%$&>%$%$e$%$&%$%$&$%$%$%$=##&$$%$%##&$$%$&$%$%$%$% !-9EQ$#"&54632'2#"&546#"&546322#"&5462#"&54672#"&546'2#"&546$%$%$%$e$%$%$%$&$%$%$%$%$%$X4$$%$%$&4$$%{$&$&$%$%$%$%$&$& #/;G%#"&54632'2#"&546#"&54632'2#"&54672#"&54672#"&546$%$&>%$%$e$%$&?%$%$%$%$%$%$=##&$$%$%$#&$$%$%$%$&$%$% !-9EQ$#"&54632'2#"&546#"&54632'2#"&54672#"&54672#"&546'2#"&546$%$%$%$e$%$%$%$%$%$%$%$&%%#X4$$%$%$&4$$%$%$&$&$&$%$%$%$& #/;GS%#"&54632'2#"&546#"&54632'2#"&54672#"&5462#"&54672#"&546$%$&>%$%$e$%$&?%$%$%$%$&$%$%$%$=##&$$%$%$#&$$%$%$%$&$%$%$%$% !-9EQ]$#"&54632'2#"&546#"&54632'2#"&54672#"&5462#"&54672#"&546'2#"&546$%$%$%$e$%$%$%$%$%$&$%$%$%$&%%#X4$$%$%$&4$$%$%$&$&$&$%$%$%$%$%$&XX& yJXX 2"&546.'!355!#>1x}_a _^X{|}|__XX "2"&5467&#"7327'654'1x-H\ag?=IaaI=@X{|}|e=YI``H@@I^`J+-& y(0'332653#"&5%32+#"=#"4;5432(+z^\~+ginnnn[jlYef4([[(f(0 !"5!"5((H(z^(0 !42!420((^Eq %5'?'S显ded|S33R3?+!7'&54?'&547637#"'&'"?7_   e2_ 3b?+ N@?, N@@+ N"GF@*.#!#"/7632!2.  F^ SE@ SE@?+7'&54?'&547637#"/"_2_ >+ V@?+ V@?+ V"G7#"/7632354632#"=    5 ZF@2& 2&@2& &@2& 2&@2& &@#5%7' ,  8&  #5 `X#5 `#5@#5 `5@WX3!VXWX3!%!!VX("h53x"}}"h35#53(((xJ-U}}R0%!&&q[R0 !'%!5^1_&&qJ"+-E %%'7-ؕ(||#%O%%%ؕ(%M'!!Mו)&XX 2"&5461xX{|}|Y!'7,Y%7''7,8x'+x'77+}}~񤤭LM%'7.L~QB'+WWUBs~~N?'77+WWUU ?s~~11::D> hD@D> iD@c"%#"&547%632'#"&547%632  \    \          6jvwG @S#"'4&54632RL_ OS#"/&54632RL S;26=4&+"+"&=46;2|!!!!(55((55(X###D55DD55DS,37632+"&=463!54&+"#"546;2!";254#"YR?;\6''6,!!+26'!!];Q*)).[4E+D3?""804EW"M"4,S!&546323632  wSS-4%+"&=%54&+"32+546;2;>3#"325*26'!!Dm'66'w!) 1;QQ+L;H804E ""-E44E " 6!)^4S8%4&+"32+4326;2#"54326!NT;d6l6'13!`"^X0F4EhK.S3#"&=463!#"=!";2D6''6U!!=4EE4h?""S *7#"543232#"&546;54&+!#"325|j6''6*.3%4!T`444EE45-"2"?S235#"54?632+"&=46;2+";265#"54,!  =  (55('6]V!!!,˜!  =  D55DD4"""1S%+"&5432;26=432'66'!!yE44E3""S12+;26=4&+"54;2+"&54632#"/,!!!V]6'(55( =  !"""4DD55D =  !S(.3#546?54#"#"54632732#"54;4&+3%>%!3NIj6']4!RZ)BP4(03[L9#8/ak4E1"=b+ S *72+;26=!546;2+"&=%4&+"!P!!w'66''66'!!`)""UE44EE44EA""=S!732+432732#"54;5!7!54&+|;dq6'd;#=![)4E|)"S-354&+";26=#"54;+"&=46;2#"54P!!!!Py'66''66'y7#""""$32#"'32+574&'#"&46;2#"54;4&+"3$$<+"//"2]:4))46']4!!!$$"/D/-2n24E1"F).3"54;5463!54&+"#"546;2#"54326=!"H '6,!!+26'13!!yE4?""804EK.""S84!#"54;'&54632654&#"32#"&5432>32y 6deXMV!7-W0]MB X C36VhY",M)$)\Y>O Z S8C32+;26=4&+"32+546;2+"';26=#"54;#!"&SyP!!!!Py'66''6 En$00$Z#""""$00S 3%#"3257#"'%632#"&546;.#"#"543224) `P@L2(5*26&* c7,c! v| ?`T"K5D57+!/1>"}fS S8;532+;26=%546;2#"54;54&+"+"'32#"&SmD!!w'66'mD!!'6 "5/O"" E44E-"" E4 m"2S *!#"&=46;2;26=#"54;-54&+"6''66'w!!Py'`!!4EE44E "")AE4 ""S/1#"!232+4&#!32#"&546;2#"54;4&!,6' 4!!31'60$oFm"l4EZ"".KE40>S(+%6=4&+"54;2+"&=46;2+"73'!5((55((5!ss1*#5DD55DD5#+ S ~S S8 S-"+"&532+;26=46;2#"54;4&#/C46'd;!/C46'd;!$A84EI"$A84E1"S8J!"&=4&+"32#"&=46;2;26=4&#"5432+"&=32+;26=#4C/!!7-'64C/!!7-'66'yP!!8A$"",ME48A$"",MjE4/D"# "l S S8C#!"&=32+;26=+"&=46;2#"54;54&+";26=#"54;$00$nE 6''66'yP!!!!PyZ>00>& r 4EE44E<$""""#S8 &7;5432#"543265#"&53'>=|!R04!j6'B5"iK."a4EIzOOQS#5373+"&=32+;267'#"S--(55(yP!!2llD55DA)"#.rqcS#732+34&+"32+546;2#|;d-\!!Py(55(0)w""*D55DS:7";26=#"54;+"&547.546;2#"54;54&+"32n!!Py'66'?'66'yP!!87h# ")AE44EK$*E44EA)" #4%S$%#"54326=#"&532+;5#"54;-7!j6'yP!RPyyM,"4EI"WS *32+"&=%54&+"32+546 ;2656''66'!!Py'b!!4EE44E "")AE4 ""S%%+"&=46;2'&+"26%;26="(55((55(7WhW!!HyD55DD55DA5FF##pD462"#m#"'%&54632| -_`'m"&54?62"'ԅ    C\  dd  Gam+"&=3;26=$0r0$)dm>00>%%Gam&  & 8)%";26=3+"&546$.B()#16VU)).'&>0A;<98)&  S62>32".54632\M(" A3*1?X )\;?"&#"354632#"&#"32+32#!"54;#"54;546323*'?,D 3'HHHSMM?," r22%;;5K 2%;O;5K OM\$(32#!"54;#"54;54632#"&#"#KSMM?,D 3'O;5K 2%;OG \%32#!"54;#"54;5463#"32+MtSMM?,XX&HH\O;5K 2%;G\:>%#32#!"54;#"54;54632#"&#"354632#"&#"3؄+B<=VJJ'HSMM?,5)||;., X?`2%MO;5K4k3A sI't43232>32#"& B&E,)I`.56Zq'<$7#"&546;3>7#"&546;#!"&5463B] I8 %""V ( AR )  I3*  TP  </4632>=#"&546;#"'32+547'&< :?5 ^| ;>5 ^| 8,~  d6| 8,~  f4|<!"&5463!2+#"&5  Y     ] < &74632#"&!2#"&5.'.'!"&546_   +JW   #'   PW %&%   <%2#!"&546;>=.'.'#"&5463T'- MS &%(  %& #>)NY   (&%%'   <i!"&54?>=!54632!  I  +  ~ u-+< !.'72!4?#"&5463hi (%&'- E*K h&%( )#>))*K  <!2#"&5.'.'!"&546P+JW   #' PW %&%   *2#"&5.'.'#+"&546;>7#"&5463}13   $'|+ $0)Z  !G2 %'# ˂  !65  H"54;543232#c3BW&1:W&3BW&&i1:W&&i<&<8&<'<0&&2<&<&@&&& @&V<8&<&<i& 0<&&<&<8&f,<&g42&18&<&3:&i&,@W&<0E&<E&<E&<i"%#"'&=4632>=#"&546; I  :?5 ^|   8,~  d6|o)-32=63232=>54&#"";264&# D=>PMX^GbP(?> E%D)"?2+E%D),L8EUA,,FF5E+Z- +  Q$iR D2 $      V  6   % V1  H       `N @ $  !" $& 'n*-d   2    Copyleft 2002, 2003, 2005, 2008, 2009, 2010 Free Software Foundation.Copyleft 2002, 2003, 2005, 2008, 2009, 2010 Free Software Foundation.FreeMonoFreeMonoMediumMediumFontForge 2.0 : Free Monospaced : 16-9-2010FontForge 2.0 : Free Monospaced : 16-9-2010Free MonospacedFree MonospacedVersion $Revision: 1.215 $ Version $Revision: 1.215 $ FreeMonoFreeMonoGNUGNUhttps://savannah.gnu.org/projects/freefont/https://savannah.gnu.org/projects/freefont/This computer font is part of GNU FreeFont. It is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.This computer font is part of GNU FreeFont. It 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 . As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.http://www.gnu.org/copyleft/gpl.htmlhttp://www.gnu.org/copyleft/gpl.htmlthng?@O<V9NormalNormalNormalNormalNormalnavadnoNormlne1KG=K9NormalNormalNormalNormalnyNormalnormalusisvidjsNormalemenengahNormlStandardNormalNormalNormaaliStandaardnormaloby ejnNormal=>@<0;5=Arrunta2   !"#$%&'()*+,-./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 { | } ~  softhyphenmicromiddotAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccentGcedilla gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflexKcedillakcedilla kgreenlandicLacutelacuteLcedillalcedillaLcaronlcaronLdotldotNacutenacuteNcedillancedillaNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracuteRcedillarcedillaRcaronrcaronSacutesacute Scircumflex scircumflexuni0162uni0163TcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9yoghtailuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233dotlessjuni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cepsilonlatinrevhookepsilonlatinrevcloseduni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276 omegacloseduni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289 upsilonlatinvhookuni028Cuni028Duni028Euni028Funi0290uni0291uni0292ezhcurluni0294uni0295uni0296uni0297uni0298uni0299 epsiloncloseduni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4dzcurluni02A6uni02A7tccurluni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AF hsuperior hhooksuperjsuperrsuper rturnsuperrturnrthooksuper Rturnsuperwsuperysuperprimemod primedblmod quoteleftmod apostrophe apostropherev ringhalfright ringhalfleftuni02C0uni02C1arrowheadleftmoduni02C3uni02C4uni02C5verticallinemoduni02C9 acutemodifieruni02CBuni02CCuni02CD gravelowmoduni02CFuni02D0uni02D1uni02D2uni02D3uni02D4uni02D5uni02D6minusmoduni02DEuni02DF gammasuperlsuperssuperxsuperglottalrevsuperuni02E5uni02E6uni02E7uni02E8uni02E9uni02EAuni02EBuni02ECuni02EDuni02EEuni02EFuni02F0uni02F1uni02F2uni02F3uni02F4uni02F5uni02F6uni02F7uni02F8uni02F9uni02FAuni02FBuni02FCuni02FDuni02FEuni02FF gravecomb acutecomb circumflexcmb tildecomb macroncomb overlinecmbbrevecmb dotaccentcmb diaeresiscomb hookabovecombringcmbhungarumlautcmbcaroncmb linevertnosplinevertdblnosp gravedblnospbreve_dotaccentuni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031ahorncmbuni031cuni031duni031euni031funi0320hooksubpalatnosphooksubretronosp dotbelowcombuni0324uni0325 commasubnosp cedillacmb ogonekcmbuni0329uni032auni032buni032Cuni032Duni032Euni032Funi0330macronbelowcmbuni0332uni0333tildeoverlaycmbstrokeshortoverlaycmbstrokelongoverlaycmbslashshortnosp slashlongnospringrighthalfsubnospuni033Auni033buni033cuni033duni033eoverscoredblnospuni0340uni0341perispomenigreekcmbuni0343dialytikatonoscmbypogegrammenigreekcmbuni0346uni0347uni0348uni0349uni034Buni034cuni034duni0350uni0351uni0352uni0353uni0354uni0355uni0356uni0357uni0358uni0359uni035anumeralsigngreeknumeralsignlowergreek ypogegrammeni questiongreektonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdanuxiomicronrho sigmafinalsigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosbetasymbolgreekthetasymbolgreekUpsilonhooksymbolUpsilonhooktonosUpsilonhookdiaeresisphisymbolgreekomegapi StigmagreekstigmaDigamma kappascriptrhosymbolgreekuni03f4uni03F5uni0400 Iocyrillic Djecyrillic Gjecyrillic Ecyrillic Dzecyrillic Icyrillic Yicyrillic Jecyrillic Ljecyrillic Njecyrillic Tshecyrillic Kjecyrillicuni040DUshortcyrillic Dzhecyrillic Acyrillic Becyrillic Vecyrillic Gecyrillic Decyrillic Iecyrillic Zhecyrillic Zecyrillic IicyrillicIishortcyrillic Kacyrillic Elcyrillic Emcyrillic Encyrillic Ocyrillic Pecyrillic Ercyrillic Escyrillic Tecyrillic Ucyrillic Efcyrillic Khacyrillic Tsecyrillic Checyrillic Shacyrillic ShchacyrillicHardsigncyrillic YericyrillicSoftsigncyrillicEreversedcyrillic IUcyrillic IAcyrillic acyrillic becyrillic vecyrillic gecyrillic decyrillic iecyrillic zhecyrillic zecyrillic iicyrilliciishortcyrillic kacyrillic elcyrillic emcyrillic encyrillic ocyrillic pecyrillic ercyrillic escyrillic tecyrillic ucyrillic efcyrillic khacyrillic tsecyrillic checyrillic shacyrillic shchacyrillichardsigncyrillic yericyrillicsoftsigncyrillicereversedcyrillic iucyrillic iacyrillicuni0450 iocyrillic djecyrillic gjecyrillic ecyrillic dzecyrillic icyrillic yicyrillic jecyrillic ljecyrillic njecyrillic tshecyrillic kjecyrillicuni045Dushortcyrillic dzhecyrillic Omegacyrillic omegacyrillic Yatcyrillic yatcyrillicuni0464YuslittlecyrillicyuslittlecyrillicYuslittleiotifiedcyrillicYusbigcyrillicyusbigcyrillicYusbigiotifiedcyrillicyusbigiotifiedcyrillic Psicyrillic psicyrillic FitacyrillicIzhitsacyrillicizhitsacyrillicIzhitsadblgravecyrillicizhitsadblgravecyrillic Omeghatitlo omeghatitlotitlocyrilliccmbpalatalizationcyrilliccmbdasiapneumatacyrilliccmbpsilipneumatacyrilliccmbuni0487uni048auni048buni048Cuni048Duni048Euni048FGheupturncyrillicgheupturncyrillicGhestrokecyrillicghestrokecyrillicGhemiddlehookcyrillicghemiddlehookcyrillicZhedescendercyrilliczhedescendercyrillicZedescendercyrilliczedescendercyrillicKadescendercyrillickadescendercyrillicKaverticalstrokecyrillickaverticalstrokecyrillicKastrokecyrillickastrokecyrillicKabashkircyrillickabashkircyrillicEndescendercyrillicendescendercyrillic Enghecyrillic enghecyrillicPemiddlehookcyrillicpemiddlehookcyrillicHaabkhasiancyrillichaabkhasiancyrillicEsdescendercyrillicesdescendercyrillicTedescendercyrillictedescendercyrillicUstraightcyrillicustraightcyrillicUstraightstrokecyrillicustraightstrokecyrillicHadescendercyrillichadescendercyrillic Tetsecyrillic tetsecyrillicChedescendercyrillicchedescendercyrillicCheverticalstrokecyrilliccheverticalstrokecyrillic Shhacyrillic shhacyrillicCheabkhasiancyrilliccheabkhasiancyrillicChedescenderabkhasiancyrillicchedescenderabkhasiancyrillicpalochkacyrillicZhebrevecyrilliczhebrevecyrillicKahookcyrillickahookcyrillicuni04C5uni04C6Enhookcyrillicenhookcyrillicuni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFAbrevecyrillicabrevecyrillicAdieresiscyrillicadieresiscyrillic Aiecyrillic aiecyrillicIebrevecyrilliciebrevecyrillic Schwacyrillic schwacyrillicSchwadieresiscyrillicschwadieresiscyrillicZhedieresiscyrilliczhedieresiscyrillicZedieresiscyrilliczedieresiscyrillicDzeabkhasiancyrillicdzeabkhasiancyrillicImacroncyrillicimacroncyrillicIdieresiscyrillicidieresiscyrillicOdieresiscyrillicodieresiscyrillicObarredcyrillicobarredcyrillicObarreddieresiscyrillicobarreddieresiscyrillicuni04ECuni04EDUmacroncyrillicumacroncyrillicUdieresiscyrillicudieresiscyrillicUhungarumlautcyrillicuhungarumlautcyrillicChedieresiscyrillicchedieresiscyrillicuni04f6uni04f7Yerudieresiscyrillicyerudieresiscyrillicuni0510uni0511uni0512uni0513uni051auni051buni051cuni051duni051euni051funi0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556ringhalfleftarmenianapostrophearmenianemphasismarkarmenianexclamarmenian commaarmenianquestionarmenianabbreviationmarkarmenian aybarmenian benarmenian gimarmenian daarmenian echarmenian zaarmenian eharmenian etarmenian toarmenian zhearmenian iniarmenian liwnarmenian xeharmenian caarmenian kenarmenian hoarmenian jaarmenian ghadarmenian cheharmenian menarmenian yiarmenian nowarmenian shaarmenian voarmenian chaarmenian peharmenian jheharmenian raarmenian seharmenian vewarmenian tiwnarmenian reharmenian coarmenian yiwnarmenian piwrarmenian keharmenian oharmenian feharmenianechyiwnarmenianperiodarmenianuni058A shevahebrewhatafsegolhebrewhatafpatahhebrewhatafqamatshebrew hiriqhebrew tserehebrew segolhebrew patahhebrew qamatshebrew holamhebrew qubutshebrew dageshhebrew siluqhebrew maqafhebrew rafehebrew paseqhebrew shindothebrew sindothebrewsofpasuqhebrewupperdothebrew alefhebrew bethebrew gimelhebrew dalethebrewhehebrew vavhebrew zayinhebrew hethebrew tethebrew yodhebrewfinalkafhebrew kafhebrew lamedhebrewfinalmemhebrew memhebrewfinalnunhebrew nunhebrew samekhhebrew ayinhebrew finalpehebrewpehebrewfinaltsadihebrew tsadihebrew qofhebrew reshhebrew shinhebrew tavhebrew vavvavhebrew vavyodhebrew yodyodhebrew gereshhebrewgershayimhebrewuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10f9uni10fbuni10fcuni13A0uni13A1uni13A2uni13A3uni13A4uni13A5uni13A6uni13A7uni13A8uni13A9uni13AAuni13ABuni13ACuni13ADuni13AEuni13AFuni13B0uni13B1uni13B2uni13B3uni13B4uni13B5uni13B6uni13B7uni13B8uni13B9uni13BAuni13BBuni13BCuni13BDuni13BEuni13BFuni13C0uni13C1uni13C2uni13C3uni13C4uni13C5uni13C6uni13C7uni13C8uni13C9uni13CAuni13CBuni13CCuni13CDuni13CEuni13CFuni13D0uni13D1uni13D2uni13D3uni13D4uni13D5uni13D6uni13D7uni13D8uni13D9uni13DAuni13DBuni13DCuni13DDuni13DEuni13DFuni13E0uni13E1uni13E2uni13E3uni13E4uni13E5uni13E6uni13E7uni13E8uni13E9uni13EAuni13EBuni13ECuni13EDuni13EEuni13EFuni13F0uni13F1uni13F2uni13F3uni13F4uni16A0uni16A1uni16A2uni16A3uni16A4uni16A5uni16A6uni16A7uni16A8uni16A9uni16AAuni16ABuni16ACuni16ADuni16AEuni16AFuni16B0uni16B1uni16B2uni16B3uni16B4uni16B5uni16B6uni16B7uni16B8uni16B9uni16BAuni16BBuni16BCuni16BDuni16BEuni16BFuni16C0uni16C1uni16C2uni16C3uni16C4uni16C5uni16C6uni16C7uni16C8uni16C9uni16CAuni16CBuni16CCuni16CDuni16CEuni16CFuni16D0uni16D1uni16D2uni16D3uni16D4uni16D5uni16D6uni16D7uni16D8uni16D9uni16DAuni16DBuni16DCuni16DDuni16DEuni16DFuni16E0uni16E1uni16E2uni16E3uni16E4uni16E5uni16E6uni16E7uni16E8uni16E9uni16EAuni16EBuni16ECuni16EDuni16EEuni16EFuni16F0uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBClenisprosgegrammenipsili perispomenidialytikaperispomeniuni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCC psili_varia psili_oxiauni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDB dasia_varia dasia_oxiadasia_perispomeniuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECdialytika_variadialytika_oxiavariauni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCoxiadasiaenquademquadenspaceemspaceuni2004uni2005uni2006uni2007uni2008 thinspaceuni200Auni200B afii61664afii301afii299afii300 hyphentwo hyphennobreak figuredash horizontalbardblverticalbar underscoredbl quotereverseduni201Ftrianglebulletonedotenleadertwodotenleaderuni2027uni2028uni2029uni202Auni202B afii61573 afii61574 afii61575uni202Fpertenthousandminutesecond primetriple primereversed primedblrevprimetriplerevuni2038uni203B exclamdbluni203Duni203Euni203Funi2040uni2041uni2042uni2043uni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Funi2050uni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni2064 zerosuperioruni2071 foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperioruni207Auni207Buni207Cparenleftsuperiorparenrightsuperior nsuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferioruni208Auni208Buni208Cparenleftinferiorparenrightinferioruni2090uni2091uni2092uni2093uni2094 colonmonetarycruzeiroliramillnairapesetarupeewon afii57636dongEurouni20ADuni20AEuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5leftharpoonaccentrightharpoonaccentuni20D2uni20D6uni20D7uni20DBuni20DCuni20DDuni20DEuni20DFuni20E0uni20E1uni20e2uni20e3uni20e5uni20e6uni20E8uni20eauni20ebuni20ECuni20EDuni20EEuni20EFuni2100uni2101uni2102uni2103CL afii61248uni2106uni2107scrupleuni2109uni210Dplanck planckover2piuni2110Ifrakturuni2112 afii61289lbbaruni2115 afii61352 recordright weierstrassuni2119uni211ARfrakturuni211D prescription servicemarkuni2121uni2124uni2126uni2127uni2129uni212Auni212B estimateduni2132alephuni2136uni2137uni2138uni2139uni213auni213buni2141uni2142uni2143uni2144uni214buni214duni214eonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217auni217buni217cuni217duni217euni217f arrowleftarrowup arrowright arrowdown arrowboth arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7 arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBharpoonleftbarbuparrowleftbothalfuni21BEuni21BFarrowrighttophalfarrowrightbothalfuni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CF arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblbothuni21D5arrowsquigglerightuni21e6uni21e7uni21e8uni21e9uni21f3 universaluni2201 existentialuni2204emptyset Delta.mathgradientelement notelementuni220Asuchthatuni220Cuni220Duni220e coproductuni2213uni2214uni2215 backslashmath asteriskmath ringoperatorbulletoperatoruni221Buni221C proportional orthogonalangleuni2221uni2222dividesnotbarparallel notparallel logicaland logicalor intersectionunionuni222Cuni222Duni222Euni222F volintegral clwintegralclwcontintegraluni2233 thereforebecauseratio proportiondotminusexcessgeomproportion homotheticsimilar revsimilarlazysinvsine wreathproductuni2241uni2242uni2243uni2244 congruentapproxnotequaluni2247notalmostequaluni224auni224Buni224cequivasymptoticgeomequivalentuni224Funi2250uni2251uni2252uni2253 colonequal equalcolonuni2256uni2257uni2258uni2259uni225Auni225buni225cuni225duni225euni225f equivalenceuni2262uni2263uni2266uni2267lessnotdblequaluni2269muchless muchgreateruni226Cnotequivasymptoticuni226Euni226F notlessequalnotgreaterequaluni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279precedesfollows precedesequal followsequaluni227euni227f notprecedes notfollows propersubsetpropersuperset notsubset notsuperset reflexsubsetuni2287 notsubseteqlnotsuperseteql subsetnoteqlsupersetnoteqlmultisetmultiplymultiset unionmulti squareimagesquareoriginal subsetsqequalsupersetsqequalintersectionsqunionsq circleplus circleminuscirclemultiply circledivide circledot circleringcircleasterisk circleequal circlevertbar squareplus squareminussquaremultiply squaredot turnstileleftturnstilerighttackdown perpendicular assertion truestate satisfiesforces forcesbar forceextr notturnstile notsatisfynotforcenotforcesextraprurelscurel triangleright trianglelefttriangleftequaltriangrightequalorigofimageofmultimaphermitconjmatrixintercaluni22bbuni22bcuni22bduni22BE righttriangleuni22C0 narylogicaloruni22C2 naryunion diamondmathdotmathuni22C6uni22c7bowtie NameMe.8905 NameMe.8906 multiopenleftmultiopenrightuni22cduni22ceuni22cfuni22d0uni22d1uni22d2uni22d3fork equalparallellessdot greaterdot verymuchlessverymuchgreaterlessequalorgreatergreaterequalorlessuni22dcuni22dduni22deuni22dfpreceedsnotequalfollowsnotequalnotsubsetsqequalnotsupersetsqequalsqimageornotequalsqoriginornotequallessnotequivlntgreaternotequivlntpreceedsnotsimilarfollowsnotequivlntuni22eauni22ebuni22ecuni22edellipsisverticaluni22EFuni22F0uni22F1uni2300houseuni2303 caretinverteduni2305perspcorrespond ceilingleft ceilingright floorleft floorrightuni230Cuni230Duni230Euni230F revlogicalnotuni2312uni2314uni2315 propelloruni2319uni231Cuni231Duni231Euni231F integraltp integralbtfrownuni2323uni2324option deleterightclear angleleft angleright deleteleftuni232cuni2336uni2337uni2338uni2339uni233auni233buni233cuni233duni233euni233funi2340uni2341uni2342uni2343uni2344uni2345uni2346uni2347uni2348uni2349uni234auni234buni234cuni234duni234euni234funi2350uni2351uni2352uni2353uni2354uni2355uni2356uni2357uni2358uni2359uni235auni235buni235cuni235duni235euni235funi2360uni2361uni2362uni2363uni2364uni2365uni2366uni2367uni2368uni2369uni236auni236buni236cuni236duni236euni236funi2370uni2371uni2372uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237auni237cuni237duni237euni237funi2380uni2381uni2382uni2383uni2384uni2385uni2386uni2387uni2388uni2389uni238auni238buni238cuni238duni238euni238funi2390uni2391uni2392uni2393uni2394uni2395uni2396uni2397uni2398uni2399uni239auni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23AFuni23B0uni23B1uni23B2uni23B3uni23b4uni23b5uni23b6uni23B7uni23BAuni23BBuni23BCuni23BDuni23beuni23bfuni23c0uni23c1uni23c2uni23c3uni23c4uni23c5uni23c6uni23c7uni23c8uni23c9uni23cauni23cbuni23ccuni23cduni23ceuni23cfuni23dauni23dbuni23deuni23dfuni23e2uni23e3uni23e4uni23e5uni23e6uni2400uni2401uni2402uni2403uni2404uni2405uni2406uni2407uni2408uni2409uni240auni240buni240cuni240duni240euni240funi2410uni2411uni2412uni2413uni2414uni2415uni2416uni2417uni2418uni2419uni241auni241buni241cuni241duni241euni241funi2420uni2421blankuni2424uni2440uni2441uni2442uni2443uni2444uni2445uni2446uni2447uni2448uni2449uni244auni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469 lthorizformuni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000 ltarcdnrtformuni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblock shadelightshade shadedarkuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxsquareuni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551 filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7 invbullet invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5 openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EE largecircleuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2605uni2606uni2607uni2608uni2609uni2610uni2611uni2612uni261auni261buni261Cuni261duni261Euni261funi2626uni2628crossuni262Euni262funi2630uni2631uni2632uni2633uni2634uni2635uni2636uni2637uni2639 smileface invsmilefacesununi263duni263euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264auni264buni264cuni264duni264euni264funi2650uni2651uni2652uni2653spade heartopen diamondopenclubspadesuitwhiteheartdiamond clubsuitwhiteuni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2680uni2681uni2682uni2683uni2684uni2685uni27c0uni27c1uni27c2uni27c3uni27c4uni27c5uni27c6uni27c7uni27c8uni27c9uni27cauni27ccuni27d0uni27d1uni27d2uni27d3uni27d4uni27d5uni27d6uni27d7uni27e4uni27e5uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27f2uni27f3uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2A00uni2A01uni2A02uni2A03uni2A04uni2A05uni2A06uni2A1Duni2A3Funi2b00uni2b01uni2b02uni2b03uni2b04uni2b05uni2b06uni2b07uni2b08uni2b09uni2b0auni2b0buni2b0cuni2b0duni2b12uni2b13uni2b14uni2b15uni2b16uni2b17uni2b18uni2b19uni2b1buni2b1cuni2b1duni2b1euni2b1funi2b20uni2b21uni2b22uni2b23uni2b24uni2b25uni2b26uni2b27uni2b28uni2b29uni2b2auni2b2buni2b53uni2b54uni2e17 lowcircumflex colonmodifier shortequalsSaltillosaltillouniA900uniA901uniA902uniA903uniA904uniA905uniA906uniA907uniA908uniA909uniA90AuniA90BuniA90CuniA90DuniA90EuniA90FuniA910uniA911uniA912uniA913uniA914uniA915uniA916uniA917uniA918uniA919uniA91AuniA91BuniA91CuniA91DuniA91EuniA91FuniA920uniA921uniA922uniA923uniA924uniA925uniA926uniA927uniA928uniA929uniA92AuniA92BuniA92CuniA92DuniA92EuniA92FEngsamiffffiffllongs_tuniFB1DuniFB1EyodyodpatahhebrewayinaltonehebrewuniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29shinshindothebrewshinsindothebrewshindageshshindothebrewshindageshsindothebrewalefpatahhebrewalefqamatshebrewalefdageshhebrewbetdageshhebrewgimeldageshhebrewdaletdageshhebrewhedageshhebrewvavdageshhebrewzayindageshhebrewtetdageshhebrewyoddageshhebrewfinalkafdageshhebrewkafdageshhebrewlameddageshhebrewmemdageshhebrewnundageshhebrewsamekhdageshhebrewpefinaldageshhebrewpedageshhebrewtsadidageshhebrewqofdageshhebrewreshdageshhebrewshindageshhebrewtavdageshhebrewvavholamhebrew betrafehebrew kafrafehebrew perafehebrewaleflamedhebrewuniFFFD @H]-./0abcdpqrsijklBCJKLMTU\]denovwFGGHHIJKUVXYbcefrsuv !"'((),--.      dgrekhebrlatn.ISM $LSM $NSM $SKS $ccmp ccmp&dlig.liga4locl: (082tP6",bqcr28RX ,>Pbt     .     / $(,28DHLRX&8Z| IGEC ca_] usqo JHFD db`^ vtrp SQOM TRPN   BHNTZ`flrx~     @\grekhebr latn*markmarkr~ $*06<BHNTZ`fl):D)10 "*.028>BGIJVWXcdestuV\bhntz 4"JJ*. %D**&f  F&\  -- ! "(.4:@F*FN (RX^djpv| $*06< 3631>36363>303,4^363636363.43,36363.3,4/3.3.3.3.3':##[[.L'#&-3(3u $=DDFFHHLMOORR XX!"bc#qr%' jk "%& !(((*+ &,28>DJPV\bhntz&/89,,YȷDarkRadiant-2.14.0/install/ui/fonts/FreeSans.ttf000066400000000000000000025633301413722237400214440ustar00rootroot000000000000000FFTMT GDEFb2? d8GPOS7 THhGSUBt j3rOS/2)s@VcmapTcvt 6i fpgm/f\egasp d(glyf s&$headO<6hheat$hmtx+!Rkern_loca8Li$Rmaxp55 name! ULpostf k,prep\nchRX_< Ȼ Ȼ r+Zr:du/]1 B0GNU @  8,`XX|c4,,!y40MIM&(H2WM.W,+,f,", ,,#,+,.,%,&nnH-H2H2,M"O0YZcZ ,SdO,PAKL &[ &]0cU c@,,M,*,6,,(,,FB:DAF,F,$,6,ME",A N+dNHKz,4,,C, d,+Mr%-H(M.M^H2^^M\,A0WM'^Em(.e=e=o,` 0ZZZZG L & & & & &H_ UUUU [cC,*,*,*,*,*,**,(,(,(,(),$,F,$,$,$,$,$H2c,A,A,A,A+6,*,*,+0000Y,Z,(Z,(Z,(Z,(Z,( ,, ,, ,, ,,S,F',_TdBO::,F@,PB,PoD,PD,L,FL,FL,F.l,F &,$ &,$ &,$+$]ME]ME]M10"0"0"0"ccc U,AU,AU,AU,AU,AU,A  ccc,V0P,6T00?0O,64&Z/0c", yFBYO:Y0A@,F &&5$&$J0,6[0"cMccUpA U ,cc c  ",",@,6drdH2|YY  P PDLL F,* &,$U,AU,AU,AU,AU,A,(,*,* * ,, ,,O: &,$ &,$c 5YY  ,,v[L,F,* * c,,*Z,Z,({| &, &,$]M]M-U,U,A0"c S,Fc,*Z,( &,$ &,$ &,$ &,$ ,*2;,6 `Z,(,($("$"!T,,, ,F,F,F BDjDAFAFAFRTF7F,$ $.M M t MEMETs"6"6"+*5Tr"B , 5(4,/,/,/0 &F"o.F&&FZ,/,/ DUD-:wM M &g(J11WWWMMOMMMMM3M3MMMMM\MdMMSM#MgMgMzM{M M M M MMsM=M9MMMM:MMN(((((HHMMM1M3M.MMG:M nM M M=&1=)2,+5w XU}>e9CC!2h:Qk|;nn1LnMsMV<qAM OFR 5ZtS &dOAKLvA &P[t(c 4 4 T0'$382T024$'&$ (8<'< "$k92#"l"2.; *$2"$2$D64M l49$,,69 &H0PPFP00d8SStPPe SPPFP,"P 0PPxP!NPP.PP0ce ]0Pr8>PSPIjPP*P(&&&FFZ#&$7F7FFjF.F&&-FAF&$a&BF0FFF F$F%&%&AF&$F-UFAF7F.F<* 0&& PGF P<FYPFM  OPF >*"PFPF GP:FPF"P(F*0&0&c B L ~0 0v<0vPF/$/$P PF  P.FP;Fv<0ePwFP(&(& o"P#&/ /  0$c (P7FP7F.&& 0&& 0&&*$e e e r80FPFjPF0" &?$sPFFF<<F2FFFAFFTF#FI2A(<S- [(FBA-FFA-Fo<F-x-(MO5MMM MAA'F<#9A"AE#aF'A8F9#(FFF#)FF#8A(,AF#'A#AA& A!AHAoA(A(#-FtAB,#* FZM  fn @&y>Fn:O:V&n?>_'o?`=:&&9X%o?m0>z3_=K$?98? N3^>#%<#><8,X7X8423,jjjrTrW>>>#9>kkmIdsXakk>>~Ikc,}  >1?<F$X ;E X  Nl8c`4*Q(88B, 2T|L\3^sG,  c,rqxqvs?Z?q?X?d?N?e?e?"??mj.,8?Xc,"=4/XtD#s#e:+ Y3?- R5w@'/6J/d )RtAM191`$yy(! m+ew_0\@eYZzuzvqpelrf]B-" !|!nn@M <R8 .b obYfz #hYs lN;l?l%5 <, &-r)t.O_) aef K<l<</<X<S<<}Pn<U<<Z<[PPK<o<YP<O<W<,<[<NP<T<P<TPx<Q<tKoxv<N55\5y* $5}5 5O5Gg 32 5.p5  #B\5x]J J x$2r553n  , n q#4275Fi555'[ %$m\$J Y2522222222222222222r2r2r2r22r2r2r2r222[22I2I222222!2222222*22222222222222222222r22r2r22r22222L2222222222222222222222222222W2W2W2W2P2P2P2P2P2b22P2`2222222222222222i2i22222P2P2P2P2P2b22P2`2`222`22`2a22s222a22q22i2i2P2P2P2P2P2b22P2`2P222P22P2P22b222P22`22Z22Z2K222222222222d2<2<22<222222222222222d2<2<2d2<2d22<22<2<22<222p22 22 222p222l222l22l2l22}222l22|2252m2522;2;2[222h2h2>2>2>2V2V2V2V222222222222222R2222222|222222222222222222t2222>2>2>2>2>2>2,2,2,2,2,2,222W2j2p2121212128282828222222222222222P222222922222 2 2 2 2 2 2 22P22k2k2k2 22k2k22P2P2P2P22222 2 2 222 2 2 222222222222222222~2~2~2~2~2~2~2222222P2P2P2P2222212121212v2v2v2v2222222222222222222222222>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>22222222222222222222 2P2P22222222222>2>22222222>2>2>2>2>222>2>2>2>2>2>22222>2>2>2>2>2>2a2a22222222222>2>22222>2>2>2>2>2>222>2>2>2>2>2>2>2>22222>2>22222 2>2>22222>2>2222222222262r2k2 2$2"222"2222 2 222 2 222222r22222P22P22222>2>2222,282|282|2282282222222 22i2i2Z22622?2?2222,!,22Z22222P2(22v22222222?2c2,*O,6O,6O,60Y,Y,Y,Y,Y,Z,(Z,(Z,(Z,(Z,(cZ ,,S,FS,FS,F,S,FO:O:O:,P:,P,P,PAKAFAKAFAKAFL,FL,FL,FL,F &,$ &,$ &,$ &,$[,6[,6]ME]M;]M;]M0"0"0"0"0"ccccU,AU,AU,AU,AU,A   ccc,F+*,*,*,*,,*,*,*,*,*,*,*,*Z,(Z,(Z,(Z,(,Z,(Z,(Z,(SN_9 &,$ &,$ &,$ &, &,$ &,$ &,$&5$&5$&5$&5$&5$U,AU,AUpAUpAUpAUpAUpA    T0T0T0T0T0T0T0T0''''''rco$$$$$$$$ UU,8BA"$"$"$"$"$"$w22222222_$$$$$$$$oT0T0''$$8"$"$22$$T0T0T0T0T0T0T0T0><U\C;$$$$$$$$PUKN$$$$$$$$jh5&)T0T0T0T0T0T0T0@MtMtM M $$$$$AkSRBM  xDQM 2222929222  1;""M $$$$$AAP.4MRMvM,dM.M.,,8K6kA@A@M0M1M/M1,&,&^2^FWstW P 111111x 11nb,|,M,;;#H 5NNyNXMBMB|,.0 (?;(z<;$<W1<<<<\<<<^*^^^^^^^^ ^ ^o^Nh-^^E^^^^^^^^^^ ^ ^o^LknhE ^g&Y c,,AFG%[]o2e<6$c:"'Z[! 6wxx)2142wrCP)0Bf)[)0,30@00+(!g.,<V):^)L<rX4[ &R]B]]"c 4 O"o,(2-)L)8:P:V&Cd$:0kFRP ,,P,P $eEeeEeeeeEeeEeeeeEd,dBddd,P0YAKBBBB    BD,AF [-1[-    0-  |8# -|8{  ['-[,['D ,+Z7  H7H7H-H7H7-7i7i$)H(H2H2(H]HK 8KT[[((,ddd,__HKHK=K%H3H*H(H(H2H2H2HIHI*H2H2H(H(H-H---*H-H-H-H-HHH-H-H(H(H-H-H7H7H7H7HH6HH6(|4|P|B|B|E|E+++++LXL`L|>|>|>|>==W@>H(H(|B|B7'bH_I,,d;;II(((,,XXX77, ? 3 3 G = G 5 =         O Y Y Y Y ? G Q ?  D [      Y, k##########|||||||k 2 2 2 2 2 2 2 2 2 2qq d d  |#|#|^|^{^{]|#|#|^|^{^{]$$$ ' ' ' ' ' ' ' ' ' ' ' ' ' ^ 2 2 2 '  ' ' '^2 2 2 2 2 2|#|#|#r 2 2 2 2 ' ' ' '        Br"#S"#r"#S"#M7+777By<2"'''==H(`(h8h8HHH 000HHT6HH>HHh8h8$H0<H 4H6X:0x<D6 HHZD6&?|6h8h7H <8h8h786H8H0H<<6H<6HM.FFF F FRFFFFFFFFF F F:F:F F FFFXFXFXFXFFFFF8FzFeFFFF FHF FFHFFFFFF FFeFFFFFFFF\F6F#FSFSFFLFFFFFdFdFHFF FFFFFwFwFF1FFwF8FzFF FFF FFFFF|FFF@F@FFF@FFFFFFSFzFFwF/FFPFFFFFFyFyF-FBFqFwFPFFFFFwFwFFFF{F FIFFF F FFiF/FRFFBFF F4F4F(F`FF(FeFFLFLF,F,F,FFFF`FvFFFFFFFFFFFFFF FFFSFFlFFFFYF FFwFFFFFFFFFXFXF>FF>FFF\FFFF4FF%F^FFFF-FFFFyFFFFFFFFFOFFlFlFFFFFF-F-FFFF!FFF\FjFFF#F#F#F#FFFFFFFFFFlFzF&F9FF FFnF,FFCFF+FFfFFFFFFFF0FFFFFFFSFFFFFwF0FMVV222{2;,,^LL)&NS'pA/iM' 24 G&-!# T 5 0MK/:w#2"5xFxY|O   } +8:8:r+++++KG]q!:!VwX X  ,1`?n?++!-Z-PP@@  nmq  Dh~3   gHk[[+yy+.VX_HjjezSCO O/Hhh0%%   .F:+O} ?--  +pq+t+ rq    ? q  x _CoJ$3* CGt:+ O3} ?- Hy+ yyWaa n2FHcq8|ULL' a\vuo?]c')B'iN)g'>>|)C|2bxjjrtJ**jUU  5]Jk5])u# = '!|||LLLU,LD[8c?z]s*U QY)*; b(.&bNE9EoE8c(EE9E3E[b& A  r H uK;,(v,/./6h[Q*^KXh[[u2 +*)L\33\ ,G:<01,T$q0`.^)V2[/X1*K*Kb obYfz #hYs lN;l?p% a T 1 @ > [ B g RQ1rr{uojmugZ hZ]Cl a b _ aL AAA AA:18K%z:P&h? 9R%i?%#H2<<<<:::O:V&n? _ `=&&9X%m0z3_=?98?N3^>#%<#>O:&98?H  a?\J.d>-a|,dqV 2C#I C oM}#pn_C1a\<K9I&776OF09057^1F?:9Y=&259\FV9#OHI+N8d03DN/0r7HJ1<n6A8L.`O N7777777H67777&77@7u77M7A7R777 77777b77,D, D~37ouz~asV_ ,J 9 N U r    ( 0 3 6 9 < B H M Q \ ^ u EMWY[]} d q ! !$!3!"I"M"P"b"e"k"s"}"""""""""## ###*##$$$i%K%l%&,&g&o'@** -e-o.+6<>ADO $7Ptz~p|1Ya0 < P X y     * 2 5 8 < > G K Q Y ^ f  HPY[]_ p t !! !&!5!>!A!J!M!S!!!!!!!!""""""" "#"4"<"@"M"P"`"d"j"m"z"""""""""### #)##$$`%%P%&,&`&i'@** -0-o.8>@CFsqgYQO93" $"! @4uig]WOLE#"!  {vsgfjh X ~b~$377Potuzz~~0\ceagps|IM1VSY_ya ,0J 9$ < N^ P Uq X rw y                       ( * 0 2 3 5 6 8 9 < <" > B# G H( K M* Q Q- Y \. ^ ^2 f u3 C F O R h o q v      5      E HM 2PW 8YY @[[ A]] B_} C b      d p q > t @ [ ` n t u !! ! !$ !&!3 !5!< !>!? !A!D !J!K !M!N !S! !! !! !! !! !! !! !! !! """ #"" $"" &"" /"" 8"" :" " <"#". ="4"4 I"<"> J"@"I M"M"M W"P"P X"`"b Y"d"e \"j"k ^"m"s `"z"} g"" k"" u"" v"" "" "" "" "" "" ## ## # ## #)#* ## ## $$$ $`$i %%K %P%l)%%F&,&,&`&g&i&o'@'@*** * -0-e-o-o..+A68<>>@ACDFO1Vd       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a rdei xpk vj Y ;s \ ]gw $ 1 /M El|6cn 9T U 'm} b :  k   y f|qxyzz}{g,K*PXJvY#?+X=YK*PX}Y ԰.-, ڰ +-,KRXE#Y!-,i @PX!@Y-,+X!#!zXYKRXXY#!+XFvYXYYY-, \Z-,"PX \\Y-,$PX@\\Y-, 9/- , }+XY %I# &JPXea PX8!!Ya RX8!!YY- ,+X!!Y- , Ұ +- , /+\X G#Faj X db8!!Y!Y- , 9/ GFa# #JPX#RX@8!Y#PX@e8!YY-,+X=!! ֊KRX #I UX8!!Y!!YY-,# /+\X# XKS!YX&I## I#a8!!!!Y!!!!!Y-, ڰ+-, Ұ+-, /+\X G#Faj G#F#aj` X db8!!Y!!Y-, %Jd# PX<Y-,@@BBKcKc UX RX#b #Bb #BY @RX CcB CcB ce!Y!!Y-,Cc#Cc#-KPXYF+X!YKRX!Y+\X E+D E+D E+Fv+DY+ R]]((((T$ 8tdLXl8 P H L | , ` |8t4Xt$x <4$xpPTp$88x0Pl,tt  , | !!!t""""""##,#D#$0$H$`$x$$$$$%@%X%p%%%%&&x&&&&&'4''''(((0())))))**(*@***+ +$+<+T++,,,,D,\,t,,,--(-@-.P.h......//(/@//0 0$0<0T0l001x111112 2$2<2T2l2223<3T3l33334 4X4p44444555L5d5|555556 6@6p666667777788 888P8h89|99999: :$:<:T:l;8;<< <== =8=l===>>>4>L>d>|>>???????@@(@@@X@p@@A AABBdBBCHCCD DtDDEE EEF<FGGGGH@HHI$IIJJ`JK8KLLLMDMN<NpNO,OpOPPXPPQ$Q|QRRPRS SXST4TTUU U\UlUUUUUUVV,VDV\VtVVVVVWW$W@W`WWWWXXX4XPXpXXXY8YYYZZ Z[ [$[<[T[l[[[[[[\`\x\\\\\]],]D]\]t]]]]]^^^4^L^d^|^^^^^_ _$_<_T_l____`L```a<aaab$bbbcc,cDc\ctccccddpddeeefdffglgghiiDij`jkkkllllmmtmmnLn`no<ooppppqXqhq|qqr,rxrrs(s<st tdtuu0utuvDvvvvvwDwwxxy,y@yyyz4zz{({<{X{| |||}~<~D|,HDXl(8Px X8\p(<PpX4L`t Hh$8L`|<\$8L`8Th|$8XDp88L`tL,@Tl0H||4H\0L` 4H\p (\l $4D\thx8H|h,D\td,Ll|4<X0H`x \0H`4DTl|LhxDH D(\ ` lH\8(8\l<pp td| |$<Tl@P` ,Ld|8x0È,Ĉ8hŘ8ƌx@tȼ@ɀɼ(\ʐt ̤$͘H΄θ4lϤdФ Ѭ@ӄӠӸ$t\՘D|ָ 8Ph״l؄؜4Ld|ٔ٬ټ,D\l|ڔڬ $<Tlۄۜܤ hDވ8ߤTT<( |\h,(pL0T@8Hp$Hd h` p$lP$`dH0|0x , X|,D\x0HdD,`@ (X0(t@h4d        0   P   0 l   4$hPD,dTxP$P(X, 4|8T $  !!"\"t#`$$%&@&'''(()*,**+p+,D,-,-..\.t./,/00T011,12D2\23<344455<5560667X77788d889(9D9d:l:::;$;l;;;;;;<<,<=>?\?x??@,@A ABBBC<CDD D8D`DEEEFXFG0GH HI IJKLLLM\MNO0PPQQQRSSTlTUV\VWTWXXY$YpYZ@Z[4[\\x\]H]^P^_(__`0`h`a,aabb@bcc$c@c\cdLdehefgh`hxhi@ij,jkXkltmmmnpnno(oppHpq qqrrsdttuTuluuuvlvw wwx|yypzzX{{||}$}~0~xH8Xlx,X|PX(X4 t H<LX,|xx H0H`@00d|p@PPLd t$l l$L8\4(DX<l<X$D |4 ÄT\ŰxxȄ0ɔʨ`̄pdlЄ$,0Ӵ0ՠ,xHذ p ژڬۈ۬@ܴh0ބ޼(ߘH<P<00dh8dPdx0Tl,p\<D|L $HT$8Pp,D\t4Tt(Hd0H`4Lt ,D\,D\|@\$<x0H`x(@Xx   8 P     ` x     ( @ X p        0 H h     8 P    4Ll @`x @`(@`x0Hh(Hh$x$<4Ld|D,h $<Tl4T$<l$<Tl ,Ld|l`   x  !h!!"","D"\"t"""""##,#D#\#t#$$0$X$p$$$$% %$%<%T%l%%%%%& &$&<&T&l&&&''<'x''( (L(d((()0)H)))**4*d**+ +8++,,,<,\,--t-.4.L.d../@/X/x//0 0$0<0T01,112L223 3`3x334,4\4l444445 5,5D55606677h7778 8$8D8\8|899:`:;<;;<@<<=0=H====>,>`>>>??4?L??@@4@h@@@AADAAB BhBBBCC`CCD,D`DDDDE,E`EEEEF(FXFFFGPGGH HLHIITIIJJ J8JxJKKLKdK|KLLPLLLM M,MMNHNOLOPPtPQTQRLRS,ST,TU8UXUhUxUUUUVVpVW8WPWX(XYYZZZ[h[\H\]D]^(^__x_`t`a8aaabbXbccdc|ccdDdde e$e|efDfffg<ghh|hilij0jjjk k`kkklll4lLldlmTmnLndnohopqqrTrst tuXvvw(wx,xyhyzhz{`{|}}p}}}}~~~4~L~d~|~~~~~D|4xH4Ltt8pH<h`(X|$xl,Xd4($\t4Ld|\(H`(@Xp $<Tl $<Tl,D\t4Ll<Tl,D\t,D\t4Ld|4Ld| $<Tl,D\t4Ld| $D\t4Tl,Ld $<Tl4Tl $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld|”¬ $<TlÄÜô,D\lĤĸ(@XpňŠŸ0H`xƐƨ 8Phǀǘǰ(@XtȌȼ $<TlɄɜɴ ,Hdtʄʘʼ,D\tˌ˸8H`̀̐̐̐̐̐̐̐̐̐\`΄μ,dϰШ(DtѤ (҈0`Ә 4hԸDtֈ֨,Hpנ$8l4`Htڐڨ(<Pdxی۠۴,@Th|ܐ0ݨތߌd| $D,<lD(@l $HDXt,<(p(Lt$dt0xPd<   8 L         0 P h       ( @ ` x       ( H X h x      0Xp0dD(D$Lt4L\,tHp$x@d4ttt@Tx,L<L  (   !(!@!"D"\###$$ $t$$%%(%&,&t&',''((,(H(d()$)d)x)*,*D*\*+8++++,,,,@,,-T-..,.@.h.../ /4/P/l///00,0X01112@2223343h3334 404d4444455$5D5X5l555566<6d666677<7\7|77788,8T8|88899D9d9999::4:T:|:;;$;<4= =>,>?d@4@AAAABB@BpBBBC C<CXCxCCCCDD,DHDdDDDDDDEE0EXEEEFF,FTFhF|FFFFFFGG,GHGdGGGGGH H(HDH`H|HHHII(IXItIIIIJJ,J\JpJJJKKKHKtKKKLLL8LTLhL|LLLM8MLM`MtMMMMNNN`NOOO4OLOhOOOOOPP,PHPdPPPPRVYY(Y<YXYlYYYYZZZ0ZLZhZZ[[`[|\H\\^^0^T^p^^^^__8_d_x____``,`T`h`|````aa$a@aTataabPbbd8deXeeeeffdfffggggghh,hHh|hhhhhi<ihi|iiij(jPjxjk k(k<kXkkkll,lHldllllmnoop pqhqqrs,sxst,ttu0yyzz z8zz{{T{{|4|p||}}4}`}~~P~~0<h <@@p@lDHtd$,Px P<(`<xHTp(pH4$p4\HlX|dLDl44TP@X,XtL|$tLDlHx,XØTĔŌH4lthht,| `@ψ(pѰdӠ8\ք\؀<ڀTܸ8pެ߄Tl@DDP$lt48lL`HxDLHd H8t\Xp   `    (  \HLl,0 LHH$\Dd@ @ !<!"t#$#####$$$$L$$$%%,%L%l&&`&'0''(8(()T)*`**+`+, ,--..//T0 0012X23L334t45D556x67X78,8H89H9:(:;8;<<4<===>4>>?@`AABC$DDEFGTGHIPJJK0KLM8MNO(OPQ8RRS`T0TU|V(W8XXZZ[\]^_`abLc$cdefgh<ijjkl8lmnpXrsttv wwxylz|{|}`~<x  0H<xx P( 8 xD@Dh\pLhh\t xT$\4TœØ<, $\,ͼx\ЈL8d@0ܼ݌ޠߘd@4x`,D tHDX,@p<8 D\\ ht P  <  t  \8h(|( p<p !"#$&'@(()*+,-D.4//011234578899:;<=d>P?(@BBCtDEFGI JDKMMNOHP8QDR8SU4VXxYZ[@[\]$]^_d`D`apabcLcdeXefg|hhiijjjkklmm|nnoop pq<qr@rsttuuv@vw wxxDxxyLyyz\z{|}4}~X$|8LT \t(D<0`4$8`pT``T\\ `dl$LPxhTL$Dl00¤4àXŘ08|Șxɸ,`ʰˌ@̈ d$ΐ4pPӀԔTՠ <x,4ڰXPܤ<ݰXެ$ߜh<`8,4d4L|4L@LhXd||<,`,tLXd xD ( <D   8  p (  T`p@(0pl(4| l !!""# #$d%%D%d& &'x(T()t)*+++,<,,--h--.L../L/h//0x0120234X456L67889X9:x;;<,<=h=>??@,@A\ABBCDDDEdEF FlFG(GGH@HHIItIJJJKPK|LxLMNOOOPP P8PPPhPPPPPPQQ(Q@QXQpQQQQQQRR(S STTTTUU U@V,VDVW4WWXPXYYLYZZZ[\|],]^^^^_,___`,`x``a,aPahaaaaabb b8bPbhbbbbbbcc(c@cXcpcccccddd0dHd`de eHeef4fg$gghhhihij8jjk kxkl@lhllm mnpnnoloppq8qr4rrsDst@tuuv0vvwtxxhxyXyz z|z{t||`|}d}~ ~XpTdh8x4,(< Td|8$X(8 0d$p8d,8(hL4$Xd3!%!!X Gf'HI| #'#5'STRhh41 3#'73#'4]']'ooo3#3##7##7#537#537337#3$]jiu'L&|'L&erly$L$}#0| }DDDD!.4;%#5.=3&'&546753#.'%5>54&'oi;emO $]!Ge`;[gO@243"81ZzJ716[ $02"&46"32654&%3#2#"&46"32654&HcdedF)<<*)<;oBuBHceEGddF)<<*)<;dIEdeeF;*)<;)+;^'VdHEdedF;)*;;(+;4}*3%#"&5467.54626=3#>54&#"'322 ;D\qE]/"d\?2Eljp&;Y$]]$Y;&2 ##5#5353FF FFWmh 73#5>=#Wii#32#"& 3265+.@;!wqrvvJFWYM0ܐf[#5>73#f>:X? .R;"632!!>?654&#"2e~dA8u(Ro\`P< t\R6#B-Wu?47U9L $"#632#"'332654##5>54&L9Xesc@8mXHHEN% _OCxSEh[l'ODexMJKCK,A8A %!533##5GBAiiXު]4O6#!!632#".'332654&#"#;Hfk)E-%XrHSTG):Q5W+ip)/wXLO[%+%4>32#.#"632#""32654&+"3G?#Qk X >.LQ:i_zeARR>=PJC^R3bW38O~chSBD[WCGS. #67!5x^(|JϪ W%("&547.5462&"32654"32654z҅y6*ww*spCC87D9RQACSu:waz{av:"@1SjjS2@=32=<24M|NM?>&##"&'33267"&54632"2654&"3G@#Qk X >.LQBze=PJSRk^R3bW38O~chMXCGSTAE[n 7#5#5hhhhhhhhnm #53#5>=#hii#< hh\x&&4-75% -vEOO2oa!5!5aFFFF25-5v EOOM#54>54&#"#4632#5%45%Z%54%F:I8UolatZ%.J1-9 /7%B00=#3?RJswhhh"r5A332654&#"327#".5467>32#"'#"&546322654&#"SZ @hя؟Orpr|yTJBYVLn`BLF]eT&A[6(?b:#X}ꝏ C*kmbC54&+ova(=Z-eF?}/1>D?^r$;;p/T+49E04>32#.#"32673!".00GyL+_^Wj{mZ``!KwG/d2bjO4NNej3Ni`Y3!2#'32654&+YlpplRZe !!!!!dLRRRZC #!!!]t\LRR,$326=#5!#'#"&54>32#.#"$9^]&#&=4&+#!2'4&+326 +q:>]Pks6+LCJEh&0* ")8.IAC?e^>RH6<0m0%2>54/&54632#.#"#".'3V8N%x~X^WJY6BJQ(>gA)KN8%X+U;*)S#0%cswkGMD7*01`C9=. #7\<64Q##5!b]<yRRU3#"&533265(]]eUXdnoOOTJ!#33ddci !# #333ffhdhWPP # #33sqqov0vc #33]socG !!5!5ELfTRR5R@,#3#ggHH#/7,53#53ggHHS,I3# #IEzyE,PB!5B~22P#'`<䔔*)4632327#"&'#"&54>7>=4&#"26=Aad- #()T^O] -<$1&=8:<SEXeJ<6qIF)? %(MTG& &(-0I*^  -P,6 3632#"'#"32654&6S9ihx|hk;KBPPBDUSVZCoooY^p#.#"3273#"&54632T@4DMNEkTp^k}j[m\7;ob]j~`kb#5#"&54632"32654&J"O6jz{fl5DTTEBPP'E1+}Qp[\on[^o(%!3273#"&632!654&#"~+Sf#TvZnmJq&T=?RH(DiV`J@7,AYW###5354632&#"WSFFA: : D8DY8?E5R&("&5463253#"&'3326="32654&\|{db>M0_I\nUqT>#K!CNNDBLK}[LJKeV*TJX_a2,n^_mk^bmF4&#"#3>32#C)@NSS%K8LYSk70aP0'MBtB#7#5SST  ii& 3#"'53265#5FS  $SS mG'%ii: 73##kgQSU޵PD#T'F!3>32>32#4&#"#4&#"#FM"K4a,%H4IOT3.3HT3.3HT J/*P,$KGwi27P9i27P9F3>32#4&#"#FM#Q:LZS:2@NT X70NAtk/8aP$ 2#"&6"32654&q}np}~oFPPFEQOMmmm\an6& 3632#"'"32654&6M;lhy{ea@BPPBDTSO^}NoooY^p&##"&5463253"32654&S9ihx|hk32ATTTM$C( Jg _;3"$732654&/.5462#&#"#"'z5E7C&+N]InbXf3<.3PNFuc/7-%" C>IWTMT+$# E:LZ#327#"&5#5353V'14GGS DF+(DA !#5#"&5332653K%P:L[S:2ANSI4,NA/8aP)  !#33[^^ W !# #333*_je^\kdfgh^e hh #'#373$a__~~^ & 3#"'5326?3Z)^ Y l KSh !!5!5EV9 JIKxI+,!#";#"&=4&'5>=463%$.R%.49",,"94A'EF&x'AE>E< E ;F>Ed,3#d<<S, 5326=47&=4&+532#%RR%/4:!++!:4A'x%&x'AE>E< E EK "#>3232653#"/&/571u5i'*bsNFKE%&?z3 J 4t673#5.546753#.8`TjW*euue*XcT9XEg tZmab wz ZYcV254'#53.54632#&#"&3C;?!h(+*9J+#580E8nQ"e5>,X@M ,> 7+'RD'B8.%B;V.&(791![{ 1W9FC'&%'#"''7&547'76327'"32654&:5(<5)380 687,5:(;97,>?,+?>65391+;9-7575:7)42/>V==*,> !#3##5#535#5333着XUUb3M33M3cBd,3#3#d<<<<oo++4?32654/.5467&5462#54&#"#".57654/=)+571+27,kaT5,&3 =0mkP.4'oII' E50&2&u"J12G33E`bO/70%"^'J6s)"4 H`*J0{'?=3m-<(d4&yYy%0#"&54632#.#"327 #"&54$ 32654(!@(VlmX#G -(9DE8V<ᢚ8@$fi2+]OHb|ߞ✞%/M#-!5%#"'#"&5467>=4#"#63232'3265@"/1808DYC";~zTS.9%6b33_,++4,11 , l^z /(-j 757757-jj5jjYzSSSSyYzSSSS(V w!#5!(FNw.8#58HH#.9#&54574&+#32'3254&+& #"&54$ 32654O"F΍K#(=<ᢚh/ -#%($ ~"*C# ߞ✞w.!5.FF 2#"&46"32654/>YY@=YYfN87&(8Y>@XZ|Y98&'87('2o ##5#5353!5FFFFFFF"#6323!>?654&$>@R`?! 3H:;1 F8R/ #:IL& / +B%"#632#"&5332654&'춮&.#?@K9GUFHO>,-*0 3@.)-,@8;L=IJD.++&'3# $\P-3#q<A$  %#"'#"'#33265332 !S;h6$SS:1ANS-1? SS/8aP)L)0O .546;####an^9@R@^e@JWKy'*32654#"'73632#"'< ! . *& &)B9/N%\8# +2"E #57>73#c6$ +>D.0W(/D!52"&546"2654&:DJKKKC'--N-,b33ZTOZZRQZ4@78@?79@.jm =Q #57>73#3#%#533##=c6$ +>:<:.CC>D.0W'x; 5d=L *#57>73#3#"#6323!>?654&c6$ +>:<:$>@R`?! 3H:;1D.0W' F8R/ #:IL& / +D%)47"#632#"&5332654&'춮&%3#%#533##=.#?@K9GUFHO>,-*0 3@.):<:.CC>-,@8;L=IJD.++&'3# $5'x; 5d`' "] #k$#j$#f$w#|$q#j$#z$ %!#!!!!!!#Ug+n`dRRR(_0*7%2673!632#"'732654#"'7.'.54>32#.#"zZ_`! &)B90M. 8Xy܁!4@r!q3=HFYkbR"6$ f2zK*"ksD*"jsD*"fpD*"|qD*"jp D*"zlD*U/;B%3273#"'&5#"&54>=4#"#632>3226=%!4&#"01e%TvY88e;L\*FGf$vp Tʀ/\6IpFZgG86&P@?R4K%iUak:4TG&9$ N]R&,J@7pQe  ,('-GYW*5.54632#.#"3273#632#"'732654#"'5N&j[mT@4DMNEkTt\ %*B9/N.  8=P,b]7;oc]j^m!# +2!)%("kvH("jxH("f{H("ju H"k)"j"f "j $*4>32&''7&'77"&"32654&$-<8'';a$U4,%Ja(Z*F+"||FPPFEQO@e<' (1-'(,/-%)#MLs>Rmmm\anF"|tQ$"kmR$"jnR$"fnR$"|nR$"jm R2 !5#5#5&hhhFFhhphh##"''7&54632732654&#"?,}og<= B0~oeA:\+?FP)EFPGIm>EJGsAA0m_B 4m_DA"klXA"jlXA"foXA"jh X&"jQ\6& 3632#"'"32654&6S8ifz{ea@BPPBDTSP}NoooY^p&"jV \f#i$*"inD#x$*"xnD3"&5467#'!#3#327 h8L3. KMcx7'H%0px4*$:',6 - L+3T4?632327327#".5467&'#"&54>763>=4#"26=Cad- LH&*:1%9QaO]%(@5)1%u:;QEXeJ<6qIF)?=7 - ,!( CMTG"3" N-0I*^  -P,0#j&"jnF0#f&"fcF0#y&"y\ F0#g&"ggFY#g'#qG #53!2#!326&+3YEE]kppkSCCSC-!3##5#"&546325#5353"32654&??JFbf|{ea@SDTTDBPO5;R|N5LnnlY\mZef#i(("isHZe#x(("xrHZe#y(("yq HZ3"&5467!!!!!!#327@8L3.=ds7'H%04*$:RRR,6 - (4.6%327#"&54>?#"&632!32?54&#"&)(&"&)?L  (pmJq~01e%T=?R)B,(0 - 0( J@6b4K%iAYWIZe#g(("g|H,cf @7 *&"fuJ,#x*&"xaJ,#y*&"yX J,'R*&#JS#f+F#f2K'!5%53!533##!##5w,]w],,]^,ZZHFLF4&#"##53533#>32#C)@NS??S%K8LYSk70aPX5LL50'MBt0i#|,"|f#i,"i*#x,"x3"&5467#33278L3.^7(H%04*$:',6 - 3"&54673#327#5r8L-(S 0#H%0T4*!8 *6 - ii_s#y,T #S  d#-,B&;#ML #f-&&fO'4.:'N: 73 #%#k0gS  F#j/@#jOP' /B'OOP'\/DP'\OP#y/D#yO( 7!!573{(PP]yLzR9M8u 7#573BBS??S3@392@2`L#j1F"jzQL'>1F'QL#g1F"gtQ._&\Qxl$".#5232654.#"#3632(B?l)@>Dm]]:)VR5-LVGNt;dMM\%HRtc0F&#"'532654&#"#3>32 &:2@NTM#Q:LZmG'/8aP X70N&f#i2$"ikR&#x2$"xlR&#}/2$#}R+-4>325!!!!!!5#".7327&#"+(=RM'y>HUNCu(MR<'])94};;|59'dXT6XLRRRJ^5QZIn?' xex'@n$*1%3273#"'#"&54632>32$"32654!4&#"01f#TvY>?q||q=e=Jq،PPFEQX&P@?R4K%iV`ggj28J@7pm^`ml^a3GYW]#j5EK"jU]'H5EA'SU]#g51P"gU0m#j6""jWV0m#f6""fVV0*mJ%2>54/&54632#.#"632#"'732654#"'7&#'.=3V8N%x~X^WJY6BJQ;wT&)B9/N.  ,YgX+U;*)S#0%cswkGMD7*01`C(ED+ # +2"(%E[64"*@732654&/.5462#&#"632#"'732654#"'7&'z5E7C&+N]InbXf3<.3PNF4.&O&)B9/N. /7-%" C>IWTMT+$# E:/N # +2"(%G0m#g6""gTV+Q"32654#"'7##5!##632#"' ! . * < &)B9/N%[RRy7# +2"%/32654#"'7.5#53533#327632#"'B ! . &(*GGSVV &)B9/N%S*$DDF/# +2"Q#g7#^WQ535#5!#3##x<]eHRRHe #3#327#"&=#535#5353VOO'14LLGGS DHF+(HDUi#|8A"|pXUf#i8A"ilXU#x8A"xlXU#z8A"zjXU#} 8A#}XU3#"&5467#"&53326533279L"'9,]eUXd]%44%H%04)/ pOOTJ4W9046 - A4  $327#"&547#5#"&533265#*$'>J`%P:L[S:2AN ; -2+>1I4,NA/8aP)#f8:#fZ #f<&"fV\ q#j<G#j="jZ]Gq#y="yP ]G#g="gX]3##5354632&#"SFFA: :DY8?E5-!533#632#"'##5"3264&YS@ae{|fbFJ?$COPBDTTLL5N|R;X5m\Ylnn0* 0%2>54&+4+3%"5463!2#!#"3263J1>D?F{=G~=Z-eF?vaR1 R+49EM!1N$;;p/TB^r:OPpx6  "32654&!!632#"'BPPBDUS9ihx|hk;oooY^p3IVZC732654&+332#!'@RQA]]dƀRR=@PhxfcË3 "32654&3632#"'#'CBPPBDUSS9ihx|hk;K]oooY^p VZCË0 &0(4>32632&#"#.#"32673!".00GyLHP _^Wj{mZ``!KwG/d2bjO4O;ORNNej3Ni`.,"632&#"#.#"3273#"&54632R T@4DMNEkTp^k}jT>ER7;ob]j~`k0L!%32654&+"5463!2#!#"3263glppl{=GoR1 Rǚ1N:OOo754!35!5!!".6;#"Ot=Y-] 8''8R'+EF:.)-,6  "3264&#5#"&546325!5!&FSUDBPPK;kh|xhi9p^Yooo3CZVI&;$ A6Ze !5!5!5!!5!sdLRR'R/'0m/".547&54632#.#";#"32>=3MQv<ix~X^WJY_?XlC`%N8;U+X6Y\+GG&}1-lcswkGMD7.[RT.)+47Ji5&C!!!!#"'532Zt\QH DL%RRG58Q&##"'53265#5354632&#"W &FFA: : DmG'DY8?E5R,.326=#5!#'#"&54>32632&#"#.#"$9^[cEgI>K57FA+#"&54&#"#3>3232>54&'7/714C)@NSS%K8LYI-F&5Hf1?';d+(/70aP0'MB/#1=+.t3&}; Pv:34632&#"73#:A: :kgQe8?E5޵PS #5333##||T}}TSCCC,"273267#".' #'527.#76*:o0!! z`%6 !$5_LMFb\tMbR @ !#5#"'#"&533265332653S"K4a,%H4JT_/-3C_[3C_J/*P,$LFV27O: iO: &33##"'532Le}XiMG DL%T'OD58LF83>32#4&#"#FM#Q:LZS:2@NT X70NA3/8aP& #"&632.#"!26^pm ԌaVԐ}|Fu& ""2654&#"&63232>54'7t菎>lB @%k=򥤄΢V$$ 6+8]a$5w !"32654&7#"&63232654'FPPFEQO%\%np}~n8R mmm\an+8VEg# & #"2654&#"&632632#4&#"t菎qVT`SI^%&*X򥤄΢V8=gTM5i$8 #"32654&#4&#"#"&632632FPPFEQOHT"'#4np}~nT8@>F@mmm\an]M'*I|))I0#3264&++##"3263#"5463!2gCKKCq[]R1 {=GluDxD]q:O1No6&  ""32654&'632#"'#4632&#"BPPBDTS;lhy{ea@T>9 :oooY^p^}N?9>E[3264&+#332#&=4&#AIIA]]hxVI+q;=DxDxqct:+o.IAC?0m0%2>=3#".546?>54&#"#>32G;U+X%8NK)Ag>(QJB6YJW^X~x%N;46<\7# .=9C`10*7DMGkwsc%0#S)*"$%3#"&546?>54&#"#>2326sXcuFNP3.<3fXbnI]N+&C7E4ZL:E #$+TMTWI>C "%-7G 5!!!!5 fmTRRR&= "2654&#"&4632327#"5i%%2%$2II29B& $$$#IdHD8T'Gm&.5#53533#327#"'53265),GGSVV &+$DDmG'Q4>7!##+"327#"?2]+R16 {Z4+RytO3#327#"&5#5354632&#"VV'14GGA: :^RDF+(DY8?E&Q#5!#327#"&54'%]eUXd]X+8f SnoOOTJ Ao#5#"&5332653>54'J%K%P:L[S:2AN]+8kHI4,NA/8aP)  6U".5332>=4.'3N7MM(](('GF3 4)+l,aJ - '=a?8ciDA &#"#3632  ]s֭-A  i#@  &$!#"'5326?3632&#")^ Yr)^l KU hAl KG3#!!5#537!5EMWfTCRRCR 3#!!57#537!5{SEV]} JCIKCI E7!5!#"'332654#52>Ef ,1|X Qj ҵRT +F,dyMAK  E3"3273#"&'454>7'5!! jQ X|1, f KAMyd,F+ TR q '5!!#"32673#"&546Ə܏0NEHHXmaJIKCKJMxeXc"6 )#"&#"327#"&543232654&+57!5!,aW=6Wb]Baa`\0aSH0Pb &E"LBO40+;KIJ"632'!!>7'57654&#"2e~W(A8u(I_S'`P< t\{O$MD#B-Wo|9"MB7U9L@#%#"&5332654.=#53533#x]hsO?H?H&66&GGSVV&66&]c|nD^8:)5=.DD-"&D6&  !>54&#"#3>32#O'? 7*haTT=_NBW%FGa;' h9$A6F"))P;%^N1aSDB&d,_d,"_n_2,33#3###535#53<<FfFCFfF|Y#?'Y#@'#@,GP#-,/P&#M,/D&w#MOLn#-1L&k#M1F&#M,Q#g$*"gpD"#g,"g&#g2$"gnRU#g8A"goXU#j"8qA5"jn"XqmxU#j"8vA"jn"XvU#jp"8gA"jn"XgpU#j"8CA"jn"XCI( H)#j"$q*9"jp"Dql|#y"$q*!"yl"Dqnd g#q*U#q,-3267#536=#5!3##'#"&54>32#.#"$9^M $5kL\nn^_mk^bmX(4$@2,}[LJ[3468TJ,#g*&"gZJO#g.:s#gfN&#&"&5467.54632327"2654&8L-)Nd0#H%0t菎4*"7Ξ԰eg*6 - p򥤄$#&"&5467.54632327"32654&8L.*\e~nq}qd0#H%0FPPFEQO4*"8vy*6 - mmm\an&#S#q$#"qk E#gyq"g_2&&gY#='Y#]'#],G,#v*&#vJ[D!>54&#"#3>32#O'? >#)k5__=_NB^#.S8d"+9$A6F"!*/!P;%^N,[EP.BL#C1F"CNQ#z b$@0v*#v #v*U#v=#v #v#$#D#$*#DZe#(#HZe#((#H{#>,|#?*#;,#%&#=2#R&#-2$#R]#!5A#|U]#5-Z#kUU#8#XU#8A#X0m'*6"'VQ' 7'lW )"#632'>54.''67654&L9Xes1b0;PX> @[{%LCxSEh[1O1{/O3:WB\$) "K20<8Az("#4632'>54&''67654'5VbOL`"F52\:8 #ZE9.Ja,80PfXD(: #]4,$J "5E' )QS#g+Fs#gK(G!#"'5326=!5!5EL &)fTͽmG'JR5R( )5!5!!#"'53265u9E &KxIJmG'#y$*"yl DZ1e&32654#"'7#!!!!!#632#"' ! . 'ds &)B9/N%URRR1# +2"(/832654#"'7.54632!3273632#"'!654&#" ! . 'esmJq~+Sf#TmT &)B9/N&T=?R%VzJ@7pH(DiR_1# +2"AYW&#q+$9"jm"Rql|&#q)$;"qr~&#y2$"yiR&#q&$""yi"Rqke S#q<&"qT\& 3#"'53265FS & mG'* DA$ #4&#"326"&5463253327#"&'OF?HUC@DKplZBS- #(+&JWySQxwvzPBL)? %+$"# 2 6  ""32654&4632&#"632#"'BPPBDUSA: :9ihx|hk;oooY^p3e8?E5VZC F  -%265.#"7#"''7&54632#.#"676328D-][mN800D0j[mT@4DMW)+-6 M,0I)*<6Ilb]7;obN0H  7&L $"32654&#"&546323327#"5 DTTEBPPY"O6jz{fl5S"' p[\on[^ox1+}Q&GmF $"32654&7#5#"&5463254632&#" DTTEBPPJ"O6jz{fl5A: :p[\on[^oE1+}Q8?E(732#"&'332>7'.#"(mnZvT#f.3!R?327332>7#"#".Y8?R!,#f#TvZd?YE '    -*O=E#m0L0# MSW-D%iV`>]T r-GB^&=0G""#%3#"&547&5462#&#";#"326sXcuVAnbXf3<10>J+;@6E4ZLV&%KIWTMT+$!5L6%-7$":>732654&+532654&#"#>327332>7#".'&'#"'z5E6@;+J>01<3fXb[`7UE (!  -**">AVuc/7-%6L5!$+TMT0OT r-(SE:>K%&VLZ!(>32#"&547"32654&+532654&"az\p",*rcyoG?GO6=;+5)01?WI(5;-LZYsm_-%6L5!$+&  33##"'53265#53lSMM &NN HmG'#K1\|{db><9 0_I\nUn^_mk^bm^b2,}[S9>EJKeV*TJX& /"32654&"&54632>2&#"#"&'3326=CNNDBLKT\|{db<$> 0_I\nUqT>#Kn^_mk^bm}Y#. H%KeV*TJX_a2, !326=#53#'#"&54>32#.#"vMb.`,Lln$8^;]vV C?UVajUB=HV|#HO;'ZR3,k 254''4733". `4ZZ47L0#/(*/NB(F<+4  #/2632#4&#"#"&5467&"#>32>54&4:;5>`L2 (+<-.=^8)%.4LbE-! ,??Af@%6O)Zf)?.Y)T}mG?3'1gF3  K, F4&#"#4632&#">32#C)@NSA::%K8LYSk70aPe8?E60'MBtF&%4&#"#4632&#">32#"'53265C)@NSA: :%K8LY &k70aPe8?E50'MBmG'#5533##5#5TSPPSKii_HHB 327#"&5'14 UF+( 3#3#53#IIRR HHH|"#>32332653#"/#&~/571T 5i'*T"sNFK2 %&]533##"54>5"TT?*("Mq&$R(D& 3327#"DT& mF'GDqJ#"'732654#"57!#3!Yam5I7)ENTT cXexg.KCK=JF  P@ F8 !##"'#"&533265332653M"K4a,%H4IOT3.3HT3.3HT/*P,$KG27P9I27P9IF&*3>32>32#"'532654&#"#4&#"#FM"K4a,%H4IO &3.3HT3.3HT J/*P,$KG mG'27P9i27P9& 3>32#4&#"#"'53265lM#Q:LZS:2@N & X70NAtk/8aPrmG'F&@3>32327#"54&#"#FM#Q:L[& :2@NT X70NA('Gm/8aPF ##3mSl c c$ 2#"&6."!26q}np}~MN)N|NRZ[QFNXX$ "3275&#3#3!5#"&6325!FPPF_&$n7Np}~nN8Jmmbb LL&%/%4.#"326=332>%4>2#"'#"&c-EA*x3:7,T/3(4,G|{G,$<=!`0.b^`:T1 qsIc9!"85H5)JU=('=SL*Fh4ZZ.8`   UM   7>53#5#"' TTTM$C( IJg'_;3 &` 7>53327#"=#"' TTT&  $C( IJg'Gm;3E8A #3>32ATTTM$C( Jg(_;3E&A327#"53>32ATT& M$C( Jg'Gmy_;3Tt 3#4 #4&'T T""mm!%%8. 4&'#54 ""T U%%!mm6 #'##324&+32RCgET,@![6%[wHL 0/#.'6   "(0332654&/.5462#&#"#"'327#""X5E7C&+N]InbXf3<.3PNFucN/& k/7-%" C>IWTMT+$# E:LZL'G&#"'532654632&#" &A: :^5mG'8?E&##"'53265#534632&#"W &FFA: :8DmG'@D-8?E5&!4#"5632327#"5u: :A& 5E?8'Gm& &3265&#"4>324632&#"&'#"&\#(0#<"#M/8 31A: :"SGVLg  *5 e8?E5 HpI W&#327#"&5#5353V'14GGS DF+(ODF !#5#"&=#53533533#!326=K%P:L[IISSNN:2ANI4,NAxHHW/8aP "F *#".5467#5332>54&'531?';d>Af9& ?1nH5%N4,E'5H&};54&'7714SI-F&5Hf1?';d+(U/#1=+.t3&};54SNH9rB4+Ht &"_6)``KxIJ->5   q #"'332654+57!5!4YamXHHEN0 cXexMJKCKIJ4v )4&'#".54>32654+57!5!"3267&,Ya!%nI)</8  '0##(-G E cX H /2&&*5   KIJM$/"#632#>54&L9XesC8T_OCxSEh[9f,A8A/.#"#&'.54632=H:CO_T8CseJNA8A,pJf9[h/ 40+4>32#.#"32673!".500GyL+_^Wj{mZ``!KwG/d2bjO4NNej3Nh`1&&2F "$#"&547&54632'";#"32654&nzcrVAp\~^3?10)5+;=6OG?ZLV&%KIW|/+$!5L6%-_msY[ *326=#53#'#"&54>32632&#"#.#"vMb.`,Lln$8^;c;N :V C?UVajUB=HV|#HO;'27E533,kF &!#54>323&'#"&73265&#"LS/8 31S"SGVLM#(0#<"#ii*5  HpI* &7 NF| 333FT @L&F $"32654&54632&#"##"&54632 ETTEBPOU<9 S9ihx|hgp[\onZ^pI9>ES/"#6323##5#535>54&L9XesC8mmTii_OCxSEh[9fHHX,A8A/.#"3##5#535&'.54632=H:CO_iiTmm8CseJNA8A,XHHf9[h #"32654&%!!5#"&546323 DTTEBPP'E$"O6jz{fl5S!p[\on[^o?JIE1+}QI[q*6#"'732654#"57!#5#"&546323!%"32654&Yam5I7)ENJ"O6jz{fl5SDTTEBPP cXexg.KCK=E1+}QJ p[\on[^o 7:"32654&"32>54##5!5#"&546323!354632 DTTEBPP &"ISNH"O6jz{fl5SrB4+HV#p[\on[^o   )6)``E1+}QJ->5'^1732654&/.5462#&#"#!"&5#53533#2H&+N]InbXf3<.3PNFvb05GGSVV6.$" C>IWTMT+$# E:LZ+(DD &#+#"'5326=#"&5#5353354632&#"#32 &s14GGSA: :S^5mG'C+(DY8?E7A#327&54632#.#"354632##5"'#"&5#5353"32654V a.j[mT@4DMNFB4+HSNHP: YM14GGS 7 DFib]7;ob]j->5=6)``*+(Di   90#"'532654&#"####5354632&#"3>32JF &:2@NTSFFA: :#Q:LZ58G'/8aP8DY8?E5RX70NDz(7#332654&/.5462#&#"#"TT+F7C&+N]InbXf3<.3PNFuc22&5-%! B>IWTMT+$# E:LZD- !!3ET$ JII_-/Z*)Z*)wh!#5!#!#5!#FFFFhCC߉CC: 4&#"563232653##"&5l& C)@NSS%K8LYN'Gm(70aP!80'MB&c%327#"&=#"&54&#"563232653 : :A%K8LY& C)@NS\5E?80'MB'Gm(70aP! 0K) 0) |M)&{U)pUpfp>=3327#"=#"'776  Y,1 K0Cz.GG(Sr \qfrZ);q\)1 1'  W #5433ii#<x&&4W 3#5>=#Wii#<x&&4W #"=<#ih4&&xC_<5OC "3"&546$44,,4$#45"#>32#5>54&2%9IEBK,$7>3+6-JKC<%B u*%*5.#"#5&'.54632(/&+3>7$,KBEIg03*%*u B%3#'#!c&MN&3>dM-O33#'#t_`?QO@``O2#'373_`?QO@O``LQw.q\P-vPCd#53HHt/qS7$C=#7jg"/qL"qg"3g~?"rz_!{_, B7533!5Fx۷FF BtM' nB %##5#53533ByFxyFxyyFyy B-!5B-FFU< 332673#".;T(0; $<4B" @sd#5hhh=1 2"&546"2654&,>?V??+$>,+=>+*?>93 "&546733278L3.F7'H%04*$:,6 - e?23273#"&#"#>[X :Jd :-%%h&%16N\3#%3#=q<q<䖖A:57332>7#"&'JE/# -*-NcKN&r-_UGID0 ?q):rO)1}V);q[)65)( #!5H H( #!5!5HV 3H( #!5!HV nHj( #5!5!HV H3( )5!3bVHHH^3!HHO_HHf#3!HHOfI86gQ. &qcq1. 37dM&.7d#.b$/c:znkn'kkl'jje cC|nAMA3##PHH#5#5HPH 8B53!53HHdd 8B!53BHHd$M!'&/76?M%33%h +00+!PCPvOfe|wq=us!5sHHUx&dydj4}#532654&#"'632,, %(04F@ 2&$31zO3}Og1Ly#53HHLL&L=N#'##'`<=`<䖖U/#ycxU x1)G +2A 3#5265#X/)-I+/*,A #3"&=|-)/J*/+I+A8C8v3#5#53HH3SH5G!#5#FwC +53>54'%-I+8pT  &xs$853533SHSHSSH8##5#5.SHS-HSSH ##5#5353.SHSSHHSSHSSXdwM}U&- '3#"'53265SS &-mG'&X- 5327#"=& -y'Gm[Zy^jzzrW 3+52=#d4.77Lg8A&N*zi3{ E;!#5##FFx8|9kew.qIq9Ch3#YLLhC3#YLLZzPw!!75#}'D}}R4632632#4&#"#54&#"3%&'$3,,%34$3 ''7'7N __ `_ __ _GHGGHGG!FR5654&547w61%&h%%", g7 ,  eMcQCP\|2AXV[@Q/&,&Hɻ3#5#=S]WS#7&#"#>32733273#"C+ :-!%'>1  :J4G%16@T%hh4#y0#y|cF=,#|_| G  Y #5'67&'9 4.8+ A , -19% 5 !c:M'3 #y xuPQ~j#~P{$`& 57'5%3#'#鼼K!c&MN&uJ:;;=_/|%yJmR37''7'7/PQ5'./&4QPDT,CFFC,0Ib2>32#".1#"&54>32>7".#"2654&#"W   & 2$  $2 &!  *    1   "8   8" \(     &M(&     " 37#7#A%9?' e_9N267>73"&'.'33232653#"/&3C+WL**,"C,317 =A%*$FKE +); ?xNU+ 5!'7'7E%9YY9%E.?3@?3@9dDBQ:JHCQ?UL?Q:HRCQ:L XCQ;^FDQ:VXGCQ9XPK:Qm7j B@82>73#"=3 !1JL*OQO,nm sPDdlM  3#'#5!#5Za:SES USSSS V #5h hh&#ze '%5&'se" D '60"F$Oo%R6!#!6|`{5)3!bt{;Ze(G=S+&!5!#"&632%"2654&)Pt菎@R1VԂ򥤄d,O.3#3#tcxh'uK0L1Ac !5!!5!!5!S9gI"SsSaS&2P!#!#!^^0y[i3(^ )55!!!^tU#RRQ7 <%"&5463532##4&'>={|Q}{SoVWnVon_}yQQx|_vVk c r{ lUYq;4%##5#"&5;332657"^"zvZKWVWKZlaaQA7AQ7kb4!%>54&#"!53.546323!;D.qmiMOZhTL /MwAqnc#LH.ei,H##j' #j20G#>'"{BJ#D8+"F2"`R0G(4>353327#"&=&5#"4&#"3260 1S4o3H +%#_BxRBJFHN!CJ9%FRW E  8Nni[f2:)4>32#"&'#4&#"32654+53262*Q;_iho_;F!VH?4;)qAE2*?G7RE$dXw%_w$3?)jTJDJI: #5&#"'4632 V $.'v F #7~$-74632'5!! #".7";27>54&$v_    y =A1FRPD/ %RsHH%$/$8]gO[]]5Rb'$%#"547&546732#.#";#"267 mgffpf ch LV;@@..?AHrXPB_`Q?CO'%U/(;(/,(%'&>".5467#5!'654&&7L=+gdqED&L" .T6BH<@ℎ.A7aE!#J4&#"#4#"'632632'.>X  $CaR[Xn{lLH6SU.v8 7327#"&53 .,<@XQHE< !##373l>XXr < ".#76323267#".' #  6 !$0!! z`') R !0:JFb\<8"&'#332676=3#5+6XX 8)*=VP; "x##*17j>%%  Y>/%2'654&+".54>7.5467#5!#";#"jI'J#&8Ca1'3"6D, dt*@LXRnJd^F*C=^V"!78.H) K9+HFFT0+E@RxD$RR %27#"&5###5!#$ 0.,^F(@@ >0FT:FF28"4>32#"'#2654."20B>!r>D+Gc5X>\11410/1=_8% wlm&G\l8Q)*RpR*"J&4632#4&#"'>54&'.'."tc|[JB01(H;/H@0Z -(FI2.9vu_@F'L4.B%  -<,n P %p"N4>32!##"&732654&"",KO,@qsZ[=IOLLMo9RRf{|k[lZVpr "&5#5!#3272I1! #CQ3II+O 2 7327>53#".531S<# XjnEZ.XbHD<$~V:H7F.8 #"&5467;32+#54&+3267yZF*3CiNXyn X]OK] nZ$D!d;NiŘznOhf ,<+"&/#.##56323327<$=ah   B `Ã$ 3&hN<$*8l %##5"&53332653luVtZGUVUGZlljn6YQNQY$'%2>54'7#"'#"&54673>=3.4(4lP*F$<=!`0.b^`<4Pl3:7,T"55H/u"NFh4ZZj<)lIc7 "jF2"jhR$#L2"qR$#V6-4"34&454>323##".'33265C# $8$,! CC 1L24N, P>-AIGSJi 46_5D# " 3'@*#HAeX8 &8SG+;^@v452>32&#"#54.'&4Df>! PK> '&'@2&`.&-`3ZQ3^E$. 9\xETp_+4 "]4#j]98!463532##5"&73"4&#269Xz?nJXzTa_b^_ae[uy8^M+xSk|oOSki$+%2>54'!3>=3%##"'#"&5467#5.4(4NM3:7,T#>#$<=!`0.b^`!>"55H/eeIc7 ߞF0y6Fh4ZZj(3F(  2733#"'5326=&5#7654&# cgjϐ &Ɣh:ka Tc}NqmG'OFc8*0!>3273327#"&5#7654&#"Z1;Ocgj-#/,6]1=Oh:%.+(9_e}NF9F.4>32#"'3263"#"&572654."90B>!r>D+Gc54)-1'-Dm>\11410/1=_8% wlm&GR4Rl3[\l8Q)*RpR*&a0%"4>3"3# 1S4CFFBN!CJ9%LVLBJVP[&|CP[&|jl2+53254+##5!#)J[ 54Rc9B]WE,? BBK9PPP9#jz0 .#"!!32673!".54>327^W^x lgZ``!KwG/0GyL+NNsR~ej3Ni`12bjO40m6d,#j,-S'!##52>=!32#'2>54&+,F.%ua 1>M@{Ch_T,^!DNteGtY^rR+48FS!!#3!332#'2>54&+^]1]|w` 1>M@L;uZ\rR+48F2#4+##5!#)J[]B]WE;9PPPn&jP#C [#xSy !#5#3!3P^v^y'$Pp%#!!!3 4.+32>p-Y=t] 8''8$FE+R.*,-Pp%P93#!!]tR"y %!!>=!3#5!#5KE*[PPR5hv ٥qчP[(  # 333 ##nEt]tEv]Dwb44D0m1%2>54&+532654&#"#>32#".'3V8N%`ClX?_YJW^X~xi(>gA)KN8%X+U;*).TR[.7DMGkwscl-1}9=. #7\<64P 33##PX}eXi['VP#xPn 3#33 #]]1oz|2M!R!#52>=!#,F.%^RDjaV-^"FPvgG'P0P+.2P!#!##^1^y'P^30&Q7 [3#733qqo{0-#/;32##5".54>;532>4.#" &CcF3'?6K._.K6?'3FcC& _0H5''5H0_0H5''5H0|7jH6W8( ^^ (8W6Hj7]%JdJ%z%JdJ%;Py %33#5!3#^CP^Rqчy8"#"&53;3#MX]L]]\A)9t'P %33!333^b^^R'yPy1)333333#o^^^CPyyq 3#5!32#'32654&+Dd@RQARxfcRR=@PP %#!33232654&+#pd]=@RQAm^cxfR=@Ph'Pp %#!33232654&+pd]=@RQAcxfR=@P* 3267!5!.#"#632# `Zgl x^W^_+LyG0/GwK! je~RsMO4Ojb21`iN3!P#"&'##33>32%"32654&v^]yr|}rq~|aŗ좡^ 463!###"&6;5#">vaI]oneqQ7>53"32654&w,oq}np}$F2?)/J1%S(:FPPFEQOFLU  ( N=mmm\anF %4+3265'4&+326'2+y[*1.;bb;.DRFE2.TGF+$,)P4Q"5!3#5!#573#W0"S@FnFݬ@4xx t;&H 73#'#5#'35kjSjk $#732654&+532654&#"#>2#"'|5E6@;+J>01<3fXbnAVuc/7-%6L5!$+TMTWIK%&VLZF 33##FTlSm ccF"xvF 73#'#`jS   !###52>5lST !2  b%F$ 33###FhhT2T FkCF 3353#5##FTTTT &RF !###FTT @F&S&F$ !###$tT L@& \&&;&2632#"&'##"&5463253"32654&!"32654&-dflmd1>#S?5egke^1S@CC@CFFdCBBC@CB^#+-&^lll\`nm^_lk]am [F$ 33333#5FTT=F @4x0 3;53#5#"&50T"TT;V B9Fn %33!333TTTL @F )333333#dTTT32#"&'33267#53.#"*m[j}k^pTkAM I:4@\\ck`~^TMIP;7F#4>32#".5##3%"32654& 1W7q}n7W2! ^TTJFPPFEQO51D8'&8H> יmmm\an 4>;#5##7.7;5#"F!@,TEgCR[[*1w/0L=F+$&&Cr&&jy]'4&#"##53533#>32#"'5>5B*BKSTTS *;#KZ7PP 5{\70bNT@EE@!JD?k@#(|\F|"j&%#3273#"&54632#.#"3_MAkTp^k}j[mT@4:I T^~`kb]7;PI$VFL "j&M  72>=!32+##%#32654&SqmkaF'B8||:81P,yCXEVa6,+(F1 !#5##335332'#32654&TTTqmkbk||;72 BXEW.))4&#"##53533#>32#B*BKSTTS *;#KZS\70bNT@EE@!JDF"jAF#C&"xD\F !#5#333:FTTxx @!#&53>53653#&'6fKpdFG-*6dBKPRd)EB&f[38~ٹTW^둕o߾@ӽ 3#&3>53653#&'^Rk31RkdR^C#"+pijwy<5*8l U0 #"&632.#"!26^pm ԌaVԐ}|Fu& 2#"&6."!26q}np}~MN)N|NRZ[QFNXX'{|'* ''7'H'HA$''#7'57'573@87;?K7MCCBBc 53353#5#HHHcCBU+<`@ f4@C"#46323".}' @[QJFN (N>~ '$I]!)!;  Y&F'FDy'Fy'F3'FF'Ff'FF33Uk "/<IT_3#5265##5463"37'654''&5477#"'7327''7632&#"#"&5335532#4&#X/)-YX/)-?3 ?3 >4"  >4" I+/*\I+/*JI+/*\I+/*>4" >4" ?3 !?3 X/)-ZX/)-Py 332673#".333#5##;U(0; $<4X}eCPKiB" @[qчVF- 333#5##332673#".FTl7#!#53533#32&]vaYY]\\1M+4^rFxxF| %4+3267#!#53533#32[)2[UF>>THHvphN* CS~FHHFKLP^ 654&+327'7+#!2KC62L$0]-lu<:2!6a@TM;lhys7U^poo@2?2CNO^P993#!53!]]t`Fmu353##FTT i@ > 3###535!!jj]KKtFYFR ~ 5!#3###5H6DDT>HLxFFPR93#!!32+532654&+]t\]]\40+55+RfZZfR/-'-/Fq 26=4&#"#!#>32+)C$*=3T'A9I>YLF079.[Vd L0'IFBM y%3#5### 333?@P]nEx]xJчDDwb44* %3#5#%#5# 35373JF!Sg0kSk@x*3g:%#"'53254&'.'332>54&+532654&#"#>32gv6L80%H!uX+U;8N%`ClX?_YJW^X~xi\x "7*4 - 6% t64*).TR[.7DMGkwscl-1"32732654&+532654&#"#>2#"'53254&'&'z5E6@;+J>01<3fXbnAV_S6L80%H!/7-%6L5!$+TMTWIK%&VDX%5*4 - 6&Pyn%3#5##33%IP,]]1oJчM2F %3#5#'#373@F$SS`@x P'#375373#%#0]]0FxvtF)*MR?F 7'#375373#'#1SS1FgkgF) 1k%gqt* 3#3 ###5353``kxdn]UU]oF;D)Fj 533#73 #%##5ASGGk0gS<..FjF> #5!3 ##Dkxdn]R;D #5!73 #%#̸ k0gSLPy%3#5#!#3!3CPQ^]v^JчL;F$ %3#5#5##335332+9)C$*=3TTA9I>YLF079.[Vd@ 0'IFBM02?"&54>3"327.54>322>5#"'7654&#"c#K^~{mm 1:1JD_cz  J-T741?Ls6/%+?ƜPyFR0HZBui (!*wKnT-fK8y&p%."&5463"3263&54632327#"'7654#"vt}KiFL ?[4AS< ;: KA6.-):7$xM^fuaDegjeOGC$&Dh+hvA9d03,#"'53254&'.54>32#.#"32673L80%H!Hm:$ 0GyL+_^Wj{mZ`` 5o*4 - 6&CUlL"2bjO4NNej$&3'#"'53254&'.54632#.#"3273jL80%H#Xfj[mT@4DMNEkT\N7o*4 - 6&qb]7;ob]j~Vh $yQ %3#5##5!#bCPP32'Y8?R01f#TvZj~PN3*$+: " c0L0# .MSW4K%iV`xU>9A-'!%+m&=0G"/;r <.#"#>3 !32673#5.=.54632#4&"3 &C-Vu_ 3>Z4,{jW^_(HAg>)fgM?7AP.C0!-9"f[ :17'MO :Ne\.uSN];7 4*6B$;/6%3273#5.'.54632#&#";>32%!4&#"01f#TbJH[lPN3*$+: " c0L0# 'X9?R4K%iL^ nU>9A-'!%+m&=0G"DMSWP#^' #x}#xPR2+5326=4&+#33\]]\40+55+]]kxdwfZZfR/--/;Fq %4&+#37372+5265qC)lSSkMLYYL)CY70 MBzBMI07 y!#52>=!3#5#,F.%GPURDjaV-^"FPvgGqч !3#5###52>5dS=FK !2  4x0)CXDG.PAAqQDPR!!#3!3+5326#^]v^^\40+5L;9ZfR/Fq 26=##3353+)*ATTTYLF07 BMPy!#3!33#5#$^]w]GPTL;qчF% 33533#5#5##FTT=FKT 4x=4#"#632>3226=%!4&#"01e%TvY88e;L\s3$vp Tʀ/\6;W1FZgG86&P@?R4K%iUak:4TGQN N]R&,&9VL0Qe  ,('-GYWP[#x|&"xr/ #7326?# !654&#"#632 &C-Vui/GwK{jW^_+LyG0!-9"f[h1`iN3eMO4Ojb /#j' "jp( #j&}#j0m#j~$"jJ Ey(q 2Pg#iF"ivP#jF"jx.#j&"jw0&0#j7&"jm8*#j$"jQ [g#i&"iT [#j&"jV [#}&#} 8"#j0"jXPy9 73#5#!!CPPtJчRF| !#3#5#F6=FK LxP#jFl#j0m1%2>=3#".547&54632#.#";#"G;U+X%8NK)Ag>(ix~X^WJY_?XlC`%N;46<\7# .=9}1-lcswkGMD7.[RT.)*"#%3#"&547&5462#&#";#"326sXcuVAnbXf3<10>J+;@6E4ZLV&%KIWTMT+$!5L6%-7RI!#52>=!+53265,F.%^\40+5RDjaV-^"FPvgG'R\R/-q !+5265##52>5dSYL47 !2  BMI(b%&4$&T : ZPn3#37'373#'#]]ru2Ko}hu(z|β](K}U MF 7'373#'#'#qXu.`Z`u ljS qH.YOl F%2653'#"&53YrO_W;[ 1z^&:Ipv]De$$c#6"(Fy2#54.#"!!#4>aRp=_'O=1D&/_&>e-XlIRQ:LA)LE8];ZR4<&%##5#".54>3234&#";k_?_1:kLBd9# n^K5J*/@U8:MZ5$*:4TSq=RR_ #K:rO_ 8m+VmL^8HC"pvQR/F^<+Fy%26=3".53!!YsN_%=dDSr=_/ %:LovQQ9XR6!+XlL] 6"*2.32#4&'!#5332>54.#"3!54>32(4+{S!$YZZ ;[O:,GF"YE]E}Y:hH=! 37,BvI=Y-siQLud65}F %#33#@`OOMFy#54.'"!!4>32y_'O=9I& &>eDRp=9KBAM9W;ZR4-WlF 3"2=#".546;54&'#"#4>;23#E.4Y_5pQ8Q-Wx?U,1_.KL)i66p8^U8%AC''>7$iBAE:- :U+q\KNA|%"&=4673533#2675#"mjm\c`EHAE[po^~\oK~:O=QkFx4.#"#3>32#%I8Jg ^b y/Ts>^8MA45%:"-ZlKGF^333F_^F%2>=3#".=##33$#-+_Tp9k__ %II,`K,YjL@9KA #".3!2.#'#"&54>7'"=4&#"26v\^$ A~'8fC4Qkpk`Fy%".532>=3#5dTr>^$G2.C) _a \,XmL)4C'!">.)L$42&'"#.'%6,%' /t-g.0" 82O/8"'54632&'"&54672>=4."327&KD[_oteV I/(9OFA:$55?U)2#5 2*WG=BXo?c< ( "''K*>C+ (Y,+D%0#9A|23#4&'"#546.ja=QCK_q\@K@F3&'7672''"j+;?)/<  ?BwC,@<+XA 13/ `y^,G  9=C5/2f (L_><%2>53#".53\8J%j>qSRp=_NK BL7]MmV*-XlIXvo-&4#"&5332>54.+53254&#"#4>32)Bny](2 )##!5-X45G`.[?5T2! cOds{S!35!-= Ms:35,77"&31y ".'#53326=3o=&9%sN_< 'UmQJ^X!6")ovIjY(,467'5'"2>=3#".5(nRXK*=)`q;_8%MsTaS[R[ F2@FY%7A3Fy#4.'"#4>32y_'O=9I% ^&>eDRp=b9KBAL:c;ZR4-WlBG#%5>=4.'"547632G-JT-n61!GW_@Ks>c5$ 32t_,+'a^&>eDRp=bBV0 Z*+;ZR4-Wl-9674.#" 632#4&'!#5332654.#&'54>32 )*HL+0L, _(4+{S!$YZZDk>gI)n)>iB2K?:UH?\."3A5]thH=! 4793'4Y#GP<(%7F3##4.'"#4>32yKN\'O=9I% ^&>eDRp=Q9KBAL:c;ZR4-WlFy%2653#"&53YrO_:sTz^$GIpvbFh\0c(3E)A %".=332>=33#5_Tr>^ &:&.C) _Z \,XmLed !9)!">.)^$-g.%4.'4632#.'"#".53326 0M^`O6kHl4[VRJZ2Oa`O2qFnB+YHi(3'O9\i(5D&C>75$0)O7\z 2D> ?Fy#54.'"#4>32y_'O=9I% ^&>eDRp=yx9KBAL:c;ZR4-Wl<9(34>32#"&5332>54.#"'67&62654.#"O.bFX)Fsq]WI)-"#/$h#jJU[RxP1;!: 9<$e% kNb}w`?M6#%95A `@79(3FY33##F__Pu-'-%.54>7532#3674&'\<^E42D]=^;\L8!9@H4^,=/"^ob0,?tIGp>,77 (?vL54. =E2"n)OM0!3C=eϚz '?pI~5;5#"#".533'".546;32C/,..--Ym")flAc7# ]-48#ih_.j~0D ?+hGG_{$4-mp ;)X=pbOC_5 53'65=^35mfP9G"NL73X7iLA2>32327#"&#" 6=,0../8%x"0705PC L14>32#"533254#"# #E/:C4*U7%Hn721?/,3a)7e*=3'?3! TJQ=2TP7A !%2653#5#"'#"5332>53(E;XOT4t=cX$8()X*B_ZI$0[[h?@ A.19<F8%#54.#"!!#3632X &KXO323##4'"#3 !BLddXNGEXS   D>>6\_K A%2=3#5#".57!!WO:k$9% XQ/AaJU'!1BDG#8;7"&54632533#2674&#"Wrqf7GRc1HC:CACEAmu+6g;LTitKVtrFM %'5#33#&LVJwBA8"!!3632#4.#I_O323#2=#"aEBHYB=>:(? VNT%B^+)(PH $G^JC>XA79&7.A,"$81P=#"#mbYbb}_1O. '4 z hDfz%9KE"FQ;F8"#3632#4&'*-XX>]dOX4"H3GhaI?>F8 #3X9eF8%253#5#".5'##33XO9l1D$XX+?"JV%D7-}BF#$#"&54637&'4734.#"32"e}~P=U3;^+ZJBIy\Lvu*C=64(2@D8I1ce[mF8%2>53#"&'3 *-XX=_fKXG"H3, Eia ~F"#3632#4&'*-XX>]dOX4"H3GhaI?>#&42#5#"&54>74.'47332>54&#"  KVM D9dx1HJ>@D)HEF*: H9=R- _?3v4bH;0 -. PUs.J8Un}A8.23#4'"#3>8)=dQwXRB*)?2\ W$,747'767!%4&',@1>fh1':eb ()#1@2{T0'F],IT=A-4.54>;#"#5#"&'332>7u+3+-,MT6**T) !!AQX$*,: 6&@&$D%&+9O8G6-+2*8 2>53#"'7& X9I*{ !^X KF%273#5#"&54>;"_XPWOAQ%M3A_@1?FS]F49B-=7>#3(3.+53(E;XOT4t=cX(()X*B_Z,$0[[h%) A.19<&7#5;#"54>54.54>">54&A].7*kƅ%+%!0/!))4 9/%%(9.GB#," "?H0#2-$+L4.G) JB@!7(*@)79R&ERA72>4&#"#36323# GD:4XO%2>533#"&'3*-XV=_fKXG"H38 EiaG~A8&%253632#4.#"#5#"&53U.&/ LXpaHSTA8"#3632#4.#XO5#"&"32654.#wj\;Q "1J/0<'UA1)89Wiu5W.-8V-/sJ?:)>*/ ;),.;1-D?`f;V*ai7R+F 3#~ 6B A88)%2673632#4.#"##"&53M;T32'"254&umQ15VddQ E;%HG+4LE:@g}ABLLBFA47kvU_HfV^# %".54>32"32>54.+NL. 1C>!m"1E; 1/]<2/01 9pM>b;&wDh:$ +U9ka-U98S+*8o#+2"&54>;32##5#".533332654#'35"Ia!=I/>=Yl*:7-W/(9/!NW%DD5638PC*; ߆i<_9%7#JnlS-%!F ".53326=33#5+> V%*GHVO>-# `-+KDBR$Z5353Zdddee^dd &27"':'0AU+Y  " P&f']&&&zzn&W&&__ }P3# GG3>Wd 3#GGGFn  :FX##5467'36=3>Q;f&,WPJ[sCVL(CJ)LLX%#73'.#52#BuQ3G36TC82X˧2C L,V9&X#!5!W  LL?:X #.'#53@{lWAZWXamtQ: Lw>X33>WX'(X##5!WW  LL?;X 4&+#!2#aJW\Wt=[X}a=:X%26=4&#"5632#"&53?Y Rzd[Zz5c:X3:WWX#&8X 2#4&+5iWaJXY7>=!53!!'.2W%,4 [W5V+, *bD?Rn(*@5?;X 2!4&+wxTX_X+@U@0:X4&+##532!53uWA:X:N{wAT L`L>8X3>W 3FX 2!534&#GqRVX^L(>Z=9X  "&5!24&+3265ڑtWWTWPL[[zvhrJN>ZY?$X737>737xYs# W +C:C  &!X5:9'LO98 X4&+;#"=32#N]y,@"(~}WtTD1Lsk?X*2+532>=4.+;'.=Aj=*(GqA753 [UWc#WKc/6 +3X!5!3>=3 f<&Fd0-W@jL 4'>8&X#53>7!5!#&l|>7$5#ooWlbL)Lr%X 2#4&+5uWO\XuitNJL<X6753+;2653#.53bWpFd x>WBW{R}W,YG^8\nLRXZW#{X4+#5265#5!2#$ityMI<yWtukLDM/Lqm>jX!3!3XXXX<_X3354.'33##:D! U ;!,kWHV,,54'* S*IC25^H7Z,MuG)5!5!5!ZXa #"&547'!5!73#".5'2632 tmM 8#&'f Z-=Z #}a%#"&547'!537373#""&5'2>33 tmb(M  6?'f #Z-=Z#} kq#532!5!4654&#yyB\oF(TS 1)Z a Q/k2!5!4654&#\oF(T 1)Z a Q/m".5463##'2654&#"2>+_UdY /\&44*&>9'X<_,EX!gOI14XY+6Ld !"&54632"3264@bz|`ay{1bNQ43J~WZ|}Y[zQK/2KHbV[s.54632'>K"2X ): 3_2@(HdfO"!#'#'!53547O$JzppssZ\r_ '!5!73#_J.DZ,>Z__ '!5!73_JZ,>%'!5!5jieO`ZS #/;U2#"&5462#"&54632#"&546'2#"&5462654&#"".546335'##" ! K" ! " ! K" ! h&44*&>9.2>*_Udj[ /> ! " ! " ! " ! "NI14XY+6LO)V;_?ObD,EX!ga(%#654#"%632Z\@DtaE\I;@ؕWHO]qZU;I@np)5!7pHfUJZCkv )##5!5#=SO^Xk?ks'545):5-AASXDfm(hj7&$ "&/.(# #xOaI8UZ-_Y+M Y :1 0#`n2"6E2632#"&+"''7.'&54676>54&#"3">=4&5):5-AAWT<  "dH*h "  7&$ "&/.(# 1#xO_J.2 H+".1` +M Y :1 0#`(2%#"&'!5%277327kF3C$&8,A(E,71D1Z)m+>CK@ %"&546?!5!'7327SdVF9? >"pA0(F)OL8F3Z!."$@ #"'!!32654'./;Vd%>  ?)F(0J""LOZ@3*$"$#!5!".54735'#"&'i)t6/i #% W||W Z8V|9_ SI>O] "J?<9!& 3"&'#53!'5#@F5AdGUdk`#532!5!4654&#{{n\oF(TR 1)Z a Q/!#"'!5!'#5!3/\  ;;ZZYck%"#"&54>732632&\ n69KN(Gn*i :((/C9Ee*lSJ*+99&T''7'77''7' &%Y(,$"5'=d+jA!577''7'77m &$Y(+#"5(>+jA!5,O3#3#,####s*/'K7K/'K7Kq5 2#"&54'2#"&546.! !n! "! ! ~ ! "* '7''7'78!8 8KK7^_`]_ 77'7!9 8 8KK7^_`]_3#'3#r####K}/'|KiK@KL[ 535#53#3HHIIL"< <" D 535#53#3 HHII"< <"Ov 2#"&546>" ! B ! "6{ 2"&546/537$/++U y!;9 2#"&467#'7yi.++-$ w";8jv 2#"&546>" !  ! "fq#53qbb]jv 2#"&546>" !  ! "Ov 2#"&546>" ! B ! " x 2#"&5472#"&546).! !7" ! V !  ! "w 2#"&54672#"&546?" ! ! "! ! " ! " #2#"&54632#"&546'2#"&546" ! " ! K" ! t ! " ! " ! " !4632#"&74632#"&2#"&546"! "! ," ! n! 0"! 0"E ! " %N,`H% RHf7!#7777''7''7''7''7'$"$$#"  ; ; ;> ? ? @ @ ( D C C C B @ B A V  )3533##5#6#"&542#"&2#"7#"432V'SR)U, , ,  OO%QQg, z- ,J%J'72673#"&'3&IDI+FIoKLnG*!AICI-6N]_L+>M'7[TZ\T\?)'&&XQ23275#5354&#"#"&=3326323##"#"'"&'73254&#"'254'"'4>8P9T"/hm! o(8A]5DLGJ)J;.)5PC*,HG5; 3IeS32: hVJ,/eE.;-)5PC*,7AHI3;7\):Q9W@ II A*(<e@23275#5!####"#"'#".'73254&#"'22674'"'4>32.'"'46322674&5XN4*""&R* XN4"ZH39 "0d-'D",,5)NhkM62 ;$F_vE] `IIM ; ,R?8"-[ 8+Fe+4&'!5!##".'72654&+'326 ~Fr+7,/hK(N<9'!?*Ed072D0aHDEEIIC2A(U1OZ';PIL+&dd3&4LI$e=2'>54&'"#".'72654&+'32654&'!5!!6{325!5!!674'432")::PCJ7(J,b %-2 VF5|{F7 %,?>:R71C *?ԟ;oN8DFIII4 J)!-d$Ae>.54632675!5!#327#"&54>54&#"#54&#"sh2-AuX@Q+K_89'77'*(9';DFd'77'7%&4J2,)@@SDa73cIIf J20Q4+'!=)M;%;**>& )/"FU >{?'gB3{X72674'%#5!54&#"#"&=3326323#'>75##'& *J# m$75##'' *%U<1Y7 M7IIF3 ( @={#2674'%#5!#'>75##'#'7' *%U<1Y7 K;R:3(!/f# r&;A`7DRMGLK(.dF.;%8?Q=2-6BGN/;6\eU:A* I1"!0'M57 TJ MMHMI(;K:.)6PD*,6AHI3:6[eO@A*&I:J ]m #)<'P:3 <7.CI, 0+WD23275#53%7'73####"#"'#".'73254&#"'22674'"'4>:S9T"/h1d?UMGLJ)+`I1;r[SC*,7@HG5;6\eY6A*&I6$J 8MN#P;2 <50CI, 0+e<7267!5!!632'>74&#"#5#"&54>32."#"%H9I8]yFT.#7IH+@m"L2 % #/>(  IIP[9X0m1!,/' $`D'O:P4)4- eA%#".573275#5!##4>32&'"3275!#'32675#"&{";9eE9" < 2' HI#*  =L($D)0/$8X2(94D:Pq7)@PLD%$."-IIX1F: 7Λ&3::%:(3.D e#".54735#5!'# E.(; GH :DII$Ne).547#5!##5#".54547"327!;"6ENIIoW2=*(2.*Vx*IM*^I0%IIܼG 9&6-$P'(/Le/346;5!5!##32>2#".573254#""&#531>6.>.,"9="4lRB$34P_-q H6y__y"!`II1= I 4L(6MQ7."FX7p"]le%2675!5!##5"&547#5!#8e $lGIt5@NEiY&;,`:IIEFb-#46 uIIg)9PCHnX%*-g'ie0C%"#".546;5!5!##5#"'.'"'46322674&7##"3>3232C YN4"HI7T&-'D",,5)NέH 7. '&)E] `II|-F ?8"-[!8+.M ( e(6323275!5!##5#"'"'73254&#"pN*)'II3%D*Ur0INpK4 & II!2&V:Fv95 8e746;5!5!##"327#"&Ag68z)5+6(_3DV{lMmpIIL()A$V*te&732654'7#".546;5!5!##"s(1'FB96LzX6_<"`Hl$ %;#197'1*iP`.HS'De}II#ce/46;5!5!##32>2#".573254#""&1>cY6.>.,"9="4lRB$34P_-q H6yy"!`II1= I 4L(6MQ7."FX7p"e%.74>;5!5!##"&54632#"&>54#"1A+m)2YM>4#5 #:<g>(2.7@,hII>.?i'-4B,& *= L);31`e####"&=#5!26=#`GJMC@U*`[-$?YU>I)1V4e4>3!5!5!###"'.*1'\4GI?%4 !! 84+hIIr;>6 !*+04*e3%275#53##5".'3254&'"327"54>320rahHI!&*5eC)(15.B; "3+K^-II  0FH {)6.0Cs 0 eEAe&46;5!5!##"34'432#&'".*E4H!(F&,/b$In?' &?W`II+!C&1*M >B)93(Qe/%2675#53##5#".547.54632#54'"63"e9`HJ_r$: 7-5G3.CI(1:0S ư89II_ & ;*W*0HG(%0"R ES48e463!5!5!####"*JY8GJ B(%IIOX 8e'^X6Le 7"&=#5!##5'275#Mh*IH*I<7;X@II'J7%-e'7"&=#5!!632'>54&#"#5'3275#Mh*D1E^{E"S955H2;-;8ۦX@II?WDV0j2)&&1#%-0e$%67!5!##5".54672&'"327'M HIA=5L#YF G8+'7.#$ IIܮ/)<0Eg PN,6vBe&235#53####"&546;54&#"#&546.IhHI b )4N Fc/7II c r!/0=e46;5#5!####"&%5# )^HI bg "II NpI,e4'#5!##5#"&'326275#9,HJ=Q`$)5LPD)A54)II5xd ,Q,30ZLe#"'.'732=!5!#dK6 :y3 "'0?;J>O3BT 6")3D[)-).IIhe'^Te%73".54632675!5!##'47&'"s4F?%NN8cLYCBHGJ/b B&1./F$K3!@-Fe0E^GB|II`r*!!(. ,:e/;>75!5!#"'#"&5463232654&#"'.#"32>P >%A,RK^'(`HS\DWR:-"+(( I3)VV' `4kIIn 1;,UfY]gVQh'NK0+<  *Amu- e'^We&'"327!5!##5#"&5467202,.!"B<^I@CGfWHFl9'( <!IIܮ4j?Dh e )&'"327#%72>7#".547#5##7E'(d+yP2./6@,28:.bMGM*!z8EW45( =(*6&5IGe 7"&=#5!##575#327'Mh*IH**:.EʚXAII'&,)e#)###'#"'.'732=!5!5#GK&D 2a,3 "'0?;J>&%,Iw.6")3D[)-).Ie57".547&546;5!5!#!"632'674&#"{Y=_R;AK#K&:!99!;,=09X{7K< *I-98K>&`II ; 7' .! :#53__O]K##".'732>54.546;#"?ZZ?bK)\A+3Z`.)?[[?>3 N +;470W2"'632#"33254k@ 6=S&7 rP\G wBxA!.:)'AS`]L527#".54632#.#"B6.9)(@R.SQ4a^(%42>7#".546;#" &)D;='E9aTC9 <*8%8IG6&A!/46;#"63>767#"32>7#".547&E9aTC.!"&)D <"  ')E=:$C{8IG6$ <* !  ;)6#0#$J;2673#"&'3q+FIoKLnG*!-6N]_L+cEX#54&#"#"&=332632E?# p$L7#-H###53'2673#"&'3MHMq3@HoLLlG1/H6.N\^L%1\###53/54&#"#"&=332632MGMX? l&:B\5CH2 0'M58 \ ###53'73MHM==YH:3###53%7'73MHMB1d>|RH7#^9'39!W se##3MHd8b#53"&533265232>32#"'732654'"##".5732654'.#'2>54&#"'4>{RR}zFR96];P5" C7ECRPB:* %!+Q#(1G( /3(S<29{Q)(.%$>3' 8*YLTqqT6FE7ZAF& 2;2o\Ys1G0@/ .- -@!3HK2!/"3 G0 ()  (.2 6#5D6*2!5!&3,M2.#"676322(1(! 0!R +1$&;<>32&#"!0 !(1(A;&$1+ jJ!!72673#"&'3t+FIoKLnG*!F-6N]_L+e'^9h e'^: e'^x;e'^m@hce'^mEhe&F^Ee&O^Oh,e'^ESDeH%"327#"32>7#".547&5467'#5'%&'"'>325!5!!7'432+ML>88O#7( &)B=<& +4)H+b"+$o?|B-&A-=8:% <*7#5$&>/C )=ϛ9lM7 S]-HH5J* -eZ.54632675!5!#32>7#"32>7#".'47&54>54&#"#54&#"pg0,?rV=O,Jhr4="00",1 '*H="'*E*4)";"10"3$%7G,"2=>SE\61`HHd L3*G-'+/ <* " =)1 8$&>$>-+6!$(%DR"0x@f77.5463267327#".54>54'"#54&'"J& /WA.=6,= %.%"$0&'9 '.'K'6%#.a/>4E*'$ #B(.#, # 9&34"3>'v:SfO7.54632>32327#"32>7#".'47&54>54'"#54&'"J& 0XA0= /&2'/'$#$$  + !8&.,'.'K'6%#.a/B(J*."?14 $,  .+*/;'34"3>'s'C;eE&P{Z] #"&546322654&#"i]^fi[\j:CB;6E@'aigc`kmG>:DF<>Cqe 2##"&'463254&#"M]I#9J\i8!a?"$5egRX7YFI^,/\'26Xe>32'#"'472>74&'"X}/Z}#72<eB;/0SN?5^#.qU4W7 +J4/q97D/de3%4&+'3254'"'>32'&545463226b6A,kpfO-'%66!@&W?P7osB/B1?KMDB  ;(T!"8!HX t0>*ENe#,#"&547.5467>74.'3254k_GE[eZD-?(d,CJX$9X]eDUiWI@OOCHW?L3 B $=]+L ) FKK9ef2#'#"&547327.54'%XML-5Og:D E.- ?I*n[_m"f0G=8^ee0;#"3274'432'"#"&'47.54632&#"V$HZ/@@0 @!'8C8" RjV43_BH!)G(+DIH)(7 V(1'#_K`2K(74&#"3L#fP +! $ WR"+ 2'^/e%7,H_ *  1BY%%/Y*#jQ) 2#"&54>32654&#"1I49:" (,!))A42F0 #n+",!E#53x ;'g)e'^7'^j'^;@,e 4'#5!##5#"&'326327'5#9,HJ=Q`$)5<6#]<2p)4)II5xd ,!,L+,8e463!5!5!#3!5!##"*JY8GG B(%IIIIX e&%4.'5!5!5!#3!5!#".'7326v*GGA.#T97b@% ;>b-#46 uIIII*)9PCHnX%*-g'Xe>32#52674&'"X}/Z}&;?HOmN?5^#.qU3Z<&{A7D/ce/46;5!5!##32>23!53.'73254#""&1>cY6.>.,)P0\,34P_-q H6yy"!`II1= I P/II#hD."FX7p"e(327'67!5!#3!5!5".54672&'"s7.#$ HH[A=5L#YF G8+!,6vI IIIIq/)<0Eg Px#"&'3274632#".: @#,M0& !8GVN#h " +( 3254&#"'7#"&54632V&/"2*$;(1C9%5D&)!6*_1)@42&C"0 !-72654&#"7#"&54632'2654&#"7#"&54632 3%k4&(AA"D_ 3!o,.90@#(8c80$?3;'1080FB,$4@.%!5!##5'#".'732654&#"'632>G3R4C;aA* 3{F(7?()/S<^2 [?33\~I:bi:=-'N< ek={6&'##5'#".'732654&#"'632!5!533##4-3R4C;aA* 3{F(7?()/S<^>   3JJ3:\~I:bi:=-'N< ek9 [?3 M3 >3!5!654.#"#"&54732632'&/32654&#"'>32nX $l6J0 42Q9HR@o'";+*9(EA4*?&547#"'73274&#"'4632>3'23!5!4+"&=33G)..48+5G"3'!=513>(.^J(c>.]:E1+$hkUUkr:d F;#%d1[0N +.N)#,5=33?,J23!32?67#".'32>54'#"&=#5!6=4&#"5473V-BS' 'fP9^8)32R.(< "  7.>f- 7W6E3)2 (/!ZoD_|V'!jwU#3)*%( +-3 f01@/C23#327#".'&'32>54'#"&=!5!4&#"#"&547326h.DU2@S'AA#QE3313-$B'2"<>)%-TSR- ==T7H3"p9u2J%VL^R#/ >*4S:3.8.21X092675333##54&'#5&/67.'#"&547^O>393TT3 632$eo  L&*'"$pC; #8"6#'%y\3j;D+t`N8H4 21& G/3$ t5y;2>54.'&547#"'7>54.#"&54>:F55&8,7 F.6R^R6d,* , %* &-#gK>!+;%4 2J.1&6($*R8Mi*1+ %'/!9-#;.2#.#"#"&547326324&#"327#"&546(23GG ORR,BI>F, #;3O9H_5A@1:'+Sz %/9#LYG#4.#"#"&547326324#"327#"&54632654/&5467LW3 >.DTQ,2BTD.+ #7# %\Z%*IhiIW((/G_A5@1/1+T#x"+'8(0:&9(D$)!*"I>2#".'732654''254&#"&54632/ "2)(H75%)3 5Q]L#".'732654''2654#"&54632654.'&547QP5,"2)(H75%)3354&##5.'7z86H0/")( [63 Eu6")C`*.33.&N4#B%'6MfXOMFX/+33##5./>4'"&54732677W$Ld3443:3:*4(%1( &'=5FaV3R,1-45)*%/DJ+{+2533##&#"32632'>54#"#"&5469M.3443V^!F O",&"'*I N  W15HM3`7#)"5"% O %1^.%27#'47#5!##5./7#"&& !&')At533JN &H $ #a133AAZ (R8  8B>32#"'326?#".'732654'#"547&'74&#"32 I4 '.',69(#)ZJ>g@&3"5R0<3% =!o#>(<$UE$) W<P-JcM|B @ykAE.0,"4!W>1 .72>54.'&'#5!!2#{#bDLgH"L6: G5Yi 33=.(L./:.#532654&'#"&=#5!!22654'#"'%8/$22D"9rGWw%.\30%[ML  C1  ;) %> $@t3\2&?^.33! (/K&Y.@7".547#5!!327&547".'32?#"&'&5332654'(3 KYK9<10 #BP2$*%,SAH3(4&"@(2.a1337'!kmHTjN]X !!# B!-"')!3_x+FS}A) 6'$&3$675!5!33##5.'#5.#7p_ 63JJ3(3+@Y+)Ca,+3AX3=W8?-KV1:CY#"&'#4&#"#"547326324&#"327#".5463267>32'"2654&#"532654&0g,[3EG g!}/69`:, @*  "#! *7%!/,=j7_-X83%'/(240gCI:E9 C<9*#S )5. $ $>Ab!>-4lxE49!,3%F'223!32654#"'632#"&5#5!654'".5473.I;d&!"-:c4,'E<[ #,!*a7>54'#53&5472654'/2CfHFV2 P6&):4I<"G0,N73k*EFHZD N=%3]G54#"'62,'M 35% *>.9d?'33q 6Y1&"!=8[?#327#"&54>32533##4&#"r, )F>)3& 3553Y$5@?3^+1:('c3W+w=&U.+/&54>32#".'332654&#"%5!, 8&KcfS5+# 3  $2BLF57va '" '{y 1&@)I%%7;X/:\IFa!w33033##5./67654&#"32727+"&54624\%jI3QQ3";,C&,n'B7) ? (V~Q8P)YX3I% 58<"*$3- 2DJ.'#5!!67&54Mc3Og,./j2"33!PO_ Lcb-5%"753##5./7&54632&#yR3GkMp^),*' yU-J1& DJ3VGK)[F=8Y325!5!##5.#"c4#4,b333B$&3"&D/F"f33BE--,  s&>32533##.''654&#"72767&#" n6F4==4* $%.% # 3#43B1PE3:H "&!$ 9 ,+2&) S.(3254&##5./67&'#5!!32#"' I<38b($f4R9>(69vKZr7 #1?ZFA_ %M#6@33*8&1,'aOaP'% .%.#'675!5!##*M!~/3%Y*6b++33IX,G5.,0#".'32654'#"&54632&#"326%5!%`K9bC:"9%T,P"5R3O)4! K%3|5 #!9 @s1Jm_:Q?3Z7?#00:233.!.'5#5!##54&#"#"&5475>N)33`#B2U)D>=79.&!"33C+P,],82N.67.+5!##5.')9Ye 633)9?Y7?J"1#9CE33LCR F7'2j."675!5!##5.#754632#"&23*@Z+09twF&A^6&33Y8?., \'".&3"&546326325!5!##.#"4&#"V+8>FG;1.+&k33 3%'9#.%&;0S>@R0+ 33!JL0)56#"'73>54&#"563263533##4&#"327#" 4$E5N3::3Q$!, <X&)-1=8k_  $W3^s/6 +.&'#5!##5./6&'5-~:3BdE*I;0|UL#A33@]G:%3(?+7qc{.(6325.'5#5!##5.#"#"'7326s@5"'2 B_$53 :'30A,-84EK7"33N4?4j" E.#2&/32>54&#"&546'5!6lY&_:&: M$B0dY:o2[p!H9!(# $<"%*9+K33_ 4632#"&"i2".$5!&/32>54&#"&54635-AY&_:&: M$B0d/3NK+o2[p!H9!(# $<"%*9+K{.+532533##L)Rb3BB3.38M33###53'>32&#"BIC3G9* DXV#BUe33:IdNJ&Ww)$23###53.#"'67."&546ц AA3@@f,[o -@Hi)m33Rv$ *!$%H*iL"'2654'7&'#"&5463267&#"0 *:()(0M9< */)?/*8BA9/"9S @$463'7&#"327'#"&B1. !+1( )3&0b)5?"!#&r/%)?+dsj2QG~8Q%) 7'?'/+dZi!j2QG~8l@~8/.7267#"&5467#5! CL^O<&[rD3  :fK$31n5qL,7467#534&+"&47326323#3267#".(GA-Y)*3,2 K@<G>=0 C0H"Q/342H #6M3j@~  :9TD6{'5J4'I/Z'7+{({ 13"'654.'&54632#".'732654+9 &-0 J[g7_G:OC# & /8- Li 4 ,#H/5.PBTA4(84'  >426323###5374&"#"&547c)B&GRR3VV3(B`T*4(,33$63!,7).1<%"&=#5!!>7#".'32>54' 4632#"& %) S(4wY=a9'3Q)=#   * 6(33[%p"YoIg]$$6-2(   4 a.(3"&5#5!!32654#"'6324632#".#4C9e"(Hv!- /733h0C# "mP_-!. '!##5&/674632#"&eW83C,=,E$y/(" !%&]23Lp/8B*5j "fX '&R:2675333##54&''75&/67.'#"&547HpCD960O>393NN37ds42$eo  L&8!$/3#(8,8"6#'%y\3i=C+GT*8jU`N8H4 2!$& tyu2>54'.'#"'7>54.#"&54>32>54.'&547#"'732654&#"&5465,".]," #,* , %) &-# :F55&8,7 F.6R^R6BCT G0 .8(!*4F2!$19"  *1+ &&0!9-K>!+;%4 2J.1&6($*R83W )$8 3 %1   #&$,32654.5467#"'732654&#"&54632R=2GG2 LZL/D7#!+45,$/",( I5'9 &-  #("2'fAA 4&#"326'2#"&54>pA4>I@4O<8DR^IXncK*8. Ml,)%#"&546332654.'&547ls=.A?1   19O+$==* 1EE1Mc09/ M=4/!1 40 +0=b1#%#'&/&/33254./&'7^2a"HC39@!* R'u  H:''*"6E@~$@;#''=.V  *!&#-?,'2#"73>54&#"&54>&/;1!)BD$a3+mG$6O>$1: 3 #4X7A^/z C!*4#Dz%1= &,9C 262654'7>=&#"#"&5467.54>32\>s(>h%:r"B+%3~aGER'D@=&7/43(J/#C.@ $:O0", *1b8JL?'13M/%8 8&+61%23&5467."&546?6?&'>32#".'732654 Z #+) .! cI>jF+3=o@1BL2228* #3-(8.!(! A*ZwEo? Hm]E?`0;6363637&54&#"+"./57"#"'4632375' 89/"NF 6 l6(,x&CWL),*&v=g 4X:7 $  0"32>54&%#"#"'4'76326323;2?*-,;3N#dJ/%,$/-9/'   18#@>/#  JOg3"# >4%>5.'.547?654&#"3"&54632H('E6Q &1$&\xwR:)&:?G;7Kp I4%  - " *#/=pN` 3 0=+!7.258El: . '.+'675!5!##*9V$ %9!~A3@>e X,X.6b++33.!7.'77.+'675!5!##`:,n69!~A3H''%&&Q . I7 .6b++33$X,ba %.#529{M]M/b3=aOIf$ 3#2654'7#"&=#5354'80AA/F-,4_D99VV1$19F3Z/&R*."'<=sJXB3KNba 72673#w63/M]MOa=(K&$ %>75>54.#"&54>32%< 3@" '%*8(1[,Z :3+$'$. 4)34P: <1732>73#"&5463232654&#"&54>32#'"@8K}S5 3AR-2BY., " .9(7, ,!L;h7H# V]nѫ"D8#3(#3'(?=8N/' 73#"54#62i %*L9TG&7N#V.(7"&=4#563232>323#"&=4#"l + 2" *1&3 N?M?)" 34)51e+%72654.#"".=4>321K)! 2,# 1G$#G/98#`P(#3 $ "3 3 554<)"C.Qdt $326?63"#".'#"546326.,O+&?43473#"&53%/YHJX 7,( RlkS%0 wX 4632"&00!H $!&000'(m+82#"&54>4&#"3262#"&54>4&#"3262GC84F.e2&$ "!)C #+C86D 6k.  )("mD86DD8 ${&"3 ( 6%5CC8 #,| ) #'+h>26?53###"&54>5&'#"&54>54+5326766+;džAN/7 '$+$BJ;& G8\>]P "3[9'Ai JE>&9)H+&WI]7/$;"A /X8DaPB26?5!#####"&54>5&'#"&54>54+532>6+;@AN/7 '$+$BJ;& G8\YWP "3[9'AFi JE>&9)H+&WI]7/$;"A /X8 aJt05.#"!##"32>2#"&'67&'###53546323598G4׈iYK$>! c6\w@}}kc43 q-{L:bA!f# (asINagn@A:g)Q783567&'#5!4&#"#4>323####"32>2#"&-{MwZ2JC*@#B/am@_3LcPK$>! d/uA|T[gnAf>H&@;"g:A@>/!f# 'co@"@&"@'"?(h")X/@3>7%!2#"!##".5#54&#"#326} xJ[J0C]=Z5%biMFu'L54W?2! DY- +Z= '9S26F@Q0NCA41 *H8*AXo#Dk64 +EC]Ic>+A 8[0OG(5h"+%87"&54632>7!5!##&''327.#"Pny]cn-p! C A3 .% jZ#  7H7rSXkyEAA!-%3,3M:3"UD'9 $ J#%2675!4.'#532!53##5#"'763%T )@E ikY ȇABcL%0@Z=1 AA54'#53232>54&54632'*ʉA$0EA 3:p <>2SDHJ&)4)! A"Bd#'KANE.J3A'+c 'TZz.}'074>327654&#!5#5!!32#&'#"&7327&#"<>*>\4+B:M/E"_6,E")Y^D]@;*L;KHY+)265-"AAv/.NM1mH4SL8(?L!4632!5!5!##".'#"5!32>F3#<’pZ1MG*9#]O!;1S.?6AAsOd?zY~~f3&.74>3!5!5!#!"632#".54>3&>54&'#;$ 6 -t+o&tnrn,  "54&#"#"&5467'32>7;4=q86:;kb 2 ; (K'' &% )3!W- g\'"'(l*";%=KAAATW2OQ? &8, - 3M  KA!4%2;5&'#5!#!"3!#327#"&'.'".54[ K l>2O+#! ;+)X  @=;xx7AAA$,@ )70  h%#"&'6%5!5!#"32>32zM>k<1&,SAOK#)/#>"! euC!AA )G/3L )%4&#"32>".54>75!5!!wWPu2K, \VT3/[<4(5,0A1 4$".4>32!5!5!#!632#"'&'#"254#"77%!(%EaG

h4:}YK"3# $ u(7AAA!1X-mL37:K}9@(,.76325.'#5!!&'#.#"32632#".&Z<; I3 QEG2$i!HGU Bn0 PiW0W AA#W < @5*P7 3-"N*#".4232654&#"#"543232765!5! 69x$2/6f(H@;mZ*LM?l") @Mq.?e(>% .5?=>8B5/AA"7>54'#5!##5#"!5275!0% `AXeb !Jh >,(,>AA=G!.R=,Q"4632!5!5!#!32632#".5#"[+#Si(~ )Z5Id6H>5RJAAoz0 .+*QdE7>54'#5!##5#"3270 g@Y_b >YEhB-+2AA=3.5fKQ<\)".54675!5!!5>54&&Ay!3%,.PR  3 wm]H1=A.B/[AAY+" A=1H]#732>73##5#".54654&+532vOW75͍@Lb(X@)L%*-H AE((  '7!5!5!#!">3274#"26wEl1#B2% *)A$?Ta!W+ZQ>90MO%;tAA>&!1 &G8;IB1)+*}!*!#5#".'>7.'#5!#!352675#Az&Q^ %5!I?>0m 9_Vv3E32/ (1AA?S-.;oJz.8!".543232>54'#".54>3265!5!#3267&#"*pP6`A(; -hi); $K4^HK-p^y!)1I,=Ij+!1'=*a-'+,JPaAA]:!WqO!&(<74>54&+532!3##!#"+"[giʊ@&)5YD?o?WEAB)Av"4'#5!####"&'76732=35!f `?''D'@9g+5s RAAi$5 m*O|Lq#K_x".54;5!5!#'26=#"t;eH~K7$LZ]i=lAAeYM?0&(=bb&*%2654&##'"3"&5467'#5!##!BZS>]\?T%/! \}iINMGj|_Q|{;[AGY^B%; >}][p AA qZXD 157#"&546322654&##'"3"&5467'#5!##!R3BZT>\\?T%/! \~jHMNHj|_Q{|*!& [AFZ^B%; >~\Zq AA sYXD+!5!5!#!"3!#327#".'.54> ?$'+N +6%8 ;*)H/"+)=xAA.0@.= 1*?5 4% #)%74>4'#5!##!#"&!54632#"&3/.$sA  )z$!Z]wpAAEtv!74>4'#5!##!#"&!53/.$sA  )z$Z]wpAAEtvt 325!5!##".54>;#"v!6U.]I~01;^ 7$1(LDG3`AAc.D"LF #*@]d 2#"&54}&2%57##5!#@dBFAA.#"3###535463298G4@}}kc43 L:_A@A:g*P6"B23###534&#"#4>;am@\\2JC*@#Cg:A@Af>H#@<$@h0#"'5327  Y_cUX^ (A('h0#"'5327#".'5327  Y_cUX^iY$G%cUX^ (A('' A(' z2#".'&#"547=}!h&=!4Z(J&x)$*3!#'|&4632.#"&5432.#"+#4hL=]j&%T*)%(")("2;#M:T\HP &  @2 !m".1&#"#".5432  -U $) 1++/-#4 9)#".54&#"&547232632#"'67&#"2] $I/a3E& C!+2+ 5/)?4&5$&K, 53& #?1&#il8# 10  #.'7; #?1&#i8# 10  $.%2675!4.'#532!53##5#"&'76#"546323%\*q  ik0' ɈAY"=" !32 /^) A[\A33X[0  !*7#"&54632746;5!5!####".73275#"_\Hv@7!5!#<^TA8,h32#"&547#".7"32>54 0W8eh  8M5w-I+ FW#4)29',3%e]')E8/aRb?(0$?2. ,p+#463 #"./&543232>54#"#"i C^!>;h2!^H*l{\%t4;7[5~H2=DJP1+2)[-3?YI.,t9 $ !*))+532654'5".54>4.5474&#"32SZ]`Uj"+GGJGG,!jUNPQN5ZX7Z@"%? ! 5%.C!!C.#3 "@%"@m<..<`3273#5#".54654&+532*$WOMe@@Lc7nCL%*=/<(8HFE&9'5&'&54632&54632#"&#"yH; ]#<`VJ9p1!AO5mY%47CHK @ -(/("=$7@0 G/V" ^F#7" q BO D DB )$< G,2#"54?>54&#"#"546Qi *"9(E*&u8:FhK*kJ66  ,z_!;4,*!$"4-^GN-C`+" 3=YX"4632!!32632#".547#"V*M-IS%/k4dmQ4@2TG@"6`jK1 #=]c j74632!&'.54632#"&#"#!32632#".5#"V* @KG @ !-.#`#K_%/kcR1@2TG%) 0H (*7 ZxB #>^wH!2#"54654'&#"#"&546(; $ ()=1M'%+&C!1#<I 5B#"&532>7 YHIY 8J7 UilR$1 4!&767&'#5!##"32>2#"&35.wZg75F;8L$>! a0nD-{VZgnAA . e# 'boќ *0<.#"#4>323##"&/47#532674&##326@^v7R/ @ &=kFTv8cbLEt'L4Ozy29Z,kaA6Fjn+=5%EO9&5ZW2AZn"Dk65 в$AAQb7[5 Nfrx2#".#"#.#"!# #".'&5#53>32>#"&547#"&54632'2>54#"%3>74.##32>sI, %4\;@z  #N80$ )  !fTBhC1// {yM" ) +\FMOdhihW,4$@tu4.?,^>+ ,;:) $($A! "! EkI]+:iN>: A]ELw7 AMD$&   t}Hh  2#"&56#".'3327w%( #1X98X2$ oxi!.C1$#0"aa< 2#"&546y"*+!5*.0%'"+-N 2#"&5462#"&54  )!+5 B)4"*$!')("+&#+*%2>=3353###"'#532654+532# (/ kyssyi8%I9C$A*? 5"xDPcW( BRUD%, u1#32>=3353###"'#532654+532#pp[)/ jyssvi8%I9C$A*;,X 5"xDPcW( BRUD%,  $)%*726546;#"#"'47&546;#";#"(J8&d)_FCOX7!UL/I#,  ?0W CU>1!Y8GS6'X.! /246;#"#"'4>3&546;#";3265f4!c*&z^;PX!?UL#  8'-F1>5H2/ES'S7IS1?F $;<"3674&+'32654&+532#".5467.44@F1Z[('d3B> p>_5! |X42$= Sd B0AM*'V( !SK7k GX(6)Kq,D;346 #4&#"32674+'325&+532##"&5*pj'IH+P;8JHXYIHd3C_olme 3l!B-#@-'OSK=SK7$7 eJUfP62#"'732654.'#5'74&'"'4>327537&54S.L6fEX29#(<)1sNR#*O?*Y08]+AsP9OAB@OT12. 0%:OܠMd"c @Bdq&": IE1%3267#"&54>54&#"#54'"#54632632D& .&DZ-6--[G? SH8S'5OQG(0(K4 G XP;=XE5U+/'30F'8F'=F'1G '9G'9G B.4>32&#"3%#".'732654&#'7"&G"9; M^ 6?f(  Ն-*)(^b-6KXb. P/% 'P8Y  D;/%*G3UH 232=3353###"&=&+7~!1>Ckkggi8J,Lg:+2=;g9JV?TJ)#34.#"5632#"./4'7326Jhh 3#L->vn /Q32"WE'9;-)( X ls.9. # AM9'732673#5#"&547.54632&#";#"n3nYg-,,L~}K 9?l.[JC*9'TNY.:747"&54>;#";#"27#"'4672#".32654&#"X#G(! J<)I&(?TA44 ~PxRp'"%'}H/D3"4 S4#X.\}Of0dEP ;/#&51346327#"&5467.#"32>5#".WF*U>3L $2;49((" .     /:(EOa):>+R _7NJ=f $($'0 X #JS=653##".'532654&#"#"'532>7.#"763632u, 76 ".4*,;;W*@-%6 0*.B$9CH3Q=He0ZYD7G(7_JMW')=/BW@X*a#353###"&'732654.#"'6gxjooj $.V5,o )PBG2&L"=kQ&E/%;[ /LK-? [&4&#"7633267#".54>0+:1C-K%C?&0c9wX+NJ->YZ>f c9'.91(XF*]&>)P8*>!#*2&#"#".5467&5462654&'"$@-)E[>YY>-JM*@b8# X77p?*NGgIVYCGnO)$4/AR)@N+=,%1;&7C#732654.5472&#"#"&'X j2:N@\]@<4.BdA\\A/LN)b}G2&"+<.[<#E05N'X!$ 54>54#"76323274632>XY>l2C/Kqh=XW=@-H/{:)?#!3 gU8);!(-9K9_2Ed)#3%#"'53674&#"76"&53327dooG]$H1$%(M-# 1%srO;T@h+bN99"Pa+5RՆe:CT%\ ".5463753##"327;F5$wRqq9D . 1T6QrlSF;{X40#5#.5467>54&#"#&54>32326734p,z-oTZ.1/5-a3 :%1H$TL[BB:o.""bS .%&06 , "13HR 8F+%7"327#"&547"&54632&#";)')LJB[gN;t[=Y=+,4* TTXgVJ/;+?MUDP461#5#".547.547654';#"326734p3$85%N9-b-< Z)1).~LG9,o4v ?,A,H)L &!RM'G+N "72654#"'463!53###".>%!QK"$HDSqO5G>7".=4+5323673#56O$%[<%"_rrF7%6+T,/ 5 _C64>32&#"3%2#"'#'&'732654.''7&\ 553b!>9>& 6gfkKCWb"KB  Q,  J( 'YU.LQ~5A"6&   8d"726=3353###"&54>32&#".;osoos'AA"l!77,.9IA/T)7O'sy9S) Lu(".54>32353###"&54354&'2"-&RN3RT,8@,kooi\:1X)$O6+-BNr: A*: s@.]<#4&#"5632353#5##"&543s#%=jppj.$8+bQ, X rj&;&`+'#5#"&546;2654+532"&#"32673+qW\k"`+EX7I|*  .& 3uq/t9x_(;UT@(2:7265&+7!2#;!"&/#5/>lIe3fG(V-%MT\D7k TU$#5#535327#".54632&#"po"6*7E9't)0"53 51-SJW&9a32&#"3654Mhs %!"RAV~ ?+ B2(XVHl#4=[k[=l+QO1 R F_#5#".54672&#32673pVYB[,jY5-'64+Wp,>*GC&P`N/9k*'K1#3"27#"&54>32#.'&+532>74&Kpoh,&1(>P!79f{5$5 fX {%#.%U3!9173267'"&=4&+5353#54:QOUm ,qqV(".`6 T$J&2353###;#"/#532654&+5&0#mppS9 + &F10 6%-1a T1U,*%T3"&547&543.'"32#"'53254&#"327)O+?.-?E]2M`5<1%YYBAM$J3~NOYw0&SP"*4$>AQ0%.B;!9(6[(+#53ggOe #46;#"#"&54323254/&=8*$6e6 :%Mn 0p6g50>$,S3- +$_*#a47W/<#3qq,^4>3'.#"#,JM)~3_ #*FUpKl8SZ)  `N,2#4.#"#&56>@{Hp0 XdC1A5&'*"<#'2#"&'732654#"'6I][KGh<71J7'H'%78YI D$3*"327#"&54>;)7v2=.CaXx$, 6)\-Q*_H%: Q\#+ 46;#"327#"327#"&547&G:dWDU=*'(O$?!*1'(O^XDY9KH7D=*%=+V4/%(r #".'3327=#D&>22`-x)"-[=t#3` O'7#%7uh]Q"G_ #".'3327#3"F&=12a,y) oo.Z=f)#3#3_oo  '7#%7#3 ]P\MLoo:& 2#'32g !Js2#"&54#".'33674&#"#"'532?672#".'7326%3274&+73274&#"'63#".'* %? &5b>-K2*oM4v *#)5#Z-O)H<9$p]*" +R"4H`4a!"db;16b c3'#5'74&#"'4>327537&54S.QT56* e).6!!-#,rOU $U>.E#,O,AtS6<&8F, 8(!6_OݠMd!~c +2&I^J !: I*E%327#"32>7#"&547&54>54&#"#54'"#54632632J8*'(J$4!  '(O_LF**-[G? SH8S'5OQG))`;=* =+F3CN(.$OLU>XP;=XE.E&e"-327#"&54>54&#"#54'"#54632632d#1&4F#*##E80&@7+@*;t$-'*'$317(9g4&'e"3f+J>3267#"327#"&547&'4>54&#"#54'"#54632632W& %8&=I1 !#F61?7+> %@?6)'"'+"0%306(8g3&'8,#0"&5476;54.#"3265_B@X`=?# (78+'4_\EB@B\_&7 P9:JJ:*463227#"=.7"3>=4&hSNg+3,t/B #,.# #ANgI<#"d g (7+v.*.+]&7432654.#"'632327#"&5&XF7c =*=?Q0k ,7H2M^T[Q 'OiU  Z[J +#"'7326=4'732>54.#"'6Zr""d}]lk6OG-GG++51#9 cR="' lH`FL83(HV   P!""&547&/7'32654.#Ml}N`7[4$ M@b%"!&"L5]E_^Gp+"Lj.Ga-.%8?!%;#"&=#"&=4+5323273 "i!44E[P "$* 4nE TqT:T -"#!.47467.54632&'"327'"#'2654. B&.C`v+Y!P %o]o]fq-H@\]@3HA#ADN   Rb  +?-=NL#8*%".54632#"54732>"3674&j+JF)`CSf "6W9O @4+@ 0*#`, +)Q9HJiX=c]>%]%7 6)2&!,-3?h,'"&547%327_BI>0;AI+k5hVY4P1%1Qc)"%#53'"327#"&54632&>q(>5"#0.ns"0'Q[M7O&^toW RK B%2#"&5464&#"326%54&+'3254'"'632'&543226e0<.-0=As"%'!#%*g5A.lukU .3N`B&Y@R:qv7C.*J@,(5?-0=m342'/BKPDE4OCU$"8"JY x1 A@I?<(#"&547332>54.5473vucPPH-?!0::0P 19?2!x{b0310IZ%BG+4N.%#(C, %+!07Z<0%%#"&5467635#"&=3;4&#"3260ke=54X P KbPWHJk\KJchoqc:`N%nQGPJGJQM<F'3%#"&54>7654.#"#>24&#"326Fmi/(6!-%1,PdN'++P\KQreHPmj|~g#;*$ &/',T>blfM@,I0Ka^OH^X<-9#"'.#"#.#"53.546326324&#"326pXP8$$ ()&$$v(V47LfWY7=jWlP>:=E@<@>Ys/XNH+"#[\2"  P0LYNN~T=YZ>=UR<"%#"&547332654&#"#&54632o P QLJEG;DEPy^Zyo ))!Nf]LJ:?M@]e^W<&%#"&54733254ᒐ&#"#4632*+fPPH4D<7#"&546326324&#"264&"326dg{ -@B]oLGg 0CbX{r9)*=:Z5>PTSADPd~zg-<M'YAJ[YF#Fl)2:*-6>AGRBAX`P-*%#654#"#"&=46326324&"26-1P1\43<322VQW$G01F$1&P$3:dABd9-TR11RT-[YVV>n]77]n<%%#"&54733254.#53254'5++gPQG0# \ADMP0!RNOpeI88CHW#32<qr< aFc,\<oA#654&#"#54#"#54#"#&'&'&!"53&54>32632632o/Q0/0,2AXW@BURPQsa^w>AYeLmrZ>TZA@V\P(%#"&54632327#"&#"6324&#"326cgPgT;@ -va?e\PXA?VSD@WasyfCeIP[>z]AZS?EZVP"%#654#"#54&#"#&54326321P1\34P43\1P1X3/d^yb5I55Iby^(LL<.%#"&547332654.#52654.5473{\ePSCAH//(`:8QQ8P(=F=(S+(Zdkb#BMMA(1<0*"'B, '3?/KT.%#"&547332765#"&547332654'5673sij P RK5--8b7;J(B_PV"6/+Qi|k0)!Lh#$b9)8A? M! 0 < H<9%#654&#"#4654'&#"#&5467>7673632632ASD480"%P.29+$ZE{z PNi` -A*J=VWlk_Uo;U"#L  ' F!K47t*ml64#X(,#K2/+$OnP%#"5332654.'3bPDUP`pVD$8+);<2>J#".547332654&'#"&5467.546322'4&#"3264&#"326&@X`51^W@'OPOpuIB4e=Bc9,)3]EBV!&.1'%15+75'%/+<%#"&547332654&#"#54#"#"&547332>32632')o P QLIC -"*P 34;P*%( +Z>LZNQo ))!Nf^K]15."> A47 $>N><7C#".547332654.+532654&#"#"&46326324&#"326A8opDvWT hSXi-$<9/>>0&> zU[~ZeC?3N`I<5#654&#"#4654'&#"#.#"5&546326325I.79/! P%$'9=LCBz|R PLni4sAqh\b6;dQh,c_aO54&53 iPTLJEA^Nd#P#I2')Pxh*01N`]L:_MD@AH1:I4 6 ="-%#"&5463254#"#4&#"56326324&#"26=zgibDX?!P1#A6IO&-]ROPbGJ^a`zldfn=pI^`G/"Z3<OXPo"-.#"#4&#"632#"&546326324&#"26oB#.P!?XDbig{OR]-(MI6~^JGb`aW!0G``Gp=nfdlz2Tb<<3HPOFGPN<w#.'#"&547332=#"&54632537'5&#"32wpn P PMOM;YU;E[PpppBD%5/!I/xm+*)!Pd9@9:E=\GHhO4!"P%#"&537324&#"32^h|P^^~PQ?BVT@?\thwv~XQA@Z<<I%#"/#"&'332654&#"57'&#"&546327654+53232654'7/eCW5a 8t$'~ #L'78DMQ9MTVH+7>-.? 5{G.!E$?>AM_a+Fl&(c*) 4<7#"&547332654춮춮.'&53$!?)EJ(YPU>9S4]a66ad0;JX4PVV/9#"&54>7>4646<54&#"#&546324'326c]+922&'&)C \BF<I2FgBD[HaoiZ%B-&  $48')*AK^k%.98Gm5(AL[0=%#"&547.#"#.#"53&54>326324&#"326lZMg1 -&BR_XVS C^[-YYk#T?ZkcM7,-":6C[00%'7-C!FO:dGEEtXAY`=QR"#"&54733254&#"#&54632dbQl,F,H74>-9FdFKeKcjaP>=5E7I/@A:-4!&.FTUJ2#"&547332>54򂂮&#"#&54632RoFF9*:> '.8.5@FiQFg5.>(0cQ@8==9G&&@0&<(2C)-6;5PUND1J ]V$0%#"&547#"&54632632$4&#"324&#"326Vg^QpJ,A>QeIG^:2QLP9/.13*/ 9@B?D>?9`ziQf(T>HZUF=.{^=D0*9D]lF?Q^'%#>54&#""&546326324&#"326SF&-:7@(nrv_Q=8SQcC=GCCDE>s])t89P429\wu\_t==nS=RXIFYg%#654&"#&54632;F;@xA;F;mVWkpSNv?[\>tPUnWvv+#"&547332>54&+53254Ȕ!*, $L:Us F D<, '((A&C*BC2CUF9NI%cT@55@#654&#"#54&'"#54&#"3#&)53&54>32632632-.F.,(SF'+(-F"&a7M*CRTqN:L!%V#>%TATMUKX+Dbhg4-5)le)<1M1&:Q8bIII) I`'%#"&5463254#"#&546324'&#"32\]Zrm\K5urFiSP]F(&-@>A@x_ruZ\y? R_]PX!!`CB[*%#"'&54632327#"&#"6324&#"326k^F:=&%-A@^u01}OIZCn:w[B^V@d##](%#654&#"#4654.#"#&54632632I2K2:&%.3) $>0[%+.#"&5473325#"&547332654'53273WgSr,F,E9CX4V=;QE($!&,aK<>jp_R@;5E9G) 4;>B9$)("/H@1%#654&#"#54&#"#&54>53632632IXW>Q)%W;SR9B.&53R=@%97)+7:Q<#".547332654#"#54&#"#"&547332>32632Qqm;mL@cEQWK$$<#:%1=&F&#*(!T89#n+[=:/)@CNiSJR4&--+4+;0-$,%$))#@J9.:#"&54733254#52654&#""&54632632%4&#"326xfhA VIz9A//[kjmPf53aDMm76>65C?=;5=5E8H0$5u:N=6%#654&#"#4&'&#"#.#"53.546326324F446.$ <'<6jT%u#VGj]2{[9AfZ(C:dI[=QDF8O"3aq9 eAf 'b1C ;,H[{+$Ok$#"&5473326=#"&5473326753a`So,F,H7D>>BJ\3F39/%C=5E8HWG2ZJPHEO0F% $/%#"&5463254&#"#54&#"56326324&#"32dX\mjZQ4$", 1 1?),C='P>9F;@??@A?Z}v][v:"-5-<22:=F)??T@?]^BC]*%#654&#"#4632#6324&#">KFKA9-S |Gi6#E95/Z6%#"&5467332654&+532654&'&'.5473Z9.05lE9FAAx~Qk=;?B;<(*!F'77'-< P4jr£XJ[eSOC,y??@;9?B?u=7.2518,#:v[]v{\yAS??)B^]]\%/%'#"&54733265#"&5463237'&#"26wYmQl,F,D9H<3Z=TU@J?=5E9GSKKP=?NP|~TonoY6#&78%#"&537324&#"2mZRl@{7ZunRdw`F`M#"/"'5326549'.#"&546327>54+53232654'7H/@&c+8VHM0*5.$P )11J9M#T5}$=,] 33<[.:OqB*@F#=.+)#+I$6779LI< 5!':$H;%#"&547332654&+53254+53264.5473pVdtFCM6L $SREDST 6LL6AYI:'$*/&(-RKfcNM.4;'<5=<. 1( &/(+ 1$&/ <X=E%#"'&'5767632327654'&'53254'&'532654/54#"6XUC_NC12+V-J3@3 P4E7E6/XmT/;8H)1X+"l[6lSy-W@; 6 :+ 6)7@E5D8#>?*z3^EKDl&'567&5462'4&"6lWPQV1?iXXi=3A6`6ff 56jHZZHj63993Z..x!#"&5467327654#"'7#5!632 (rN_$ 'D5NY$!* 4r/=YL'6)/4A1"W4:#"&54732654&+532654.54632'654#"hXL^*!A1>FT<--%X5LL5NF"#A1g+ W(3##"&5476;5#"5476323#3'54#"35#"32OUFN^2/S\\0/MHSOOOdr$FNNE$=5dxGUXMO,(HM(&MEn4H|kaf>u@5;<D /FNs805w3!2#'32654&+5lpplR5'%#".+#!232673264&+)(=X, 5)p]-luE<<7 CKKCVG-:;:-ogHeaF65DxD&##5!7]<yRR,4##"&5332654.#""&4632675#5264&"0Dk@!ZLNNTF$-/S5?O9X~XX? 6u4&6&&6A~=]l9csX~]B-UJ-><9gZoonAf>>f= &"32654&3254&#"#5632+ &632|ttsN1 {=GL򥤄:O1NVӤ5#7#5]]]ii*?2732>54.'!53&54632&#"3##".'{)-A";5,nuz;N%m3=%di5oQ(KJ=c2,ADYaWo)Je)$!AI\&=<";)$$.732>54'7#".532'654&#"=E:CH:%*&A>#Ғ/VSE4-@~0'2G!1HqDBJ6T~L-KeU'D_6 0JS[zN525#"'#37&' pA@3/c^^?iiBI]{74>732?33#"& G&Lqo&U@Ud-#, {_OGf %!#3# Mcxhepx')L72653#"&=3@0]o_^m_87TM_nhY@/@D5@ !!!!!dLRRR "7###"&463233!$"32654i]) L42L )]=8###{{2A]\B2 -3"#32$#7#32>54&#"#4632^^&C@&\C3MTv`o3Xc~`%J5cdV>jwFi9.9"&473327!#"&547332>32!4&#";LO,f %=)7 327&54623267#53##"'7654."bl$<   ?0+/wggw/*2@6/ ehRLMM_bI 6) H   ,.KIAAb11c<_7$ $7_< !# #333ffhdhWPP 7232654.'&54>32#4&#"#".54&%1(BJ 2:"B+U[S,%Y(88(pq AL9&%*?"LI+.6Q*4 !2(]l5BR!D=CZ2` !5]<23#4632#52654&#"]c)MH+p\58S8CK#\q.W32#.#"32654&'#53gKwG/0GyL+_^Wj{m^aHSFF~}At3Ni`12bjO4NNO:A=QIo_(KA'5 !##33#bXԁXc{'c4>32#5#"&+532;4&"+HL*c]SU}%%YKH;W,q\ݖ`R$GZD@SB32654&%4&#"#"'#"&5467'63267#53#32>32"  439++"6 X'>F9>)PW-*b67J C 36(!#4!M\k'2P) -CZ"d*%,%R,.#6D\-hBHf7P>j_pAA=R&/&ZB463233###"&"326&x^^vMt|~qr}}aѰ;'LУ5f !#3!3# ]]w]]L;'##"&'332654&#"'675#5E0Yh}k^pTkENMDMH'V4Auk`~j]bo<,GA 3#32?33#"&=# C&Lqo(S@U8T8 {_OG4J #"&632.#"!26^pm ԌaVԐ}|Fu~!535.=#53533#353¡@@]8HA]F<[sFF09 $326=#5!#'#"&54>32#.#"{$9^>-b   [ ";3)''*9g)h $0=, M+2 Y532#54+#f]]VҢ; !!5!59LfTRR5R !#53>32#5#".'#53#;4&#"2 OZ4c]3YN 3.mKCpGAA>Pq\ݲL32#"'#"&54>7327&546zDUKLJ4_'CI)ClE./`DbDAUqx+$BI3)-=ED]?E?jg;44z{'C2I8$GZ&6K'h*94632632#"&'732654&#""&547&#"72>54`HC<"7> BQ/.WHHb!4@  ԉ11mXZd.18#%51C}z`_`_=^8# #8^=r1!##"&'732653332>32'7>54#"#"'>d#[CZA5(#*d¶c0 3?,  1 2?: EkNB#18hMeY23h!3E  32& ?.#"324&#"#4>32#"'#"&54>7327&54632GN#*e;LJ4_'CI)ClE./`D`H@Tqx+$BI1'H8(P3-"?jg;22z{'C2I8$GZ",=no9$>6&#";#"32654#"#5632#".5467.5432x]A8LBa$O8]ID:2)>[*DE0Ag>(E=81/GPg,IRf0.3 ,+Q @3+=%"3D=?l85„2b 3#"&53!!3265]]veUXdnoFOOTJl*2>32#"&'"&463275332654&#"264&"2Kew +W~XX?2N1_7'Yo{;}#&6&&6l@D̓sjZmonG>t"0H-"26f>>f== 33##!%5=]]=_zR R5U %#!33232654&+Ud]=@RQAcxfR=@P"&533273632#4#"#A:I0,^'A:I0*^'LLNnLLN =G32654&7"&54>7.54632>32#52654&#"'654&#"|13($Uz.<S`Mi.*@78G9B@ 6M\XE ,++:KR(02@3'#<&* ^6HftR0L6"-R3;UV>ZB;SQ"*1<@!*!%J5F!4&'5254&+#!2f?8KC]-luOCw _:cnicdd)@i' 45732>54.546323!53&#"3##".'p)-A".JYYJ.uzPq7m$W3=%di5oQ(KJ=c$=-,-3H*aWXFAAPe)$!AI\&=<";)52#"&5##5!3264&\p"54.54632&#"#".'p)-A".JYYJ.uz;N%m>]m]>5oQ(KJ=c$=-,-3H*aWo)Je =-:9X3&=<";)#C,7>54&#"'654&#"#".54>32632%32654&./4*/_W K,X0Uv2pY;X+>nI@dEXW^VM<.+E` A)-CD*?4T `LsbZP|I21clLHvKglTY3<E"654#"&54>7&54632#"&547'32654%3254[232DRJFY($B'MQQ>?QQM'B$(YFJRDiS<)3.)<>&0/'>RFaiFJ<8+77 J>DNND>J 77+8<JFiaFRONH><6,66,6<>H2"!!4632#54&@0h;o_^m_8TM\R_nhY@/@D5!!h;yR4>32#.#"32673!".0GyL+_^Wj{mZ``!KwG/d2bjO4NNej3Ni`&#"&=&5463233%54#"#3265ifbPC=P]9"],+N~]piXMbW;eWNZ5,?WyXI(72#'2654&#""&547&#"3#53>3262>54Jbl\@&'=2+/wggw/*2@6/ ehRLMM_jSUg\7(84KIAAb11c<_7$ $7_<5C +#!23264&+Cq[]-luOCKKC]qoDxD'4>323#53.#"32654'7#".-EvLqVUOirmC_6FsKwG/d2akO4jnTTDBD,"O?NOq3Ni` 3##5!#3kLM`[gTB'5 3#3%632'>54&#"#^^V'%*/ 3-'$^ :')1E  ( 5x #33 #]]kx,nqPv %5#"32>+"&54>;@RS?+@ ]bb/Ta:j֛ZA>\ 30ddA_4&%'#".4>3277'4&#"32657R2AIvD##DvIA2RH/wRFnV_qq_VnFRw/ySKvzvKSyoys@}}@sy+327#"&'#"&54>32#.#"326=0?,82FVh+?2KP}_qSt3iJSLMTF \Q27ө0ajP5zoFQ2_b<^1Y,8I'7327&5463232>7.54632#"'#"&4654&#">54.#"WO1!dHQUb<28>"BK9 sWFBcD8cwGcO><`{!!.%-   MYuóO@!5sRui:ei243,w^4/;C4;<_7$ #8^= ,#"&632654&#"323%3267#"&/.#j vNw2 -& tIr"";# aV23NF%!;*/F>2/o $-7%2>54&#"#4>32#".532'654&#":];'/# R+1#Q])R_/VSE4-@=E:~0';+E_b4`8MBX-ŋQ~K-KeU'D_6D2G!0JS[zNE"73267.54632#"&'%654&#"8"c7CetnuJId+PLU,/"#8KFIfT"WcSVdY>EecW>;b$" "%2654&#"632#"&54632#4&#"'QP\B;b V^6j~~xsjXBI7TFEU@4^bH:}dmwa:P B'777'324&#"#4>32#"'#"&54>7327&547' A4434+_'UKLJ4_'CI)ClE./`DbDAUqx+$BI3)MhQQQQ266D]?E?jg;44z{'C2I8$GZ&6K.:T 53527&'765462#"'73254+5254&#"'2*!hp!4@rgT:k=D<>F)3X75#50Qt2ZLNNTF$-/S5%U@.UXE1*J4A gJcsX~]B-UJ-t' h"A24&#"32#54+#4632AER7f]]b`F>E\0VҢ\qkVO*277'.#"326=#5!#'#"&54>lKnCRH/wRW`Qr}$9^54&+Uva(=Z-eF?}/1>D?^r$;;p/T+49E2{ %!FI\T&2{}&7J2{% !TT2{v'[l727-{Tr2'[[92'[['[[92'~o)92'[92 P{TNN&m2'[[>2{&[52{'[52{&[72{'[72{v&[82{v'[82@&[92@&9[2@N'['9[2@N'[U&9[23'['[n92@'>[2@&>[2@N&['[F>2@N'['[>2/'[q'[>2#"'#"&=326=326=3B.3""3.B6"0"6"0"6.B''B.""""23*@&[J2'!5VU4.2#;.23#28;2* "&53265ggF>X>IggI,>>,2* 462#4&"2ggF>X>*IggI,>>,2 2#5264IggI,>>, ggF>X>2 2#"&46264&#"GhhGIggI*??*,>> hhgg>X>>X>2'SS2'~~23462"2"0""0U0""0"2^5!2,;;2^ 33##5#53;yy;xxy;xx;2^##5#5^y;x;;2_'TH(52{'T^(72'T92'T(>2{ 3 {\[_FF&62{}&eJ2{3 # 2_&62{v'[je2 5 2r1Z2'[[g2&g'[[[[2&g~o)2'[g2!  r1mmZ2'[[l2{&[c2{'[c2{&[e2{'[e2{v'[kp2{v'[jq2&[g2@'[g2N&[&g[[2@N&g'[[[2@&[l2'[l2@N&x[F2N&y[2'[lk'[kl2T-T"5vw2m3#2;;2m4&#"#3632#! &66 4&86#0(m+0!2"&53265TJvvJS}}S2}'J623462#4&"2TvvJS}}SJ2v'[2!2#!5!264&#!2AAbbT2v'[2v'[m'[2'~d)2'[2)"&63!!"3!AbbA.T2v&[92`&[2^'[2^'[2^&[2^v'['[2^v'[ 2&[2b&[2v'[2bv'[2b'[2&[2bv&['[2v'[&[2a'&[[a2m#"&46;#"3EaaE,55,FuvFOlN2%'~2%'~2%'~2%&~2#"&54632#4&#";bebR^FE_`DlARPxS :nB45J2}&J2532654&#"#4632#lD`_EF^RbebARJ54Bn: SxPR2v'[2#"32653#"&5463lD`_EF^RbebRJ54Bn: SxPR20v'[2x'['[!232#"&5332654&+bebR^FE_`DlRPxS :nB45J2)v'[ 2&[~2'[$2&[2&[2v'[h2v'[2&[~2'[#2v'[2v'[2&[2'[2v'[2v'[2&[&[a2l732#"&533264&++R83H8# #//#+Lp6:7(#42l7#"326=3#"&543+#//# #8H38RL84#(7:6p2'~%2'~%2'~%2Y'~24632#4&#"#2ebR^FE_RPxS :nB422}&J2#54&#"#4632R_EF^Rbe224Bn: Sx2v'[275332653#"&2R_EF^Rbe224Bn: Sx20v'[2x'['[!2%#"&53326=3ebR^FE_RPxS :nB422.v'[2.&[2'[#2&[2.'[2v'[g'[2.v'[&[2/&[2'[#2Av'[&[2v'[&[#2&[2/'[2v'['[2?v'[&[2&[&[a2l7#"&5332657R83H8# #/6:7(#2l73326=3#"&28/# #8H38R#(7:2#!5Rf&R2}&J2!!#2fRRx2v'[2)5!3RR20v'[2x'['[!233!2RxR2.v'[2&[2'[#2&[2'[x2v&[2v'[x&[2&[2'[#20v'[&[2v'['[#2&[2'[x2v'[&[2.v'['[2&[&[a2m(332;mm:2p "&463"3IggI,>>,pggF>X>2m(#533(;m:32m4>54#"#63232%56%B4r2@3>3m(A+&/7{:.&F).2234>54&#"#632!2)AOPA)P< Xe~3NYN3\;cE<89L,9It\4fKK8;P2332654&#!5!2#"&5RJ54Bn:~SxPRblD`_EF^Rbeb2&J2#"&5463!!"326=RPxS~:nB45JbbebR^FE_`Dl2&[2754632#!5!2654&#"RPxSj:nB45JbebR^FE_`Dl2&[d2&'[[2%#54&#"3!!"&54632RJ54Bn:jSxPRlD`_EF^Rbeb2'[22&[V2 '[dV2 &[Et2'[E2 '[2'[2'['[&2lq#54&";!"&5463284#(7:6p+#//# #8H38R2m26=3"&=hHdH6ggڽ2HH2IggI2lq5432#!532654&"p6:7(#4+R83H8# #//#+2!#532654&#!5!2224Bn:~SxR_EF^Rbe2& J23"&5463!!";PxS~:nB42ebR^FE_R2& [22#!5!2654&+5PxSj:nB42ebR^FE_R2'[2 2'['[ 23#"3!!"&546224Bn:jSxR_EF^Rbe2'[22'[V2 '[dV2 & t[V22& [V2 '[d22'[2&[V 2 & [dV2'[22 '[22 &t[V2&[V2 &[V&t[22'[V&[2lq";!"&546#(7:q8/# #8H38Rm %7'%$L65bUW_442>  ->0\ mt[«Yq2!".=3;rAo[5TUhE3rThUT5[oAkXJEh<2v'[0%2>v'['[%22#54&+Ao[5TUh43,J?A=  +(.971"*%1:8;2m 3#"#54631;+:1\D%%QGCA2m "&=3;;m6]QmndX]62W &+532#"&5432DA7FZ44,|4%#Ȓ9C5@)*@' 2W #"&546353#"32654.pu,44ZF7AD%%@*)@5C9O@ 2)F462"462"2#54&+5$$$$(D\1:+;$$$$ACGQ%%2F&?l2F&?26F&?26F&?2 %326=3#"&54&#"#54632E42GR~MLE42GR~ML;mT6NzP;mT6NzP2 %4632#54&#"#"&=3326vLM~RG24ELM~RG24EPzN6Tm;PzN6Tm2 v&E[2$+%&5463232654&'52#"&/.#"XEn >,-?@/WloSVa H%1P %*TT wTT~=+GNPTSur|K^|64PX- 2$~'[AG2$+%>54&#"#"&5463326?>32:*% P1%H aVSolW/@?-,> nEXT -XP46|^K|ruSTPNG+=~TTw 2$~&I[A2'D[2&D[2'E[2&E[2v&['E[2v'[&E[2&[G2'[G2~&[H2~'[H2&[I2'[I2~&[J2~'[J2k *2>54&#"#"&546332?>32  4 0 ?86JG9*)? I-:V :4##R=0QJMS6743/DS77[O233#!kgTiC2}&\J22!#39TiC2v&\[2!!3#kLTCi2v'[<^2Jw'['[^23##3!gTLC2v'[a2m'Z[2n&Z[2m'\[2n&\[2mv&['\[2nv'[&\[2m&[^2n'[^2}v'[i2nv'[<j2m&[a2n'[a2mv'[m2~v'[n2m&[&[aa2mB#7#533zH;mȥj2m '#7#'V@5l_ai4>mm2n 33##5#53;;ڕ;;2n ''7'7p********2 26=!!"&=EhI}xE_`DRbb2 3#"&=!5!265QzPR}IhEbbRD`_E2 54&"!5!5462EhImA}xE_`DRbb2 k'Jz2 #54632!!54&#"QzPR}AmI44EbbRD`_E2 d&z[2532+#3264bbRD`_EQzPR}IhE2v'[|273264&+332+2E_`DRbbQEhI}x2#";##"&46;E_`DRbbEhImA}x2v'[2%#"&546;3#"3bbRD`_EQQzPR}AmI44E2v'[w&[2v'['[2m%#";#5#"&46;%F2A@3F:HWYFT(F"lFpK2m8 7'5572#L65bUW_442> -5 5%20 \0mt[«Yq2 &5462+264&"\dddFF3F33F&3.Fddd6F33F32}&J 2!#32"&547264&"^Fddd 3F33F6dddF5,F33F32v&[235'"&4632%"32654&20dddF/1$22$#34^LFddd3#$22$"42N&[02! 632"&="32654&,1/Fddd0"43#$22dddF(4"$22$#32N&[02N'['[C2N'[0&[C2y%7632#"&'6264&"#22# /Z<΄2F2*2K2"&5462#"'265264&"dddF-)&3F33FJvv FdddyS}}SF33F32326=#"&462"&5$4&"22T)-Fddd.3F33FJS}}SydddFvvF33F32!#4&"632"&5462264&"T)-Fddd3F33FS}}SydddF vvF33F323462"&463254&"$4&"22dddF-)3F33FvvFdddyS}}SJF33F32v'[2v'[235!264&+"&46;2#"2642^S}}S!dddFyyF33F3TҰ)-Fddd3F33F2v&[2)"&6;2"&547#"3!"264yyFddd!S}}S^F33F32dddF-)Ұ23F33F2v&[92Pv'['[2v'[&[x2mh264&"#";#"&546;2"&54B)33)>-,?. . n19,+:,4?-,??,2m'/7326=3#"5!"&546323&54632&264&"264&"W85)`->>-,?J>-,? . . . .819,+:,4?-,??,,??,6. . . . 2T'4&#"3254&#"#432#"&54632#oNRk<5oTs2I+L1VuspTNoTKLKy&S,$D=%emo42T'#4632#".54632#4&#"32654&#"TpsuV1L+I2sTo532#"&53oNRk<5oTs2I+L1VuspTNoTKLKy&S,$D=%emo2f!5!332654&#!5!2#"&5dgRJ54Bn:~SxPRRlD`_EF^Rbeb2f5!#"&5463!!"326=2dRPxS~:nB45JRRbebR^FE_`Dl2f5!54632#!5!2654&#"2dgRPxSj:nB45JRRvbebR^FE_`Dl2f5!#54&#"3!!"&546322dRJ54Bn:jSxPRRRvlD`_EF^Rbeb2m!5!#54&";!"&54632n84#(7:6p8+#//# #8H38R2'5!";#"&5463 |BZ:nB422PxSzt^FE_Reb2&[327!2654&+532#|:nB422PxSzt@^FE_Reb2'[ E2%#"&546;#"3!5 SxP224Bn:beR_EF^t2&[(D2m#"&5463";5)697:A>25B6A:L2L333##5#535!kgzzTxxTxxTw2L !3##5#53539xxTzziwTxxTC2Lv&[z2L!!5#53533##kLxxTzzwTxxT2Lv'[<2L!##5#53533#!gzzTxxLCTxxTw2Lv'[j2mR#7#5#53533#3HpkCC6DDmi6==632 3632#"'#6264&"2T1=PrrP=1TT@\@@\#ss##\@@\@2#"'#3632tMP:TT8NSrSn8u76v2746323#5#"&2tMP:TT7OSrSn8&76v2%#"'#3632rSN8TT:PMtOv67u8n2463253##"&2rSO7TT:PMtOv67&8n2 !!!!#2ffRRR2 )5!5!5!3fRRRC2 33!!!2RfRR2 #!5!5!5Rff&CRR22>=3"&=##$ , RHHNRڽ MccMkx2354."#546233 , RHHNR MccMk&2!#335462#54."$RNHHR , xkMccM 23##"&=32>5RNHHR , &kMccM 2  ##37ѡTss{2 333#'2ѡTssm&2 !#'#33^ssT{2 373##2^ssT&2D46233#"&54&"2gg1-TTU]6L6 IggIFo&q&66&2D#4&"+3265462DT6L6]UTT-1gg &66&qzoFIgg2D326546;#""&2T6L6]UTT-1gg&66&q&oFIgg2D"&54&##32265Dgg1-TTU]6L6IggIFozژq&66&2{ !3 373H^\[_tt&2{ !# #'z^_tt&m2  57'72r;ZX2'~)2&[2 ! %5rŔmmZ쉻X2{ 3 3!!^\[_90F&cT2{ 3# #'!7!^_90&cT2 5 57%2rPT+ZZ012& L2'[ 2 % 'rPTZZmmZ0:1d2{ 33{\[_R&2{3 ##2_R&2 5%!5!%2rvvZR2!#5#5353!%5 5;HH;vrDmmRmmZZ2 #5462"7#64'3%5 5 gz#.##. vr.RB2++2).ZZ2! !!rvvmmZR2{  3333#'#{\[_RSRSS&  2{ 3 ####353'2_RSRSS&  ^2 5 575#535372rRZZeR1TRTT237!#5#535335'5 575.;..;ArTRTTmmRmmeZZe2  64'5'5 5777%462"&'#5 rRzzz.. -C,xqZZqIRHH)**))B.R2 % 3#'5#75rRZZmmZeR1TRTT2 2657 &5TbbCTi2 %4&"46 T.TCbbTi2 7!264&#!'!2#!CbbTiTT2 '~) 2 '[ 2 !"3!!"&63!bbCTiT.2 % &5-2652mmmicbb2 !%46  4&" .cbb2 3!2# !264&#!2cbbmmm2 '~) 2 '[ 2 !"&63!"3! icbb.2 26= &53!5TT2юbb i2 54&"46 #5!T.T bbi2 %3264&+%!2#!53#;bbiTTT22 '~h) 2 '[x 2 #";!"&63!#3bb iT.T2^535332y;x;;2%#"'#"&533265332653hIO77OIhT7&%7T7%&7TJh>>hJ(&66&(&66&(24632632#4&#"#4&#"#2hIO77OIhT7&%7T7%&7T(Jh>>hJ(&66&(&66&2 2#!5!2654&#!5!2654&#!5Gk##kGD$88$D$88$DڀL*__*LTO)(OTO()OT2(2654&#!5!2#!5!2654&#!#5#5353$88$DGk##kGD$88$;zz;P()OTL*__*LTO)(PmmRmm2 0462"'#5!2654&#!5!2#!5!2654&+64'#.##.6 g$88$DGk##kGD$88$ T2++2)k.RP()OTL*__*LTO)(P.2 3"&5467.5463!!"3!!"3!Gk##kGD$88$D$88$L*__*LTO)(OTO()OT23265332657#"'#"&57&%7T7%&7ThIO77OIh,&66&,&66&TJh>>hJ(2%4&#"#4&#"4632632L7&%7T7%&7ThIO77OIhT&66&,&66&,T(Jh>>hJ2 7!2654&#!5!2654&#!'!2#!h$88$h$88$TGk##kGDTO)(OTO()OTL*__*L2(!2#!7!2654&+#5#732654&#!3532Gk##kGDTh$88$;ţ$88$;ڀL*__*LTO)(OllTO()Ol2!0462"72654&#!3#!2654&+64'!2#!#.##.$88$` `h$88$n Gk##kGDT2++2)kP()O.O)(P.DL*__*L2 !"3!!"3!!"&5467.5463!L$88$h$88$hTDGk##kGO)(OTO()OTL*__*L2"'32653265%#"'#"&553?7&%7T7%&7 hIO77OIh TĄj&66&&66&%Jh>>hJ(2"4&#"4&#"74632632%#7&%7T7%&7hIO77OIhT&66&&66&j%(Jh>>hJط2$2#!#53!2654&#'32654&#!Gk##kGD*$88$$88$ڀL*__*LCTCiO)(OTO()O2 ,!2654&+#52#!#5332654&#!353N*$88$<;wGk##kGD<$88$֊);CO)(OllL*__*LCTCO()Ol22462"732654&#!!2654&+642#!#53`#.##.d$88$։ *$88$ Gk##kGDT2++2)kP()O.O)(P.VL*__*LCTC2$3"&5467.5463!3#7!"3#"3!Gk##kG$88$$88$*L*__*LTO)(OTO()O2m3732EE22222'[~ 822%#"'#"&53326=3326=3hIO77OIhT7&%7T7%&7TJh>>hJ(&66&&66&24632632#4&#"#54&#"#2hIO77OIhT7&%7T7%&7T(Jh>>hJ(&66&&66&2 2+532654&+532654&#!5Gk##kG$88$$88$DڀL*__*LTO)(OTO()OT2$%#332654&#!5!2+532654&+j;;$88$DGk##kG$88$,lO()OTL*__*LTO)(O2& >[2 3"&5467.546;#";#"3!Gk##kG$88$$88$L*__*LTO)(OTO()OT2 ,"&54632#".5332>54&#"3Ylq\i/N[AypCT%:MH%=\=([Ey>3jYW^bpM{}S4$N`x>a;&2>\W32#4.#"3254&#.Ylq\i/N[AypCT%:MH%=\=([Ey>3pYW^bpM{}S4$N`x>a;&2>\W54.+532#"&54632T3)kkN5Y6'&;a>`N$5KsCpb^WY3>yE[.CPA%HM:%TCpyA&\dR5i\ql2+#"32>54.+532#"&546;53#1AikN5Y6'&;a>`N$5KsCpa]A;;myE[.CPA%HM:%TCpyA&\dR5i\qk2-462"'"32>54.+532#"&5463("0""0XkkN5Y6'&;a>`N$5KsCpb^z0""0"yE[.CPA%HM:%TCpyA&\dR5i\q2+33254&#";#".54>32#"&T3)kkN5Y6'&;a>`N$5KsCpb^WY3>yE[.CPA%HM:%TCpyA&\dR5i\ql2U&32654&#"#4632#"&54?!5!"- uOGp1" TUA=frun#(!-7aZ0*6&2Q[cQRZ\Ta2U&%5!!#"&54632#4&#"32654.#nurf=AUT "1pGOu -aT\ZRQc[Q2&6*0Za7-!(2U&>54&#"32653#"&54632!!5"- uOGp1" TUA=fru)(!-7aZ0*6&2Q[cQRZ\Ta2 #&#37632#"&5463"32654&#"[aT\ZRQc[Q2&6*0Za7-!(Y#nurf=AUT "1pGOu -2 #)#37632#"&546753#532654&#"[aT\ZRQcE?;;06*0Za7-!(Y#nurf=8Q LS 41pGOu -2 #.%32654&#"#37632#"&5467>32#"6*0Za7-!(aT\ZRQc84 '"00"*)1pGOu -"#nurf=2M0D02 #)4&#"3"&54632#".##2326O/)/&2Q[\PQyW>rTKHTAkI=54E(5IIn0" TUA>esx\\A#3RbcR3r2 #&%3##"&54632#52654&#"32>aT\ZRQc[Q2&6*0Za7-!(Yurf=AUT "1pGOu -2U%32654&#"#4632#"&546?'5UG/pTKl1" TUA=fu|GY,a5E=2:?-*6&2Q[cQOqfXSnA a2U%35>54&#"32653#"&54632%2YG/pTKl1" TUA=fu|GY,a5E=2:?-*6&2Q[cQOqfXSnA a2 #%337>32#"&5463"32654&#"2a AnSXfqOQc[Q2&6*-?:2=E5,YG|uf=AUT "1lKTp/G2 #)337>32#"&546753#532654&#"2a AnSXfqOQcMF;;#6*-?:2=E5,YG|uf=;SJV 1lKTp/G2 #+337>32#"&547632#"'32654&#"2a AnSXfqOQcP."00"$6*-?:2=E5,YG|uf=l&'0D0(1lKTp/G2 #%#'#"&54632#52654&#"3267 a AnSXfqOQc[Q2&6*-?:2=E5#,YG|uf=AUT "1lKTp/GY2 n32=3#"&547!5!  J:Tk`zn*L||u}|N8T2 m!>54&#"#54632!$!  J:Tk`z+Kzzv|{O7T273632+53254&#"2T8N||v{{L*z`kT:J  !2& XLr2& X[\l2%.#";#"&546323*L{{v||N8T!  J:Tk`z2 7#3!32=3#"&547#m;;!  J:Tk`z,m*L{{v||N82 m%3#5!>54&#"#546323;;S!  J:Tk`zm*L{{v||N82 #632+53254&#"#5!^k8N||v{{L*m,z`kT:J  !;2 & ^Lr2 & ^[l2 5!#.#";#"&546325,m*L{{v||N8;;S!  J:Tk`z2/#53#"&5467#532654&[Ԁ:EҕE:7HeeHT!rDggDq"TX8D``D8W2/#%#53.54623#5>54&"Ԁ:EҕE:7HeeHT!rDggDq"TX8D``D8W2U#53>32#"&'#533264&#"T!rDggDq"TX8D``D8W)Ԁ:EҕE:7HeeH2U& dL82U'[ d2U%3#5#"&463253#.#"326ȍT!rDggDq"TX8D``D8WԀ:EҕE:7HeeH2!5!53#5#"&5467#532654&[;;:EҕE:7HeeHkm!rDggDq"TX8D``D8W2$!%!#33.54623#5>54&";;:EҕE:7HeeHk,m!rDggDq"TX8D``D8W2!##5!#>32#"&'#533264&#"*k,m!rDggDq"TX8D``D8W);;:EҕE:7HeeH2& jL2'[^ j2!.#"32673#5#"&46325#5!#W8D``D8XT"qDggDr!m,k)7HeeH7:EҕE:;;2 $#"'#"&53326533265353#5`IG77GI`T/&$0T0$&/;;Jh>>hJq'55''55'qll2 #$74632632#4&#"#4&#"##3`IG77GI`T/&$0T0$&/;;TJh>>hJq'55''55'l,l2$!2#!5!2654&#!5!2654&#!5#5!#Jh>>hJq'55''55'l,lN`IG77GI`T/&$0T0$&/;;2(!2#!5!2654&+#332654&#!5#5!#Jh>>hJq'55';;'55'l,lN`IG77GI`T/&$0m,k0$&/;;2,462"!2#!5!2654&+532654&#!5#5!#"0""0Jh>>hJq'55''55'l,l0""0"a`IG77GI`T/&$0T0$&/;;2$5#5!#!"3!!"3!!"&547&5463l,l'55''55'qJh>>hJNQ;;/&$0T0$&/T`IG77GI`2 463""&54426n\B++B\zz"C_T- xx -T_CUyy2 #52654623"&54&"\B++B\zzC_T- xx -T_CUyy2 !"&533!2#!"#463!264&C_T- xx -T_CUyy<\B++B\zz2 '~) v2 '[ v2 %!2#4&#!"&463!2653#!"TC_T- xx -T_CUyy\B++B\zz2my!3!#2G672'y 333##5#75#535766M Fn6FFr6!!""2 & t^2 & u "R2 & vM22 '~) ~2 '[ ~2 & yN2 *%#"'#"&544326533265463"_HE77EH_+B\.%$.T.$%.\B+Kg>>gK -T_Cz'55'q'55'C_T- 2 *46326323"&54&#"#4&#"#5265|_HE77EH_+B\.%$.T.$%.\B+(Kg>>gKy -T_C'55'q'55'zC_T- 2*2#!"#463!2654&#!5!2654&#!"&533Kg>>gK -T_C'55''55'C_T- _HE77EH_+B\.%$.T.$%.\B+2.2#!"#463!2654&+#332654&#!"&533Kg>>gK -T_C'55';;'55'C_T- _HE77EH_+B\.%$.l,l.$%.\B+2& [2*7"&547&5463!2653#!"3!!"3!2#4&#Kg>>gK -T_C'55''55'C_T- J_HE77EH_+B\.%$.T.$%.\B+2  )2%#"'#"&54435335463"#3265#3265_HE77EH_+B\T\B+T.$%..%$.Kg>>gK -T_CccC_T- j'55''55'2  )246326323"&=##5##5265734&#"34&#"|_HE77EH_+B\T\B+T.$%..%$.(Kg>>gKy -T_CccC_T- j'55''55'2 )22#!"#46;5#535#"&53332654&#32654&#Kg>>gK -T_CccC_T- j'55''55'_HE77EH_+B\T\B+T.$%..%$.2 :32654&+#5'353326544#!"#46;5#535#"&533='55'1;AA;1'55'Kg>>gK -T_CccC_T- C.%$.llll.$%.T_HE77EH_+B\T\B+2 A462"764'72654&+32654&#2#!"#46;5#535#"&533P#.##.d '55' '55'Kg>>gK -T_CccC_T- T2++2)..$%..%$.M_HE77EH_+B\T\B+2 )27"&547&5463!2653+3#32#4&#'5#"375#"3Kg>>gK -T_CccC_T- j'55''55'J_HE77EH_+B\T\B+T.$%..%$.2#*4!#5&'35.546753#&'5>54.";X'1:-$[M;OTXIVGcV;&+&f-5  U )4:&BTVUSGF %QFWN)"o,  2 6#3265#32653#"'#"&54435#5!#35463"u.%$..$%.T_HE77EH_+B\ZZ\B+'55''55'Kg>>gK -T_CcTTcC_T- 2 634&#"34&#"#46326323"&=#3!535##5265ɥ.%$..$%.T_HE77EH_+B\ZZ\B+ '55''55'Kg>>gKy -T_CcTTcC_T- 2632654&#'326544#!"#46;5##335#"&533='55''55'Kg>>gK -T_CcTTcC_T- C.%$..$%.T_HE77EH_+B\ZZ\B+2$1>7#335#"&533!2#!"#46;5#332654&+#5'35332654&#TTcC_T- Kg>>gK -T_Cc'55'1;AA;1'55'Z\B+_HE77EH_+B\.%$.llll.$%.2$,E#335#"&533!2#!"#46;56462"764'72654&+32654&#TTcC_T- Kg>>gK -T_Cg#.##.d '55' '55'CZZ\B+_HE77EH_+B\2++2)..$%..%$.265#"35#"3"&547&5463!2653+353#5#32#4&#'55''55'Kg>>gK -T_CcTTcC_T- .%$..$%.T_HE77EH_+B\ZZ\B+2 .%3265463"#"'#"&5443265#5!#.$%.\B+_HE77EH_+B\.%$.ZZ'55'C_T- yKg>>gK -T_Cz'55'TT2 .4&#"#526546326323"&54&#"3!53u.$%.\B+_HE77EH_+B\.%$.ZZ('55'zC_T- Kg>>gKy -T_C'55',TT2.#3!2654&#!"&533!2#!"#463!2654&#TTd'55'C_T- Kg>>gK -T_C'55'CZZ.$%.\B+_HE77EH_+B\.%$.26#335332654&#!"&533!2#!"#463!2654&+#5TTz;'55'C_T- Kg>>gK -T_C'55';CZZll.$%.\B+_HE77EH_+B\.%$.ll24>462"764'32654&#!"&533!2#!"#463!2654&#!#33#.##.d '55'C_T- Kg>>gK -T_C'55'TT= T2++2)0.$%.\B+_HE77EH_+B\.%$.ZZ02.53#5!"3!2#4&#!"&547&5463!2653#!"3HTT'55'C_T- Kg>>gK -T_C'55'ZZ.$%.\B+_HE77EH_+B\.%$.2&'32653265%#"'#"&55#5!#?7&%7T7%&7 hIO77OIh ZZĄj&66&&66&%Jh>>hJ(cTT2&4&#"4&#"74632632%3!537&%7T7%&7hIO77OIhZZ&66&&66&j%(Jh>>hJطcTT2(#33!2#!3!2654&#'32654&#!TTgGk##kGDa*$88$$88$CZZCL*__*LCO)(OTO()O2 #0#5#!2654&#!#33!2#!%2654&#!353;)*$88$TTgGk##kGD$88$֊);CllO)(OZZCL*__*LCTO()Oll26462"764'32654&#!!2654&#!#33!2#!`#.##.d $88$։ *$88$TTgGk##kGDT2++2)0O()O0O)(OZZCL*__*LC2(53#5#!"&5467.5463!#7!"3#"3!LTTgDGk##kGa$88$$88$*ZZL*__*LO)(OTO()O2%"./#'.#523%+?n2(,Dn/TT! mT" +2@ ''7'7 hh gg hh g gg hh gg h29'2'2'2v'2's2v's2'2v'2j&[2&[22v& [z2&[2v'[&[<2&[22v'[2&[j2^5!5!2,,c;;~;;2^53533#3##5#5352x3$$$2ThUT5[oA2$$$KkXJEh<2  4632"&264&"'2#54&+$$$2Ao[5TUh2$$$K"0""00""0"bbRD`_Ef0""0"2532+#3264&#462"bbRD`_E"0""0QzPR}IhE0""0"2v"462"532+#3264&#&462"2"0""0bbRD`_E"0""0U0""0"VQzPR}IhE0""0"2|#";##"&46;462"|E_`DRbb"0""0EhImA}x{0""0"2m #?mp2m54&"#5462\HdH6ggm2HH2IggI2l753264&#"#4632#+#//# #8H38R84#(7:6p2l7#4&#"#463278/# #8H38Rj#(7:2m(3##2;:2lq#"&5463!#"26=p6:7(#4!+R83H8# #//#+2m #5326=3#h6B&46VFm70K>VP2mf(4'52#"&/&#"3&5463232680:<*,2 .%  ~E-%9 L2B<;@)0>0')2p>G-+?#2m  /&462"d]ww"0""0mp6Ή0""0"2m  /$462"2]ww "0""0mp6Ή0""0"2_ 462#"&3264&"2$4#$ 2$$$K2f462"2"0""00""0"2462"'3#"&=!5!2652"0""0QzPR}IhE0""0"bbbRD`_E!v462"3264&+332+!"0""0E_`DRbb$0""0"OEhI}x2 v462"#"&546;3#"3"0""0AbbRD`_E$0""0"OQzPR}AmIhE2X'"&5462#"'265264&"462"dddF-)&3F33F+"0""0Jvv FdddyS}}SF33F30""0"2(')"&6;2"&547#"3!"264462"yyFddd!S}}S^F33F3T"0""02dddF-)Ұ23F33F0""0"2X3#"&53265462"V;;^T"0""0-JvvJS}}S{0""0"2v 462"5!!2#!5!264&#!:"0""0,AAbb$0""0"N::T2v5!!"&63!!"3!462",AbbA"0""0P::.T0""0"2 #"&54632#4&#"3462"dbebR^FE_`D("0""0mARPxS :nB45J 0""0"2N 462"#"32653#"&54633"0""0D`_EF^Rbebd0""0"mJ54Bn: SxPRA2'/4&#"3254&#"#432#"&54632#462"oNRk<5oTs2I+L1VuspT"0""0NoTKLKy&S,$D=%emo40""0"2ev'/3#"&54632#"5332654#"326462"TpsuV1L+I2sTo5>hJ(&66&(&66&({0""0"2v (2#!5!2654&#!5!2654&#!5$462"Gk##kGD$88$D$88$D"0""0ڀL*__*LTO)(OTO()OTJ0""0"2v (3"&5467.5463!!"3!!"3!462"Gk##kGD$88$D$88$"0""0L*__*LTO)(OTO()OT$0""0"2X (3"&5467.5463!!"3!!"3!462"Gk##kGD$88$D$88$D"0""0L*__*LTO)(OTO()OTU0""0"2Uv.462"32654&#"#4632#"&54?!5! "0""0/"- uOGp1" TUA=frun#$0""0"(!-7aZ0*6&2Q[cQRZ\Ta2#&.%3##"&54632#52654&#"32>$462"aT\ZRQc[Q2&6*0Za7-!(c"0""0Yurf=AUT "1pGOu -0""0"2m 3#53#53AAAs22 22l v&#"#3632# #88'8(/# 2m1t46;#";2+532654&+"2,  m** mB+2/B-2 #z$*#zlDOop#y%6 #y EO\o#y%6E #yEO~o#q%6g #qE0*#v*#vYs#y'"y^ GY\#y'E#yWGY~#q'g#qYGY1"+32654#"'7#!2+632#"'32654&+ ! . '= &)B9/N"lppl%U1# +2")5#5632#"'732654#"'7.54632"32654&JA+ &)B9/N ! . 'gt{fl5DTTEBPP'E,*1# +2"(%V~}Qp[\on[^oY.#f'#fZGZe#q~"(C(p#C^Ze#q"(v(l#vZ.e#f((#frHZ\e#|((E#|tHZ1e#x("xrZCs#y)s#yI,g#q*&"qrJSq#y+F#y KS\#y+F\#yoKSo#j+F^#jK1&32654#"'7#3!3#!#632#"' ! . ']w]] &)B9/N%U;'L1# +2"1.4&#"#632#"'732654#"'7#3>32#C)@N &)B9/N ! . 'S%K8LYSk70aP1# +2"(%U0'MBtS=#x+F=#xpK\0#|,\ #|LB#j",v1"j"vO#v.:#vVNO\#y.:\#yqNO~#q.:~#qsNP\#y/:\#yOP\g#q 0\[#q 1P~#q/~#qOP.#f/.#fOK#v(0F#v%PKs#y0F#y PK\#y0F\#yPLp#y1F"y{ QL\#y1F\#ypQL~#q1F~#qrQL.#f1F.#fsQ&#|"2j'$#j&#|"2j$X#jt&#q"2C$m"ik"RCh&#q"2v$m"ik"Rv[i#v36& #vS[is#y36& #y S]s#y5EA"y U]\#y5;\A#yU]\g#q T;\P"i" U]~#q5~A#qU0m#y6""yQ V0Em#y6"E#yLV0m#v"6y"^#yM0m#g"6y"T#yP#0Emx#y \"E"yQ  ]Qp#y7@"ytW\Q#y7E#yW~Q#q7gC#qW.Q#f7I#fWUF#j8AF #jnXUE#|8AE #|hXU#f8A #fcXU#|"8vAp#v+U#q|"8jA?"jos-n#|9 "|VY\#y9 \ #yHY#C@:#CZ#v9:#vZo#j8:#jZm#y4:#y Z\#y6:\ #yZp#y;"yP [p#j;"jT[ p#y<&"yR \G#f="fT]\G#y=\ #yM]~G#q=~ #qO]F~#qqKB"jvW#zZ&"zR\*#^)D#yA\#y$*E#ymD##$*#D#f"$vm*c#v6##f"$C "C)#f"$*1##f"$|*c#|r\#f *E"fp #x"$v*|#v#x"$C*#Ce#x"$@%*##x"$|:*q#|r\|#x *E"xn Z\e#y((E#yoHZe#+((#HZe#|(("|vHZ#f"(v~(h#v;#e#f"(C"CZ}#f"((:#Ze#f"(| (a#||Z\e#f (E"ft S#o,N#j_\#y,9\#yL&E#y2$E#yjR&#c2$#R&#f"2v$v#vI&#f"2C"C&#f"22$/#&#f"2|"$`#|p&E#f $E"fl &#jb$5"j}c&#kb$5"kVc&#gb$5#c&t#|b$5"|~c&E#yb$E5w#yjcUE#y8AE #yAXU#88A#XU#jqAo#jrU#kqAo"kmrU#'qAo# rUq#|qAo#|rUEX#yqAEo#yAr #C<&"C0\ \#y<& #y\ #2<&#\ u#|<&"|W\0G" w>0G" s>0G" >>0G" F>0G" K>0G" >>0Gk" q>0Gk" q>" " & K" V" " T" W" '" VB'" `B'" ,B'" 4B'" 8B'" ,B# #?# x#.N" #<" #-" #9" #J" r DJ" tDJ" =DJ" ODJ" |DJ" [DJk" fDJk" xD# }%2" ؁%8c" %e" %a" %d" %T" %U" %," F8" F&" F&" F!" F(" Fk" Fk" F# }',# '+" '" '" '" '6V" 't2Z" 'p$" gL$" rL$" :L$" BL$" GL$" :L# {-# ~-" -" -S" -m]" -w2" `R2" hR2" 1R2" :R2" @R2" 4R2j" bR2k" bR# x2P" 2" 20YW" 2$# V$# V$# V$# V$# V$# V$j# V$j# V# 6# {6" 6" 6>" 6ee" 6TT" 6{TV" 6{0G# >0G" P>'# B'" =BJ# DJ" bD" F8" F$# L$" VL2# R2" XR$# V$# V09G"j 09G"j 09G"j 09G"j 09G"j 09G"j 09Gk"j 09Gk"j /# | -# z #  #  F#  M#  4T#  ,W# y 8" 8" 8" 8" 8" 8" 8k" 9k" #  #  A#  F#  <#  ?#  T# / U# 2 $9# D$9# E$9# F$9# G$9# H$9# I$9j# J$9j# K#  L#  M[#  NY#  O# S P&# s QT# d RV# g S0G"xn>0G"qo>09G"j T09G"j>09G"j U0G"|r>09G"j #xg#q" ̽" ׳1# ~tA 72>73#"=3} !1JL %*Oc2( tAB lG| yG# j8" X:"D9" YJ"|mD8" " #" ב#mV" %0" ״%S\# %RA#  BAh" E 9Gj'  "xF"qF*" F6" F"|F*l& F*#x' g#i'-" 'k$" א'bDAs#  QA" ] 9Gl'  2"x^R2"q^R2" >R2" >R28" ~N28# N2"|aR2k"R \ #x2 g#q2+" ̺25# w2# }/I"li  #'#5!#5A:aSES ISSSS"li  PC $9# `$9#V$9# a$#|V$9# "" ̟-<"" ט-<" ̧6F" ׈6$4# 6RP#vvAJ.8#58HH.8 18 18!518HH8!58HH8 K ?kA#5473]]00e{& P@3565#@]]00e{&RAh73565#A]]00he{&R@ #&=00]hM&{e0+'  1.'  /,h'  1.'  &O ###5353XXRUR&O#3##5#53#5353XXRRR3R2, 2#"&4{hIJ34IJ52IIhF,F|}Whs'h'htth''hWKy  $.9C2#"&46"2654&%3#2#"&46"2654&%2#"&46"2654&?WX=>XX=%56J55(BuB?WX=>XX=%55J65B?WX=>XX=%55J65X@=XY|X<5%&55%&5F +X@=XY|X<5J65%&5XX=%55J65B?WX=>XX=%55J65?WX=>XX=%56J55(BuB?WX=>XX=%55J65X@=XY|X<5J65%&5X "5>32&KY9UV9YY@9229@Y#73#'#D>>{y> 6' I' J 5[A!5[ANZ3#>2>y,!7;#"&=47.=46;#"%.49R.$94.%",,"V'AE>x&FE>EA'F; E <,!74&'5>=4&+532+53265m",,"%.49$.R94.%VE< E ;F'AE>EF&x>EA'M)#","M',"|&". #>7!5QJbFaJgcT{W0O ####532 mb@R@9^^LJJ@J 7".54>3!#33B`--`B 99RJDi>=hF@@V J %!53#5!2#3+99 B`--`RRJ@V@Ci?>iD(W" I?m 3##"=?hhi<#i hh4&&x;X %27#"&'5"5>32&KY9VU9YY9UV9YgY@9229@YY@9229@Y(W&  I<H' 'yy%3#"&/&#"#>32326+H>/-##5+O854$0 #91  .14 ;4X "5>32&KY9UV9YsY@9229@Y$a'&546276327632#"/#"/#"&54?&'#"&54?&'#"&463267'&546326q "." m! * $$ * "m "# m  * $$* m $$* !m "." m"* $$* "m "." n  <D'y'yy 1G& ' '  e<&yO'yO'yyg<'y'y'yw'yzyT<'y y<9 'yV'y&yy<)  'y& 3'yH'yaHya< 'y'yy<&y'y'yyD4 #""3265*LIZ/-inU[*bL)Q #533##=м.CC>; 5dF#632#".'332654&#"#7.&.BRXE%98I/56.1#4"4wO?CU, G4./7(G$4>32#&#"632#"7"32654&!.)5D8?14&C=OTA*45'(308W1 ;4@SN/L;>Q1()64(+1G #>7#5G$=QR,hm4H*#"&547.54632&"2654"32654NVCDUN#M<=LJH++H+$V44*,4"H:IJ:G"'1@?2&$%%.%&..&%F$#"&'33265#"&54632"32654&F!.)5E9?14)?>NTA'30(*558V1 ;4@SN/K<>Q.5(+23')7,Mh ##5#5353L.... S!5S.. lS & G G)o! 3#.546$YY$199 @MLN! IK-=yQ)+D >E8{8Ft*Bu8Q @*F A*G B8G C*H D*F EM FV T7 GV To Heol IKLl II(+]D:)+PH:)+LR:) 84[8)+N:)&A $*0#7&'#7.54>?373#&'>73'&''O 7+#7<8&9];7,# 7BTk=C Uv .t"OiKU@C[|6Y/_fO8((<\;~- e_L;I~ 9)4>32#&#"3>32673#". (>fA!RZi?8M$C( TTS q@f<(d2bjO4܊fO_;3UJgg3Ni`,3###535#53!!3SOOOOB77B7R793#3#632327#"&#"'67#53&'#53.54632#&#"&}Y;?!h(+*9J+#580e|nQ"e5>,X@M ,> 7(62Z'B8.%BW>6!!791![{ 1W9FFr&*3>32>?3#4&'#5#54&#"#7FM"K4a,#D0<7>58T'#T73.3HTY'1 J/*P*$W[ I;wi+5*27P9K GG#&)##'##5#535#533333##5##3'##3'3]N----ZO33O32fO::@@7FF]FF]]]]lUu[N3264&+#327&'332654&/.54632#.#"#"'#"&5#+#!2353CKKCVX5E7C$-4Y?YYX&0'1S6PDucz2> 14CiK]-jt8LZ>3 +(DOjc]x'V525#'+.14!#'##'#53'#53333333#3#'7#!7#;'##%#3'W97W5iZF78X3KL>;HG6CF1_nn\_2NNKW.eRSdcRUd?>,'wqI?))J??$k0".'#73&547#73>32.#"!!!#3267>g@/S7O?/@l@c^3K,DsExD)E9G-AQ=;;9QA/CI&d_;;\k"Y+##533333###]77]F%xngH**HgQ#5575575#5!#7]<F]_F_f_F_RR]F]f"8' 3654&#"2654''#>7.54632#b5( (Ghq;'jC%ZK:P[DG}R\F(%3."tssPu@. (! K[J8ecaM]'!&-327!%#3#+##535#535!2)&+!654'Q%42<fF]4444-Ql]3%LM10 0=F0D0}@=+[DZ "+3#.'>=#53#'#5.54>7_Blu2:xGPOxk 52J4 @;V@7T2 +<753#.'>73'b;(6N0;lh_8CL=`oy;YP~hd"=H;;*64`sG9DanT>   5!!### <ij]RRRR.!67 Z^O S$Mpb .!&'7! O_Y S bpM6m37NY3< .#"&'67>326D=0'zc$ 4GMi27<* / $zl #+=; >32&'7'67.#"3MG4 $cz'0=D6i3;=+# lz$ / *<72"y !&'67 OAbbAO $ bM^^Mb "y {wm $2654&"7#"&5462:-*@+X;7!.'>7*$!#=##=#!$* *$!#>##>#!$,+.*#??#*-,,,,-*#??#*.+rnT !>< sGJHC #dL*m ?PZH~#!5HHP~H)_'y|'y|yB|0!#5!#GHGgpB" !&'6702y#dd#y2781#ww#1JO###J>GO>GONN  v uG {I@0G {{637''7'7)E F-!()!-F EI':==:')34Af3#"#>32327#"5#"&5467>?654&32672#654&#"3273#".546::N< ZK8E.  7    07N]I.,@43"0Q8E='"#7,%P!= #A)&8 yC<>-$/8   1,0L   #2!R>,  $#1<+*1[2-,s)>0=Ay"#>32327#"5#"&5467>?654&32673#4632#454&#"#"&547332>54.1'.N< ZK8E.  7    07N]I.,@43"0Q::]J5A<" )3=7/(aP?G@(&,    58+C<>-$/8   1,0L   #2! ;Q/&  ( &!AM1, %0!4>32#.#"32673!".00GyL+_^W6+/:Z``!KwG/Md2bjO4NNej3Ni`Q"r&,3%,4>753#.'>733!5.4%G1JC> K K CI1G%/45n$GI3PP QC& Ob AC3GGO XFCW0(:L3#2#654&#"3273#".5462#"&54>2>54&#"::8E='"#7,%P!= #A)&8 y?L /Q2=K /P#8,(#7,>,  $#1<+*1[2-,sK<AL=)K<@L=)"0<+,1#0<*+20((?3#2#654&#"3273#".546#7#"&5473326?3::8E='"#7,%P!= #A)&8 y.7 ,  $#1<+*1[2-,s):*% # F:0mR+$#533.#"#632# 33267#KRR x^W^_+LyG0/GwK!``Zg>sNN4Ojb21`iN3!je~(o"r),!t}326?623>3232676;2#"&54?#"#"&54632#"'32767#.5476?#"&54654#"+"54632%"67654#!'\&jaG14tIc9#U( <^$:9L@<.yAP9K0#!$ ?4d+H\  VJ3.)%4$ i'!&j3bP0@73%Տ@6FI?fE3K8 FD60TkY[)& @">YkyW963 kUpD+-Oi27&#"7>32&'654&#"327#"&54>73254&#"#"'63232654&54>7>58A � *-0Me4(,6 # +#$! &8   Q`K N (2$ %D0R  +' W,!  -"p)EG,,6 0#"0(4 $  [n?A1M+ S+$!7)!8.Y 33###3#33俶7HH-H;'L6mm3>32#654&#"#T9/T8?HPTI/&Dd=T,$C;W &/`RVN>32#654&#"#?3U/T8?HPTI/&Dd=TzVWT H,$C;W &/`R?HR3:M>74632"'326?&547>7632>54'4;2#"&>K(DO4_'M*3&B';"#W?Z4dAJ#+?GaZ4% { !?.l#)# !J8)_DMW4>767327>32327#"'#"5463267#"&"327&">54&7B 46:EID]IAN>{W 61@6K'*@#VCw0gX@d) [{'D,D>%5V`">,- E.4!*3Ћ740XZB 91&q$3%2b,P;%c #  &qXz1$-327#"&54>7'7>324&#">  /)=@k/5 4"o #63P !#!E?Xt)a) BN;02'B )9LS.A#- K9vl?Q)!632#"'####5353353"32654&]9ihx|hk;KXTDDTXSBPPBDUS2VZCnn29999oooY^pL #53##`wXiX}'O</R.f133@8j&3X.4j-6%#"'332>54&#"#"&547&536324'326*L2m2!'8 1B ?,0(,0/+(((2sJU9!.ZR3.<'BD%IX$-M/$7\30CG.iWDjT*z>X8YG![i +#!2%3264&+3iq[-lugCKKCJJ]qoDxD&!('#"&632/7&#"327%654&/iVižg?.1;@54@85WO2:W3VҪq58*S9YN|w 2>54'%32676;2#"&54?65##"&54632#"'326?46367&#"3267>=4>32#"&547>3272"#"&#"6dDnnp*"0>+ "K]/ " OQ4""J>U;P/#!# >3;=[<{j@7BF%?&  m1&:8=vJ2 $ m y@'U%E/(+0i(GD2#qHnX'$<" wU f,wZO4 615 K:D()*H)/?NV/  !H23273#".5>54&#.54632#"&5332>54&#"[),#  P42(9#!&%O[aMLW*L9-YU$&&/ NF)M+.EP70 16'Ev`4' )?PuYGD, ?FrbK.J!> ]&*4&+326#&=4&+#!2#*LCJE +q:>Pks6H H6<`&0* ")8.IAC?e^>RS]0%.#7.+#!273#.'4&+326_ ]Pks6=!%\^" Hq:R8:GQJ#H6<]~$(037#&=4&+'7#!77#;2654&'7#_d6= +q:>y8",\LJED<88E8YLdX>R&0* ")8.IAC?^S'32#"&'"654&#"3"&54>3232732>54.#"#4>7.'6732654.9D0  1Z9FQ7S[06%*3& !8 .'++' 6!!  +J.S="1)! ;QJg %@j!E-! (2D8(.\=Bl 4Q-*A%!* .!<&%/ S7 / 4D7'n6  2[G %-%F O."mx74632"'3267>7&#"32>=472#"&547>327632#"&54632#"32>54'#"'#"&>54'632"327&"/"!$( B6;=IRL?yo96K:uA `5,7<" yVgm8'xQL5Any m5#7.54632677'"&464'327632"#".##"&">54&5467&)!!/2 LTs^V*!es!  &L'D1>A   V %P?$85BQJH CT!$N% 5 1aE 60!v$'* -$+-?#+A  Y   Aqk^1  +.?Q0(H %#"&5463232'>54&#"D._p;Iqes 0ZlCV# %S+lL=v=j(H$&R9-Zc74>7&54>2#"&54632#"32654#"632#"'32>54#"#"5>32#"&4#"326-9WGazRe3&Y* !D-#S|+X<%3$?%3R.N=1Y6 a'N _1##>zJ216o+X P ]+J>TP JND3/.@:9^6 =n+/ "2OF< )S}74632#"'32>7+"5467>763267>32#"'"547#"&4>3232#"&#"32654&5463#"&>5&#")0#!$ +bV:@z R *&,3?&  $'#C!t 7(/gF`~TB? C@GW5A\{ p#4-;@"@;_K&%!=J;!.&A5,2 537!.n(>aM'M4MU!5{>"Gz#E !))ln7;>7676332>7>?6332676;2#"&547>7#"=>7#"&5463632#"'B: *Y:s IV<k "*1 v-/G-o  Gl'+-?IvF-47B@Ca"Z[4#"+g $ E3###3#/%2#654#"#"&547332654&/.54>::XXH+VII /C"?n:=KY'+{$,-V~ t'( N8. # < '8-!JA 2.?-" # 5" #7,!} ) E[#u# m{[#u"t mE_# A _# A"t m_# A"u m_# A" @ mE`# B `# B" A mEa# D a# D"u ma# D" A ma" C# D mE"{ md,d#,,d#,,#,,d#9,9]#,9s#,#,9#,#,#,9d#;,;]#,;s#,#,;P/0&Y'K0BLBt#LLBR#L#LLB#YL  Y #LY h#L#LY F#L#L#LYB#[L [#L[h#L#L[DOFGFP  !&'672y#dd#y281#ww#1-; !#'67&'P81#ww#12y#dd#y21 75!&'7'6712y#dd#y281#ww#1-;x 367&'781#ww#1x2y#dd#y2!!.'7'>7!.'>7A82%6/^66^/6%28AA82%6/^66^/6%28DCF @6a00a6@ FCDDCF @6a00a6@ FC!%'>7.'>7.'7DCF @6a00a6@ FCDDCF @6a00a6@ FC]A82%6/^66^/6%28ABA82%6/^66^/6%28%#654'327+(t1 X"qS@(Sq"X 1 &@ "+ &@03!&'7'67!#082y#dd#y281#ww#12#!&'67!254&# NTVI2y#dd#y2}i36G;DD1#ww#1Q#+-"3!&'7'67!"&54663i}2y#dd#y2IVT3+#Q1#ww#1DD;GZu3!'7!#7[nuTpoT !67r#y28v#1 %!&'!2y#1#v8b\ \@#_G 8@  - 8\  Hr@ D!  r@ X& V !!!.'>7QQHM)B\[[\B)M~5PP5b!QaVVaQ!b'7'>7'#'#H!QaVVaQ!b5PP5m)B\[[\B)MHQQ-'7!5!7'!5!'7)MHQQM)B\[[\!b5PP5b!QaVVa,<z.'7373!QaVVaQ!b5PP5)B\[[\B)MQQH!'7'7!.'>7!7'!8L(PXRRXP(LL(PXRRXP(xTToT}_"`^KK^`"__"`^KK^`"VVV'7!'>7'7.'77'7H!QaVVaQ!bb!QaVVaQ!bPPPP)B\[[\B)M(M)B\[[\B)M0QQQQ /6%#"#".'#".#"#52>32>3232>;&'7'6`w:<=92), (#7A>9;<9D= (#4g2y#dd#ygNc bP>I>"854Oc bPcc#1#ww# 73#3#KhxcMx'N+%2#"&54632.#"#>"32654&#@G3!ez_i:QL.> X k]@JP=>RR3R^hc~O83WbSGCW[DBSZT !5!5!5!!5!cdLRR'R# 32654 &#"3#"'#7&54632JVtWqnFi\טfMJrYטh*FJuIqjg[NsfY 33 ! &d)'h !#7! d3Y'q7h!".546;#!!;~Es\3m-IP4!FyRFF;Q)F7!33#3#;#"'#7&54677#?t7}B76Y^E7%u.p }AGFFF[tM b-74>;#"!!;#"'&-&5B1*6. l -9%qJ$7W1 6 B/62C 6j27g )Ig7&3#7#537#537&'#5323&>7t7%2ZqD7[q><2DP?4 >/H@'tNQxF"<32&#"32>7#".'#"&54>32.#"32>d+)H!+.#  ! i)   &6$M,#g7"9|1Jd2>32#"&#.'#"&54>32>7.#"2654&#"  !"!'<N9 5*+(*9N;3-1    )11-1)       !0*5Y& Y5*0 = ! ^dH! !0Ee3VSZsS BLd " E Ed V" E# E E_  6%654&/7#"'732=.546754632&#";P+%U$- 'N8%<>! ^(: BEdH! !0>H W&<  >/&/ zJYpEe3V ,6+9?A7.2")Q8?J,23 ' A8?::F/;1+#,!%! J@3 7#7'&#"#>3273326=3#"/E/571*q@590'*NFK!%:E*$"t PJ(m & 2 JE( &7#7#537'&#"#>3273326=3#"'!!E;tT7/571J9@H590#(AiF$NFK,e !%:EvF2$&  J2,#7#537#5!733#3!"#>32326=3#"/&E!=C3273326=3#"'3!!!E?c5@N/571`)@6 59024= FfF2NFK8Pk!%:E bFfFIp& J JnI,:7#7&#"#>327'&#"#>3273326=3#"'326=3#"/E\ /5715I/571]>@L 5905>590'*=,NFK_/NFK7o!%:E `$!%:E'35$"#>7>2#.'.267>73"&'.'3C[Z# Z[Z "Z[" [ZZ # +5  5+  +5  5+ 2o &  u2%!#7#537#53733#6K6*3K3*FFfFwwFf(Y & 2& 2% 2(  %!#7#537#537#5!733#3# .K. (K( FmmFKFKF__FKFK- %!55% v8CC3EOO- %!55-5v8CCxEOO- %5% %5% vvEOOEOO- ^ ?367>73#.'.#"##7#>76?&'.'3323lKE+" %?&U5 "Z-FKC1# (D&Z8 #Z- +5\5+  +5Z5+ - 75%737'#?-&@K0hJ0K;/E|r,O;ZOhsApA-3#75?'57YK@]OjCCCCBj>-!!#7#5375?'5737TSK.KD>GKR$yElCCCC=OKfOtAT1.".#"'6323275% $YLF%()|!YPG(v.//P/0bEOO.".#"'6323275-5$YLF%()|!YPG(v.//P/0bEOO-752$7&$-|mTqgkxIfEs\OL@DJOZu- gC( [' 2: g( \' 2: h-752?367&'#7&?-MK651\;!3R3`vGKRo "EK#)OTP<4OU7)-33"#756?.'567&PK[qeCK+3.Z8#2Q2^u$ $*EMe!'OQS<3OS7]7X!".546;#;~Fr\3'IX9DwRFB\2F7X mIX733#;#"'#7&546;7Xo-0BP? 0F99FbJ44FBFF߄6."3!!#7#537#53&+532654K@G^K0Oc=nyOK/F::F.F(F-tV( !&'67%3 &=33265/!RCffCR!pHHfdK&!fQaaQf!ƃba4,%!!!!,MGPH v|B:' 2= vB:' 2; wE7 v=-@E7 z|+ 33##5#53$264&"6  i66A66^M+ !5!$264&"6  ~/6^M+ 77''76  264&"''''╫'&&'+  '264&"6  H&`>&`JM+ 2#"&546$264&"6  &$$&%4$%(9MLq"!!#"F"F"D" !l!#!5!F}&\F%!5!3FFFF\L"!!#xF"F"L$$ !!!!#nnF$FpF8>>-5%>H}>>7->H+~>!>' 2\ >%>' 2` !##3XXM = =%#".5332653M\^MRYaRL``LXS W. 2#"&546&$$&%4$%(@m 373'7@))j(ii(6||L}MM}> ?'%%5H%%ݚok Bk( #367&'!!#7#537ȏ7K53.\:$4S3axV5KYxbnc5 !u!'OSP=4OV7F77F(ELx( $33"!!#7#5375>?.'567&mK`h]UkvK#B=<75I)9V6f~#$EDF77F&.O06C>7OZ8YB:33#!!!!#7#537#!!K3:^']%K%,P'wsشfGHNFJJFNVcB:%!#7#537#53!5!733!3:~$K$+O.}y-K-4.FFHHF\GcHZZ\c' # 32654 &#"#"''7&54632JVtWq$[\טfa%aYטh*FJuIq#[g[b%bfYb!##bFFmHe##5eF'F_|333_FmFIf)533fFF4 4632&#"dH! !1ZsS BLd6;&#"'7325;%<>! ^&Ee3V;XI %"5>32&KY9UV9YY@9229@Y;XF ::#:;((:03#;;(((8T #57>7T_{RJ(R:b7(8z 3#(RR (JT #.'&53T.:R(JR{7b,8X X8X  ,KX! YX8MN#3#LLX8 #L X M 3# 5L78,O X8,  7 ,  X4;$#;U$?/1%/8)/)3/6#/2+3/7,/;6#G/()/7,;=/4/1(G/()/2 75/$0/&.=/%"/(/`np/6h%weo/+v7edkq//y)ddp/7d9xdap/)d)wfo/&r5fbxq/6t6jdo/6r,dO/(//,'1Y/';/&&Y/';/&&Y/';/&& Y/';/&&?/$/.1%G/1/67<Q/(3/7,%?/&0/$ 1lwh/(o0tlD/64/8 %[/(=/61&a}p/)w6i`}m/6h*p_}p/5w6gb}s/6j8{bnn/6q3bY/';/(%/  !"32654&'632#"'#57537BPPBDUS9ihx|hk;K??SBoooY^p~VZC2@2zN3@%53!53G0HHppk/1FM / #!3##52672#"&546"32654&%54&#"#546322#"&546"32654'.sG/3)(0=T@BW=Z) Wҕ՘bTl+r4 QK.=.-97- ?ST@9P<Ւӗ!l\|c'-#2>M#67>32#"&54?32654&+532327654&#"72#"&546"32654'.66@&=PDQTC32"32654&2#"&546"32654'.3)19 L;LS>%C!M+en)67*&//ҕ՘bTl+r ^Q DSAE\'9nb<(1=.3C<15?EՒӗ!l\|c'-# %!#>7#72#"&546"32654'.8SYDmMҕ՘bTl+rH*yib\Ւӗ!l\|c'-#"-9H"&54767&54632'"32654&"2654&2#"&546"32654'.UUS/HN<;I)Q&..%&1.+)46P41&ҕ՘bTl+rnX72#"&546"32654'.-'=9"4*'>T.*R),-,K4IH4>4IH42&g2 !!!5%!5!%5!!52DPD6PPPPPFFpFF2j@2 #'+/37;?C%3535#3535%5##3#3#373535#35353535#3535!!XFFFFFFF*FFFFFFFFPPPPPPPPPPPPPPPPDFFFPPPPFFPPPPPFFFFFPPPPFFFPPPP2 % 5#'5'35!!n4XFaG2D25~IX̌q硡Xᚚv2m2@2  $(+.26:>ADHLPTW!#7'#77'73'7'3'7''7'7'7#777'/3'7''7''7'7/7'Dgw<^;;z=c@?@jF@FX55{=b??xiFEF#F@F@F@FFF;;y=c@@@$@F@E@E(@@@>>D2<;;=@?@iF@F55>@@#FEF#F@F@F@FFFL;;$<@@@#@F@E?E@@@M>>f35'3#PSS/d !!dX d !5%!!X/A&r@C&s@l`!!+` l`!%!!"+0k0 #Z)Z#Z% !33xo %'!sxEe/b^ x^ @^ y^ @"x3 0{@^ /x^@@] /7-3Ռ#Zx}#Zy}x.{^  >^  4> xs /{@^  x s ] /}$ gg gg$% gg?gg$ %'7 gg͎gg' 2#"&4>"3264%2#"&546_d`x|ّԕPa`=컵Ք՗ # > ttT88'"3264%2#"&546 x|ّԕ컵Ք՗' %-39?IOU[agm3#654'&'7'&'7'&'7&#"5632"'52767767767%#&5473&'&'&''67'67'67=< 8 q*  KQ+ 8 << : s-KO-: y KQ*"5 8k;;8 q,  JP. 8 d 8 p-' #(,2#"&54667&67&'%64ԕwZZ!!W!=Ք՗j] Z B & Xn?BD=' *"32654&'2#"&4>"3264%2#"&546IqnILklG_d`x|ّԕprnJJp:a`=컵Ք՗' 2#"&546ԕՔ՗'%2654&#4632#"&vyՔ՗.x|ّԕ' '@'5@' #"&54632%"3265!Ք՗uv|Uԕ֚z{y'"!#"&54632v/hՔ՗xԕ'"&546.՗ K^ !"32654^hII43JXIhII252"2#".5467"32>54.%!!JNLOLOSa^]^^]]ADRLLQTJJ\^`^]^]^D2[ !#4&#"#2!462ʋcr˒(vt2a ']#463"c<֙x]7U5@g 'o@'] "#4632#.w<֙<wԓy'g R!RDDRR@RRRj@2, "32654&2#"&4<,,+~hIJ34I- +* !]J52IIh2!%!!,vDX2D2 27!%!!a[vD.\2D2 2 !3!%!!c/vDXX2D#Z #5 !hw"hh3#Z%!33#Z7! >e3>j "32654.'2#"54$㖛f`ck22 !!!!!!2D2X2DE\E2@2 22@' 2#"&546!32654&'ԕ~j  q|oՔ՗8 j.pys '@' '5@jO%!572hO2@f@jO!%!!M2jO!!O|X !%!!4pH$p|X !!p pjO B?_ 654> 54.''#"547&'#"&5475#"&547&'&/.54>75&'67.5467.'>7'>54&'GSRL#q 08"5"( ;N$V&[&-2F >3'  x))[&V# ;,.'6:s(2". U_^T%  T`acMUTH)xnABp`L_ P #-(86C# =**rY-{/r2)T"5 ] ]#  04 T*1r0{,4G=:J-?xIWP!LJ "   LMpB@n~YT"O$%3!56767#"&54>7#"I(,C$U,T 4R5K,FJHGKF-K5R4P* 8vPJ5-J=BkCBjB>J.5J#:.'.5463267632">54&#"#".'&\Qm<+U>U22F=W6E1='5?&DJF.84?/ 9KOY/?VK,6"8T;8pW/F4%KFR 7(/hX[c/398 /!*J"0 &'67>7.(8F!JE;;8-0>P<6jj1?0#8!5>7#"&54632&5462>32#" ".F--F/! O&@\S;""']]'  ;S\@n%%9%./$:#,"(_CA\ 82?ZZ?28 \AC_"OC%3.'32654.'3263!56767#"&54>7#"=!28"L2.@,740 ??;%@.K((,C$U,T 4R5K,FJHGKF-K5R?('t?.!7&//O09Z40='.?J4P* 8vPJ5-J=BkCBjB>J.5J#>32.'.54632\Y6=W5QTMQm<+U>w0JFT;6phiBKOY/?V"0 &'6(8F!J0>P<#/h%3.32654&#"654&#".#"32>!5>7#"&54632&5462>32#"!28"c`%G<$vLB44A2.+8!?D(.%  ".F--F/! O&@\S;""']]'  ;S\@n?('H538 l6&DF$e#A37G )(H%9%./$:#,"(_CA\ 82?ZZ?28 \AC_7 %#"&46323B,-BB-3"S%..J.-7"&46323#54'&BZBB-6 T&\%..J.-7mC88m7#"&4632#"&4632"F0/FF/:#F/0EE0:"ks&--L-'&--L-b75%#"&46325%#"&4632wF/0EE0:"F0/FF/:#=='&--L-ځ&--L-Bp #"577>324&#"326p;W_&(  FNW%'30;b,C|R0  VO7&'32.'>?/&54654'2>2%2367>7632327#"&'&/.'&547#"&'>7&'>;&5477654'4?&54?&472>54'#"&'#"32?632#"'%>7.#"327'&547.'&'6324654.'.#"3263232654&"#"'.'&'&'&'32?6=#"'>7>7&54672>7327"&+"327>32&#"54#"+654.'676794OgB/4PB6*'#C  / Fs3IJI    +b] i ),/KImL W!+a>E,' Y3q2VU U (%#   ([]DZ A'$04[,  ).P() -2>c`* f8''j)6 -M01$"" 8 9+ "# vpn #AYI[ o#,&g!!jV0D9'0*A   H ! E"   !   :## H% G " # O0:/B4G/93NF W  >FH    *{/ ) N !!" %5T Em*a &x18_ Mx'+26LL 8< de ePd<ddH !# #7H@__[$lH )33'__[ll$H )! 7'@𼌌ll0462"$462"#3\+>++>+>++>PPy>++>++>++>+0!# #3UUUc033#0UUUc(H !!!!!PPPH 35!5!5!5!5!H@PPP(6#264&"462"264&"462"!5!"."".qPpPPp"."".qPpPPp,m.""."qpPPpP.""."qpPPpPLPHr3#3###53#533蘘Z蘘ZPPDP8PH ! ! !iVKJWH462"462"462"t+>++>+>++>++>++>M>++>+>++>+>++>+H ! rKxW80 66  >4&8[Rd|lU080iT/8/jt>|fQm[=|dH462"462"462"462"H+>++>++>++>++>++>++>++>>++>+>++>+>++>+>++>+0p3# #`__$<| 3#333#!PPP`DlDH3#35373#`_P_`ll#4@462"462"462"462"X+>++>++>++>+>++>++>++>>++>+>++>+W>++>+>++>+H !!!PVWP6"462"$462"$462"*+>++>+>++>+>++>M>++>++>++>++>++>+:  %5-5%m8=UrKVrrVK0p)5333pPPx<< "3"&632644#<||ޞ||ޞP++>GPP>++>+?g &5467%!5!32654.'XO<mKIf^]g&?4_`v{aI~,PP6]B@L=I,D'6F264&"462"264&"462""."".qPpPPp"."".qPpPPpo.""."qpPPpP.""."qpPPpP80264&"6  <6<704632'#"&"327'7654&7⛟UL8Lh}zcS9>j⛇hL8LUȮy>9OgzH 3###3!8PPPlD<462"462"462"<+>++>++>++>++>++>M>++>+>++>+>++>+8H'$462"462"462"462"462"+>++>++>++>+>++>+>++>++>++>!>++>+>++>+>++>+>++>+>++>+80462"$264&"6  j+>++><M>++>+6<7046327#"&2654''7&#"7ݠhL8LUݟ}~>9SckUL8LhݍzgO9>y8'/7%462#"&54632"&547&#"327&6264&"264&"PpP6SX)%UW9PpP$ y~ $O"."".""."".8PP8,F'ᛠ%H.8PP84)~y)K.""."z.""."6r 3##5333#PvvPvvDPDPH 3# #3(`__`$ll8B264&"264&"462#"&54632"&547&#"3533##5#327&"."".""."".qPpP6SX)%UW9PpP$ oaPvvPas $Q.""."B.""."98PP8,F'ᛠ%H.8PP84)pvvPvvm)H!3533##5#!!PPPvvPvvP0 !!*(uH7!3!3PPP(< '%<w..BB6#5.5353>53#4&'#5#46wPjPiPPiPjP a@r q@` `@q r@aH3#3#'P_`6+.5353>53!!#4&'#5#4675!5!wPjPiP$܋PiPjP& a@r q@` 8P8 `@q r@a 8PHr353!3PP .575HTHHTHFt%1264&"264&"%2"&546!2"&546'#5!#3!53m%34H44%34H44rp<3%$34$#43%$34$#4<<<<Ft&19A#5!#3#3#3!535#53#532"&546!2"&546264&"264&"?r%34H44%34H44q<<<<<<<<<<q<3%$34$#43%$34$#4MF^2%#"'#7&54>7&'#"5325332?373327^5R.($E8A":!D<a?VC4B!;7>謬DA,=3,` .F!3!535#5&5#5!#32>5+Xo@C6*# :LS H<<2<73#3!535#535#5&'LS ӄ@v9&*# O,bD<&<<<;> <<<<<<<$F %-5=46323>32#"&'#"&5467##"&264&"264&"264&"FR:2L L2:RR:2L 00>RtR>00 L2:/B//B/B//B/B//BtR>00>RtR>0 L2:RR:2L 20>B//B//B//B/B//B/F\5=EM462"$462"#"&'##"&46323.54623>324&"2$4&"24&"2((((R:2L L2:RR:2L X0>RtR>0X L2:/B//B1/B//B./B//BR&&&&{tR>00>RtR>02 L2:RR:2L 0>B//B//B//B/B//B/F326=33!53#"&5467I4D<}})u4Mlw_?`):e>謬F2533#3#3##"'#"5325L<,E E<٬<<< >>謬F:D#"'#"'#"54675#"'#"532532536532>53323265)9= =H%DOOe,E E<<>H9 C^t?[>>謬o#2992##29=A,-6eMFJT$462"462"#"'#"'#"54675#"'#"532532536532>53323265(((()9= =H%DOOe,E E<<>H9 C^t?[>>謬o#2992##29=A,-6eMF!#"'#"53253253353#5#,E E<<>謬]CEFR1"#43232>53#"&%#"'#"53253253353#5#>謬]CEF 573#573#N<<<<F'F'F3##"&546;!5#"32655Q>>>N=Q< (!6-E9j9E-l-E9j9E-6#J_3333`J+1"]k{{k]""]k{{k]"( FJ09B%#"'"'#"&53327&546227&546232>5654&"654&"Q>>>N=Q< (!6-E9j9E-l-E9j9E-6#2(2(J_3333`J+1"]k{{k]""]k{{k]"( JzIaaIzJJzIaaIzF>#$462"462"462"#3!!!!&&&&&&<<yy((((((D<<<F>$462"462"462"#3!!&&&&&&<<y((((d((D<F [>54&">54&"#5##333327.546227.5462;333#5##5#"'"'+*4*n<<<<<< 6-7n7-l-7n7-6 <<<<<< N>>>>N )6)FAAF)6))6)FAAF)6Dž"#(A)f]]f)A(#""#(A)f]]f)A(#"'3333F4=2654.7253#.#""&54>7&#"#3>326! *.* !)k<<n.6-' DrD '-6.n<<k)N>> ,(DCCD(,9+';S"2)(d__d()2"S;v+933F3333#####5 <<<<NN<OO<F +32654&#"326=33!53#"&54632#"!4"8FI4D<}})u4MlyK+9H1>c' t):e1``'L~:CG6&&&&n*[D?`*o>;‹ZzzZ/\yMKIOF@IR462"$462"#"'"'#"&53327&546227&546232>5654&"654&"H((((EQ>>>N=Q< (!6-E9j9E-l-E9j9E-6#2(2(&&&&0J_3333`J+1"]k{{k]""]k{{k]"( JzIaaIzJJzIaaIzF#"'#"53253253353#5#3!53,E E<<>謬]CE<<F/$462"462"'#"'#"53253253353#5#3!53?&&&&,E E<<<<<}}&&&&d>>謬CE<<F'#"'#"53253253353#5#3!535##533,E E<<>謬]CE<>QtAHHAAHHA,G+/8SG[5*+6gD+*>>QtAHHAAHHA= F Y%32654&#"#"'#"&532653265363232653#"'&''767&=#"'#"&532653265:.2"",E ED?<R<R< ?+1H)" =%">QtAHHAAHHA,G+(4J59>G[5*+6gD+*>>QtAHHAAHHAF% BٷFr GQ&#"32767632#"'#.547&'#>54'#"&5463232654&#""7 "d\CC\3`);H1)0 !00H4( ;QQ;,,H8+# 0)1H;)`." 7=^+ 3:EE:~J1+G8D-paU ]Yv0SF$HH$FS0t`R !`Zs-D8G+1J +F"*264&"462353#5#"&5467.264&"EfEEfii2<<3ii.&'-532>53#"'#"&532>532>53#"'#" -:- < -:- 53#"'#"'2>532>53#"'#526=#"&5332>5463"7%- 7&'#"5325332?3327#"&((x((":!D<謬DA,=9X.+?|FB462"462"462"'4>7&'#"5325332?3327#"&T((x((x((":!D<謬DA,=9X.+?|F\3632#"&=#"32654&F53#"&462"532653#"'3"&54654'&'#"&532653654&5463"64=8r83#264&"462353#5#"&5467.264&"$462"462"<32#"&54>73264&#"=H<( h9dtU|=VR/iFVOK5`8Gd6Q9KUuKYwCY:NafQsF#+>32#"&54>73264&#"462"=H<( h9dtU|=VR/iFVOK5`c((8Gd6Q9KUuKYwCY:NafQs/((F"*2<53#5##"54635#"'#"532532536462"462"'"3265<>謬oJ((((K.-6eMF %"&63"#"&63"ӕ~ӕ~<<.<<.<F+73264&#"5632#"'%&#"327#"&46325O;SUllUS;BLii+'F;SUllUS;BLii+'& )H) ?MxM z )H) ?MxM zF33##"&546;#"3265<53#"'#"&53327&5462'654&"!( >N=Q< (!6-E9j9E-V2(1+J`33`J+1"]k{{k]"OJzIaaIzF09462"462"2>53#"'#"&53327&5462'654&"-&&&&^!( >N=Q< (!6-E9j9E-V2(((((1+J`33`J+1"]k{{k]"OJzIaaIzF1$326533253#"'##"'##"&53325hT"27&'#"5325332?3327#"&":!D<謬DA,=9X.+?|F,!4&#"##"'#"53253253632#4&#"632,4<,E E<<<#+4S>,4",4S 66  >>謬hT> 66 WT>F#$462"$462"##"'#"532532536((((Z<,E E<<<(((( >>謬F1,5>"&546323>3"32#".5##526733254&#'4&#"3dt\Q(:38 Vkf#,thAdt\Q(:38 Wkf#F3@qOK3@qOKOqK]qEeLP-3212bej)u+=HODCQQCDOH=+u)jebǵDEJ?T0-u'&'&-&'&'u-0T?JEDFp-2#"&'732654!#3!52654&#"'>322bej)u+=HODCQ<<QCDOH=+u)jebǵDEJ?T0-u'&'&x[y&'&'u-0T?JEDF!2>532>53#"'##"&5 -:- < -:- 53#"'3!53d+FTY< -/8<8/- 532>=3##"'#"&5$462"462" -:- < -:- <<-D]22]TY &&&&.RD))DR..RD))DR.'/;yyY((2&&F6%-53#2>532>=3##"'#"&5$462"462"<< -:- < -:- <<-D]22]TY &&&&'.RD))DR..RD))DR.'/;yyY((2&&F3#3#3!!!!F<<<<yy'<<F@%"#43232>53#"&3#3#3!!!!(!//!:RR:0磣</B/32"&6264&"6264&"\\\"Y}Y:cc:Y}Y<\\\^\\\N[[[!92~:00:~29Y\\\[[[Fj08@$462"$462"264&"47.4632>32"&6264&"6264&" (( (( \\\"Y}Y:cc:Y}Y<\\\^\\\(((([[[!92~:00:~29Y\\\[[[F 1<G73265"4&#"2>#"'#"&547&546326324.#32634&#""UoKj5<"UoKj5#"'#"&547&546326324.#32634&#"((0((>(((("UoKj5<"UoKj532%3&"3&#"@<@)R1<;1%:FE{}k/Q<==<#/E/9sssF7273>7&'#"5325332?3327#"&547&'#"'<A :!D<謬DA,=9X.+?|Q"%5>F !#"&54733273%u8Ml\PpI4F<]Bpknm):GF4/264&"!5>54&#"#46323>32#"&^^^*i66J.75<\LKi;,T |Q[[T|^^^S!K'46$;@!*;LY^%A.6 <OkpFb /5%#264&264&"32+"&5467.546"3r=&5432654.#" I <+-dB!!H) 1%$1<H."d I +!E#o!!G=> ]Yv0M;: !`Zs-!!oD!+ F #5!#3!53r<<<<F 2533!#"'#"53255#L<,E E<٬ >>謬cFv353#5#3!53##53<<}}<<CE<<BFFv%$462"462"'353#5#3!53##53((((9<<}}<<&&&&CE<<BFFv##53!353#5#3!535##533k<<%<<}}<<XBFCE<32'>54&">32'>54&#"462"1?oxATyQ*+"HVv|qMY K3ZOk5TyQ*+"HV;ek&&{+0F"eN8H *6)4C)J;O C+?%eN8H *6)4Cp]1((F46323>32#"&'##"FI3+C C+3II3+C C+3:fI5))5IfI5))5F+  3#篮 kmF1462"$462"% 3#&&X(( Z&&&&.mF  !5!!53'!x<<}ڂ'bF)2>532>53#"'3##5#535#"&5 -:- < -:- 532>53#"'3#3##5#535#535#"&5 -:- < -:- 75#"'#"532532537#53265OO%N.1,E E<<>謬;";&"-6eMFR9D"#43232>53#"&#"54>75#"'#"532532537#53265>謬;";&"-6eMF733#5!#353#5#3!53#F<}6}<<}}5}<<}}<<}F5 <"3265$"2654'##"54635#"'#"5325325332#"&54Jh((,6..UOOe,E E<<<0<<30< K.-6eM*(*)*F^tAe>>謬oI64GI7!F33!53!333&

=&5432&#"!&=#"', I<+-dB!!."d* I f_Z1%$1D!+ o!!G=> !`Zs-!!o +!E?F ,7&#"654.#"353#5!6=&5432327632!&=#"' I  I6b<<`d<+-d#<1%$1 +!ED!+ CE!!oo!!emmFe%##535!5!3##<32#"&'##"q&&&&I3+C C+3II3+C C+3((:((fI5))5IfI5))5F<(08B2#5264&+#"54635#"'#"532532536462"462"'"3265:RR:!//!OOe,E E<<<*((((Jh((,6HRtR>謬oJ((((K.-6eMF+$462"462"462"462"7#5!#3!53d((((((((r((.((((.((<<<<F5$462"$462"5##"&532>532>53#"'3((,((2+FTY< -:- < -:- 532>53#"'3462"$462"`+FTY< -:- < -:- 532>53#"'3`+FTY< -:- < -:- 54&"327&5462327&&)532>53#"'3$+FTY< -:- < -:- 532>53#"'3`+FTY< -:- < -:- '/$264&"462"264&"462"$264&"462"^;R;;Rw^^^;R;;Rw^^^&;R;;Rw^^^R;;R;^^^bR;;R;^^^R;;R;^^^F(0264&""&5467.546232#5264&#264&"EfEEf3ii.&'-ii2:RR:!//!EfEEfS~JJ~J:PSrrS5XX5SrrSQ8RtR#2::42:p0F)3;C3253253#"'3!53#".54632#"'3254&#"462"$462" 37{<#2::42:p0?((((F;EO267#"&54632#"'3!53#".54632#"'325374#"326%3254&#"/73 5;824<&:%T'}}'T%:&<428;5 37{<444480 :24::2&;*0*<<R*0*;&2::42: 08.00F\;264&"264&"#"&463235463"3>32#"&'##526=/B//B/B//B L2:RR:2L UR:!/[ L2:RR:2L [R:!/B//B//B//B/n0>RtR>0:RRtR>0:R32#"&'##526=##526=/B//B/B//B L2:RR:2L R:!// L2:RR:2L /R:!/^R:!/B//B//B//B/n0>RtR>0:RRtR>0:RIa53#"&3!2#5264&#!#32#"&'##526=##526=##"&4632/B//B/B//B L2:RR:2L /R:!/^R:!/# L2:RR:2L B//B//B//B/20>RtR>0:RRtR>0F?GO5463"35463"3>32#"&'##526=##526=##"&4632$264&"264&"R:!/aR:!// L2:RR:2L /R:!/aR:!// L2:RR:2L p/B//B/B//B:RRtR>0:RRtR>0B//B//B//B/F4&#" 632'6/!"(;23#"&5467&'!#26'3."EfEEf4 ee 44 G&.ii.&G (BZBAXA~JJ~J23#3#"&'#5367&'!#26'3."#26'3."F4 ee 44 GF 44 ee 44 FG (BZBAXAAXABXB75#"'#"5325325373265OO%N.1,E E<<>謬;;&"-6eMF$462"462"7!!!!!!((((vvN((j((=<F1<462"$462"%#"54>75#"'#"5325325373265>((0((OO%N.1,E E<<>謬;;&"-6eMF!264&"&"32"&5467.54632EfEEf fEE3Jjii.&'-iKI3~JJ~J,#J~JtRSrrS5XX5Sr6FR7"#43232>53#"&264&"&"32"&5467.5463232"&547&#"632"&547&#"3!53<15"0"&JKA5"0"&AKp . *!//!>1 *!//!<<<F?462"$462">32"&547&#"632"&547&#"3!53((((p<15"0"&JKA5"0"&AKpf&&&&= . *!//!>1 *!//!<<<F7>32"&547&#"632"&547&#"3#3!535#53<15"0"&JKA5"0"&AK . *!//!>1 *!//!<<<<<<<F7?G%3#3!535#53>32"&547&#"632"&547&#"$462"$462"<15"0"&JKA5"0"&AKb&&&&<<<<<< . *!//!>1 *!//!<&&&&F#,5$462"$462"73!53322654.2654.k&&&&ªp54.#">32'>54.#"6!2'>54.#"<:00+&D, }XE500+&D, <200+&D, }W';*((-=%4';*((>/W';*((-Fe:7?G462"$462"#3326533265332753#5#"'#"'#"'462"$462" ((((<<<98=8898=89&<<"]1-dc-1]((((((((& eLLeeLLe% ____((((F3<'264&"462"462"462"$462"&\~\\~{{{,&&.((N((_~\\~\{{{E&&&&&&FN5!5!264&"462"F*{{{ؘ<7!63232>7#"&#"#"547>54&#"#4632!654&#"#463263232>7#"&#"#"Gv%3$<"    &3f qE=C4*=NeZC4*=NeA(W"    &3f f@!Q2T   N 88 e,;VJ!:myT):<';VJ!:myT"Ul>x   N 88Fk&.7@43267#"&547'#"&54737&3265732654'654#"hu7Br%J" (u7Br&"Yu7B<\(pv=V=QV=3\MXE0 < DK\MWG0!\MnQq$B533273#5#"'#"'#"'#"264&"FВ/= = &<<"KNMK!"ShVoooВhIh"*484**48 6666MbIoooF7'7%3!53#5!#%'7'9>44?}}}6};?44>lll<<a<7&543267#"&54732654'654#"32654'654#"'h(u7Br&H'(u7Br%%i(u7Br%J" (u7BrV=QV=nV=QV=w' DK\MWG0 < BL\MXE0& BL\MXE0 < DK\MWG.5;m)A;5;m)A;5;m)A;5;m)A;FGPYbk462"$462"%#"&547'567&5432>7&543267#"&54732654'654#"32654'654#"0(((('h(u7Br&H'(u7Br%%i(u7Br%J" (u7BrV=QV=nV=QV=X((&&:' DK\MWG0 < BL\MXE0& BL\MXE0 < DK\MWG.5;m)A;5;m)A;5;m)A;5;m)A;Fz92654'"&=.547&#"#4632632#4.#"26=3=:=X\6EpE4D^'-!( 32#"&'$264&"264&"[ L2:RR:2L L2:RR:2L ;/B//B/B//BO0>RtR>00>RtR>0?B//B//B//B/F\'/7$462"6462"'#"&46323>32#"&'$264&"264&"5&&&& L2:RR:2L L2:RR:2L ;/B//B/B//B&&&&0>RtR>00>RtR>0?B//B//B//B/F\,'/7462"462"'#"&46323>32#"&'$264&"264&"&&&&c L2:RR:2L L2:RR:2L ;/B//B/B//B((((0>RtR>00>RtR>0?B//B//B//B/F '%%X =Hf{GH{RF$462"462"'%%Y&&(( =H׬((v(({GH{RF/7>32'>54&">32'>54&#"1?oxATyQ*+"HVv|qMY K3ZOk5TyQ*+"HV;ek{+0F"eN8H *6)4C)J;O C+?%eN8H *6)4Cp]F/7632'>54&">32'>54&#"<<2353#5#353#5#"&'##3%#26'3."#26'3."4 FG 5<<5 ee 4<<4 GF 4<<4 ee 4<<\BZBAXAAXABXB[/2ZddH]]HddZ2/[ddH^^Hd3::o188A199m2::F=CIOU462"$462"367&'##533>2353#5#353#5#"&'##53%#26'3."#26'3."((((3\ FG ]<<] ee \<<\ GF \<<\ ee \<<BZBAXAAXABXBZ&&&&[[/2ZPdH]]HdPZ2/[PdH^^Hd3::o188A199m2::F #3#3#A<<<<<YYXFR!"#43232>53#"&#3#3#5332653#"'#&'#"&5332653<-&<2?<55332653#"'#&'#"&5332653((&&<-&<2?<55332653#"'#&'#"&5332653((&& ((&&<-&<2?<55332653#"'6462"$462"462"$462"0]wSZ<532#!12bej)u+=HODCQQCDOH=+u)jeb2YO=DEJ?T0-u'&'&-&'&'u-0T?JED<<FA$462"462"462"%2#"&'732654&#2654&#"'>32#!&&&&u&&2bej)u+=HODCQQCDOH=+u)jeb2((((d((=DEJ?T0-u'&'&-&'&'u-0T?JED<<F=462"462"'2#"&'732654&#2654&#"'>32#!53#5&&&&2bej)u+=HODCQQCDOH=+u)jeb2 <<&&&&=DEJ?T0-u'&'&-&'&'u-0T?JED<F-2#"&'732654&#2654&#"'>32#!3#12bej)u+=HODCQQCDOH=+u)jeb2<<O=DEJ?T0-u'&'&-&'&'u-0T?JED<F%%3!53#"&532>532>53#"'+FTY< -:- < -:- 532>53#"'&&&&+FTY< -:- < -:- 532>53#"'YR6&&&&R+FTY< -:- < -:- 532>53#"'3#+FTY< -:- < -:- 532>53#"'353#5<<+FTY< -:- < -:- 532>53#"'!!#"&535#35#'35335 -:- < -:- 32#".543264&#"J9:!D<謬:&IWuKYw7[8W%)afQtFX!75!5!F<<,<<F|3# #IEzyE|,F`753'773#''7FC4CC4CC4CC4C>d(L"(*!//!5QO7Qk>>d(LF_327&5462#"&/4&"327&5462#"&/5#".54623275462327&5462#"dN&"0"51+,{{N&"0"51+,?35"0"&2@ؘ@2&"0"53B!//!* *W{{WB!//!* *" *!//!)tllt)!//!* F&33265332653>53#"'#"&53&5>53&'553#"'>謬U, $F0%654&"333#5##5#"'#"&53327&5462;`2(<<<<<<"N>>N=Q< (!6-E9j9E-6"JzIaaIzS'JJJ33`J+1"]k{{k]"F $462"462"462"!!!&&&&&&&bb&&&&&&<aF 573#%3#'5N<<<<F'E'FF@2'%632"&547&#"632"&547&#"3!53Q5"0"&JKA5"0"&AKpT:hG7 *!//!>oD1 *!//!<<<F#5!#!2#5264&#!3!53r:RR:!//!<>謬{F !!##PS<'F%#32>%!#"&'#"'3!5332>5d~( 4F*) '*'p<( `P38m>謬]<F74&"2264&#"'632#"'3"&547&=.5462"/B//B7//7@AkVIWa?T1+J`##0>RtR>08B//B/=:=X\**^TCDQ^'-!( 3232>7#"&#"#"5.5462Q&&&&RtRRtXH"    &3f IavvaI((((tRRtR    N 88H qJSuuSJq F$264&"%2#524#524##"&4632tRRtRR>>< qJRvvRJqRtRRtXE Eqn325654&#"#F<)u4Mlw_I4D<ـFc3232632"&5467#RtRRtXH"&   &3f IauuaItRRtRT  N 88 qJRvvRJq F/462"$462"264&"7"&5467.53265N(((( EfEEf-'&.ii.&'-54'#"&546326/B//BA@7//,0>RtR>0##`J+1T?aWIVzB//B/\X=:=* L2:RR:2L *IC@L=Q< (!-'^QDCT^*F15=654.#"3276327#.=#"'#'76=&5432&#"Ё I<+-dhH) 1%$1<Hhd* I D!+ o!!}Ӏ3 ]Yv0M;:3}!!o +!EF!%26=3"&=.5462264&",!@!32&54>32#53D!$MNHMP$MwR9?!H!57UB$,8& PP9 $ DYHH-3O@*,   +?_;>/%2 JLbm#%7'7&54637#'75H?1c>LK&II@7:/mke6$;B; AB&eLm!$"3###53%7'7&5463753=I$1MGM31c>LK&I0mke -).;7HH7#;Cf>&/173:>2>7#"&5467Y6   CL_bN\LD  :hj3!eb)4&#".547323267#".546&<(*2,2MS1 O_?/ C/G#^"5  !$ " +=;/QBx  :8QFY5QM'%  5&&_. $'2'32654&##5.+'676753VG E`\)H.2'[A!M)?E)#RDP(#$*GN70C33S{7253#5.#"327#".54>1G33 c$7B &"1(H$C%c.5L0 5$,@ '(f#2#".'732654&#"&546{ #-Uc#k3='I] <r4#53533##5./>54#"327"&54>32=>?&&3>>3?[C"/># .!-% !/ -;P3DD3,HB , :(&,*!.#'3##5.'&/753632&=654G4;E  491,$r^.31*1vZKW(=>E_/**"$*GD(#<%253#5&#".546V.H$33=_%&+><21_P *1(#CAB%m%'673#5.# ) JIg43Q+0   54'#"&543367B5oXO34P- (0" 0!'!C   LE;H_b@L3 4"668& #90.#"#"&5473263253#C PYM.9S 6 2833( W6-( -32 *ia%'63253#54&#".#"#"&54632 33**!" .9E%0 (  $*(-7,*@."*2654&##5.#'>75#5!#2#"'7%25"h <"3$4M(/RLJB5'$1@ wB'*&/5('33T.*'; -q7sl)33##5./>4'#"&5473267>;C3<<3 w/4D 5#'+!-$4CU>3+]2-.6-  &- 6 .,253#5&#">32'7>54&#"#"&546(G.33Iq%E!-8)A&2 J&U-.'$8, $&%8K!9 1!'2[>.'275#'47#5!##5./7#"&M   V 9P3[6 6 4(L     33./@:&p.,547#5!2#"'3267#".573254'#"&72654#y6:1, +":#_5_>%34b6U)2*4'(+"ZMT3,#2940_yHjv1 :jI,=8%E.72654'&'"&'#5!#he97GW2Jb+  @33"558h.73265&'.5#5!#3}1rrF #c2!?$~<]'m33 9OP`.1C.#53>54.##"&=#5!!3232'".'32654'CB * $W3:J C$6> !5  m0;  3+R3< +733 -B ./467#5!#3"'327#".'732654'#"&l'f 3 $7=G:'>) 3PE($"("3J 33G* _57T<-0+!,m!675#5!33##5.'#5.#7Ps(3>>3 3l4] ] D 3 /T?3u?"Sc, >%:<O2#"&'#4.#&5473263254&#"27#"546327>"3254#"532654,!I"?3 4?54'#53&5472654'lF~c :'7G}v4'* 9*13.Q32*9*2=*S-8' 3?6+2%M7<=2Q#Q.$"&=#5!#267#"332654'$8!$^C*3 !:"-?6:!33}6K&4d82R<-G'!3.7"&5#5!#32654#"'632r2ER (I  & n5#33 |& (0 C %;2.#"37#".54>#> f$8C .- ;;-*Qk.5M/>.,6& mm-33##5./654&#"327#"&54632:+33::3 $ 3 !=-,;*8R?34# 7F 5!$05 W3$"753##5./7.54632&u  Vm:32L8B*"  d(6&4/! 053=252-"( ? #!z.'5#5!#6?#&54C+G1*k`CV? 3 *339 (&+/).1.&#"&546325!5!#<6!(E5<^3 v)2+M3K.K9#>3253##5&''654&#"72767&#"KK;\PƓ2 (+8"?!J_T3:  ( 5 & /.*#"'73254&##5./67&'#5!!532')3l*<&I8/. ,2$%=0g21%11@ /!%033(* #<7.675#5!##5.#"75WmI/3 q(0!Q $KxD!33?c : "..24632&#"32>7#".'32654'#"&'5!u '    %4O:-K0* 3h=(1%<)4 1  (>?P#3SC1 jv:-@:33. *4'#32%#5!##".#"327#"&54674\# U:ea,)#G7 $*4,753309)5))30#(L.!##5./67.+35b-3h)!=,V=.#DZ4.36/;)8 <*>A5QM'%  5&&.%25!5!##5&#".#"&54>326 O3&)+#$$$3 4"*-%Z33>?$7( "E$)/).0263253##5.'27#".'#"'72654&#''/ #!7j3# % 8- #/IK[334 0 +#,1!&30".!327'654.'"47#5!##".x/b1a4rk7 $%Y( MK$33-;X ,J.%#".'#"&'6732654'#5!!3254':(4 "<6 " $78$=",6(3!'@* 33$H8 ([\.%)&/32>54&#"&54632%5!) (z/,"2 5%"H!'.W([6'37 ("1 ,X332}.(2"&=#5!#>7#".'32654'4632"" 3 !/!-*0L) 3e7,=$Z$+7~33{CC#$9" 8NbC u@#!K$:.'7"&5#5!#32654#"'6324632#"&n -@Y0A+a_ 7 !33"g+ '$*@EM. #74632#"&&+5!##5&/675O /CA \532{ +/0P>(( B336Q )-m(E(5QM'%  5&&7.7.'7'675#5!##5.#"75D++DWmI/3 q(/!R $L9 0 6"D!33?c ; ",'233##5./32654'#"&4732>54'r=Y3ll33P]+ 4]?? 9/( 0GC=W3&-!?2 JJ3Z0H..'5!4.##5&/7'7632#"'7326Bpk/&3>(y&)djF4Lf< 33#nAW6P!4#>#=>G83, ;X.7.#'675#5!##5 /AT&yg4,~X:<*6g&+33: N6NFo.4&#"3"&54632#53## R! *5'72BC3[? (&/733tY.'463&'7#53##54&#""&5& 3>wC3]+ ' )(3 .>3 333oZ((.47#5!#'>54&N2;ACZ+3xK833G@EE0 )! .>B2'65.#"#4&#".547326324#"327#"&54>326%5!M*9!#)/3=TFRD )7=&Q7-%y# +SaU7uG' &(09+'{9F0/#)( Z63,/"2)/# L3D06`*.33.(L1#B%''5NJ Q4A.#"#"&547326325./>54'"&547326733##wCQLZ/EF<4686q4)$1( ,(74#"#"&54632533##yCM /E#.DG 6 28V^!F O",&"'*& N  WC9M.3CC3' --$1 *;) *<7#)"5"% $%1^5HM3.+=.##"&547326325./7#"&547#5!##27#p#l1D.*" KN &Hc<3&   34O:0% L3 2>] (R8,33 $ a0 +.-5&#"#".547326325#&'#5!!#2654.'o+( t "+.*" ^KL=7(3(Lg9 ;(.' P1e33=() "%+? 8 7<.KW.#"#".547326325򂂮./#"&=#5!!32&'#2654'#"'}C J0E#.136E$"1'-4TEQ.##"&547326325#"&54>7>54'!53&5473##2654'r   g 2C.)# 33=EV2 Q6& 00ƯE 3r7F<"G/P90% L3):ZD N= 3\H8J",O63o.BA!"x@TV>NAqY.>.#"#"&547326325#"&'332654'#"&=#5!!3267#DPLZ.9S 4 56*3m3b[;RR%(F^K3r' M@'. *32 +[3'&?.33S2lF&.:.#"#".547326325#"&5#5!!>54#"'632#p#y "+.)# ?D 3 .q,.3' :&.' (&3 M/733q \&"!<5>./!!4632#4&#"#"&54732632&#"327"&5͘6 3.*>L, Vx'&w  >%.39!-]B4]I/A*3$"m&$ -VU.GK.#"#".547326325#".'332654&#"&54>32#5!B Q/D#.DG 7 83%.":,'3  $2BLF57 + 8&Kc33Mvu' ,.), '<) *l0'F+R'*7;X/:\IFa!#'" '}>33B.#"#"&547326325&'&/67654&#"327#"&546233##xCL LZ.EG<46PB`,p'@7) ? (V~Q]$iJ4QQ4<( M@*+ .;) +BW68;"*$3- 2DJ=7Q(ZX3.+3".5472632&547'#5!!67&'" '0!1-Hh'#* d.e,-.(5*f@*/:!3:gV2"33!S|^P "55:.#"#"&547326325./7&54632&#"753##yENYM.EF 6 46FkMq_<+( $yR3yUwW2) W6), .<) +EFL)[E/(8 DJ3325!5!##{B OYM.DG 7 65"5- "!4>)b3|P3m' W6), *<) */:'' , '&D2;(f33c.H7326325.#"&54>323>54'!5!##5."#".5472*"  9; ))&)H2 $k>j3 k "*.'3 -" !2% ,,>33-&54  ;'0%   s1<.#"#"&547326324&''654&#"'>32533##267&#"CPLZ.EG 6 462$%.# n6F3VV3 # S34 ?2( M@!4 -<) +) W"&!$ $1PE3 ,+R)!.>.#"#"&547326325./67&'#5!!2#"'73254&##xCL LZ.EG<199b($fp3@&69tMh," K94F' M@$1 *;) *IA] %M#6@33)9&1,&bNIg2 1 #3=.,3726325.#"'675!5!##5.##".547  8"z@4#:/ #*.) 2" H,6`-+335 ;'+* (&3{I`!!.8<"32>7#.##".547326325#"&54632&%5! 9 !1- -!49;$1C1g7aD0;3%: 3 !]#"J5214B "U>0!+$+_33hA.FJ.#"#"&547326325#".'32654'#"&54632&#"3267#5!A MLZ-EG 8 38 %9bC:"9%T,P"5R3O)4! K%3!%33MXc' M@*+ .;) +w1Jm_:Q?3Z7?#00):2G #!9 D833=.18.#"#"&5473263254&#""&547.'5#5!##5|C H YM.EF :56`#/*U.C AML93?59.( W6+* *;) +5+P,`)%""33B73N.'5.#"#"&547326325./67.+5!##zENLZ.EG 8 46)9-9Ye n>4a/:R#-2) M@!4 .<) +;CR 89CG33bN/- /jM.#"#"&547326324&#"327#"'#"'732654&#"563263533##ENYM.EF 2 56P%!, <" 4#I5N3QQ32) W6), .<) +Ms/6 +:')01=8k_  $W3.*.5.##".547326325./67&'#5!##5&'o#g #*.)" BdE*g-~IF3LI;0{V2 ;'+* (&3 /]G:%R#A33b{(?+7q\.6?.#"#"&54732632.#"#"'73267.'5#5!##6325CPLZ.EF 7 29 :(20A,- B_853@5"'2n' M@*+ ';) * N4?4j" EK7"33a84E.FN726325.'#"&'6732654'#5!##5."#"#".5473254'}   2 "<8 " $7W33   k "*.*8$= '3!'@* 33"<4 ;'0% &'3w$H8%P.:>.#"#"&547326325&/32>54&#"&54632'#5!zDNYM.EG<64_:&9 VB0d/7kY&4y{' W6'. .<) *Uy79!(# )7#$*9,JZ9o2Zq!!33.)-4.#"#".547326325.#"'675!5!##'~CP/D#-DG<19:!~oA39V0 %& ,-&- /;( *%-6b++33@>e X,q.)18.##"&547326325.#"'675!5!##'.'7l$;.2D.)#: !~A3X_:,n6(Z%O:1$ (&3 o-6b++33v&Q . I7QHY*.M`e.#"#"&547326325.#.'474.#"#474'#5!#2#"'73254&#"#25".5#7#3FL LZ-EG 8 38Q*  R+&69'j$044"  ,4 38a?  S3 2( M@%0 .<) +h5F 1#2  Q 33Y.!1&/ &,*4\D8 ,0)U.D%'675765254.#675!5!##"'#7254&'#5./7&',EX.4"kP*-D !4XlGq' %+!O3)"M."M.(,"m ?   [X5-33. Q>" 5$,3#3Y%( )0" V67723##"'73>54'32654#"'632#"&547./675#5!4&#"#"547326c' 'Fy52\,0!K  Y8H%%P #'Ks93@<(2 DoW1 A/DRkAY)<3!7!H, F^iH8#Q*&%4[54'32654#"'632#67AC K55 .

 H&;$6 .*>,C"<6) 1&,)#.$&<4G:)1050*0! 33.LT2#".'732654&#"&5475.#'>75#5!#2#"'73>5654&#6'25"7!0 "D-7a:#32M*.;!"+ 4Q( PT'; 6&$ 5$1@ u!0'*2"B_OGP85)9+/5*33.'*';)#oq7O.SW%.#'67.'32654'#72654&#"&54632632#"'7654&#"#5!w#) JR, 1.(!   *433b= >!)0%,*@,G"A4) 1&,)#.$&<4G:)1050*0!&;:#33.Ya2#5.#'67.'732654&#"&5475./>75#5!#2#"'732654&#6'25"A K !0 3S+!"+.Q132M*.;!"+!/U( PT'; 6&$ 5$1@ u !0';2,0#! FVGGP85)9,05*33.'*';)#oq8F._c.#"#"&547326325#".'32654'#72654&#"&54632632#"'7654&#"#5!EOLZ.EG 8 46371('   *445ʅ) M@!4 .<) + .*>,C"<6) 1&,)#.$&<4G:)1050*0!&;33.NV7&54675./>75#5!#2#"'732654&#632#5&#"#"&5473263254#"'25"&+$*W( PT'; 6&$ 5$33)1@)L--" 6 '-7z1@ uw ?25*33.'*'; )#6&*#F2$6 / *"(<q8.ah.#"#"&547326325#".'732654&#"&5475.'"#'675#5!#2#"'73>54&#632#25"zCOLZ.EG<643;5^=%32M*-<%+1I(B'< 6&$ 5$ &34=<v' M@$1 *;) *&>[SGP86(4+-54633.'*';)#&>&iq7zT.7>&#".546325.#"'675!5!##"'72>54&+#0?^&+>,RH@zw9F0/")( \22)7! *3&#Cc-/6`*.33.(L1#B%'7L JX/M.8@65654&##2#"'74635.#'>75!5!##4&#""&'25"^*/5Y1[%'&$-/W(PEpV3B#''P1@ u3 "8@2T=8;$!"15&33@ )&q8T.EL726325.#"'675!5!##"'72>54&##4&#.#"#"&546x4& (@zw9F0/")( Z72,'(#-74'#5!##"'73254##5.#.'474.#"725.'#7#3c6 'j1"#4"  3Q*  R+&3)?!? FDS3 n 33Y)1&/ &E|5F 1#2 V$878L=0)x.HUZ&#"&546325.#.'474&#"#4>74'#5!##"'73254.##25'.5#7#3Gg6)KE#3O-Q*  RJ'6'j1"#4"  ,(3BV? +">S3 ?7/G'6:9[5F 15? !33Y)1&/ &  Um@8U)0). )-d25.'#2654&#"2#632#"/'#3'.'#5!##5.#"327#"&547.'#"&5463.'#"&54 '/"/<3M >) OS#C  fR<kI3m+  "4!&&+'!A)'*?  i=9)!* 5 < 338'^ /)0 -)#!&.!;A675!5!##5.#"#"&'732>7&'2##"'732>54'6!S395%,#5*!/ NS> BG # V._a]9idR'33l0#)3@ ,R.A/<'  <Z' K4&#"632%4>32533##54&#"632'>54#"#"&5467654#"#"&Zx=UBSB,>*y>3RR3S>`D . %' O$U:)E!?;|eL 5+1!rY3gPlh"% $)+&9G   .A25!!67&547'5&#">32'>54&"#"54>yPG.}e,7d-Iq09"*+ #& ! J8-.'3!wCq8Nmx72r<6& $'! $   -D+18{GQ4632533#632&5474&#"#5&#'675.#">32'654&"&25\GaJ1@23Cw2K"0!?)+ (  '$fJ 9,g-* 6PnM3UQUbCdE) Am@H< -03-1 (!  #"U' ) :%8{MW].#'67&#'675.#">32'654&"&54632533#632&5474&#"#5'=2SU*!9M7X2K"0!?)+ (  '$fJ 9\GaJ1@23  Jx2,f-0:.5@H< -03-1 (!  #"U' ) =6PnM3OWqFCdE)    -+9+{L2533##54#.#"#"&546326325&#"32632'7674#"#"&5469M.3CC2#- .%$ -07#)"!E( 6)%1^+{=2533##5&#""&54632&#"32632'7674#"#"&5469M.3CC3=_%"/>,.H$V^!F O",E**8+ N  W15HM3< *2(#C2107#)"!E( 6)%1^+o{:@4&#"3"&547&#"32632'7674#"#"&54632533##'32#R!  *&V^!F O",E**8+ N  WC9M.3C3l72l[? (&"=7#)"!E( 6)%1^5HM3t7l.927#'47#5!##5&#".546325./7##"&& !&')3fO=3=_%&+>,.H$JN&H $ #a0 133qP *2'#C21$AZ (R8.>DR#"'#'654&##5. #'76?4#""&5467&'#5!#572>747474+' ;Wi$:/3  ~#k%3'4 *nHU cK:d c 2'i ~x50%"*2  3FU&$!334F&Y.[am.#"#"&54732?6325. #'76?4#"".546?&'#5!##"'#'654&##572565474+];2QH* ?A  )5  ~$k&3" * -fU(:Xi$173hK;d c 22(W6%0 ,<)+!  3F U&  33%i ~x60$0{5H%.js47#5!25!##"'73254&+##5.#&/4>?54&#""&=47#"'3267#".573254'#"&72654#725'.5#7#36='3 3#  ,4 3Q*  H7$ %7#_5_>%34b6U)2)5'(- 8`B+">R3ZMT33Y 1&/ &,|5F     -;  #2940_yHjv1 ;iI,=9% ^B8U)0).KT.#"#"&'#".573276754'#"&547#5!25!##"'73254&+##2654#"&=47#"'326732?6325.#&/4>?54&#"725'.5#7#3A 6?W 5_>%35b5*2)45F'3 3#  ,4 3~())$y$ ":$_,C?38Q*  H748`B+">R3"'81Hjv1 54'"'#"'3267#".573254'#"&72654#63f *(<44Ld3TT387p4(0 %7#_5_>%34b6U)2)5'(- ZMT3A4?JJ>`V3R-1C*5)!#2940_yHjv1 ;iI*=9%1_g7>54&#"327#"&5467&'#5!##"'#67.4&54>7#"&'732654')58"%(2 k#@64 ( =MHk-4    $O3="-}$B">' 3!+22 %N!@%2kyHY+    R=.'; -+ .:CP47#5!25!##5./7##"'#"'3267#".573254'#"&72654#27#6B<4MNG%7#_5_>%34b6U)2)5'(- P!M82ZMT33A>] (R@#2940_yHjv1 ;iI,=9%/ $%4a.3<Il.#"#"&'#".57;67654'#"&547#5!25!##2654#27##"'3267326325./7##"D)EW5_>%34b6  .)2)56=<4'(- P!M82*%7#_HD? 2 46MNG2'?6Hjv1 ;i& !,=9+MT33)%/ $%4a#2940_U, +0>] (R."O2654#7567.'#"'326'47#5!##54&#"#"'#".573254'#"&('(+"?4<+/"O $. >":#684`#$%T3%#O5_>%34b6U)2)5%963M$3 !#0 9MT33 .!O,B%Hjv1 ;iI,=9nP.1:V47#5!##54&#""&54>3&'#".573254'#"&72654#7#"'3267y6hC3]+ '+(+5_>%34b6U)2)5'(+",*":#_ ZMT33s;Z(* / Hjv1 ;iI,=9%9 * #2940_7(  .!*07265&'&5#5!!2+&'52654/&/#2qoJAb!;'9(G"`&$,\4 i7k}=]$3&0m33=,'+J 3C8 $ 3H +.6AIO.+532654./#"'#&5#5!!;26722654'#"'3265&'5#_AmS."C`z;GVx _1u?AbD=#) NC1 1rrFe2]&S)$7='4[2@]Eg&0m33@ZK&z$~<]< /H +.GRZ`.#'67&+532654./#"'#&5#5!!;2672&'#2654'#"'3265&'5#G  JP, AYlhGVx _1u?AbD=#) N_AmS."!/4C1 1rrFe   > *0C0<4[2@]Eg&0m33@D2]&S)$$$K&z$~<]< /H7+.Q\dj.#"#".547326325&+532654./#"'#&5#5!!;2672&'#2654'#"'3265&'5#xC L55 .32>32#"&'#4&'#&'%4&#"32654&#"5326if0C GQN5+'W@5o "#!)=b*7%B3"- ,0g*^3=c}o H$5a/W2% $-b+ @33@?%  S x$ )!`QE]A' 4&7-gBO-yQ xE67"+3%.,5.#"&54632+&'#5!!#2>54.': +="6(K=+4K/+n+c=2-* 4#bDLg*9#7 /G =7<09N33=&(Yi $.#u%2654'"#".57"'327467#5!!327327.547#".'327#"'#".'&'73254'#"&( #~4 $7/%:)>! @l7J 22 7$:@C1cF 8!;& 3/L$&B!  1#4`M8>.K 33GQ =Gf%=#`O (!+(Z2Bm#-!@z)2K..M"67$.)%'2654'"#".57"'327467#5!!327327#5.#'67&547#".'327#"'#".'&'73254'#"&,J( #~4 $7/%:)>! @l7. 3Q,!K\2 7$:@C1cF 8!;& 3/L$&B# !  1#4`M8>.K 33GQ =,J73 *0K.`O (!+(Z2Bm#-!@z)2K..M"6G{.OU%47"';2?#5&##5654/67.5332654'#".5467#5!!3276 @.29 , +201#<9S(1$;# ,#2S;?C.9Up+' 0, S) r+".9L7  e38+CMg9%*) ,,*7*33!3# )T.1FO2#"&'#".'&'732654'#"5467!5!!63254#"';2654&#"&'32696)'P S,BQ0L-%)(7 =/e5}2M<^06@%1'B/D61K65k@$2N7> h @#/~&U33)P`CY5:232537632%32654'#"'732654&#"iF$cF.=",M("PG !"3)32#"'24&#"3254'#"'7;26&'32qz/34+44(#ve A1,?66c- @!<^H&4.1.&0"((.l2&?M5E/Q*  )|- *O!@r''' E4 *A!= ,B)2+5;HB=!7)-"?9LK6m( (6C)$ !0^v327#"./32>4'#"5?>5'.'#"&54632>32&'&=467+"'3254'#"'7332654#"> +!- & :]/2 h; !# ,I!  $8&P;+*8#>"#! H$%" X,#<-* .*)[yV/) N*0Pj9]s *B_>7  9 '.1X'(+%%. /^6?(W)++C.  - #8!1- $o%7'72654'#"&5432654&#"2#"'#74'#5&/67&#"#"&5473724&+"&54632>L7U.h*}1 )9d_80:)/4%!*449?[0 ! DT$,A?iP .m &;.))&E! K*+BM #< $ t\A-7/>+5 H/F\9,/oS&C8M; Bw. '6:>f$ 'G%#"'732654'#".=#5!>74#"&5473723!32654#"'632P#?*\.Lq!?6.)y[5G!* a3D/#;T *"))/&-( (*! 3 5 <1) $ / E3 37q9-$!B2H;'d.#"#"&54732?6325#"'732654'#".=#5!>74#"&5473723!32654#"'632#g>2RF* 7I $ .3(:\/KrD6.(\5G"* `4B0#;T (!")$3(V6)+ '30*#%* *" 3 5 <1+ $ / G1 37q9-$!B2L*.o 'I4&#"3".54632!32654#"'632#"&5#5!654'"&5473723##Q"    5'73;d&!"-:c4,'d[[3G!*a6AB3[@ (!/76D$"1'6vS?'O3 2 ?/) . F63t5n{FQ%"&=!5!632533##&#"2632'7674#"#"'#"&'332654'7&547#326!#C9M.4BB4T`"DL #,F)+8+ T 0E:qu30M0?32>54''#"=#5!#3267#"&'#".'732>54m !730)%&7 #R^1~ S-6aEH_1W/2MI</5 0 $ȇ975e;"2)%:(7#6333T]4BzH^0IJj !0)"o.=4&#"3"&54632!32?67#"&'332654'#"&=#5!##6Q"  *5&824 K(R6m3b[;RR%(C3[@ (&07-2l7?+[3'&?.33t ='L#".54>3253>74#"&5473723!32654&#"'632#"&=4&#"37 % :&#? [8E!*4/@b  "'KC/(h[B , 5#,6&.,c 5 ;1)  w 3I %"nO=(s_M h'm.#"#".54732?6325#"&=4&#"37#".54>3253>74#"&5473723!32654&#"'632#D6/E#.EF56;5/(h[B  % :&#? [8E!*4/@b  "'K(3c',.*+ *;)+>=(s_M- 5#,6&.,c 5 ;1)  w 3I %"n8F $U4A".546324.5473##"&54747654&#"3732654'y &E3lB99<8ͫwW6ca*#)Z[c2$ET"* 8%327 %N?i4#6K&/ %&)*.$ "/(" ='(5h49K #`v\ &# XKA>$ /E% 1 )FDZ,!.=46325!!32?67#".'332>54'#"&=&#"&7*.5L4 K .U6RL33 >GV80I$S%#40!(%7;n3-2l->2$Gd_&aM/ *<2#*@3;[h2f.#"#"&54732?6325#"32654'#"&54632654'.+"27+"&54>327#vC  L[.DG( 46%3i4#6K&/ %&)*.$ "/(" ='(5 %3c'LA(- .;)+ #`v\ &# XKA>$ /E% 1 )FDZ*417.IZ%"&=&#"&546325!!32?67#5.#"#".547.'332>54'#"'32?632(4/!(8)02L4 K3C K55 1A3 :FT?/I$SM4FmQ 325!!>54#"'632i 32ZB  &"2(2F` 36% ,./7#6cL0 5",@ H$3q 6X2&"!<Y?r;327+"&54>32533##5.#"37#"&54>3254&#"r, )F>)3& 3__3f[B L!1)1GY$-H>3^+1:('c3w!icM/=B+@ H$+w4?o{=%2#53##54&#"3"&5474&#"327+"&54>32533#;3C3Q" *$Y$-H, )F>)3& 3,,4633t6@ (&"3+w4<>3^+1:('c3J.04#"./732654''254&"&54>32%5! cM 71=71832%5!*"Mm 33R,!(v^7186u) &.X*Y?31 ZD.++  5 %09&h;$ #1U.;?.#"&546325#"&5/332654&#"&54>32#5!p +="6(KE#3M.83XYBLF57 + 8&Kc-(3ov*9#7 /I'69:V\IFa!#'" '}];c33E.J"&54632!5!##54&#"3".5463&'#"732654& +0& )1"@B \H2} #(/  ].  ,!.,  !1 7%f*336!U )+ #<*D%8o.>4&#"3"&54632!5!##&54>32#"&5/332654&#"6Q"  *5&82C3 + 8&KceT83XYBLF57[@ (&0733t'" '}]\|V\IFa!GU.JN!25#"&5/332654&#"&54>32#4&#.#"##"&5463265!["#83XYBLF57 + 8&KcA2,'(#-9+ &*/6-$F133{@2533##&#"2?632'7674#"&547'#5!#6746:M-3BB3T`!F  # "-F)*8' !) /d-n\\xZ17FM3`7#  )" F( 6' NkWG LcdY233{4[.:27#'47#>7&&547'#5!##5./7##"'&  3f2t2d-n <3KN $ a0 1DEPLcdY233A>] (RMrWG-..?6?'&547'&547'#5!!>7)'!#2")3!#)2>32TZ,k(N!* oZ8`Pc,H#"E (37>7#5&'R,!EZ  2F?2TZ,k(   (")3 % J+0G//1,H   + (37>7'&#"#&'7 8!#2  2hn,k( ')-X")3#F"W!- *Q 02,H !6- (332632'."33 FG! 4F0If.A;s3@32632&=474754'#567  JQ,!!2! 4F0If.A;."33s%   >!)0+wD}*33'I6* '0 <54'#"&5463367&547'5#5!!>?6765qVN43O- (0" 0!&"%   3%#)J &"y?H8G`b?M2 4"75& 0#)#33"!.M%25#"&54632"2?&547'5#5!!>?67#5&#""5473265!'$2&'4##< 3%#)J &"y*38 2:;K -1&%# 8)#33"! 5;,<*7/.j.#"#".54732?6325#"&'332>54'#"&543367&547'5#5!!>?>?>767#B K55 .3!"&547.=47##5!##5&#"27d%  2- *y%"V$3 ./MQ3U0  80  #z0 $sH5= MK0G33Ap  ' -Y507"753##5&#""&546325./7&54632&#yR3=`#.>-TFGkMp^),*' yU-J1& DJ3^P% )3'#CcLGK)[F=8Y4&+#3"&475./7&54632&#"75!###632R!  *GkMp^),*' #yC3yU-J1&v 72[? (&88GK)[F=8 DJ3t:L654'!53&/&5473##"&54>?654&#"7#"&5432654&'*!F 47! ΰT$4>./U9(-a <- .:8&.MC%!%30%16D<)%4*P23sv5S. G4- *%.$/^.$1kFsM20 /7T3;OA8   '+3k33H^HtBq}I 5Pb?,\F!a".: 0%"(Ee.[.#"#".547326325#".'732654'#".'&";27#"&546325!5!!327#C  /E#.EF :2965FsM20 /7T3;OA8   '+!:~QL3',.%0 &;) *+Bq}I 5Pb?,\F!a".: 0%"(3k33H^-,^.,%"&=&#"&46325!5!!>54#"'62Q,'<6!(9(5< 35%*>.@&vR3L33q 6Y1&"!=Y/.I4'!5!##".'732654&#"&5467.#"&546323>$u>t,+$N71[@43d/&$5I4$)/% )* )-0=!& >33-&3_"142JYG c}@1(7% "&!5  !253..W%.#'67.'732654&#"&5467.#"&54>323>54'!5!##!  JP*!"*6a?(4\=&$7G4$)/% () ))&)H2 $z>y*>3!  >"(0# MdZ! O#A0(7% "&"4  !2% ,,>33-&2 >5S,.L"&5467.#"&54>323>54'!5!##5&#"#"&5473>3254`C$=(+ ))&)H2 $k>j32: O 9J,8'#<(AH %"$P !2% ,,>33-&0'3*V02: >(11I).i#5.#"#"&54732?6325#".'732654&#"&5467.#"&54>323>54'!5!#"* >3C   LZ.EG  55)33-&2a).F%#&/532654#"'63. #"&54>323>54'!5!# %@(}"w66 `SaG1    ))&)H2 $k>j( +#A#m3<)H]     !2% ,,>33-&= 9y.$&547'5&#"&46325!5!!67d.<6!(9(5<e,.Lcb[23vR3L33!PUYy.5;"#5&#"&46325!5!!632#7. /6754&5'g3<6!(9(5<MN12 -cRTM>}*vR3L33o   +R#E :&.A3".547;26;2&547'5&#"&46325!5!!67&'#"# &/!24 i , d.<6!(9(5<e,./'5P@*81!3:b[23vR3L33!PUY .06#5&/67.#""&546325!5!#632&5455(3=e&=q9"4D$7?".W46#2D&2N;b!35:%&4)0")55*z33f;8lWq>;&!K.6<E.#'67&/67.#""&546325!5!#632&547#5'O+!?J3G&=q9"4D$7?".W46#2 5(3~D&22' J#'0?*635:%&4)0")55*z33f;8lWq>7&!    Y.HN&#"#"&547326325&/67.#""&546325!5!#632&547#=Y22#;]* ?A * '6=e&=q9"3C$"1?".We9 2 5(32LD&1<DL$3 8=* +b!35:%&4)5)55*z33f;8lSu>7eޱ6&p.1.#"&546325.#"&54>325!5!##W +>"5(LD$.J7"5- "!4#4,d1P3G*8#6/J'60C.9'& , '$E/F"e33uov.3:4&+#3"&475.#"&54>325!5!###632R!  *"4'"!4#4,b3C3v 72[? (&8.:& , '&D/F"f33t97.7D%4>3&'".#"&546323>54'!5!##54/&#""&#6'$;E )-07+' $C3)" '*ڏ.' ,, !25#>33o)((U0#,;  ..7"#"'727&#"+"&5463267.'5#5!##.'6325J $": <+,6"K (&0&T1IX`$J01O#,ESEU3:x "&'o)*&"33)<{0!B3'GR#"=74754&''65&#"'>3253>74#"&5473723!>54#"'6267&#"29d4T3 $% .# o5F[5E!*39 9f+<-/@)9 D $E9Z Y"&!? $1P 5 <0)  w 3 J&"!<4+E/" ,K~=I#"&/732654&#"&5475&''654&#"'>32533#2767&#"!0yAJ5$3 E:=)5I1,3e #K;\P0(+8"?=>;J^{XVF* A0!C &%NR  ( $!J_P3 & /y 5?727&#"63%&'4&#"'67654&#"'632533##5&''27&#"6)'kA+E!&/03W!) L&)PwZW5OQ1-&m9)4;Bt2H% *)E '4 ~K3.'`9G os*5:4&#"3"&5474&''654&#"'>32533##267&#"2#R!  *(2$%.# n6F3B42 # S34 ?R82j[? (&# W"&!$ $1PE3tI ,+R)!e7  s0>>32533##5&#".5463254/.''654&#"72767&#&#" n6F3VV3=_%%,>,OK $%.% # 3#2$ ?1PE3O *0($Cd. "&!$ 9 ,+2&(!  sFT7463263254/.''654&#"'>32533##4'5&#.#"""""&2767&#&#"YC/5% ( $%.# n6F3VV2,'(#-< # 3#2$ ?!$F1. "&!$ $1PE3 = &*/6 ,+2&(!.1;D>3267.'5#5!##.#"#"&'7267&/'654&#"72767&"76325Z.jZLUJ05 (2%$( ,%#' ")V[ X(E{)+&"33 EIe '$*& 5!+`E!#W23!52732#"'73254&#32654#"'632#"&=./67&'#5!654'"5473;{"="w/. ,2%=0')*G *n71l*<&I8Anf-% =,3(* #(69vK Zr8 #1? 8- -407X>0A_ %M#6@33*8&1,'aNaP'% .I'675!5!!327&5467+".527#"&'&'332654'#"/.', 26S _%+19/"#  -@%s$ 20:+.-7'%& .J-* 33., /hx+e s(4  31SZPEl."2("2.'5675#5!!67&54?67'&'Q\[p@f,. 4W59'}h<%2;33!4aQNI Qi "Z7I9&Z0.8>74732632&54?67'&/675#5!!67&#"#"&5S2)0x!0  4W59'}!@f,.)9q%>J\[ ,A,9B "Z7I9&Z082;33!4aQNI -[<%=.+2%&546?#5&/67./675!5!#636750_I-);"Y1Ky0%*"(T` $-E^w72+[uo);T&? *e#+33+W#T`l L d.+.+'675!5!##5&#".5462*H''%9!~A3=_%&+=ZH%$X,X.6b++33iP*1($B21.7=%#"&'332>54'#"&547.+"'675!5!##36?6'55oXN44O- (0" 0!&"9p(\g%,  S]D46326325.+'675!5!##4&#.#"""##"J(3' *9!~A2- 1%$.H''%0,.6b++33<)  +60$X,hA.SW%6325#".'32654'#"&54632&#"3267#4&#.#"""&546325!' (9bC:"9%T,P"5R3O)4! K%3!%(#2,'(".;B05XE1Jm_:Q?3Z7?#00):2G #!9 &R:* &*/7,$F33. P4'#32'4'#5!##".'732654&#"&5467.#";27##"&5467# 6: &f %#hQ1[A43'=[06H-#1)0! +%!4,("&T!-33543VD\1JXI V^A@1!>!&. #3+'8O[33##5./67654&#"32727+"'#".#";27""#"&546754'#5!6324'#32\%jI4QQ4";,C&,n'B7) ? D#G7 *& e)7?Q# '*:8P)YX3I% 58<"*$3J))3+'!-3JI4,#).1=&547'5#".#";27""#"&546754'#5!!674'#32nd.#G7 *& ee,.# '*:Lcb[2[))3+'!-33!Q~UY4,#).2>#5'.#"&546325"&#";7"&546754'#5!#4'#3224L"3 #QA"+c   && oM4#(&:B E1?7 /G%:B|X,#'4335*5* #, .-47254&#"#"&547.'5#5!##5&#""&5465.H$`#B2U)D>NB93=_%#.E-=79.!21C+P,],&!"33P *3(+;82Nbs Z2767&#&#"4'#32'4'#5!>32533##4/.''654.#"#".#";27""#"&54670)3#2$ >`# '*: e N$F3VV3 $%!/,#G7 *& (82&(84,#)T!-33 'E3:. "%" "9))3+'bs^kw.#"#"&54732?6324/.''654.#"#".#";27""#"&546754'#5!>32533##2767&#&#"4'#32C  LZ.EF 46 $%!/,#G7 *& e N$F3VV30)3#2$ >`# '*:2(M@%0 .<)+). "%" "9))3+'!-33 'E3(82&(84,#)`shv%263254/.''654.#"#".#";27""#"&546754'#5!>32533##4'5.#.#"""""&5462767&#&#"4'#32 2) ($%!/,#G7 *& e L#F3UU2- .$#.;DM % 3#1% !?\# '*:1. "' "9))3+'!-33&E3 % -3/7,%E--+2&(!54,#). J4'#32%467&'#5!!32732#"'73254&##5./7.#";"&5/ ;*d Z< ^r#%/"(M83'5!ll *" #33 O6GM^O7-&-=ZC;V -VK ,.Zg.#"#"&54732?6325./7.#";"&5467&'#5!!32732#"'73254&##4'#232F6LZ-EG  38'5!ln **d Z< ^r#%/"(M83V *';2(M@%0 .<)+2;V -VK , #33 O6GM^O7-&-=A'.NZ#"&'332>54'#"&547.#";27""#"&546754'#5!##"'36?6'4'#325pWN43O-'9 0!4*0" *& ea1$ # '*:NF9FbbAL2,$ 7$'/ #3+'!-3309-/ " \4,#).T`%25#"&54632"32?#".#";27""#"&546754'#5!##5&#""5473264'#32!'#7")2# F#G7 *& ea/3: 2 0DR# '*:Y -2%&# A))3+'!-330985;442B4,#)Z.kw&#"#"&547326325#"&'332>54'#"&547.#";27""#"&54674'#5!##"'3>7#4'#32\7<QLZ.FG 929/=N43O-'9    4*0" *& ea1$ !.5(3# '*:q: M@+* +9, +nbAL2,$   $'/ #3+'(-3309-/ 5F9;-A4,#).3?J%463&'#".#";27""#"&54674'#5!##54&#""&74'#327#A5&,#G7 *& eC3Y/ '*# '*:2D(&#))3+'(-33o] ()4,#)09 .>8op.4;%#53##54&#"3"&546754&#"#"&547.'5#5!#!530*C3Q"  *`#B2U)D>NB =79.5533t6@ (&/{C+P,],&!"3382N.JV%25#".#";27""#"&546754'#5!##54&#".#"""&54632674'#32 #G7 *& ea 3 *-#+& .9A).3l# '*:))3+'!-3309*$(  @-7,$G7 4,#)\.;B%254&#"#"&547.'5#5!##4&#.#"##"&5463265;`#B2U)D>NB92- .#%.;K'2( =79.C+P,],&!"337- ,4",07-,=082N(.>JS4'#5!##5.#"#"'73267.'#".#";27""#"&546?#325476325n e?53 :.10A,. 0;1$#G7 *& ˵ '*:D@5"'2!-33N+(Tj# F?9!-/))3+'U#)B4,74Eh(.Yen.#"#"&54732?632.#"#"'73267.'#".#";27""#"&546754'#5!###325476325A 6K\-EG 38 :.10A,. 0;1$#G7 *& e?53y '*:D@5"'2c'LA(- ,;)+N+(Tj# F?9!-/))3+'!-33m#)B4,74E[.;C3&54632635!5!#'654.'#5.+'67.#"&#"I!SK'; !u7J 4 :1-'X= !C" +@%"h8-i,L,=!  a33 (3"6!)& ) )K:0O;"_` ;.L46326325!5!##54&#"632'67&#""&5463254&#&#";"&=29- !"s3ZB!AH"+ '%A & 'bEAH"1@#!  %,a1G5&L33œ+\;+$'  %$1&!=QL  ^1,17,W3723!32654#"'632#"&=4/.#"&#"&546326325!5!>54#"&5473C =f*2N$, ,<!8QI(8#%"y{[5E!* z 3 H&"!8#Y:, . ^ ++N,=1&3h3 8 <0 (  U,u.#"#".54732?6325#"&=4/.#"&#"&546326325!5!>54#"&5473723!32654#"'632#@!L'F:.EG 8356$, ,<!8QI(8#%"y{[5E!*3C =f*233v& D4%0 ,<)*2:, . ^ ++N,=1&3h3 8 <0 (   z 3 H&"!8#LT6.B&54>326325!5!#>7#"&'332>54'#"5&#".#">$$3 4"(/& +"OzCRs9>-<)&:M8&)+#$G( " C #*/)$Y33 :<[rSk$&-#3,$*@i>?$7Y.b.#"#"&54732?6325#"&'332>54'#"5&#".#"&54>326325!5!#>7#@!6K\.9S29+,Rs9>-<)&:M8&)+#$$$3 4"(/& +"O33r&LA%0 *32+Sk$&-#3,$*@i>?$7( " C #*/)%Z33 :<[PF8.P32654&#"&5463254&#".#"3254'7#"&546326325!5!##".'NM8F40)H5 /+3''=. 1-=C0; .d?gQ326325!5!!67ge.&)+#$$$3 4"(/& e,.R]b[2|>?$7( " C #*/)%Z33!P`N.HM25!5!#632&=656=4'#5./75.#"'.#"&54>326: : ."332>7&#"3d/+3''=. 1-=C0; .d?3# Z#' # 3'C@"(D!/&9-%C 1 F33a ' $)E]  ,.Q&'.#"""""&54632632&/#5!!3273#"'73254&##5./67d--*"(:-(69vK ;P$ 5 K:/,: %kB-/6-,=0#%33*8&1,'aN %51 &$ 1 #2>ZFFX %.n.#"#"&54732?6325./6?&'.#"""""&54632632&/#5!!3273#"'73254&##E  LZ.EF46,: %@--*"(:-(69xM ;P$ 5 L:32(M@%0 ,<)+5FX %3B-/6-,=0#%33*8&1,'aN %52&$ 1 #2>o.I%2#53##54&#"3".54754&#"4&#;27#"&46326325!5!#84B3Q#    '@'." 0&;GG;1.+&S )5733t6? (!Y&&3))90QR0+ 33.I%25&#".#"&54>326325!5!##5&5&#".#"##"&546326*&)+#$$$3 4"(/& O3 */",%/8C(.3>?$7( " C #*/)%Z33W) B.9+$F7!.?H%"'.'27#".'#"'72654&#'326325!!'2654/&'\ %# % 8- '/ #!7l/"C  Y{+51-S%G34 0 +#,1 &30/IK[3=#$ 0]3* G.[f4.'#"=&'327#"&'#"'7254&+'632>325!!32632.+732>'2654+"'` _0N)&%  - ):(  W&2     &N.?b>g6Q"9mCP6D3*AYwKG% +11 &' ,A* N3< M81^(/K$Aw2<J(!-]32654&#"&5463254&#"327#"'#"#".'7&'7;>54&#"56;263533#Q&54&#"56;263533##5&#".546324&#"327#" 4#I5N3QQ3=_%&+>,.H$P%!, <X')-1=8k_  $W3P *3&$B21s/6 +oS%4&#"327#"'#"'7;>54&#"56;263533#2#53##54&#"3".546P%!, <" 4#I5N3&&54B3Q#    )5r/6 +:')-1=8k_  $W3:733t6? (!"\726324&#"327#"'#"'7;>54&#"56;263533##4'5&#.#"""&5461) (P%!, <" 4#I5N3QQ2- .$# .;C1s/6 +:')-1=8k_  $W3 > ,4/7,$F.8@327'654.'"47#5!#'2654&+"#5.+'767&x1b1a4JPc])/$  2'[A!)7\$ E%Y( MK$33+## P:Q(#;GN70$0#)#g.JT]"&547#".547#5!!>32'654#"#5&#"#".473263254'326?'654.'"1G$ $4 '' !0#"1230< S'-()T 0, ! a1WI # ,K$33+9) 8-##B2* 218#9+01S1':K -A*3F31B 6 5 +o< .'Fm'<@67'&/&'#5!654'"&5473723!32654#"'632#"&'.'7#')=[3G"*`4B0;c %!".:c4.r=Ũ4tG5/  3 1 ?/). D836C$"1'6vS %6Vgh'$U]f.#"#"&547326325#"&547"&547#5!4#"#"&547326323#32654'7#4&#"6'327CPLZ.DG<46JN*3^B<:NWJ0 zSE5g~M[M8,u#=3!N! !0"c' M@*+ ,;) ++3&:K37@+3F31<  4=:35'N6H"#9+/M +o< .'jm'[_.#"#"&547326325#"&'./67'&/&'#5!654'"&5473723!32654#"'632##B   L[.EF 046*+.r=!)=[3G"*`4B0;c %!".(!32va'LA(- 1 <) + %6V.5/  3 1 ?/). D836C$"1'+b'iT1;G654'#4>7'&5467'#5!&5473##"&7&/62654'  D%,;\P6&+   )>0cGEW;9)<&7F<&:3|1 )&N?3]G#x@TV6\8!q.$:AE%"&'#5./67&'#5!!>32'4&#"'67654&#"32%&'5(.g3AcG*g-~"# ,<+.1'-P$ D20f".H;0{UT]O$@\H:%R#A33%  >-5%13gh3. ( FDKG(>+7qc#ws IN2767&#&#"327'654.'"47#5!632533##4/.''654&#"#".%67#c # 3#2$ ?1b1a4F3VV3 $%-V) $" ,+2&(!B%Y( MK$3 E3:. "&!$ (5 ,y #sGT\ej.#"#"&54732?6324/.''654.#"'#".547#5!632533##2767&#&#"327'654.'"767#F7LZ.EG  38$%-X* $4F3UU30)3#1% ?1b1 '2(M@!4 .<)+). "'  )7 ,K$3E3(82&(E%Y(  .D27'74&#"26"&547#5!!632#"'732654##5&/67'x*\' )> :Ahq)diG4Ke$!  3>(a8^Nl>.=&7533#&(4#>">>E:%0 ;PnAW6=&.KS^.#"#"&547326325&/67'#"&547#5!!632#"'732654&#"#27'74&#"26wCNLZ.EG 8 46=(a8?:Ahq)dgH6Ke$!   2( M@!4 .<) +*V6=&=&7533#&(4#> @>E:%0 ;#/Nl>.:.4A327'654.'"47#5!##54&#""&5463&'#".7#x1b1a4lC3]+ '*5&3: $/%Y( MK$33oZ()!((- ,-<  3+#oR.)04%#53##54&#"3"&54675./67&'#5!#&'5y12C3Q"  *BdE*g-~"!3I;0|UL4433t6@ (&# ]G:%R#A33(?+7qc{}.I3254'"'3'2654&+"#5.+'767&'#"&'6?32654'4'#5!hVG?8&h8$=9)IY]&7  2'[A!)CO?"<8  $?E",l$H8$"5 N7P(&4GM80$:Q3  @*33.T^%&5467&'#"&'6732654'#5!#>32'654&#"#5&#"#".5473263254#"'3254'"'$1#."<8  ))!0#"231;V%7 (+2R 1,%C8$= # !H?3!3.33"5/ 8-#B2* #3*)A"8; /I$H8$v}.RXb.#"#".547326325.+'767&'#"&'6?32654'4'#5!#'2654&+"#3254'"'h:B/.) >>2,2'ZA!)CO?"<8  $)IY]&7  3VG?8&h8$=T' ;(*+ *;) +EN70$:Q3  @*33"5 N7P(&4IE",l$H8$S L254'#233##5./2654'#"&5473274'"&'#"'7327#5!2'!]  z*?>X3ll1:@g,Hd=A-*-  K10 <"1% $ ?2)>'   ,$C=W3&/?')I0&J 3/6::!)n3EdI'KS%2654#"'632#"&'5.#"#"'73267.'5#5!467474#"&5473723!25!6?a*/6a6 +4-!21@,%. B_2[8E!*a3DC '1`$RK&"!<9Z!-?4?4jOCK7%3 4 <1)  / C73n=EoIC$Y4&+3223#32654'7#"&54>7.'#"&'6732654'#5!4#"#"&547326%V9#=CE5g~3HH38+v#7.'#"&'6732654'#5!4#"#"&547326323#32654'7#4&+32EM/E#-EG 8 38@<*3 )/';"<8  #:NVK0 zSE5g~3HH38+v#=33 $V9#>c' ,.(- ,;) +3&!#=*3!A) 3F31B  4=:3#B419#9+/&%M+$H9*.>G#".'732654&#"&5467&'#"&'67326=.5#5!!3254&#&#"dT7&'#"&'6732654'4'#5!##3254&# JO+!%6b?(3-5N*5I41* +"2"<8  #7W&$"43f9#=B  >!)0NdZ ;PA.@1(7!& #,F3!A)33"#2 UK+$H8 ).JT"&5467&'#"&'6?32654'4'#5!##5&#"#".5473>3254'3254'"'`C$;'6"<8  $7W$30< O $7 ,5*#<(8$=EH%"#OH3  @*33"1 53*!/) 2:;&31$H8$h(.bk.#"#".54732?6325#".'732654&#"&5467&'#"&'67326=.5#5!##3254&#uD6/E#-EG (38)1[?43\>&%5I3$)2(5"<8  $7W% #">3[9#=c',.(- ,;)+b 2HZG S"@1(7%! E3 @* 33"!4 UO.$H8 *q&.7A%#&/532>54#"'67&'#"&'6732654'#5!#'3254'"'#J1|"v54!$0>!`G1z/"<8 #7W.&?8$=+3#B#m3,"I] |?3!E# 33"%7#$H8$. ?2654'#%3267#5!##5.#"&546325.'&'+"/P ' 4A-5 , /.;6325.'5#5!##5&#""&546325.#"#"'7326s@5"'2 B_853=_%#.>,-H% :(20A,-84EK7"33O *1)#C21N4?4j" Es Y2767&#&#"'3254'"'3#67632533##4/.''654.#"'#".'#"&'6?32654'4'#5!0)3#2$ >8$=`' B!F3VV3 $%-44 "<8  $7(82&(($H8$)E3:. "'  )(3  @*3sZgqv.#"#"&54732?6324/.''654.#"'#".'#"&'6?32654'4'#5!632533##2767&#&#"'3254'"'3#6E  LZ.EF 46 $%-44 "<8  $7!F3VV30)3#2$ >8$=`' 2(M@%0 .<)+). "'  )(3  @*3E3(82&(($H8$scq{%63254&/&''654&#"'#".'#"&'6?32654'4'#5!632533##4'5.#.#"""&546322767&#&#"'3254'"'3#6 ( %&14 "<8  $7H3UU2-1$# -3&'#".'#"&'6?32654'4'#".  8$=YC4\+ ' )(% / 4 "<8  $".0< 3$H8$33oZ (+" /!(3  @*o.C6325#53##54&#"3".54675.#"#"'73267.'5#5!#s@5"'2313/B3Q#     :(20A,- B_8!84E:433t6? (!, N4?4j" EK7"33.LV726325.'#"&'6?32654'4'#5!##54&#".#"""##"&5463254'"'10!2 "<8  $7W33** $.9B8$=6 '3  @*33"<(  %*(-7,$F$H8$.N6325.'5#5!##4&#.#"""##"&546326325.#"#"'7326s@5"'2 B_852- 1#!-.#""&546325&/32>54&#"&54632&'#5!K '7!&"/>,-H%z_:&: M$B0d/6lY&&3|"8 *2)#C21Tc09!(# $<#$*9+KZ9o2[p!*33I..22'654&#"&/32654&#"&546326%5!0:.;&A|Z&[,CXK&1++ Q?0a 5'v;1$:*.#a!Yr!G9!@3$=4 %4EF*-V33./=B4'#5!#2?&547#5.#&'>354&#"/46725'.5#7#3f%X9 0D3O+$1J5-+B?YG+DR1!#33]*/On=|6E!+;( h9 ;M52*=.O;27#"&'&/32>54&#"&546326326325!5!##4&#"4&#|/'-@ %CY&_:&: M$B0d/'V":0/+&+VN3@'." %*801+"[p!H9!(# $<#$*9+K4''0+ 33Y&&3)J.FJ%25&/32>54&#"&54632&'#4&#.#"##"&5463265!"z_:&: M$B0d/6lY&&2-+"#! .;J(2( Oc09!(# $<#$*9+KZ9o2[p!*7-  B"07,+?033W~P[g2533##&#"32?632'#".'32654&'#"&=#5!#26754>4632#"654#"+1;K-2AB3S^*= # ,&D(#p[=b7'/Z4(-CP4 %  Y&7, "b,!/0HP3 `:  7(>'WjIe[&$[H4 7!5+33" b (< 2i^ 7hT.,39.#'67.+"'675!5!##"'72>54&+#/P+!AU(w2zw9F0/")( \23)L Kf!*0D,4U6`*.33.(L1#B%'7L2JX/W)  +{1.#'675&#"32632'7674#"#"&54632533##yQ,!LeV^!F O",E**8+ N  WC9M.3CC3 *0L2o7#)"!E( 6)%1^5HM3N.,5.#'67./7##"&547#5!##27#OQ,!ES"q=N&HO=3& !&')3  J *0E-0B (R8,33SE $ #a0    U.#,%.#'7&'#5!!#'2>54.'$  JP,! c=2-* 33#bDLgC   >!)033=&(4GYi .EP&'#5.#'67&+532654./#"&=#5!!;26722654'#"'\# J3%80?R/."3O+!B]}GVx _104*= "12 NC1      <(3/)$3#'0F/U4[2@].33 @ZK&7a.M.#'67&547#".'32?#"&'&5332654'#".547#5!!32?#Q,!DY #0C( $*%*`4H3m9"@(1'2KzK9# 3!)0F../]X ! B!-"$,!@Rx+F! c6'$&1/a1337'!>_;HTZ'@7523!32654#"'632#5./7.5#5!654'"&5473G$B>.I/;d&!"-33  !&d[[3G!*a!#/%l32533##dQ,!MdY$-H, )F>)3& 3__3 *0L2c+w4<>3^+1:('c3.U.48%.#'67&'&/332654&#"&54>32#5!`JQ,!-313XYBLF57 + 8&Kc503v  >!)0." V\IFa!#'" '}]Ai33[3833##5.#'67./67654&#"32727+"&54624\%jI4QQ4P,  (V~Q2JL8P)YX3`3 *0@*=@ 8<"*$3- 2DJe&.&,"##5!!632#7. /6754&5'g3HLP12  .cRUK>}* 33p   +R#E 9&-5 .5:5%"75!##5.'#5./7&54632&7675#0{&]#yg3C3GkMp^),*' yU-J1&3gw: O4  2 DJ3X/{ VGK)[F=8Y323>D'@s$k>j3  !$z 94 ))&)H2 #/">33-&5"*!L, !2% ,,.$,767.#"&54>325!5!##5.#7JfA&'"!4#4,b3P3Q,# KEN0?C , '&D/F"f333 *q    s%3.#'6754/.''654&#"'>32533##2767&#&#"P*!Md $%.# n6F3VV3 # 3#2$ ?"(0N0F. "&!$ $1PE3 ,+2&(!. ).5.+'675!5!##5.'#675s.{%]U9!~f4D3H''%3on: M6  1.6b++33X/z $X,JL+YA.=A%4632&#"3267#5.#'67.'32654'#"&'5!  J)4! K%3!%(#2M,!'*:_B*9%T,P"5R3OXG   #00:2G #!9 &R3!)0) LukDQ?3Z733.<7574'#32%#5!##5./67.#"327#"&54674G$Ex# '*:ea3  !'l$c +& #/&4,#)3309;"*#CG3*'(c .BGR.#".547326325./67.#";27"#"&54674'#5!##574'#32^;V%B6+@D7.4  !:Y$c  ,+ "a33kH#H{#  V:g' D5'/ /:, +1!*/7G3*#(-3309B.T"0)4, K 9h.',5.#'6754&#".547.'5#5!##'5x=79.S+!Jg`#B2U=4>NB93hO/82N +0L1C+P,L/&!"33m+}. J%55>754&#".547.'5#5!##5.#"#".54732?6325.#O/=79.0O2`#B2TB. ALG83B!6/E#-DH (47R,+}73N27 C+O,G1$$"335',.%0 .<)*+, .6.#'6754&#"4&#;27#"&46326325!5!##Q+!Md@'." 0&;GG;1.+&S.N35 *0O/QY&&3))90QR0+ 33;76754&#"327#"'#"'732654&#"5263533##5.#IhP%!, <" 4#I5N3QQ3Q,EM1s/6 +:')01=8i_  $W33 *&.*2757#5./67&'#"&'673265#5!!3254'D'@33  !(kK$"<8 " 78$=#/#"<"*$B]3!'O/33$H8".&/7675.#"#"'73267.'5#5!##5.#6325Ih :(20A,- B_853Q,@5"'2EM12N4?4j" EK7"333 *84E. 75%5!##5.#&/32>54&#"&54632675.{%]Hf4H"^Y&_:&: M$B0d/3gnq: M6 133X66 [p!H9!(# $<#$*9+KQ5L+'.26%.#'67&/32>54&#"&54632&'#5!KJR+!EZu_:&: M$B0d/6lY&&3  >!)0F/X,9!(# $<#$*9+KZ9o2[p!*33_#".'#5.#"#"&547326325./>54'"&547326733#3274#"3"54632K+( 4CQLZ.EG 7 4686q4)$1( ,(54'"&547326733#67O/_4CQLZ.EG 7 4686q4)$1( ,(?>54#"&546#0%s/O;5SKI/ &@b8M 6$,E-/()"9$ &[OYY6#80B:[o ;$YkGO *"%Q[%`;+1># 3 .F{`"&'#5.#"#"&54732?632&#"32632'7674#"#"&54632533#3274#"3"54632KT)3CYM.DG28V^!F O",E**8+ N  WC9M.3  6 *>0#$,96G##6'W6), *;)*<7#)"!E( 6)%1^5HM3G,X'$;(<{{W%&=47#5.#"#"&54732?632&#"32632'7674#"#"&54632533#67=/^3CYM.DG28V^!F O",E**8+ N  WC9M.3@7CB _! 6'W6), *;)*<7#)"!E( 6)%1^5HM3#`%+{j"&'#4'5.#.#"""&54632632&#"32632'7674#"#"&54632533#3274#"3"54632KT)2- .$# .;C/1) (V^!F O",E**8+ N  WC9M.3  6 *>0#$,96G##   ,4/7,$F17#)"!E( 6)%1^5HM3G,X'$;(<+{{a%&=47#4'5.#.#"""&54632632&#"32632'7674#"#"&54632533#67=/^2- .$# .;C/1) (V^!F O",E**8+ N  WC9M.3@7CB _!    ,4/7,$F17#)"!E( 6)%1^5HM3#`%.|.#"#"&=7332632'&547#".'32?#"&'&5332654'#".547#5!!32?3274#"3"54632#".'A t"?O2)/!y '$#0C( $*%*`4H3m9"@(1'2K(K9#  )7 *>0#$,A4   --4XA ,F4 2H']X ! B!-"$,!@Rx+F! c6'$&1/a1337'!#3X'$;(<-,Q ,M6A.q.#"#"&=7332632'&547#".'32?#"&'&5332654'#".547#5!!32?67&/&=47A t"?O2)/!y '$#0C( $*%*`4H3m9"@(1'2KLK9#  ,8/ ]--4XA ,F4 2H']X ! B!-"$,!@Rx+F! c6'$&1/a1337'! #`% 1T .KE/! K5A.IM#"/#4#"#"&547372&#"327#"&546323274#"3"546327!5!L*: .\ =K, V'&w !)7.  5* >0#$,#97F/r]I4<*3$#m'$#*8. ) 4X'$;(93.<@%&/&=47#4#"#"&547372&#"327#"&5463267!5!b/ ^.\ =K, V'&w !)7. @7?D>G .KE/! r]I4<*3$#m'$#*8. :L3h#"/#5.#"#"&54732?6325'./67654&#"32727+"&546233#3274#"3"54632K+9 4CLZ.EG (46A1]A,p'@7) ? (V~Q]$iJ4 )6 *  >0#%,94I/5(M@*+ .;)+BF11 8;"*$3- 2DJ=7Q(ZX3 3X'$;(<{[%&=47#5.#"#"&54732?6325'./67654&#"32727+"&546233#67=/^4CLZ.EG (46A1]A,p'@7) ? (V~Q]$iJ4@7CB _! g5(M@*+ .;)+BF11 8;"*$3- 2DJ=7Q(ZX3#`%.B%&#"3262&'#"&4632654#"#".5467#5!!32>F$ $%3@-   (0M9<("/24:3;-,9 !+0&0\LD4WE BA9908?JV!?-:#&K22O&7(/(.T#"./4&5&'#"+".547;26;2&547'#5!!673274#"3"54632A4)  .(5 P '0!1-$ i#* d.e,  6 *>0#%+9,Q1C^P @*/:!3:jS2"33!F+X'$;(<.E%&=47&'#"+".547;26;2&547'#5!!6767S/[ .(5 P '0!1-$ i#* d.%e, +8CB b! 1C^P @*/:!3:gV2"33! #`%5W%"&547326325./7&54632&#"75!#3274#"3"54632"&'#5.#"yyUDUF`.EF 3 :FkMq_<+( $y$  6 *>0#$,KT)3D = $#& $k>j ,-)=52$.6&6 o& )6')H2 >33,'2 (!4/&QE'+H,' " Q !2!+,,.=74632'.#"&54>323>54'!5!#&#"327'#"&;,  :1 ))&)H2 $k>j(#%" 'o"*E(39- !2% ,,>33-&> S'(.+4'!5!#'7".#"&54>323>$k>jd3b:D  ))&)H2 >33-&1,G (J8g,, !2% ,,.G7467&#"&54>323>54'!5!##"73254'#5>54&#"3&80?' ))&)H2 $k>j!D"4ZIj0(Wp2 89,O*51]$? . !2% ,,>33-&($0426BGC) 1(%'4 Q.c#"./&'&'#"+".547;26;2&547'5&#"&46325!5!!673274#"3"5462$K*)  /'5P &/!24 i , d.<6!(9(5<fe, -7 *>0F-96G5AUY @*81!3:b[23vR3L33! 3X'$;(: .T%&=47'&'#"+".547;26;2&547'5&#"&46325!5!!6767/\ /*2 P(. 24l$) d.<6!(9(5<!%e, +8K: d! 4@UY @*81!3:b[23vR3L33!  sXf#"&'#5.#"#"&54732?6324/.''654&#"'>32533#3274#"3"54632%2767&#&#"A4*)3C  LZ.EG 46 $%.# n6F3 )7 * >0#$, # 3#2$ ?9,Q##5(M@!4 -<)+). "&!$ $1PE33X'$;);Q ,+2&(! }sM[%&=47#5.#"#"&54732?6324/.''654&#"'>32533#672767&#&#"?/W3C  LZ.EG 46 $%.# n6F3C- # 3#2$ ?CB _! o5(M@!4 -<)+). "&!$ $1PE3#`%# ,+2&(! scq#"&'#4'5&#.#"""""&5463263254/.''654&#"'>32533#3274#"3"54632%2767&#&#"A4*)2,'(#-0#$, # 3#2$ ?9,Q## = &*/6-$F1. "&!$ $1PE33X'$;);Q ,+2&(! sXf%&=47#4'5&#.#"""""&5463263254/.''654&#"'>32533#672767&#&#"D/\2,'(#-0#$,A4))4#:/ #*.) H''2" H,6`-+333X'$;(;.,Q"!5 ;'+* (&3{$`!k.?H726325.+1'675!5!#67&=47#5.##".547  8"zqA1/Y4#:/ #*.) H''2" H,6`-+33 #`% 1T d! p5 ;'+* (&3{$`!N.Q5#"&'#4&#.#"#"&46326325.#'675!5!#3274#"3"54632g~E0oA4*)2- 1%$ .;J(3' *9!~g  !6 *>0#$,:$e8,Q##<)  +607X>0,.6b++33G-X'$;(<+.GP%&=47#4&#.#"""##"&46326325.+'675!5!#67/]2- 1%$.;J(3' *9!~D"TH''%1T d! <)  +607X>0,.6b++33 #`%$X,.RV#"/#.#"##".547;725#"&54632&#"32?3274#"3"54632%5!A49- -!  9;$1C1*m7aD0;3% 9/:81 )6 *  >0#%+79,Q/#"J5214B "U>0!+$+ 38883X'$;(:33.EI%&=47#.#"##".547;725#"&54632&#"32?675!n/^- -!  9;$1C1*m7aD0;3% 9/:81A6zň1T d! #"J5214B "U>0!+$+ 388E-Y"f33=.PW#"&'#5.#"#"&5473263254&#"#"&547.'5#5!#3274#"3"54632%5L)(*3C YM.EF :56`#/*U)D AML  !6 *>0#$, ?59.97F##;5(W6+* *;) +5+P,],%""33G-X'$;(<73N={.FM%&=47#5.#"#"&5473263254&#"#"&547.'5#5!#675=/[3C YM.EF :56`#/*U)D AML?5T?59.CB _! 5(W6+* *;) +5+P,],%""33#`%f73Nsx"&'#5.#"#"&54732?6324/.''654&#"#".#";27""#"&546754'#5!>32533#3274#"3"54632%2767&#&#"4'#32KT)3E)LZ.EF46 $%!/,#G7 *& eM#F3  -7 *>0#$,3#2$ ?[# '*:96G##5(M@%0 ,<)+). "' $":))3+'!-33 %E3 3X'$;(9O)!2&( 64,#)sl{%&=47#5.#"#"&547326324/.''654&#"#".#";27""#"&546754'#5!>32533#672767&#&#"4'#32/W3F6YM-DH :38 $% /,#G7 *& eK#F3E+3#1% !?Z# '*:1T d! o5)W6%0 ,<) +) * "' $":))3+'!-33 %E3#)!2&(!54,#)O..4@#"&'#5.+"'675!5!#3274#"3"5463254632#"&6A4*)3>$h )7 *>0#$,09twF&9,Q##Y/4^6&333X'$;(<- \'"'.#)5%&=47#5.+"'675!5!#67%54632#"&/X3>$@B/~9twF&CB _! Y/4^6&33#`% \'"y.%#".'732654'#"'732>54&'.#"632'>54##"&54632754&#".#"3254'7#"&546326325!5!# P+@uL.3Sz7%  #;%!, 4B  H"%!/+3''=. 1-=C0; .d?1d'  ):X}r% Ef$ - @I'D/   "C  "IDF(D!/&9-%C 1 F33DaJ[#"'732654+563632>76?67#"&'732654'#"'673264'.'32>7#"&(  `   M%%- )E$M9m%2Q!?"  '1"    1 G,A#=! ~"Y/Tj&/ *,d%P   ( + o#"&'#5.#"#"&547326324&#"327#"'#"'7;>54&#"56;263533#3274#"3"54632A4*)3E  YM.EF 2 56P%!, <" 4#I5N3  !6 *>0#$,9,Q##5)W6), .<) +Ms/6 +:')-1=8k_  $W3G-X'$;(<c%&=47#5.#"#"&547326324&#"327#"'#"'7;>54&#"56;263533#67J/V3E  YM.EF 2 56P%!, <" 4#I5N3C,>G ^! o5)W6), .<) +Ms/6 +:')-1=8k_  $W3x#"&'#4'5&#.#"""&546326324&#"327#"'#"'7;>54&#"56;263533#3274#"3"54632A4*)2- .$# .;C/1) (P%!, <" 4#I5N3  !6 *>0#$,9,Q## > ,4/7,$F1s/6 +:')-1=8k_  $W3G-X'$;(<n%&=47#4'5&#.#"""&546326324&#"327#"'#"'7;>54&#"56;263533#67R/]2- .$# .;C/1) (P%!, <" 4#I5N3A5CB _!  > ,4/7,$F1s/6 +:')-1=8k_  $W3#`%serz#".'#5.#"#"&54732?6324/.''654.#"'#".547#5!632533#3274#"3"54632%2767&#&#"327'654.'"767#K*) 3F7LZ.EG  38$%-X* $4F3  6 *>0#$,0)3#1% ?1b1 '96G5(M@!4 .<)+). "'  )7 ,K$3E3 1'X'$;(0)3#1% ?1b1 'CB b! r5(M@!4 .<)+). "'  )7 ,K$3E3#`%#(82&(E%Y(  . FP73267&#"&'#"&54632765'&5&'#"&'6?32654'4'#5!!3254'"'(# 8-$A71%-7'9X)"<6  $78$=  ""1 7);(&HM'-"$-' "! j3  @*33$H8$1.9C74632'.'#"&'6732654'#5!#&#"327'#"&3254'"':. #7"<8 #Zz%##" 'o:3#8$=&42.'3!E# 33" 4 X6G$H8$6.%/?&'#"&'6?32654'4'#5!#3254'"'͑Y)"<8  $7W)!d8$=j k3  @*33D6,G~8$H8$.MW#".'73254'#5>54&#"3&5467&'#"&'6?32654'4'#5!!3254'"'#."4ZI.PDM0)Wp278-F )2]17/"<8  $78$="/ ,527B%AYD) 1%'4NG >3  @*33$H8$\.Yb#"&'#5.#"#"&54732?632.#"#"'73267.'5#5!#3274#"3"54632%6325A4*)3C  LZ.EF29 :(20A,- B_8 )7 *>0#$,@5"'29,Q##Z6'M@*+ ';)* N4?4j" EK7"333X'$;(<84E\.NW%&=47#5.#"#"&54732?632.#"#"'73267.'5#5!#676325U/[3C  LZ.EF29 :(20A,- B_8c@5"'21T _! 36'M@*+ ';)* N4?4j" EK7"33#`%f84E;su"&'#5.#"#"&54732?6324/.''654.#"'#".'#"&'6?32654'4'#5!632533#3274#"3"54632%2767&#&#"'3254'"'3#6"KT)3E  LZ.EF 46 $%-44 "<8  $7!F3  6 *>0#$,0)3#2$ >8$=`' 96G##5(M@%0 .<)+). "'  )(3  @*3E3G,X'$;(8$=`' >G ^! p5(M@%0 .<)+). "'  )(3  @*3E3 (82&(($H8$6s#"/#4'5.#.#"""&5463263254&/&''654&#"'#".'#"&'6?32654'4'#5!632533#32>74#"3"54632%2767&#&#"'3254'"'3#6K*; 2-1$# -0#$, # 3#2$ !?8$=Z! 96G/ % +5/6-$F1'"),%(3  @*3 E3F,'#'$;(9O ,+2&(!+$H8$  sx%&/&=47#4'5.#.#"""&5463263254&/&''654&#"'#".'#"&'6?32654'4'#5!632533#672767&#&#"'3254'"'3#6/ W2-1$# -0#$,@5"'29,Q##:*  +6"06-+?0N4?4j" EK7"333X'$;(<84E.Zc%&/&=47#4&#.#"""##"&546326325.#"#"'73267.'5#5!#676325X/ ^2- 1#!-54''4&#"3&546327%5!w=3+!*W "h~G29S&+H$+#!&A[G6H&B225GDi&R $j|"F"!0&8%`'2-$02T5FKV!_33!.6:%47""./32>54&#"&54>32632'&5!  o\&D?[>&: L%/,#<(6k :+N@/L$Xs!U?!(# $=4!3 "*W6 39OW ,33N.,08#"&'#5.+'675!5!#3274#"3"54632%'5A4*)39!~g  !6 *>0#$,9V$ %9,Q##Y.6b++33G-X'$;(<7@>e X,&.!%-%&=47#5.+'675!5!#67''/X39!~?B/9V$ %>G _! Y.6b++33#`%@>e X,N.,4=#"&'#5.+'675!5!#3274#"3"54632.'75A4*)39!~g  !6 *>0#$,`:,n6H''%9,Q##Y.6b++33G-X'$;(<&Q . I7Q$X,)."*3%&=47#5.+'675!5!#67.'7/[39!~B?5`:,n6H''%CB _! Y.6b++33#`%o&Q . I7Q$X,.MQ#"&'#5.#"#".54732?6325.+'675!5!#3274#"3"54632%A4*)3C  /D#-DG 19:!~o 6 *>0#$,9V9,Q##4&,-&- /;(*%-6b++33X'$;(<7@.AEM%&=47#5.#"#".54732?6325.+'675!5!#67'A/]3C  /D#-DG 19:!~o6@9V$ %1T d! 4&,-&- /;(*%-6b++33 #`%@>e X,,T.*1'7675!5!##"'72>54&+#5.+"7zw9F0/")( \23@){({`*.33.(L1#B%'7LfX/JX/,w/'733##5./>4'"&5473267ZW$Ld3TT3:3:*4(%1( &'={({R5FaV3R,1-45)*%/DJ+,t{.'72533##&#"32632'7674#"#"&546WQ9M.3CC3V^!F O",E**8+ N  W{({5HM3`7#)"!E( 6)%1^,Q.*'727#'47#5!##5./7##"&3a& !&')3fO=3JN&H{({? $ #a0 133AAZ (R8 ,2 <F'7>32#"'326?#".'732654'#"547&'7&#"325k I4M.',59(#)\H>g@&3"5R0<3% =!o#>(5<$U{({TE)+) W<P-JcM|B @ykAE.0,"4!W>&1 5,. "'7%2>54.'&'#5!!#̦#bDLgc=2-* W{/{({Yi 33=&(0^,.9D'7.+532654./#"&=#5!!;26722654'#"'| %80?R/."C`z;GVx _104*= "12 NC1 {({ <(3/)$7='4[2@].33 @ZK&,.I'7".547#5!!32?&547#".'32?#"&'&5332654'zQ'2KzK9# 0 #0C( $*%*`4H3m9"@({({1/a1337'!>_;HTjN]X ! B!-"$,!@Rx+F! c6'$&,"+'7675!5!33##5'&'#5.+"7qpz63VV364?#q#){({a,+3@X3=$W2;V1,:H^'7#"&'#4&#&+&547;636;24&#""327#".546327>32'4&#"2654&#"53260g*\3B^#H}/69 ":, %n  "#! *5'2*,=35a.W83%'/{({40gBL3E9 C<9*#S x $ $>Ba1>-44'xE67!,3%,'5'723!32654#"'632#"&5#5!654'"&5473|6A/;d&!"-:c4,'d[[3G!*a{({\F636D$"1'6vS?'O3 2 ?/) .,T(4'73##"&54>7>54'#53&5472654'|/2Ư2@fHFV2 ʬP6&(:4I<"G0{({,N73Pr^HZD N=%3]G54#"'62|,'x 35% *>.9d{({?'33q 6Y1&"!=8[?,]('7327+"&54>32533##4&#"@, )F>)3& 3__3Y$-H{({5>3^+1:('c3W+w4,U.'+'7&54>32#"&5/332654&#"%5! + 8&KceT83XYBLF57v{({ '" '}]\|V\IFa!w33,]4'733##5./67654&#"32727+"&5462@\%jI4QQ4";,C&,n'B7)!> (V~Q{({S8P)YX3I% 58<"*$3- 2DJ,-.'7'&547'#5!!67d.Oe,.{({Lcb[2"33!Q~UY-,:5")'7"753##5./7&54632&U#yR3GkMp^),*' yU-J1&{({ DJ3VGK)[F=8Y325!5!##5.#"04#4,b3P3"4'"{({0&D/F"f33.:& ,  ,{s"0'7>32533##4/.''654&#"72767&#&#"] n6F3VV3 $%.% # 3#2$ ?{({O1PE3:. "&!$ 9 ,+2&(!,Y..'73254&##5./67&'#5!!6;2#"'q I<38b($fNr3>(69vK Zr8{({ #1?ZFA_ %M#6@33*8&1,'aNaP'% , .'7.+'675!5!##9!~A3H''%{({.6b++33$X,,A./3'74632&#"3267#".'32654'#"&'5!)4! K%3!%`K9bC:"9%T,P"5R3OX{({$#00):2G #!9 @s1Jm_:Q?3Z733].%'7.'5#5!##54&#"#"&5475@h>NB93`#B2U)D>=79.{({:&!"33C+P,],82N,J.$'767/.+5!##5.'-9Y KU?3)9?Y7;G&4{({9C 233LCR F7""5j, .''7675!5!##5.+"754632#"&G3>09twF&{({^6&33Y/, \'",.3'7;27#"&46326325!5!##4&#"4&#c0&;GG;1.+&S.N3@'." {({)90QR0+ 33Y&&3),<'7#"'7;>54&#"56;263533##4&#"327#"q1 4#I5N3QQ3P%!, <{({')-1=8k_  $W3^s/6 +,D.'7&'#5!##5./6&'5&r-~"F3BdE*I;0|UL{({C#A33@]G:%3(?+7qc{,. ,'76325.'5#5!##5.#"#"'7326q@5"'2 B_853 :(20A,-{({84EK7"33N4?4j" E,.#''72&/32>54&#"&546'5!|6lY&_:&: M$B0d{({Z9o2[p!H9!(# $<#$*9+K33,J.3>'7"&=#5!!>7#".'32>54'4632#"&-%. R(4wY=a9'3.EN#)=#(0 {({6(33X(p"YoIg]$TY2$6-2(+4 ,.!/'7%"&5#5!!>54#"'6324632#".#4Z.M#"(Lj!- {({/733h]d# "mL_-!,9.!-'7&+5!##5&/674632#"&xeU I3C,=,E$Q(/(" !%&{({K]23Lp/8B*5G# "fX '&,#. '7'.+'675!5!##9V$ %9!~A3{({I@>e X,X.6b++33, . %'7%.'77.+'675!5!##`:,n69!~A3H''%{({&Q . I7 .6b++33$X,W.=A'&54632>32'654&#"#5&#"#".5473263254#"753$i.$. +"0$"531;V$6 ()R 3)%Cͫ #3g;- 9+#B2* "2+)A(2  /H33g/2#".'73254'#5>54&#"3&54>5e"4YJ.PDM0(Wp2 88-F )2]$5)g9)327B%AYC) 1%'4N!1 a,"2#".'732654&#"&546s0A\G+N8,3 2L*+>*+3,M9AM*?L?DN64*!.BaR*%&54632#5&#"#"&5473263254#"]*34'2  )M.,#1',7)^6&)# C4$6 3+"(= *%&54632#5&#"#"&5473763254#"f1<31; :I,8'/='$C 2f142*W.2: ;(10I <.#4'!5!##".#"&54>323>$k>j6:D  ))&)H2 >33-&"E,, !2% ,,R&#"&546323#YId6(KE#3M.33e7 /J'69:~'.#'673#bF(B,D<Md33 ) 2L/0/N0!'56753#5.'I"5v0{33  !&, )L!!n?.'25#"&54632"2?#5&#""547326!'# '4##>U$-- ]_sX'. 0',/#Fk'.##"&54732?6323#R    %,1D.*"$ B 33`   O90% %(1  }*"463263253#4&#."##"K'3' (32-+F% .BX=0e7- C",/P#".'732654'""""'732654&'.#"632'>54##"&54632&25F43aF83 T$   #7$%%*+3 < G#&5Y2 !#@:WfXq# -(>IL. ".B  !J)cr23####5.#"#"&547326324&#"327#"'#"'7;>54&#"56;26354&#"&5463.#"B4]XGJJ33E  YM.EF 2 56P%!, <" 4#I5N6?HHiϑf,[TMG )7eE3b5)W6), .<) +Ms/6 +:')-1=8k_  $z"$%HSu$#!.'26=33265#5!##"'67%30" C3X 64YA &)+""*2 FHm33:Q'P w.5%25!32>3247#5!##"'6732>54#"#".M,/'04?;mwXbpYB2 &@28K %'3:P%7(/(D4=?S633]dP$CJV?@ ;.$/726=&#"&46325!5!##"'>73265(<6!(8)5<;X65YB %0"B3\(evR3L33:Q'P*2 GG:.>I%26=4&#"4&#;27#"&46326325!5!##"'7673265M%@'." 0&;GG;1.+&SW 64YB & {0"C2)+Y&&3))90QR0+ 33:Q'P  q*2 GGmEP%26=4&#"327#"'#"'7;>54&#"56;263533##"'673265P%P%!, <" 4#I5N3X 64YB &0"C2)+s/6 +:')-1=8k_  $W3:Q'P q*2 GGm. (,7%5./67'&'#5!##"'?3265&'533265 ,$<!!E7.(X 74YA '(90`G8p3/#C30.,8(33;Q'P ' 3$  \g|+2FHJ.1;H%26=#".'#"&'6?32654'4'#5!##"'>?3254'"'33265Z%4 "<8  $W 65YB G8$=90"C2\+ (3  @*33:Q'P$H8$*4DJ:.-6A%26=.#"#"'73267.'5#5!##"'?632533265U% :(20A,- B_8X 64YA  @5"'230"C3*,N4?4j" EK7"33;Q'P 84Eq*2 GHl^.4#"'&/32>54&#"&54632326=!5!# 65.#Y&_:&: M$B0d/6l8 C3wWt;Q' [p!H9!(# $<#$*9+KZ9D-GH33K.+%>54#"#".547#5!!32>327028K %';m-/'04?  KAhV?@ ;)T622S%7(/(D4+'#I$923#32654'7#"&54>54#!5!4#"#"&547326E5g~2HH28,u#218#9+01S1'$T>CL3F31B 6 5c"274'7&'#"&5463267&#"5 2  "(0M9<("/"& " $-"BA99:Q. $#"./&'73274#"3"5462%5!K*) "  -6 *>0F-$96G 4 3X'$;(:33.7&=47'6753S/c F@m1T d! 3f33.'6325#.'5#5!##5.#"#"'7326!)*03U/+4/"*)6% &9i;(33bA,4,Z 9 a.$6325.'5#5!##5.#"#"'7326`# #$I'o3)!("+ 0/gn+33<699I *Q."632.#"#"'73267.'5#5!#!)/"*)6%&3U/b9RA,4,ZB9;(33 "8e'^x1Ce'#5373264'7#"'&546;5!5!##"_SS);5EC96LxSkEI]Jl$ O)C$3n'1*iR^FI\Ie}II#F%"3267#"&5467'#5'%&'"'>325!5!'&54>32'"!!7'432+M(!'88OCF5(H+b"+SG?*.,8)D $Q|B-&#=8N50C )=ϛ9lM7 SDFH9H5$2 ; % JWH5J* -D_%"3267#"32>7#".547&5467'#5'%&'"'>325!5!'&54>32'"!!7'432+M  "88O#7( &)B=<& +5(H+b"+RH?*.+8)D $Q|B-& =8% <*7#5$%>0C )=ϛ9lM7 SCGH9H5$2 ; % JWH5J* -iL#53&54632'""#"&546;5!5!##"32632.'"'46322674&aaXN4*D!$R*O -s ZG i"0d-'D",,  )NZkM62 ;# F_v4`IIP; ,R?8"-[  8+|KZt#532653#"&53#'7DD%!'/D31E, $K=Ar$2??2 ;UG#532653"&53###53'73CC%-/FbE-4 MHM==Y@r$3?A1%H:L,043###53%7'7&54>212653"&537#533'=R7LMGM31c>L!&!-/FbE-3;CC'e%>BUHH7#*$3?A1%2@>5LJ'+'"#&'#%7'7&54>322653#"&537#53=D $R:- ?1c>O,7+,/D31E-*DCC$ %IY>J7#%1 $2??2&2@&Kk%#532653#"&53&54>32&'"7DD%!'/E21F- $wY 1#*4 #*(@r$2?@1 ZsI, : & #T*e'oE] e *@#53'3.547#5!##"&54654&#"&5475!"327"2USS W*8#P @cs6Ua."MV#C"$!?Q|Z)O R_5<IIp5(DwM-iOMOaEptKO%tQ&37#"32>7#".'47&543254&#".54oF: K?184H&#1! #3;=8( &)D<9%:/\"8p'@43F>7^HH8v#  L2' <*7#+=h=.Ma;"R"0'>aW<D23275#53###"'3274'4632.'#".547&54632'4#"6*SFeFGKNF>&)b  *&2@,61/eAH5=DG:587x%zHHO /O"* )-.4!@*HC1C3;C/59'1&"W8<463!5#53##!"32?2'#"54632327654#""&%!5!+/MMI{@D!'5$a5{w&'; 0!7kEy]HHr63, $X,tB .# rHg%.547#5!5#!5!53###"=[PMBMI)6T8 M84HoHGa4($w.Xg!5!53##5'%&'"'>325#vvNG+b"+,MHG՜9lM7 Se2;463273267#5!##5#"&547'7''67.74#"6dA58GF\S*#: ^(FG"`/6A)P"U&-8.$10880D4J'?9;8,X5EHHm38B6&"UAx7'9 D* ++(xe"+4>3275#53##5'7''67&74#"6w*27GE32&#"4#"6v AMFI   .9'M= B -=*27GEd'-#*,1*9- 1Z"HHC  >*Z.+  9F;7&29/E3EF1"%2++ * e-#53'-32654.'5!5!5!####".5 >>-"C =  GG# :(:i<#D8Y!$%# qHHc(6./XrX e13275#"&'5#5!!632'>54&#"#5'%p;,78jKe)E@(C 8>E!S3   G,!;I"//U@HHA5E "pB.k.'&  7"e153275#"&'5#5!!632'>54&#"#5'%#53p;,78jKe)E@(C vE!S1   G,!",III"//U@HHA5E U.k.(%  7HEe7275#"&'5#5!##5'%5;4;/Ke)GG-")7"/GU@HHだ7&e&.##'7&#"#"'.'732=!5!25!6FG2ZI% A2 4_%11 @_9 G<Cl75M $/Ju&58%X!',(.H24eoe,!632'654&#"#"'.'732=!5!o#)<\8/7X1 ,+ ?- 41%,8M9 G<oqS84X/1K=&',+5(6!N$p',(.He=#"'.'732=!5!!3632'>74&#".547B; /[,11 @_9 G<z$:\B=.!)2IBq158%X!',(.HHmUbk' !,'N$0>Z*e;7267!5!!632'>54&#"#5#"&54?.54672'&#""H8H6ZwC!Q/4FG% q@/.XEJ',06*HHNX<]|/g0 ,tM? A )M+Ab N 4$'<e"L"&54?&'&5732=#5!##5#"'32675#"&54>32&'"32675^pR\; .-MG  O% 5W4%+7C;L"2*6K( Aq?*$!< ","-HHx + 4='A#31D8&8 E4 "?e #7"&'47%.547#5!##5#".547"327!;p%<D?FG=K:0G 8,)Sx'#K)G>)OM? A5&HH # 0%: '#NI]e,0747#5!#32675!5!##5#"&'4?#"&75CaW%;(3f#0]FG py3N5C;GGQW@HHzM !>*:A Ue.7267!5!#632&#"#5#"'&5467672'&#""HF7D")4FGI*?36-DJ')?*HHMX t#-1B$B1 N  #&9*qe<#"&54>32&'"3267#".'&57326=#5!!#3267q7C;L"2*6K2 A?7^@7#; .J65W4&+1D8&8 E3#"<#4QJ0; ","HH224='@$e##"'&54735#5!L!45'9456Hye'"32767#".547.547#5!#; 8+'6J8yM0G 6,*Dd'#K)B'%%TF 0%:- R!&HHIze!5!47#5!#32767#"'&}CaW%;&039$ ~>4'&HC;GGQ*.I{Q"!e-32654/5!5!5!##5#"&'47%5##"'&5c = **GG&p # 9(`Y!0>7 qHH]N?=*(6//@t&e!5!32654.'5!##"'&5, =   #C4`HY!$%# H(6"=3?ze=72654#"#"&546;5!5!##"263227*"'&'"'4632)M#K,p#\@(W%4 &`+Mh!)'S6+3.^HHJ'Qz+N?-oX"Pe,!5!632327#".'#"'&'7232654&#"BG+FU!"#   bG47'2/V(469/3H$IMLF[&9/=,/H (e'463!5!5!###"&'4?5#""'&).8 f(GG]& r!M?1L\>1HfHH,@ ?)_@^O4^s)e@%2>75#53##57#"&'4?#".'3254&#"37".54632)+8=eGG32#ry3bA(*-7)B:-= U9HZ- 8(HH*OM= ?) :.CG x*5-/C&#0=`DAe/46;5!5!##"34'432#'#"&'4?".)B4G)B+ N_ rFl>& -=U^HH+ B001c9>6?) e(92'CgG"&'4?#".547.54632#4.#"6;"3275#53##57p+.,@ 5,3K)-EH  #(6"9.Cs`FG&&I G=)J.% 21T)1GI& ',$DRoHH##OMje ##"&=#5!26=#j#P>H iH&GV s.e7#53!5!463!##"&eek>H i.cH&GV sJe27#"&=#5!#>5*FKf6;;X*U@HH"/1e 7"&=#5!#632&#"#5'3275#Kf)GD/43G.;,78U@HH>L &/""//uXe%!5!0#"&54632&#">7'27'R EgYCJ9!  8+&HDZGEc N},4s)e$#534&'46323##"&546;54#"11 J2#$_ (+0H' 38 *Ga o !2. "qe46;5#5!#3##"'& (\|/0% HHGO7:e327#"&'22654'#5!#=6 <'RI>Q^~)57Cl'/W!)Ud7v`,"6$HH+e 7275#"&'5#5!##5#"&'4?;4;/Jf)GG%r7"/GU@HHN?@)[e43275#"&'5#5!!632'>54&"#5#"&'47%5p;,78jJf)E@(C vE T7.GG r .I"//U@HHA5E U.h1)$>vM6?) "e !5!".54632>7"'67&'"Zʏ4$JN9aJX@%<+)g A 1*+HH:=(Ad2E]F%Gj4!+.+Fbe.:!5!>32#"'#"&5463232>54&#"#.#"32>N'ER ?,\&'^ESXEVO:* #0  G3(SS( H"/aR;:$W\gSJi'L% <:  )@js+be2>#53!5!>32#"'#"&5463232>54&#"#.#"32>#bbN'ER?,\&'^ESXEVO:* "1  G3(SS( CYH"/aR;:$W\gSKh'L% =9  )@js+uXe!5!267#"&54632'&#"3'R (+0EgYCJ')?HW/UZGEc N  #&9e)#%72>7#".5467#5!&#"32>V+wN0,.'N>27+)_nB&' 6DT24'B,) /* HHLL&0  Je 7"&=#53#'327'Kf)u*;,<$ǥU@HH{*"/)e "'&/732=!5!#3#B#D"D1V[9 F<J*0S& 5U',(.HHGQe-3!!3. 54>7.543!5!5!#!"w+zC0E<5#%" 'Q32"&'46?&/"'"#".#&}}]\#9,06 p%?$ */$H 9@;l8/oI D!21 e-%'32##5#"&'4?#"&54632&#"?!5!7+"FG&rEcZB G9!  s*7U]E?>) Kf=Ec M} H2e<4&'463235#53##5#"&'47%5##"&546;54#" J20"eFG  p_ (,1 ' 390HHI   >( ~(a o 2.e $"&'47%46;5#5!####"&%5#r & (\FH_^3@)NN?X HHOnFe+##5#"&'4?#"&54632'&#"327!5!FG&rEcYC G'& :,C;]E??) Jf=Fb M  +6;Hbh 94#">"&'47%.''7&547>325#53##59.5 8q 4u.C$ 11"%:d\MFG&(#'    ?*Q H9c4B3 +7>.HHM@ e8ES2675!5!!632'>54&#"#5#"&547&54672&#"%654.#"6322675"'#G9G9W54vC"P-!5EG1MFg87XD 7+6&370"! 5E7C#G-N2$HHoGP58C):Xm+[,&hi0W9:>*A:[ F.$'/8' h}G$- ,"09yeZ#533254#"#"&546;5!5!##3262632#'2674'"#5#"&54632&#"3275.'7xOO`1o 7"4v%Iyz'<U8&W=%<3HP:.49CG40;J^&" 21200aP41MKV NISd+ ^HHK5?Q R%=*] T,# (  7K'SHH$%eP!/AYW$3X24F# ]&c6:'" 9 nxe48%#"'#"&54735&'73274&#"#"'&546;5!5!#!2632##53G@+'j&:f(0ig J*/41Gki6T :#HOOq 6lU.;6{.#-19+ZHHIsKmxe5H#53%46;5!5!#!2632#5#"'&'47.547&'73254'"#"&"3275#"';xOO=1Gki6 U ;"H|>E4$%/40ih!J-`o<O~e:%4'5%5#"'#"'732654#"'6323275!5!##5#"'732FP("^B_e/`036e-0U%3 O[JPQ5+7-u7"GH HHi+*4D81889e1H"34'432#'#"&547#"&546?&546;5!5!#32?3267'"'A(C#+J`%wDG< ,L6'5B4sG>E-BGS" "7\-B Ex*!B)0o%JhJ0!G1,T=U^HH< %*1 + dS0f&e0747&54;5!5!##"632&#"327432'#"M"FdK( # ##+?K A %;?F('(<\THH ' J)IJ31g#y)}eQ"34'432#'#".547".54632'&#"3>33267'".546;5!5!#O(B+ ')Ta&' %P:A-< > l ;.;^. Xz:A6u<x*!B/0"TY7 0!%H*.@#&;  +L@,eo &A>#327'".546;5!5!# (B+ 13Z&.:r";",A  /'8FXz;A6=KAx*!B00"TXQ_N +# a' "3 1ua%&@>$f7* !>^HHi fe.7"&547&546;5!5!##57##"672'"327FZLMLVGGMe -EFd/)G\#F95O6(^HH=25# HD$;e'3"34'432#'#"&547&546;5!5!#'&#"326)B+ 11S H<;F/B4G"$'$&/%<x+ B00[\3T.A(,=U^HH{N#%.8,e0##"327#"327#".546;5&'&5476;5!5!,x(5]1A).+2]1AVu=uN`9,jIM315,#Y:3'!Z;3N(L/3Q:./D7(&^H9,eA4>;5#".546;5!5!##"327#"32674.'7#"&)'91 ;oFa8,x(5]1A MUUPJ;9 EV2Y%#5 A+L+5P^HH#Y:39*. + +8Y9eP4>;5!5!##"32674.'7#"32674.'7#"&54>;5"".)(;/h!&P5 9$%DUJ;9 CY1Y'91DU:B%5 ^HHX ,%%;!9X + )8YI#5 M Fnke4%#"'#"&54735&'73254&#"#"'&546;5!5!#!2632#G@+'j&:f(0ih J*/41Gki6T :#Hq 6lU.;6{.#-19+ZHHIs9VeT3254#""&546;5!5!##3262#"'323762#"'732654#""&547&'7Y`1o=4v%IVW'<U8&iO7:IM8& 'C)1`1/@=4vaC1B NISd+ ^HHK5>]A5'1( NI4, f-8Y 9VeNW46;5!5!##32?62#"&54632#"&546;5#"&'732654#""&>54#".IVW M8&1Yb@G(1JfL\SB#\R1`1:5=5u*1-XHH   5:'A2? $*.<'/BqR6D'j\  NI#N)#!e7!3##"&'4?35#3.54>7&43!5!5!###!"w(  \#B>Y5+A"DQ7"'4?&#"I,6!5J#9,4)8U=XK  $dAJz(y)=B0S:J5  "U 6 2% > )(&- ?#56#5j5:J;)^H)4s8$:Y-@P? ?_.0ieIR#!"632'654&#"#"&'#"&54>7467.546;5!5!&'26I,6!cL :-0:8U;XI  ^%A#7T  $FW+A? > L5  - #> $6 6"$!#PH! ?!#;)^H /6!:9e.7##5'7&'"'67&#""#"'&/732=!5!!632FG5DZCJ[  A2 "D!1V[9 G<Dl鱉) J N$/0S& 5U',(.HeVT+e=2>7#".5467&'&'&'".546;5!5!##"34'432#" '*E*Q=D7 Xz:B4G)B+GTD6 <*?+:E $ &A>#=U^HH+ B008U;6$  8e#5327#"'&'515%1D!A<HH Eye+!5!47#5!#3267#"&'#"&%#327>cCzW&:&6j |>+B ZK1O\%;&03()HC;GG R`@{R*E@Q*"Qe-5#%##5#"&54?#''&/732=!5!5FGB%t#D4_%1U\9 G<l @ ?) S%*Iu'5U',(.H4Z"#&54>323###53654'.#"\H' / )R=*MMHMOJ#!$f#A,0/FN!HH &/D5":\E$.#"#.54>323###5H8K 0 !H"E/AnIMMHMeDi"!,  32:MIHHI13###53654'.#"#.547632&54632&#"}MMHMPJ# 3J,$2j P7$0 6-A HH &.E.:&<#J&F 67 ;Pj+.#"#&54>32&54632'"3###5W8Ye+7E"I 55[>4[: D $QMHMg0A)>,.!$+? l=E558 ; $F\GG4R6#5357#"'&'76#&54676323###53654'.#"AA>(M P#323###5BBN(M :%#8K 0 !H"E/?nJMMHM"WdxE"3(&YDi"!, 32;MHHH9^%&#"3###53&54>32r!/ SMHMK &@)-%+*((a((-HH//2% '/2h#4'&#3###53&5467632O8FFSMHMKA7,06s^Y:f/O3(HH#(7^':J<f#'&#"3###53&5467632`tޝN=DSMHMK9>DSCfI "I'HH)1X)X5=2327#"'3274'4632.'#"&547&54632'4#"6*TIONF>bc  &2A- 9@UeBD9 '/;597(O >+O"',. /UEIC1C.@+7N&1"  e1!5!463!!"32?2'#"5463232>54#"".Ep&y>D!'a5{w&B 3/ .!0O$HG5 4+j!X+tC )#FL e!5!.547#5!#"B[P)6T8HM84HH4(#x.:e!5!'%&'"'>32vvR+bOJ+SLHt9m&'7 SCO#La(14632732?#"&547'7''6?&74#"6J-8FF\S*!:)D9"_/4D(OEU.7V<9,!1809/C4J'@96<-JCj38B4&%VAy6")9-:,,, +Ke"46327'7''6?.74#"6eA57HF<(ـHU.6U8. 10880D4j Q7^HH #v# L / h>-=''%|-Gm8Kk#53/"#'&54>32QQE #*(:+.)*+I< & #T*;I4* e37".547.543!5!5!#!"632'674''7&#"pw%1:<-@,:=9*@!>?&R9A<:-4;0(@c3;7M <^HH 9!B-WO+::(,"&Kk&54>32&'"Y 1#*4 #*(KsI, : & #T*!.#'#73^{aCҔ Q ###53'#532673#"&53MGN8YY1+5=]BC[<+(HV.*CTVA!, M '7###53[TZpMHM\T\H&547632&'"###53KX($9%0 $SVMHMfpI1 ; % JXIH'?'"#'&54>32###53C32&'"3###53654&#"#&eOJ= I/&4AMMHMOR= / /N)0W,(( ; I>%HH >N+;4 {1#534>32>32&'"3###53654&#"#& QQ%K2J= H.&0AOOGMPR= / /M)J)(0 ,)' ; I B%HH@L+;4|Kt#53#'7``FK=[;|K(t'"#'&54>32#'7(D $R9,-,7)tK=% % IY;H5$2 ;|K*t#53/"#'&547632#'7*QQC!%S9+*%$8%qK=K+ $G\:B=2 ;LL #53#%7'7``Z?1c>[ޚ7#LL='"#&'#%7'7&547632=DD3:+ !?1c>W %%8%$ Io5L7#"2 LL=#53#%7'7&54637"#/=bb?1c>MK&II2 ) :+[њ7#:B: Ca2 U&54>32'"###53'73Y 0$,C!%TMHM==YhsH + ;$H]KH:,!###53%7'7&547632&'"#&'MHMB1d>F '$:$5 $R9*(H7#1 ; % IY5.cLP"%#53'"3###53%7'7&54>7633'PRPI4 LMGM31c>L$%@'Lm CAVHH7#157eI##"327#'#7.547#'"'.'732=!5!#3>;5!5!x)4+?8^/BGb^{`4=.#D/[,13"BZ9 G<UN2,J'-E#S)bӓ&2P1%*Bq15;)Y#',(.HH=5LmHD #53/"3###53'73'&54>32PPD $P%MHM3=+-,8(I, $ HZHH:9I4%1 _g14>325#!5!53##5"&'46?&/"'"#".#&(]\#9,01M}NG p%?$ */$| 9:HGi8/oI D!21  e<'3#5346;5!5!##3>32#".573254#""&WESS31> !& +'+#9=!4lRB$3=Wk'q H6y!BO# `II.3 I 4M'6MQ7.OS@p"#8e '346;5!5!##"327#"'&p Vg68z)5,@7_3DV{jMN!MmpIIL(0I#V*tGGe*'33254'7#"'.5476;5!5!##"M VV(2&96LxSkE102Fl$ !%;#j7'1*iR^F]4B52}II#ce5'346;5!5!##32?2#".573254#""& W{1>cY+R5+#9=!3mQC$3?Wj&q H6y!"!`II;5I 4M'6MQ7.PS@p"e*3'34>;5!5!##"&'4632#"'&>74#" VA+m)2YM>4#5 #:<hSR>&2."7@,hII>.?i%/5A-% )B)93e37267!5!!632'>54&#"#5'7.547672'&#""H8H6ZwC!Q/4FG-5?+-DJ')?*HHNX<]|/h0!+t9TY6@01 N  #&9ze(E%5#"&54>32&'"32675!#'326#".5732=#5!##5'l4A;L"3(6K)<'! 6V4&+n,8bD7" ; .-GG,1,D8(9 E4 ɘ* 4=':H"(?NKB$","-HH'9e##5'%##"'&54735#5!GG,!45'9韓8'456H?e*"327!;'.547#5!##5'%#".548,)Sx,JK),*D?FG-"sO/<)B'#N$&-I! R!&HHc8C 8&:4{e>#53#'#7.'73254#""&546;5!5!##327>32{PPL/1 ^{_-]E91W@oK6t%I{|' *%*6M0E&֓ :GG0.&zLm"8'^HH;2 H]e!%747#5!#327675!5!##5'7#"&!75CaW%;&88-0]FG,603N $ C;GGQ4+8HH{7~A 7te(G"327.54>75!"327654&#"%.547#5!##'#7.54-(1"xW6"C !,6)8"Mt| fK`^{a@Y* .o3+('* pO7a9A@]49HHm (|ZAԓ`LJe$%'-32654/5!5!5!####"'&5 -"C = **GG# :(`8Y!0>7 qHHd(6./?ze.@72674#"#"&546;5!5!##5'7/"'46327675##"3237632)L#K,p#FG-] `+.9N!)'`>E:'%S6+3.^HH鎦9 !z+N?.PX" 0ۥK e0%'-6323275!5!##5#"'#"'&'7232654&#",!hG+FU!$FH 2 bG56'2/V(469/3n9$IMHHIX&9/=,/H 7,e%##"327#'#7&'.5476;5!5!,x"-,@6^0AFb^{`N=4,/?,1/.G!S)aӓ 8]6A8>mH9e*#'#73"3254'7#"'.5476;5!5!#^{`Er%0':275ItQgF000EhǓK?",C!f6'0(hO]E^1A12yHH-Ve<#'#737#".'73254'"#"&546;5!5!##32>72K^{`C'3.2hOA#1W@oB6t%IVW'>,Ӕر(?& 5JO6.&zLm8%^HH% D- e+4#'#734>;5!5!##".547632#"'&>74#" ]{aD?* k(2UM)$1ObPgPQ6(1-Ӕ5@-fHH=,=g 17E5CNJKM#:31Re%'%####"&=#5!26=#-"GG}P325#!5!3XNG+bOJ+,MvМ9m&'7 SH)e36%2>75#53##7'7#".'3254&#"37".5463275)+8=eGG,894cA(*-6*B:-= U9G[-+ 8(HH}8|.DF x*5-/C&#0=aCA e'46;5!5!##"34'432#''%".)B4G)B+2_ ,Xz:-=U^HH+ B00V<9&A>g=%5#"&54>7.54632#54'"#"6;"3275#53##5' d//GM   -3K)-EH&9*5"B$Fo^FH- ?N3   U(2FI&#"P DRoHHs8,e%'-463!5!5!####"&,!Db,GGh8l&HHGV se%%'32##5'%#"&54632&#"?!5!7+"FG-V,EcZB G9!  s*7UX81f=Ga M} H <e+4&'463235#53##5'%5##"&546;54&#" J20"eFH+ ^ '0,380HHl8Ia o .,e$5#46;5#5!##5'%5##"&lɕ (\FH-_S. HH醞9/One-32>75#22654'#5!##5'%5#"&=6 >) ')57FI-!:P^~/W+   +t,"6$HHc8 3ve#"'&''7&'732=!5!#\I6 %18<,9 G<L1A858M8',(.HHe(".54632675!5!##5'75'4?&'"p4$JN9`KX@CD GG-/^ A 1*+H:=(Ac3E]FAxHHc9{Rp)!.+eG4#"6&'&547''6?.54632632'>54&#"'67&'"8.$1mL.=HV-6UA58GF] 57#4 )% 6),Y84(+++(}3PS?+ $)9,*089/D4G )% ; " #+R ' ;&= $i%.327'"&'5#535!##"327#"'&'#>;5p<+>"jJf),w*165G^1ARzgL6' uG,>#-)U@GGA/I.1T)rF2B!|-;ng+2327'"&'5#5%!##"32654'7#"'&'6;5p;,<$jJf) h%0';2DA75JuQiD)' 1`="/)U@HG@",C!258$1)hP[D(@{Vz7$h6#>;5327'"&'5#535!##"327##'#7.'uG, ;,<$jJf),w(4,@4]2A!S) ^{`Pv(!-( b@^O4^s`1HGO-? Ee/574>7&43!5!5!#!"!###"&=.5#2)DQ7&43!5!5!#!"!#5#"&5432&#"32675#.)DQ3m=1/"-P01FT?.le #'".547&=#5'l  (:FM; .j VL   * 5:f,DON Ee1"&'4?!3.54>7&43!5!5!#!"!#5\rBr%53H DQ?5#3.54>7&43!5!5!#!"w(  \  $Bl+52H!DQ5 B^HHNe277'7#"&=#5!#>5. Kf6;;WOTbU@HH"/e:#53%#5346;5!5!##32>32#".573254#""&SSSS31>+=,+":=!4lRB$3?Xj%q H6yOO# `II;5 I 4L(6MQ7.PS@p"e'^]e'^9J#8e'o8 $e.#53'33264'7#"'.5476;5!5!##"USS VV(2&FB96LxSkE102Fl$ O!%;#3n'1*iR^F]4B52}II#ce:#53'346;5!5!##32>72#".57254#""&SS W{2>cY+?,+"9="4lRB$3>Wj'q H6yO!"!`II;5I 4M'6MQ7.NS@p"e.7#53'34>;5!5!##"&'4632#"'&>74#"SS VA+m)2YM>4$6 #9=hSR>&2.2O"7@,hII>.?i%/5A-% (= LLP);31%e'o e'oE e >#53'3#5346;5!5!##32>72#".573254#""&SS W`SS31>+=.+":=!4lRB$3@Xi%q H6yO!BO# `II;5I 3L(6MQ7.PS@p"$i )2327''3%"&'5#535!##"327#"'&'#>;5p<+>"@ WJf),w*165G^1ARzgL6' uG,>#-)Y!ͺU@GGA/I.1T)rF2B!|-;ng /8327''3%"&'5#5%!##"32654'7#"'&'676;5p;,<$@ WJf) h%0';2DA75JuQiD)' .G="/)Z!͹U@HG@",C!258$1)hP[D(@{1zEe39'3%4>7&5463!5!5!#!"!###"&=3.5#2 WD'*7&5463!5!5!#!"!#5 WrBr%53H D'*7&43!5!5!#!"!#5#"&54;#"'"32675#3. WDQ3m=1/"Uw1FT?1e$7#537"&=#5!#632&#"#5'3275#eeKf)GD/43G.;,78.cCU@HH>L &/""//&e%7#53!5!32654.'5!##"&'&5ee, =   # :(Eq0cHY!$%# H(6./ln?L)4>32&#"3!##"'73274&#'7&E!89!m5#73267#"&547.54632&#";#"u2:!8{7pS7#".'#732654+732k 69 j.wv21M* 8!*K9NO,?!eDh1&>!S'%+"'>74.'32>5"#".54632632&#"51k?Y"'    .8&UD(Q:/3l(1 -PF5(@XY'"%._"I1M^*:<(QPE75"&/73>54&#"#"'532>7'&#"7637632&   3*,937#"327.!/:*7B}$pp-H(UD9$UUk)7"&54637654&#"#&54632&#7>7i-C8^)3-_2W?ZPTI%"F2*3q SaQ  G$/3*1A\=EQ4>`B%'7267'.547&547654';#"-R:Df`g~Z!H4|{JGMGoC KAB(5OK  ! )QJ&Gm'463!##".%&#"7>^E; ]J >;$BXL&ARR.5C7'&''7&{>Jb&8\%U%;<|Y%OF L)*- NI_$7= : 7G(#3 gl:6$ %+-F4726=33#'&54>32&'".9lrqoY/STC^7P* It &74354.'.54>323#"&V(#-,%PK"4FA!@uih6L@_<" /9--+C>a;&TB:U++0 HI4&#"56323##"&543x '5"|ih;+5-`>*!V qeU#(:%_%%267#"&=46;265&+732"&#"4w UXq ]!(AW8Dx(  "(\2d8{Y';RT=~  %#574632&#"32>7#"'&Vj)0$31315(]GGQ)h O $G16K$ U JM$"&54>32&#>546;&#"a.0  e2PMY2KU!tFf3 K )<*X^kj$)}]74632&+3267#".nY+, 53(W UU4=,PaM.9i+`= -O/#.'&+'32>7'&'767+.54>32m`5f~638. '1#P 1%(:I;G)%HE*6Tb g5(U S 9'#A (? >2.:'K,%"&5754+73'3267'Nn-T|-%9O,^5R#"'-&23##;#"/#73265.+5%0"j6b- %D/, 5%+NH_R0R.!!(R&632&#";#"&".546776770&:[/$IcW~@$i;nU+/3Cb Q@$GP*DF$%DK=H \q34323#32?672'#"54>7654&#"#&dWtIFB ,?GLE6Fn",>;\#xG.K&)!K%;( 3 ]0}2>%&!#$".547#'!#"327<$DD2 vʐK@L\( +G.i1SSL4 2KV27'75.''4>)C& GM 5= );,>I3#ZKuCq +5&U -+7265'.54323265'.5467%&'&#"\5+4 B"+53n88/1(:'Lo+#,1/ WqK>c?,$ D.3 y     1<+f8$%= CE\"4632'%''7"&7"3654@cOPn[N4BQ$> Iy5GL4&#"5632#"'7326 '%'9BG 18D_-~BS&F<7;0H V $><#n3N8wRc$7"767'63.547.54>32&#";I+MPr* ^MS<%>>!d-*,H|?9 DeU:C2A)8%$5 S6?N +3267'7.'#732>54+732k 69 p)t+X 8% K9NV,?!`4 SS) D>S :SL'46327#"'767''74&#"327#"H9Aw4;(\ 6qPx-$ld5FYS F'-6Ls,>//P*? +77>7'7&'4637654&##&54632&#sE3*4o )-C8^)3-_2W?75 SJ%"4>TFM  G#03 )1A!?,EP/';#"3267'7&=47.547654'y8|{JG5,4s`+<~Z(0(s$QJ&HfE5)aA)H(J %'463!##"& '%'.#"76[H; ^JdX9%!X'&6@PM-5BX}Jo,"H#27'7'7654&+7h9gv5ɓ +,/O2U[Hgy R326=33##"'4632&#"'%il/8lnmm]\I+-+NX8(z5)ISQYTf JP'+74354&'.54>323##"&'%V4',.OC1PR+6?+ih7'&>+;%_;' .:->z ,?Lp9?*:U),/ewEp J23##"&54354&#"56'%fE6ih;-5,` #1 988fU#'9&^9)!V -eF]87265&+532632'74.#"+;#"./#5$1V2H 3",>>B;.I2dQ n (5( RR/-HO>]i<; ;J]R R 72#"&54626546;#"#"'47&546;#";#" !'H9$a( {^EBNW85*(.&`)%t^:IW);&#"3674&+'32654&+5322%,#'9[2! .LK( ,D?D~'XZ&%b1B> %!)#+5&DEa/Z;L@L$+T' QJ5h !GU @2#"&5464+532#"&54632#4'&#"3267'&+'32!!#G`0A9^֍nLS^&HF*9%7H 3XVG,&,$-g?QJ59FcFVdPCj`G:EM!?, #,& ,R?H&5432&"72#"&'73265&'#"&'73254''7&54>32.#"KR?&r&< ~W1n8$@$0b[fi=r Mc*^SE @0f B`3,@aM "Ge&&R+#M. E=R9;*=BW16I33#'P=,.+%2654&''7'7"&54>32&#"%2#"&'71>2RAbZ74.#"326?#"&UC,X?3ch  i) *B`'"  * FX>M^(:=*  *%ZYY2)&  _d0F265#"&'>74.#"327"&54>3273#".53Og ! .7?X8ZL A.H91q*OVO{J/hzpXJ b   F:0DUU@ I @F+-(9;)>'SM1)?TQ*a'46327#"'767''74&#"327#"H9Aw4;(\ 6qPx-$ld5FYS F'-6Ls,>//P*? @%2>54''7&#"#"'532>7'.#"763>32653#"'5"-H*"K9;T*=."3 5-.<'$6;'&-t'F!B-%,%4="9"6]HKV'&;.@BRW H 8 Cy#CA( R F<"&5467654'#"&54>7654&#"763"267#"3267zkbfg &y'{m3PIB765.#"76;#3272>54.##l+e#HYA=1?(Xk"A?[8M3H2:@%Uk:-"b5Nn5/3' 97! *D=2D@A1(5 8%i! Q8 'P:1''3JO     "!G4BO4>32&#"#"'#".5463&'67&5463&2654.'3254&'&'"I 74a>6Si2gJ$ l1PP*Fh4]&  uH! HK.)^"6Qd\C0U>).'I)g**  c(; ,,,< 2F)9" 4%!,@  #FP".5467&'73767'.'"#&'7632&#"#"'+.'732654#"*L@ 211o2MU .=?$n?+51=4cJ3-#"H3 ' bUO  :"%  #BQ1J#,FJ4#"#"'7>72.#"32#"32?&5432#"&54325&'&'7326S 5 (M2s ^hnhZ& OQIHL=9KGidGf0n4[D0_  L* ?() #,,!(  RAyPC{  BH1L37&54>367'.#3327&54;'&'#',*=#6&f)TD 4J6%'+.5467"&54>32&+;#"7674&5472 NZ<'$ ^y((=*S:m08 , *B$ I#'A7y' gTK:*-* S; I=#"D S)HO73267".54?654;7632#'&/#"&5467#".467327"&+*i .4'Q%# k'rL:J N-%5B W' >Co1YV +5%<.;*O ,, =#1I(G) )*(' Q(9,N2"+>1d+HNGN7< 8LI <54-<>@\4%&'#"&547327.54?65&/33274632NB')Q1\aN?2L>w *HG*g6e(AQp &2U,4~T) фyYn5645=JS!C.q( (:D;27c50"3%2#"'#'&'732>7'&''7'7&54632&5l% /bzbiHCT[219 )]Sj NKX.`E 'XT2GL{3@* ,$s0W3b@*BJ0%4#";!"/#53265&+7!2632#"'532kp(!/gK - (U/;j7Y/4 97!K>#?++[R0R,$LR:?!1`BNU O e=3632&'#327#".'#;!"&/#53265&+72;(@$tJr/PK@!  !)(2&N3iN (T/<k?)Nu/  E 8&([  RR,$LR2,%2#73267'.+532654&+5>;8GDPNSZV-"".1:g.u cp 6I4)CzG9[;(U%&V H?! 277>7'7.5467&+9E&9 ,3 iV04341 ZS= $C*Q]M.[$.%2>5#"&467''7&54>32#67>54#"(c>xjGT<,X.m?M-WtlR@--(")P#/9@{`;pJ 9fZ;.=*5H<$C1 K+O- :"6b#+"327#"&547&54672.#"#5'7.?.2v4^n=WTD39Bh7 <Lz>*65N b\Q sA%#"&546354#"327#"&54>7"&56732&#";233#5#>61'0-%;= A"$C!B.8 17)@[%E' oo$!7")2$4L'Wv6++ ,`J*$! J&$ koO472&#"#32327653#'#"&546;254+27#".54>3.jd 68 '#$TV,83#@;.mm]1Mb3L_FRg`= "0X[C*+;3UJ G*& !2( (i$]I#,*YG^oH'=fA7]4*I" <2654&#"'&/#67#"&54?''7&54>32E% =!B= Hp]15L?ARpƨBd%M36P%c$%2.!' -6$1K#4P6I!,B U>_+M6YT.9@ $)!0&3 &84'37>'2#%'7"&54>327#"&''%oP :1YZq  .WAMfIKc{iD,%BU"D9+ $I<  ^BfZ;D'*5&-nL<7PTG>2#"'54>7"'4>54'76323463236grK)@.<=WW=jP"P'0ZJ;UU;F,I.u=7654.#"#&eUmmtHFA!+?HLE XG$ޱJu+*!;U U'U8265'.543253#53265'.5467%&'&#"R5+4 A"+53q6oo:G+5 9'Ll,!-1/ YqJ@a=,$ D.3  1;+f 9&%= CG\ !"365446323#5'%''7"&%> IdMQlZllN3AM+!6.H69CL4&#"5632#"'7326#5'%3'9BG 18D_-~BS&F<7n;2m0H V $><#n3N8OSRIq#)7"7673#5'63&'&547.54>32&#";J+KQmmr* ]''S<&=?!c,*,J|?: C7lU: !2A)8%$5 S6?N5%#5'7.'#732654+532+326735n)u"0%7")K9N!69qm(pS)7$S&8SM@+>`2 E'/77>73#5'7&'4637654&##&54632&#jE3*&z oo)-D8^)4-`1W@66 TJ##5;&FM G#03*1A!?,FO+/+;#"32673#5'7&=47.547654'o5|{JG5+np3q_+;} X(0(s*QJ&F%~E5)aA)F*I  %@ #%&#"7>%463!53#5'%5##"&FW&& [H:nn:!]LcYNH# APf[I!33CU273#5'7'54+7^8fxoo6ʏ,,.N1ZIfzR!326=3353#5'%5##"'4632&#"/32353#5'%5#"&T3&)3 0PC1PS+5?.imm;%h8L=d;' M>?z ,>Lo9?+:_xEpg),-"2353#5'%5##"&54354&#"56]E6ioo:i;-4,_ #288f>eF]j#&8'^9* V =7265&+5326323#7'7.#"+;#"/#5%1U3!"K;9ln; % 2cQ n/ (4'!RR ,ID ]i 0  ;J] R0R77>73#5'7.467&+w:C'9 mm-SKiU13441 0~S>V_ M+ 932654#"#5#"&'7>7''7"&54>32#76732673GP#/<n;d,DU BX/W?M-WthR7 +,(< nC-:",P&'>5#(<9fZ;D'*5H^,M6YT.;?/F!( H$4 $%3/!'.6%'.+8%3275%'7"&54632#53#5#"&''%74'37>IIJc|-XfTXs  mmbDU!C@Q :6%-BfZ;E&3=J;  aq=6PT9+%*432&#"#.֍ $&3:((zx : "(e&4EL@#'#73^{`D3?73267'3265'.'"&5754+7367&'>72&#"#"'&,8O$S@)LMA-Ri-)05nZA*(DX\ '1`A!7-.6A;+#^5R%(@K XC!")8 =;$873267'"&5754+73>54&#"76323267#"&'-%8PLRi- {F)92@*M#A?&54&#"763232767'72&32>5'.'%32767'eX;O\')77]{`89Pj-'24nZ?,'RA11FH-2 ;.D "(:'@( ēo^5R "(AKX6A2%(#-4&#"76323267#'#7.54>)*92?-I$@?%;TT;h0d8[B^{`$?:!=WX=o a :'-70':G%Z7 ɓ*G.*= "[T3#.''#"&563232>7'.'&543253To$*@D5EW*\L] 0LT6  * Dk"=*$n S$$ 9Z3,2I4    @T,73265'.'&=472&#"#'#7&'&'X k1:N Kz(=<4.Bd^#/ 8>$]{`OD:H1' "'7[< +!)4,E)Ǔ ,& 3%2654&'"4672&#"#'#7.5467&5)OFhITlp^@-(FWFSS7":@%^{a2N, [47*:.#4;'6CFCL[C G5/H*Ɠ$0+AS%1#'#7.54>54#"7633274>32^{a3M- >XY>l4A/Kvc=XW=>/ 2${fE퓓&2..@ !2gS90:)$.9)+`-< G67''73'&'77>54'" XRBV8T<;JC4IV)96( i=x)' 'L; ' <2654+'767+&'71E= 9&%/,-BhM`A,0)8 ;0-8=9514>324.'#;65'.1CQ-=mF*L+_80/; B# [/+01>.E94JN/ > 4T267#".5432#"2>#q ,v6=Y-D*N ,-t(q# 4632#"&#3Y'"!#2^e#)%`"#324&5432&!05Qڑ[*a'0"D m j P^!"#324&5432&2"4!!05PْY*Za'0"D m j P8 *TV= 2#"&546'7#%7#')1qe[N0&&%#E["#%7'7>;)!<[Nrd/"Gm1pE#6&LX! 4632#"&7"#%7'7>;="..""*W#A&<01^-u&"-+*"-Y<K&'#".533275432&#"{4 524^\$#?$%*!-^D} 6b2*#K&'#".533275432&#"{4 524^\$#?$%*!-^D} 6b2*#%!5!^72#".5464&#"326.;& . @p %()2>+- & /;j2)<'"%!5!=©^5B 62#"&5464>32&#"3%#"/732654&#'7"&'"#'$,#9;#n 9Ckkggi"I0Lg:&*32'"+2>;g)1"V>UkJ <2#"&546#34&#"5632#".54'7326h&,($*hh9CL->u9  .Q22" WB'9<*'1+1N X 9  :)<.! " ?LJ9 32#"&546'32673#5#"&547.54632&#";#")1)"62;"<}pqz;qU=nYe/*/L~}K')%"3'! ;@k-[JA*:':HV8@Q!F ?2#"&5462#"&5463265'.'&=472&#"#"&'( 5,"%-$j j2:N My'>:6/Bc=Pb/.LN*<)P( # "%).)!+G2& #'7\<')45N';<lB 82#"&54#"';2673#5#".'#73267'&/#732I>' &$L#:7k .upqx6$>)$8 *9P)" 10D fC9q1*3 U#  TN4Y <J2#"&546'47"&54>;#";#"27#"'4672#".32654.#"( '$5fX#G'! J<#I&)?TAM).S\PyQp!#!(=*" 1(!G/D3"5 T5#X.Y~Og;=v pV]Q@3'0 972#"&54627+.5467'."32>5#".546(')",$1gE-L #>*49*#y<(, /:(WB*)1*7'.#"7636321 '$5Xu%' C 66% ".4*+ ;;W*@.&6 6.-A%6AB"'" 1'"G#?6jHf0YWE8F&7_JMW&(>-@FSX*Fa +2#"&546353###"&'7327'.#"'6&1($**gyjopi{M*r )P N-L"=+*&!2+'lQ#_S:[ /&0;[ 12#"&5464&#"7633267#".54>)205+:2B-Ko^.c9wX*NK->YZ>R+&!(&# dQ8-:2'XE*\&>)Q7+>"" -:2#"&5464672&#"#".5467&52>54&'"' %,,4o_@-(FV FSR7-KM)@b8# X7724HfJTW)2))AMZD F57O($4/AR'3:'7C  22#"&546'3265'.'&=472&#"#"'&''0'$*: j2:N Lz'=<4/Ad^#/.LN*jU9Q)$#2+G2&!"'7\=+!)45N'7$ 52#"&5467 54>54#"7633274>32(!$)"5x>XY>l2C/Kvc,BMB,>/'%{Hcb*31'!9.@ !3 gS8)7(.9(7 `#8d (82#"&54%#3%#"'53674&#""76"&533267c>& '$-poE_$H1#&(M,$ %%jsM=(Xt`*" 1n`P 99!Oc*7Rԅe=&!QK"$*11 )ESqO+5G> *72#".546#3".=4+7323767W')  +rp+E&&[<%# (CI&)>' " (MO$,! T-0!  Y 4C ?2#"&5464>32&#"3%2#"'#'&'7;>7'&''7&d&')"* 553b!>9>& 6g|fkKCWb" ._ Q>*)1*,  J( 'ZU.HO~5A"'59e 172#"&546726=3353##'&54>32&#"|&()"*z/:osopr +M0311'$5(8@,joqh(dU'%8().%R M#6GC1"'%"2(! A*:   k\=" 48K/,A?c<' (72#"&5464&#"5632353#5##"&543O' )",B"&=kpqj;.8+b!)" 1*6, X rj$ &;&`+ 972#"&546#3267#".=46;2654+532"&#"N& )"*qp4wW\:PA. `+EX9G|& ",)" 1)A}3f9 ,P3';TU> W +2#"&546265&+7!2;!"./#5>)'/4.>lIeV;K'W*-'(!-%NT\D&H!] U TN 12#"&546%#3#572>7#".54632&#"[(,54popΣ6*7E9's*1"5342#)>(#$'!R W&9a32&'3654r)"$'$6rNgs %! 2QV~ ?+" )2(X*11'" VHm"45V]_8l+QO1 R ^6E`k (2#"&546#3267#".54672&#}& )"*po([ VYA\,kX4.*55)" 1)+b?+GD%Q_N,;lwK :72#"&546#3"27+.54>32#.'&+'32>74&R2165poh+'1(;L5/<fX z%0< V <*91%73267'2#"&5467"&5754+7353#54:QJ()'$5Un. pqV(".*<)2&" `6T$pM 332#"&54>2353###;#"/#7326=4&+5''!* %&1#mop S=. 'F1, *..   7&-5a T1U,!*U# A2#"&5467"&547&54;.'"".=7654&#";27s& "$65̋ O+@-.Oy#=WV8(C$5YB?L cIxMON34"%&"w3$SP %@H6Q  !%.B;)8R7\( )'%"5632#"'53254"&533267 >$!0NS#G0"&%NShpK<(YqWvQgH88#Md^,c3@T Y 5)1"&533267"5632#"'53254.#5'%3pqK;(Zf1"!0LU %>'!&%N #*p=Do(`3?V YQiG+0$Md "W#"&##"&5463267 +W t5#//  E<Y]=&%( f`w'27#".'./&54676;53#";(  ()  % ,5#   "! *( 4`' ,T326=3#"&5432#V-!;-6BkR$<$K4)5Di/EZ#".'6532=35!5!## D*#.)gdAV  B %MAA1|".'#"54632353'32=!/  <1B (G2*)3x.@*H4@x#"&'>753"&#"32>72F.&4qN-(ZA;%\+?J)&9-8\T!1>u$#".54232>54&#"#"5432327 LL?.S(d$).H3+)0C@,-=,<$% 2!: $ k[5654&#"&54>353&8 i<=20=32=O >"$  5nY)!RR$6O #".'3s,VjH.2tIv#"&##"&54632675! f r5"0- 8 4/H N9$ ( G;;Be #&'5327%326=3#"&5432#PcSVbfRZ\W,#;O2CjR&%$2)((B4)LAi/D  gd #".'5327'"&547332>2+iY$G%fQZ]3P 2$! ' 8)(Wf+)MP0/'&z#"&'35!q?#9-.L-X&9665$5!5!2#"&##"&546326788v  q5"0- 11l0013 N9$ ( GR2!5!5!326=3#"&5432#VeeM6!;P1HeR&11p11nJ2+dhLBo$E  @ "#".54632#"54654'&/A! "HQRG'!!#6' J:/TR1/*G$1X 4632#"&10% !$%% 1(00 *3Y327#"'#"54?654'&#"#".54632327"'7&'&54675!5!!5>54&#"cOT]cQP_>  (_ @JKAXZT]^ZM>>|^_|2%,(zBMl**=! 9""3 # L.3,KJ" 8##1aNAAO0G) @45Jfq?455X 4632"&#+5;+,00!H k@``YYE$!&00FAA@ =G[#"'5327'4&##3263>7%4>32!!#"&/47#5!.#"%"&547332>53@kL[]cVX^8Z,kaA6FzajJ" &=kFTv8BLEt'L4OG^v7R/ BUI-$3 V((A('7[5!WYA%EO9&5ZW2AZn"Dk65 в$Ajn+=5KX=I<.' BW &GQe#"'53275#"'5327'4&##3263>7%4>32!!#"&/47#5!.#"%"&5473326534iYP\cUX^lLY]cUX^,Z,kaA6FzajJ" &=kFTv8BLEt'L4OG^v7R/ BU&%)MV''A('V((A('7[5!WYA%EO9&5ZW2AZn"Dk65 в$Ajn+=5KX=&8 ?F BW AL"&5473326534&#"#326!2"'"!!#"#53267{BUI-+KWBY- +Z=v_6F@Cq\=Z5%WMFu'L5D ##$z0X=I<@E CV8[g5 41*H8*AXo#Dk64 !AA;8:Q'"a&"f'"c'"'"+'"i '" '"o '"\ '"'"l'"['"'"'"'"Z'"}'"zz'"E'"'"tx'"'"t'"X!h'"/# T62#"&5426?5;#####"&54>=&'#"&54>54'4&+532676&6+;@@cAN/7 '$+$BJ;&  &8\>]p% "3[9'AFi JE>&:*C$ &WI]7/$;" 2#"&'67&'###535463235#&98F5̈^(8U?CK$>! c/nwu@}}kc52 |-{ %L:cA8'!f# 'bpLT[gn@A:g*P5 B62#"&543567&'#5!4&#"#4>323####"32>2#"&8&}-{MwZ2JC*@"C.am@_|:K$>! X:p+%/|T[gnAf>H$?<$g:A@8V!f# *_p@'&&@"z''&@"z'(&?"]h')M&",'"zh'+&",SX X4632"&26?5;+#+##"&54>=&'#"&54>54'4&+532676O00!H D6+;pWTTJ@ W/AN/7 '$+$BJ;&  &8\>]$!&00 "3[9'AFi JE>&:*C$ &WI]7/$;" %1 %,5% ''Z''W  ", %(E#(K#"&##"&5463267'7 D< r53/!45 @./1P4& Vk_B32=3#"&5432'7N3?:O3>gJ'Dr45p?M|{D9X-= a60''7'327#".'.546;53#";035?  *  1#,",5"LuW    +"J#)L&%3#"'53232=#3.XMG @vXeT58Q;1j%#####5354632&#"354632&#"WSSFFA: :A: : D88DY8?E5RY8?E5R ####53546;#.#";SSFFA:EK: 8DY8?f5R####53546325&#"3SSFFA:M@:'8DY8?G5RD+#5&#"3######5354632&#"3546323DS*:SzSySFFA: :yA: Oi"5R88DY8?E5RY8??")######5354632&#"35463235&#"?SuSySFFA: :yA:.):'88DY8?E5RY8?͆5R&#327#"&5#5353##5354632&#"V'14GGSSFFA: : DF+(DDY8?E5AO3273#5#"&5##5#"&5332>75#".=3;.54>;#"{10_XPWOAQVT) !!ARX$*,: w9B-=3!!!32=3#5#".5#"#5#"&'332>7u+3+-,Q/=WO:k$9% 6**T) !!AQX$*,: 6&@&$BDGaJU'!1%&+9O8G6-+2*A8@4.54>3!632#4&'"##"#5#"&'332>7u+3+-,>]dOX49*-X6**T) !!AQX$*,: 6&@&$GhaI?>"H3l%&+9O8G6-+2*A84<3273#5#"&5#3#".=332>=#"&54>;%;5#"10_XPWOAQ\V=_6I%Xn*-eX%O;C= 0%FS]F4D8 E;C.~"H3O;,-2hA8F4.54>;3253#5#".5'###"#5#"&'332>7u+3+-,+@XO9l1D$X6**T) !!AQX$*,: 6&@&$BF"JV%D7-}l%&+9O8G6-+2*:X&52- 273#"&'3J GRC@OG*RIPPI%-8WX'%X%>53+533"4fW,?L:ꥋZNT<v3R0! L :@X##=47'3>7538}rAZWzFVW{p"zGx)qA&X#!5!W  LL?4X #.'!53:{lWAZ WXamtQ: Lw9X4&#!5!2#!5!265|Tbxy\WysBWLY[LVC%!#467>=!53!W$C;6 aW>MWS`12!/ Hᕙ1P+7.H?5X 2!4&#! o]X[X+7^@%X #.'!5{mWAZ>XamtQ: L#uX4&#!#525#5!2#[Pux<oWtESgdLzFL}a2!5353F FF<&<&<'&<&&:}FX&:FX&:FX'm:6X&X&&X&?:X&1 X&3- (X&)=:X&5X&F'@&8X&9X&%!&H0:X&C3FX&u=9X&/98 X&ME?X&ZF3X&>8&X&)%X&<X'#{X&>&:6&09&?&8HF#53>=3>Q;fhW):WD'DZ9q #4&#"34632354>#3 r]NVYD-:/8**H**HH!PGS_\;A2)1''4,&-$'e!D]`[`]!e{#8!;V RX <&5":W RX\ %!#3!!!#3!!#H\TFWh[ ah#S cU &`g&?5!#'7"%7"''4 i'/;` ad<_- #&'#'#&'5o(O&i%pp%#T eQ bll"G #'5!#3!! 8&u M K 1k R&>7%37"''49)-6e@X$>/ J%##5##533533533##4 ;0*XXZ ;p Dd22^`_`^!!C O&'3!#3!!UX'.54#%%h47NP%4)|r-7&'5!.'5!.'5!g/W$"!W4Wd%(% % (& 3 (( C7%3V)-X$t|3!!!#$h56% &|t-.%!#'#&'5o%oq(S!h}kk}S  %73#&'!#3k _n&E `tj&N hepK'#3%#3#3#3#3l(& j '& 9P(& ~[/(& f#(&|p'Wl*W;\W\W@X 2j-X d%.:%'.'5!>7'67'67&'7"&#!567i> )2#W D. 0tR,-" 1  (&},  wT.'%v ''7237'"#'677{z|WUWX \ X|}z|W^!TX ^V}   7#3!!! `&  h'&d !7#3!!!!!#5&'53N^~X d~#Il~OW"$@aUg'Xj'&Iq%5Mmm$6ff8"!#3.'5%&''foX!k %   Rer)x&P i?X%r %   b iis'Lhd{:A%#5'535&'535&'5333#5&'535&'535&'5333'5!]!ee'>e!D]`[`]! Ee#Be E]`]`XcX\&5":W RX <#8!;W RO(&|,9 #&'5!9S'Y DtC##&'#'#&'57#3%!o(O&i%pp%#T! Zo eQ bll"G  a(c,,#'#&'5%##5##33533o%oq(S!` !y ! ! byZh}kk}S u    iq f`, &'5%#'##3!!%3S!Y%or'U bV(.}S S}kk i'U$|5!#73!!!# ^($m56L#&Sx-.N&< 7%3'5!#V)-^'X$Q  #'#&'5%3#33'co%pq'VU),[d)i}kk}T X%l)) ,&.##5#!!!!#333533%3R!z& WlZ&E`z\V'/R#u%  _&uc'&N iq hQ$%'#%3737&'5%#'#UV)-),xT!n%or'XX%T f}kk,"#'#&'57#3!!#33'o%oq(S! `!Z&h}kk}S  h' a)%^!'#5##335&'5!373U8'=k 6=X ;8),u 8nN6pX% C,'!!!!!#3!#3373#/B;.Wl'C&E d~ZP*,VR&:9_&u'J'&N kM a[$&|",33#7##5!#&#5'5'#&'5$l၃P!& ;4(V9l'p$L$'Q|w..S%=/VUfk%H~%D #&'#'#&'5#33' O(O&i%pp%#TZd! %GQ bll"Gfl( .#'#&'57#3!!o%oq(S! `"h}kk}S  h'!g'#'#&'5#33#3#3o&oq'VN_Z_#Ili}kk}T N)h'\h&&Iq%B#+5!#3#'#'33##33%3 c'H cl<^RkV(.Wj&o(g'T#}%:U%# 5!#%3%5!# ^'V%1^'SL%Q.!.#/#'&'57!!#7#'73#'53!!p%oq(R"l~V  b% a~!, xjllSL<GHF"  5!#&%3!!!#_'& $h56L!&T%r-/N# %'#-373%5!#UV9V(.9%1 ^(UL%S|%33#7##V%1T$i၃50&4N$Hs..73!'#%373337##zV9V'/9++,%j . &1QZ#Or/0 . Y %75337&'5!#5#%5!#&#5'5# ^#T $L% o(O@l&p ef"G%HeQPfkL(3'7##%3%#'5!0$h y !  &V(.]'u Lr/ |/ !  $UOkC#,%#5#/'73533'33###'33#VJ#I cJ(.])>jQ ^vv&IkUs e()f}%R%[g( %#5#%3533'#'5!NV(.]&~]'u }vUr e(&#OkA$-#5'#375'5!3#'#'33#33##]'!J Zt fl:_iQO Uawkl&p(h'k}%T#0&#7#5'#5&'57'##335&'5! p%oq(R"tM]tX bM(jllSW fZNXZg!#33#3#35!#N_Z_#Il* c'"N)h'\h&&Iq% WG87#37373#'#/# `*,9'/V9V! h[Q#  "7#333'5!#5#'%3'# `%nu ^'O!&8 yC h(vkSQ$,0 | A##'5!7#'#'33##33]'u fl;_NjOkl'p(h'N)}% &/5!#5##5##335335%5!# ^'% !z  !\z ^ ^(S$   t   frjkS%'#-373%#3!!wV9V(.9%1 `!UL% h'  #5'#5&'53!!!!#p%oq(R"_ 7l~V xjllSG (L<B 3#7##%3%3>$l yO!&V)-U),Bu. |/Q$.X&X%}#,4333##'##333#%5!#%3$Aقc&J% &$hL̓JL ^'V%1}C-.e(%!|t #SL%&,1:@KT]c5!#5##5##7##33533533&7#35#35#35&'#35#'35#35# ^'TLV! %   &%n]I]_^Jl76l{!- ^JKJlKI!- lLJ7RM<Q= &   |wDKDͅ F5L(DLu# F5L# L( ',5;FMS[c5!#5##5##5##33733733&7#35#37#3'&'#35#'35#35#%%3 ^(TLV "M&%n^I^_^Jl76l {!- @.JKI#lKIZlLJ 1%V%1RM<Q="[|wEKEͅ F5L(DLu# )"4L=L L%I*%%3'5!#%33#7#aV%1 ,E(V%1$ 6၃g&N$.=L%V;./i$W&7'#'7373'#'737375!#8%8%cd8&8#&c; Q!&6K6K7'Y0P(NW,7'#'7373'#'7373%#'#&'58%8%cd8&8#&c<o%oq'=86K6K7'Y0PD h}kk}<0G8!7537373#'#/#5##3J `+*8'/V8U!JJO Qp h]Q# UuY J27-37373#'#'##5##533533533##V)-G),8%1V9U?&4 TW] ;TXL%zJe&?Za]aa!!D '7"/  b. 5!# _(T'.'5!3#&'53w$  fq g(M't$!][WM! C7%3V)-X$  7'73'73y<il> kuy*Hty,F5!#673#&'!#3 _'&EYnO[T&N gY bKj 732654'7#".547&'767Q/0I]SI89{R;Z2!D;J(:AF7yCvH]Zu)AI%!4>/B9IX>H3267&54>73326?3&'#"&5463237#"'#"&54>73#"3268  _= ^) ?*$`n>O %$1"*<6J _fH*96P0D 81V RNkPE@>KF",,SP/=?4#%7IX 23254&#"3267#"&54?#"&54632>?3)-&,$R&>)OQ/>rIM+>(.! Z4< ))!%5`?OX0 hZ$x 6FG6=@2 Z7X3#[X^X7X"&54?'#3673327@_i?BZXZ .kZ5MPQUU(xxFY?X7?6XhZ 6b,%32>7#"&54654#"#>32&#"632-$ L@d <)`AVU6S(-6H.- & ,W %/GH>RP-C'nT$,KA:<F6FOOp "32654&4632#"&cFsT=FsTqaqa`R`Rզzզ0b##"&#"'>32327]$2XB .P 2v5X F#0l'#"&547>54&#"'63232654&COdiSejJ;#"*;2KZI^~9:.69RrdSOqtWK\7),)/J<;~>E'=E'=32326?26-KQbGY"(%1  > % =%&#-CMTPQX[N2tZ  z#/<?X)332?3&'#"&5463237#"&54>73#"326+&>%^) ?*$`n>O 0L1Y _fH*96"4)RNkPE@>KL(WL0D 81#%7:l*423267#"&54654&'#767&5463>54#"EQ $)-XYWKT,/# _!1I:71lH7.HQA &d TI-+2Wm>7N-G 1)9TX)%3267#"&547"&54>73326?3L-&,$R&>)OQ$dD _= Z4%5`?OX0 hZ*n)TO0D 81V,Z=!l=GO'632?6323267#"&54?#"546?654&#"3267>54#"FO40X9N==xl4[*(/ )!2P2X"3>327#"&5473326?3#7&#"2 #5#X-092D_5$ZX_)1*"5NG-4 Q:9FA.I!CPt5g'3267#"&54654.#"#>32+$$)2R %A*A^(!<?_F+D+OT@9$7i2B]7)[Z3#"&FC(^9X732654&#"#3632#"&5P,D+2)_,Z0-E%dYBqX>K8V1-GH!cZAFl,4#"'>3232>7# 54>7>u_ ]%H2ul\S > 1Q=$\ +FB$SNUG(+R_BX +6 #*@$ =9X1363232>7#"&54654#"##"&54733267&["%,W -$ L@d <)^<#52D ^=XF6F%/GH>RP-C*TO$29)V*OX0732>767#"&5467&5733254./3#"'J7" N&QM_u"*BZS: _ZD3C0@',THvX3M'MZs6%"!)-c7I b$/73267#"&54>7&54632&'7>54&#"C9@UTWZ! #H;6/,B:9F)/=lpP(D!2V:H,.. 8 "+.+l%2.#"#"'73254.546# 8"83#.CB.}PTB2K.AB.Il 2'#?25L.K[_9>U847K(9fNX73267#"&5473-&,$R&>)OQ/Z4%5`?OX0 hZ$xZ8l 4.#"32$4632!'267#"l,"/D6.SlTBT,RK +>[a'49;87Au&ShOUPO0&l063263232>7#"&54654#"#654&#"0+mOQ)",W -$ L@d <# -Z4-& rhZF6F%/GH>RP-C6Z(%5#3l 632#7&"#>327654&#"+mOQ/Z$T"_ #5#O* -& rhZ$x1Pt5NG-(MZ(%5#Dl&#"32673#7#".54632hK,D+2)_,Z0-E%dYBqX>K8VϷ-GH!cZANX'%3267#"'#"&54733267473-&,$R&>)U)+QOQ/Z4-&# /Z4%5`?OX0 <3232>7#"&54654#"#7>54&#"#654&#"0+mOQ)"9# L,W -$ L@d <#Z!# -Z4-& rhZ-F6F%/GH>RP-C $Ȫ "!6Z(%5#rrpj#7lz J l'.#"3"3267#"&5467&54632 +4+343@OE=9WQ6`;T6"2wO?m%'27].5?U+c`@g_@a-GAJG41X%%32>7#"&54654#"##7!!632-$ L@d <*`R&,W %/GH>RP-C'RRF6Fnjd#Al!,"&54>54&4632#"'3267>54&#"Yz$A-DSF&S>39[Tz,fV%735&2^)  '?S:[O +<9[ _!5&K[X.% P`^F#VM0D 81. p632#"&'732654&#"qRdaq=eS,JFsT=<4XzF=1Z`R<O,p%#"&54632&#"327Rdaq=eS,JFsT=<4@XzF=1Z`R<NX"&547332>73=Q/Z4-& 7&'7'6_I0B[R S_'N5'"M B.3,=p$dJDyT>,>[N@+  0*yu`Hd97P%'>54'#"54632'&'32J >@eq%=!Zg$V<5|P0$T>e'7R'6?&CD55-T6S Y_fT yj7P 4632&'#"%&'327$5 (VE~/%E,-8pI 1SKX3JP7 mP>32&''67''67&'7> 2*4H =* %;;yV%',JugTT~AI0 (7kO)#F57R.547#"&54732>7M-9/=1CC':L#9 (H+% 1,RTyX_\5'(/#2=*,  '3OW7UP267#"."'>32*Y1cn!A'%1N .'(2%0o<>I>6P'#"&'7632.'&'&'67'>\=][Y3 C<+ #4'p&?'X3_'EaB #b0S65 ?$ee_m) 7=ao-%&''7#52672>54'7#"&547 -&82/&0".#@[:0 (L`}>GTΉ|46tb725#-=7$1E;aZM^-U5;7 Ke "&54632654'7'67&''7&0Qr6fua 3S7+.Eq2n lN  fh$$.(>=[=78"&54732>767'672CF%5?,G;3I*18J.)>@(/' ,!*T:ӛ%7 7"&54>732632'>54#"-;Xmf 5c?G$%#3mB4)= b 0#_!( F 78.547376?'>'3JN'?CJ3?:B74.3_:?&30&NP&@8 "SK^78J2'54#"#"54326,8*-&B1$@&7-".7$EM7 dB2>7.'#"54>7#"5467'632>S.@` 9#5%"84 ~0" !"  $4:A({>3 *")$'/;_W_(bV\$%4H &! *# %I$% ,$ 7R?P 2#"&543254&#"pOK;5M6-O."-PD57#".'&'76--%5 ] (/<"l/'5 1LPKK19WDQ [J/g -ed78 ",52.'#"&54632>4#"%"327&$V_M+*1>TiE#+Y,=RX/M07& % hA7]C/!=uc";V38(-$ 5 -' P 3LXu 'x7P 462&#"6"3277>BM/ApC1~!Ȁm } 7k^>53#"&54747.1:6#1@,Ly6W37W?:X.kH$ /KsID78]'654#"'67632]1-(_D3,Qr-D64=EP<27# 7>77%)!5!+&7WL H[7P2'67654'"#"'732<.$    v XTP+# 0 - 6 7P9>32'>7#"54>7&#"#"'732632 LL6f* &0 O8, & Y " Y V$. $ go 5  ,  $   5 0 7Z>3267.#"7z$+)"h4WN,?98!!$&)M*g(P+7# 7>7'>7&(!5"*%%)!5!+&7XL G\WL H[7#, %>7'>7'>7y%)!5$($&(!5"*%%)!5!+&7T K QYXL G\WL H[7 2#"&546}!/*#-),".,! .n) 9`$&*-24679:;<=DIJMPQSUVWXYZ[\]  !"#$%&+-/389:;<=>?@2  ; Q Z [ \ ] d e f g  $$$$&$*$,$2$4$6$7$9$:$;$<$=$D$F$G$H$I$J$P$Q$R$S$T$U$V$W$X$Y$Z$\$]$m$}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$ $!$"$#$$$%$&$+$-$/$1$3$8$9$:$;$<$=$>$?$@$ ;$ Q$ Z$ [$ \$ ]$ d$ e$ f$ g$ $ $ $ $ $ $ $$$$%%%%$%&%*%,%2%4%6%7%9%:%;%<%=%D%I%J%M%P%Q%R%S%U%V%W%X%Y%Z%[%\%]%m%}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%% %!%"%#%$%%%&%+%-%/%1%3%8%9%:%;%<%=%>%?%@% ;% Q% Z% [% \% ]% d% e% f% g% % % % % % % %%%%&&&$&&&*&,&2&4&6&7&9&:&;&<&=&D&I&J&M&P&Q&R&S&U&V&W&X&Y&Z&[&\&]&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&& &!&"&#&$&%&&&+&-&/&1&3&8&9&:&;&<&=&>&?&@& ;& Q& Z& [& \& ]& d& e& f& g& & & & & & &&&&'''$'&'*','-'2'4'6'7'9':';'<'='D'F'G'H'I'J'M'P'Q'R'S'T'U'V'W'X'Y'Z'['\']'}''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '!'"'#'$'%'&'+'-'/'1'3'8'9':';'<'='>'?'@' ;' Q' Z' [' \' ]' d' e' f' g' ' ' ' ' ' ''''($(&(*(,(-(2(4(6(7(9(:(;(<(=(D(F(G(H(I(J(M(P(Q(R(S(T(U(V(W(X(Y(Z([(\(]((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( (((((((((((( (!("(#($(%(&(+(-(/(1(3(8(9(:(;(<(=(>(?(@( ;( Q( Z( [( \( ]( d( e( f( g( ( (((())))$)&)*),)-)2)4)6)9):);)<)=)D)F)G)H)I)J)M)P)Q)R)S)T)U)V)W)X)Y)Z)[)\)])m)}))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))) )!)")#)%)+)-)/)1)3)8)9):);)<)=)>)?)@) ;) Q) Z) [) \) ]) e) g) ) ) ) ))))***$*&***,*2*4*6*7*9*:*;*<*=*D*I*J*M*P*Q*R*S*U*V*W*X*Y*Z*[*\*]*}*********************************************************** ************ *!*"*#*$*%*&*+*-*/*1*3*8*9*:*;*<*=*>*?*@* ;* Q* Z* [* \* ]* d* e* f* g* * * * * * ****,$,&,*,,,2,4,6,7,9,:,;,<,=,D,F,G,H,I,J,P,Q,R,S,T,U,V,W,X,Y,Z,[,\,],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,, ,!,",#,$,%,&,+,-,/,1,3,8,9,:,;,<,=,>,?,@, ;, Q, Z, [, \, ], d, e, f, g, , ,,,,-$-&-*-,-2-4-6-9-:-;-<-=-D-F-G-H-J-M-P-Q-R-S-T-U-V-X-Y-Z-[-\-]----------------------------------------------------------------------- ------------ -!-"-#-+---/-1-3-8-9-:-;-<-=->-?-@- ;- Q- Z- [- \- ]- - ....&.*.,.2.4.6.D.F.G.H.I.J.M.P.Q.R.S.T.U.V.W.X.Y.Z.[.\.].m.}............................................................ ............ .!.".#.%.+.-./.1.3.9.<.>.@. ;. Q. Z. [. \. ]. e. g. . . . . . ....////&/*/,/2/4/6/7/9/:/</D/F/G/H/I/J/M/P/Q/R/T/U/V/W/X/Y/Z/\/]/m/}///////////////////////////////////////////////////////////// //////////// /!/"/#/$/%/&/+/-///1/3/8/9/:/</>/@/ ;/ Z/ [/ \/ ]/ d/ e/ f/ g/ / / / / / / ////222$2,2627292:2;2<2=2D2J2P2Q2S2U2X2]2}222222222222222222222222222222222222 222 2"2$2&2+2-2/2123282:2;2<2=2>2?2@2 ;2 Q2 Z2 \2 d2 f2 2 2 2 2 3333$3&3*3,3-32343637393:3;3<3=3D3F3G3H3J3P3Q3R3S3T3U3V3X3[3]3m3}333333333333333333333333333333333333333333333333333333333333333333333 333333333333 3!3"3#3$3&3+3-3/3133383:3;3<3=3>3?3@3 ;3 Q3 Z3 [3 \3 ]3 d3 f3 3 3 3 3 3 444$4,4647494:4;4<4=4D4J4P4Q4S4U4X4]4}444444444444444444444444444444444444 444 4"4$4&4+4-4/4143484:4;4<4=4>4?4@4 ;4 Q4 Z4 \4 d4 f4 4 4 4 4 5$5&5*5,52545657595:5;5<5=5D5F5G5H5J5M5P5Q5R5S5T5U5V5X5Y5Z5\5]55555555555555555555555555555555555555555555555555555555555555555555555 555555555555 5!5"5#5$5&5+5-5/515358595:5;5<5=5>5?5@5 ;5 Q5 Z5 [5 \5 ]5 d5 f5 5 6666$6&6*6,62646667696:6;6<6=6I6M6P6Q6R6S6U6W6X6Y6Z6[6\6]6m6}6666666666666666666666666666666666666666666666 66666666666 6"6$6%6&6+6-6/616368696:6;6<6=6>6?6@6 ;6 Q6 Z6 \6 d6 e6 f6 g6 6 6 6 6 6 6 66667777$7&7*7,7-727476797:7;7<7=7D7F7G7H7I7J7P7Q7R7S7T7U7V7W7X7Y7Z7[7\7]7m7}77777777777777777777777777777777777777777777777777777777777777777777777 777777777777 7!7"7#7%7+7-7/717378797:7;7<7=7>7?7@7 ;7 Q7 Z7 [7 \7 ]7 e7 g7 7 7 7 77779999$9&9*9,9-9294969;9=9D9F9G9H9I9J9P9Q9R9S9T9U9V9W9X9Y9Z9[9\9]9m9}9999999999999999999999999999999999999999999999999999999999999999999999 999999999999 9!9"9#9%9+9-9/9193999;9<9=9>9?9@9 ;9 Q9 Z9 [9 \9 ]9 e9 g9 9 9 9999::::$:&:*:,:-:2:4:6:;:=:D:F:G:H:I:J:P:Q:R:S:T:U:V:W:X:Y:Z:[:\:]:m:}:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::: :!:":#:%:+:-:/:1:3:9:;:<:=:>:?:@: ;: Q: Z: [: \: ]: e: g: : : ::::;;;;&;*;,;2;4;6;D;F;G;H;I;J;M;P;Q;R;S;T;U;V;W;X;Y;Z;[;\;];m;};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;; ;!;";#;%;+;-;/;1;3;9;<;>;@; ;; Q; Z; [; \; ]; e; g; ; ; ; ; ; ;;;;<<<<$<&<*<,<-<2<4<6<;<=<D<F<G<H<I<J<P<Q<R<S<T<U<V<W<X<Y<Z<[<\<]<m<}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<< <!<"<#<%<+<-</<1<3<9<;<<<=<><?<@< ;< Q< Z< [< \< ]< e< g< < < <<<<====&=*=,=2=4=6=D=F=G=H=I=J=M=P=Q=R=S=T=U=V=W=X=Y=Z=[=\=]=m=}============================================================ ============ =!="=#=%=+=-=/=1=3=9=<=>=@= ;= Q= Z= [= \= ]= e= g= = = = = = ====DDDDDDFDGDIDJDPDQDRDTDUDVDWDXDYDZD[D\D]DmD}DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDDDD!D#D%D+D-D/D1D3D9D<D>D@D2D D D [D ]D eD gD D D D D D DDDDDEEEMEPEQEUEXEYEZE[E\E]EEEEEEEEEE EE+E-E/E1E3E9E<E>E@E2E E E E FFFPFQFUFXF[F]FFFFFFFF FF+F-F/F1F3F<F>F@F2F F F GDGHGJGPGQGSGUGVGXG]GGGGGGGGGGGGGGGGGGGGGGGGGGGG GGG!G#G+G-G/G1G3G<G>G@G2G QG [G ]HHHHDHIHJHMHPHQHSHUHVHWHXHYHZH[H\H]HmHHHHHHHHHHHHHHHHHHHHHHH HHH!H#H%H+H-H/H1H3H9H<H>H@H2H H QH [H ]H eH gH H H H H HHHHHIIIIDIFIGIHIJIPIQIRITIUIVIXI[I]ImI}IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIII!I#I+I-I/I1I3I<I>I@I2I I [I ]I I JJJJFJGJHJRJTJmJ}JJJJJJJJJJJJJJJJJJJJJJJ J J J J J KKKKFKGKHKMKPKQKRKSKTKUKVKXKYKZK[K\K]KmK}KKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKK!K#K+K-K/K1K3K9K<K>K@K2K K QK [K ]K K K K K K NNNNDNFNGNHNJNPNQNRNSNTNUNVNXNYNZN\N]NmN}NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNN!N#N+N-N/N1N3N9N<N>N@N2N N QN [N ]N N N N N N PPPPFPGPHPMPPPQPRPSPTPUPVPXPYPZP[P\P]PmP}PPPPPPPPPPPPPPPPPPPPPPPPPPPP PPPPPPP!P#P+P-P/P1P3P9P<P>P@P2P P QP [P ]P P P P P P QQQQFQGQHQMQPQQQRQSQTQUQVQXQYQZQ[Q\Q]QmQ}QQQQQQQQQQQQQQQQQQQQQQQQQQQQ QQQQQQQ!Q#Q+Q-Q/Q1Q3Q9Q<Q>Q@Q2Q Q QQ [Q ]Q Q Q Q Q Q RRRRDRIRJRMRPRQRSRURVRWRXRYRZR[R\R]RmRRRRRRRRRRRRRRRRRRRRRRR RRR!R#R%R+R-R/R1R3R9R<R>R@R2R R QR [R ]R eR gR R R R R RRRRRSSSMSPSQSUSXSYSZS[S\S]SSSSSSSSSS SS+S-S/S1S3S9S<S>S@S2S S S S UUUUDUFUGUHUJUPUQURUTUVUXU[U]UmUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUU!U#U+U-U/U1U3U<U>U@U2U U [U ]U VVVVDVFVIVJVMVPVQVRVSVUVVVWVXVYVZV[V\V]VmV}VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV VVVVVVV!V#V%V+V-V/V1V3V9V<V>V@V2V V QV [V ]V eV gV V V V V V VVVVVWDWFWGWHWIWJWPWQWRWTWUWVWWW[W]W}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWW!W#W%W<W>W@W2W W W [W ]W eW gW WWWWWXXXXFXGXHXRXTXmX}XXXXXXXXXXXXXXXXXXXXXXX X X X X X YYYYDYFYGYHYIYJYMYPYQYRYSYTYUYVYWYXY[Y]YmY}YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYY!Y#Y%Y+Y-Y/Y1Y3Y<Y>Y@Y2Y Y Y QY [Y ]Y eY gY Y Y Y Y YYYYYZZZZDZFZGZHZIZJZMZPZQZRZSZTZUZVZWZXZ[Z]ZmZ}ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZZZ!Z#Z%Z+Z-Z/Z1Z3Z<Z>Z@Z2Z Z Z QZ [Z ]Z eZ gZ Z Z Z Z ZZZZZ[[[[D[F[G[H[J[P[Q[R[S[T[U[V[X[Y[Z[\[][m[}[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[![#[+[-[/[1[3[9[<[>[@[2[ [ Q[ [[ ][ [ [ [ [ [ \\\\D\F\G\H\I\J\M\P\Q\R\S\T\U\V\W\X\[\]\m\}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\!\#\%\+\-\/\1\3\<\>\@\2\ \ \ Q\ [\ ]\ e\ g\ \ \ \ \ \\\\\]]]]D]F]G]H]I]J]M]P]Q]R]S]T]U]V]W]X]Y]Z][]\]]]m]}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]!]#]%]+]-]/]1]3]9]<]>]@]2] ] ] Q] [] ]] e] g] ] ] ] ] ] ]]]]]m$m&m*m2m4m6m7m9m:m;m<m=mDmFmGmHmImJmMmPmQmRmSmTmUmWmXmYmZm[m\m]mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmm m"m$m%m&m+m-m/m3m8m9m:m;m<m=m>m?m@m2m m ;m Qm Zm \m dm em fm gm m mmmmm}$}&}*}-}2}4}6}7}9}:};}<}=}D}I}J}M}P}Q}S}U}V}W}X}Y}Z}[}\}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} }}}}}}}} }!}"}#}$}%}&}+}-}/}3}8}9}:};}<}=}>}?}@}2} } ;} Q} Z} [} \} ]} d} e} f} g} } }}}}}&*,24679:;<=DFGHIJPQRSTUVWXYZ\]m}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g  &*,24679:;<=DFGHIJPQRSTUVWXYZ\]m}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g  &*,24679:;<=DFGHIJPQRSTUVWXYZ\]m}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g  &*,24679:;<=DFGHIJPQRSTUVWXYZ\]m}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g  &*,24679:;<=DFGHIJPQRSTUVWXYZ\]m}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g  &*,24679:;<=DFGHIJPQRSTUVWXYZ\]m}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g  $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,24679:;<=DIJMPQRSUVWXYZ[\]}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,24679:;<=DFGHIJPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,24679:;<=DFGHIJPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,24679:;<=DFGHIJPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,24679:;<=DFGHIJPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,24679:;<=DIJMPQRSUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $,679:;<=DJPQSUX]}  "$&+-/138:;<=>?@ ; Q Z \ d f $,679:;<=DJPQSUX]}  "$&+-/138:;<=>?@ ; Q Z \ d f $,679:;<=DJPQSUX]}  "$&+-/138:;<=>?@ ; Q Z \ d f $,679:;<=DJPQSUX]}  "$&+-/138:;<=>?@ ; Q Z \ d f $,679:;<=DJPQSUX]}  "$&+-/138:;<=>?@ ; Q Z \ d f $,679:;<=DJPQSUX]}  "$&+-/138:;<=>?@ ; Q Z \ d f $&*,-246;=DFGHIJPQRSTUVWXYZ[\]m}  !"#%+-/139;<=>?@ ; Q Z [ \ ] e g  $&*,24679:;<=DIJMPQRSUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g DFGIJPQRTUVWXYZ[\]m} !#%+-/139<>@2   [ ] e g  DFGIJPQRTUVWXYZ[\]m} !#%+-/139<>@2   [ ] e g  DFGIJPQRTUVWXYZ[\]m} !#%+-/139<>@2   [ ] e g  DFGIJPQRTUVWXYZ[\]m} !#%+-/139<>@2   [ ] e g  DFGIJPQRTUVWXYZ[\]m} !#%+-/139<>@2   [ ] e g  DFGIJPQRTUVWXYZ[\]m} !#%+-/139<>@2   [ ] e g  DIJMPQSUVWXYZ[\] !#%+-/139<>@2  Q [ ] e g PQUX[] +-/13<>@2 DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g FGHMPQRSTUVXYZ[\]m} !#+-/139<>@2  Q [ ]  DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g FGHRTm}   FGHRTm}   FGHRTm}   FGHRTm}   DFGHIJMPQRSTUVWX[]m} !#%+-/13<>@2   Q [ ] e g  DFGHIJMPQRSTUVWX[]m} !#%+-/13<>@2   Q [ ] e g  &*,24679:;<=DFGHIJPQRSTUVWXYZ\]m}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g  DFGIJPQRTUVWXYZ[\]m} !#%+-/139<>@2   [ ] e g  &*,24679:;<=DFGHIJPQRSTUVWXYZ\]m}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g  )H 7DFGIJPQRTUVWXYZ[\]m} !#%+-/139<>@2   [ ] e g  &*,24679:;<=DFGHIJPQRSTUVWXYZ\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g DFGIJPQRTUVWXYZ[\] !#%+-/139<>@2   [ ] e g $&*,24679:;<=DIJMPQRSUVWXYZ[\]}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g PQUX[] +-/13<>@2$&*,24679:;<=DIJMPQRSUVWXYZ[\]}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g PQUX[] +-/13<>@2 $&*,24679:;<=DIJMPQRSUVWXYZ[\]}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g PQUX[] +-/13<>@2$&*,24679:;<=DIJMPQRSUVWXYZ[\]}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g PQUX[] +-/13<>@2 $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g DIJMPQSUVWXYZ[\] !#%+-/139<>@2  Q [ ] e g $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g DIJMPQSUVWXYZ[\] !#%+-/139<>@2  Q [ ] e g $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g DIJMPQSUVWXYZ[\] !#%+-/139<>@2  Q [ ] e g $&*,24679:;<=DIJMPQRSUVWXYZ[\]}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g $&*,24679:;<=DIJMPQRSUVWXYZ[\]}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g FGHRTm}   $&*,24679:;<=DIJMPQRSUVWXYZ[\]}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g FGHRTm}   $&*,24679:;<=DIJMPQRSUVWXYZ[\]}  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g FGHRTm}   &*,246DFGHIJMPQRSTUVWXYZ[\]m}  !"#%+-/139<>@ ; Q Z [ \ ] e g  DFGHJPQRSTUVXYZ\]m} !#+-/139<>@2  Q [ ]  &*,24679:<DFGHIJMPQRTUVWXYZ\]m}  !"#$%&+-/1389:<>@ ; Z [ \ ] d e f g  &*,24679:<DFGHIJMPQRTUVWXYZ\]m}  !"#$%&+-/1389:<>@ ; Z [ \ ] d e f g  &*,24679:<DFGHIJMPQRTUVWXYZ\]m}  !"#$%&+-/1389:<>@ ; Z [ \ ] d e f g  &*,24679:<DFGHIJMPQRTUVWXYZ\]m}  !"#$%&+-/1389:<>@ ; Z [ \ ] d e f g       FGHMPQRSTUVXYZ[\]m} !#+-/139<>@2  Q [ ]      FGHMPQRSTUVXYZ[\]m} !#+-/139<>@2  Q [ ]          F G H M P Q R S T U V X Y Z [ \ ] m }                                    ! # + - / 1 3 9 < > @ 2  Q [ ]      $,679:;<=DJPQSUX]}  "$&+-/138:;<=>?@ ; Q Z \ d f     DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g     $,679:;<=DJPQSUX]}  "$&+-/138:;<=>?@ ; Q Z \ d f     DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g     $,679:;<=DJPQSUX]}  "$&+-/138:;<=>?@ ; Q Z \ d f     DIJMPQSUVWXYZ[\]m !#%+-/139<>@2  Q [ ] e g     $&*,-24679:;<=DFGHIJMPQRSTUVWXYZ[\]  !"#$%&+-/1389:;<=>?@ ; Q Z [ \ ] d e f g  DIJMPQSUVWXYZ[\] !#%+-/139<>@2  Q [ ] e g $&*,24679:;<=DFGHJMPQRSTUVXYZ\]  !"#$&+-/1389:;<=>?@ ; Q Z [ \ ] d f  DFGHJPQRTVX[]m !#+-/13<>@2  [ ] $&*,24679:;<=IMPQRSUWXYZ[\]m}  "$%&+-/1389:;<=>?@ ; Q Z \ d e f g       DFIJMPQRSUVWXYZ[\]m} !#%+-/139<>@2  Q [ ] e g          $ & * , 2 4 6 7 9 : ; < = I M P Q R S U W X Y Z [ \ ] m }                                                            " $ % & + - / 1 3 8 9 : ; < = > ? @ ; Q Z \ d e f g           !!!!D!F!I!J!M!P!Q!R!S!U!V!W!X!Y!Z![!\!]!m!}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!#!%!+!-!/!1!3!9!<!>!@!2! ! Q! [! ]! e! g! ! ! ! ! ! !!!!!""""$"&"*","2"4"6"7"9":";"<"="I"M"P"Q"R"S"U"W"X"Y"Z"["\"]"m"}"""""""""""""""""""""""""""""""""""""""""""""" """"""""""" """$"%"&"+"-"/"1"3"8"9":";"<"=">"?"@" ;" Q" Z" \" d" e" f" g" " " " " " " """"####D#F#I#J#M#P#Q#R#S#U#V#W#X#Y#Z#[#\#]#m#}################################ #######!###%#+#-#/#1#3#9#<#>#@#2# # Q# [# ]# e# g# # # # # # #####$$$$$$&$*$,$-$2$4$6$9$:$;$<$=$D$F$G$H$I$J$P$Q$R$S$T$U$V$W$X$Y$Z$[$\$]$m$}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$ $!$"$#$%$+$-$/$1$3$8$9$:$;$<$=$>$?$@$ ;$ Q$ Z$ [$ \$ ]$ e$ g$ $ $ $ $$$$%D%F%G%H%I%J%P%Q%R%T%U%V%W%[%]%}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%!%#%%%<%>%@%2% % % [% ]% e% g% %%%%%&$&&&*&,&-&2&4&6&9&:&;&<&=&D&F&G&H&I&J&P&Q&R&S&T&U&V&W&X&Y&Z&[&\&]&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&& &!&"&#&%&+&-&/&1&3&8&9&:&;&<&=&>&?&@& ;& Q& Z& [& \& ]& e& g& & &&&&+F+G+H+R+T+++++++++++++++++++++++ ----F-G-H-R-T-m-}----------------------- - - - - - ////F/G/H/R/T/m/}/////////////////////// / / / / / 1F1G1H1R1T11111111111111111111111 3333F3G3H3R3T3m3}33333333333333333333333 3 3 3 3 3 8888$8&8*8,8-8284868;8=8D8F8G8H8I8J8P8Q8R8S8T8U8V8W8X8Y8Z8[8\8]8m8}8888888888888888888888888888888888888888888888888888888888888888888888 888888888888 8!8"8#8%8+8-8/8183898;8<8=8>8?8@8 ;8 Q8 Z8 [8 \8 ]8 e8 g8 8 8 88889999D9F9G9H9I9J9M9P9Q9R9S9T9U9V9W9X9[9]9m9}999999999999999999999999999999999999999 9999999!9#9%9+9-9/91939<9>9@929 9 9 Q9 [9 ]9 e9 g9 9 9 9 9 99999::::$:&:*:,:-:2:4:6:;:=:D:F:G:H:I:J:P:Q:R:S:T:U:V:W:X:Y:Z:[:\:]:m:}:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::: :!:":#:%:+:-:/:1:3:9:;:<:=:>:?:@: ;: Q: Z: [: \: ]: e: g: : : ::::;;;;m;}; ; ; ; ; <<<<D<F<G<H<I<J<M<P<Q<R<S<T<U<V<W<X<Y<Z<[<\<]<m<}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<!<#<%<+<-</<1<3<9<<<><@<2< < < Q< [< ]< e< g< < < < < < <<<<<====m=}= = = = = >>>>D>F>G>H>I>J>M>P>Q>R>S>T>U>V>W>X>Y>Z>[>\>]>m>}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>!>#>%>+>->/>1>3>9><>>>@>2> > > Q> [> ]> e> g> > > > > > >>>>>????&?*?,?2?4?6?D?F?G?H?I?J?M?P?Q?R?S?T?U?V?W?X?Y?Z?[?\?]?m?}???????????????????????????????????????????????????????????? ???????????? ?!?"?#?%?+?-?/?1?3?9?<?>?@? ;? Q? Z? [? \? ]? e? g? ? ? ? ? ? ????@@@@D@F@G@H@I@J@M@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@m@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@!@#@%@+@-@/@1@3@9@<@>@@@2@ @ @ Q@ [@ ]@ e@ g@ @ @ @ @ @ @@@@@y$y&y*y,y2y4y6y7y9y:y;y<y=yDyIyJyMyPyQyRySyUyVyWyXyYyZy[y\y]yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy yyyyyyyyyyyy y!y"y#y$y%y&y+y-y/y1y3y8y9y:y;y<y=y>y?y@y ;y Qy Zy [y \y ]y dy ey fy gy y yyyy$&*,-24679:;<=DFGHJPQRSTUVX[]m}  !"#$&+-/138:;<=>?@ ; Q Z [ \ ] d f      2222m2}2 2 2 2 2 jkjwj~jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkksks~sssssssssssssssssssssssssssssssssssssssssssssssssssssukuwu~uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuzkzwz~zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz~~k~kw~kw~kw~    $ & * , 2 4 6 7 9 : ; < = D I J M P Q R S U V W X Y Z [ \ ] m }                ! " # $ % & + - / 1 3 8 9 : ; < = > ? @ ; Q Z [ \ ] d e f g         $ & * , - 2 4 6 7 9 : ; < = D F G H I J M P Q R S T U V W X Y Z [ \ ]                                                                                    ! " # $ % & + - / 1 3 8 9 : ; < = > ? @  ;  Q  Z  [  \  ]  d  e  f  g       D H J P Q S U V X ]                               ! # + - / 1 3 < > @ 2  Q  [  ]    $ & * , - 2 4 6 9 : ; < = D F G H I J M P Q R S T U V W X Y Z [ \ ] m }                                                                                    ! " # % + - / 1 3 8 9 : ; < = > ? @  ;  Q  Z  [  \  ]  e  g              D F G H J P Q R T U V X [ ] m }                                              ! # + - / 1 3 < > @ 2    [  ]        F G H M P Q R S T U V X Y Z [ \ ] m }                                   ! # + - / 1 3 9 < > @ 2    Q  [  ]         ; ; ; ;F ;G ;H ;M ;P ;Q ;R ;S ;T ;U ;V ;X ;Y ;Z ;[ ;\ ;] ;m ;} ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;! ;# ;+ ;- ;/ ;1 ;3 ;9 ;< ;> ;@ ;2 ;  ; Q ; [ ; ] ; ; ; ; ;  ;  P P P P$ P& P* P, P- P2 P4 P6 P7 P9 P: P; P< P= PD PF PG PH PJ PP PQ PR PS PT PU PV PX P[ P] Pm P} P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P! P" P# P$ P& P+ P- P/ P1 P3 P8 P: P; P< P= P> P? P@ P ; P Q P Z P [ P \ P ] P d P f P P P P P  P  Q Q QM QP QQ QU QX QY QZ Q[ Q\ Q] Q Q Q Q Q Q Q Q Q Q Q Q+ Q- Q/ Q1 Q3 Q9 Q< Q> Q@ Q2 Q Q Q Q Z Z Z Z$ Z& Z* Z, Z2 Z4 Z6 Z7 Z9 Z: Z; Z< Z= ZI ZM ZP ZQ ZR ZS ZU ZW ZX ZY ZZ Z[ Z\ Z] Zm Z} Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z" Z$ Z% Z& Z+ Z- Z/ Z1 Z3 Z8 Z9 Z: Z; Z< Z= Z> Z? Z@ Z ; Z Q Z Z Z \ Z d Z e Z f Z g Z Z Z Z Z Z  Z  Z Z Z Z [ [ [ [D [F [I [J [M [P [Q [R [S [U [V [W [X [Y [Z [[ [\ [] [m [} [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [! [# [% [+ [- [/ [1 [3 [9 [< [> [@ [2 [  [ Q [ [ [ ] [ e [ g [ [ [ [ [  [  [ [ [ [ [ \ \ \ \$ \& \* \, \2 \4 \6 \7 \9 \: \; \< \= \I \M \P \Q \R \S \U \W \X \Y \Z \[ \\ \] \m \} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \" \$ \% \& \+ \- \/ \1 \3 \8 \9 \: \; \< \= \> \? \@ \ ; \ Q \ Z \ \ \ d \ e \ f \ g \ \ \ \ \ \  \  \ \ \ \ ] ] ] ]D ]F ]I ]J ]M ]P ]Q ]R ]S ]U ]V ]W ]X ]Y ]Z ][ ]\ ]] ]m ]} ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]! ]# ]% ]+ ]- ]/ ]1 ]3 ]9 ]< ]> ]@ ]2 ]  ] Q ] [ ] ] ] e ] g ] ] ] ] ]  ]  ] ] ] ] ] d d d d$ d& d* d, d- d2 d4 d6 d9 d: d; d< d= dD dF dG dH dI dJ dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] dm d} d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d! d" d# d% d+ d- d/ d1 d3 d8 d9 d: d; d< d= d> d? d@ d ; d Q d Z d [ d \ d ] d e d g d d d  d  d d d d eD eF eG eH eI eJ eP eQ eR eT eU eV eW e[ e] e} e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e! e# e% e< e> e@ e2 e  e  e [ e ] e e e g e  e e e e e f f f f$ f& f* f, f- f2 f4 f6 f9 f: f; f< f= fD fF fG fH fI fJ fP fQ fR fS fT fU fV fW fX fY fZ f[ f\ f] fm f} f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f! f" f# f% f+ f- f/ f1 f3 f8 f9 f: f; f< f= f> f? f@ f ; f Q f Z f [ f \ f ] f e f g f f f  f  f f f f gD gF gG gH gI gJ gP gQ gR gT gU gV gW g[ g] g} g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g! g# g% g< g> g@ g2 g  g  g [ g ] g e g g g  g g g g g $ & * , - 2 4 6 7 9 : ; < = D F G H I J M P Q R S T U V W X Y Z [ \ ]                ! " # $ % & + - / 1 3 8 9 : ; < = > ? @ ; Q Z [ \ ] d e f g        $ & * , - 2 4 6 ; = D F G H I J P Q R S T U V W X Y Z [ \ ] m }                ! " # % + - / 1 3 9 ; < = > ? @ ; Q Z [ \ ] e g          D F G H I J M P Q R S T U V W X [ ] m }          ! # % + - / 1 3 < > @ 2   Q [ ] e g        $ & * - 2 4 6 ; = D F G H J P Q R S T U V X ]                ! " # + - / 3 ; < = > ? @ 2 ; Q Z [ \ ] $ & * 2 4 6 9 : < D F G H J P Q R S T U V X Y Z [ \ ]                ! " # + - / 3 8 9 : < > @ 2 ; Q Z [ \ ] & * 2 4 6 7 9 : ; < = D F G H I J P Q R S T U V W X Y Z [ \ ]                ! " # $ % & + - / 3 8 9 : ; < = > ? @ 2  ; Q Z [ \ ] d e f g      $ & * - 2 4 6 ; = D F G H J P Q R S T U V X ]                ! " # + - / 3 ; < = > ? @ 2 ; Q Z [ \ ] & * 2 4 6 7 9 : ; < = D F G H I J P Q R S T U V W X Y Z [ \ ]                ! " # $ % & + - / 3 8 9 : ; < = > ? @ 2  ; Q Z [ \ ] d e f g      $ & * 2 4 6 7 9 : ; < = D F G H I J M P Q R S T U W X Y Z [ \ ]                                                                          " $ % & + - / 3 8 9 : ; < = > ? @ 2    ;  Q  Z  \  d  e  f  g        $ & * - 2 4 6 7 9 : ; < = D I J M P Q S U V W X Y Z [ \ ]                                                      ! " # $ % & + - / 3 8 9 : ; < = > ? @ 2    ;  Q  Z  [  \  ]  d  e  f  g       DFGHJPQRTUVX[]m} !#+-/13<>@2  [ ]  0FE%N   +e  -$E   t     J t 6   V   H      f H     !T" r$& :'$*j-Copyleft 2002, 2003, 2005, 2008, 2009, 2010 Free Software Foundation.Copyleft 2002, 2003, 2005, 2008, 2009, 2010 Free Software Foundation.FreeSansFreeSansMediumMediumFontForge 2.0 : Free Sans : 19-9-2010FontForge 2.0 : Free Sans : 19-9-2010Free SansFree SansVersion $Revision: 1.344 $ Version $Revision: 1.344 $ FreeSansFreeSansGNUGNUhttps://savannah.gnu.org/projects/freefont/https://savannah.gnu.org/projects/freefont/This computer font is part of GNU FreeFont. It is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.This computer font is part of GNU FreeFont. It 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 . As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.http://www.gnu.org/copyleft/gpl.htmlhttp://www.gnu.org/copyleft/gpl.htmlva?@O<V9NormalNormalNormalNavadnoNormlne1KG=K9NormalNormalOdmiana ZwykBaNormalnormalusisvidjsMediomenengahNormlMittelNormalNormaaliGemiddeldnormaloby ejn=>@<0;5=ArruntaP2  !"#$%&'()*+,-./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{|}~ softhyphenmicromiddotAmacronamacronAbreveabreveAogonekaogonek 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 scircumflexTcedillatcedillaTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018F Epsilonlatinuni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019EObarOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6Yoghuni01B8uni01B9uni01BAuni01BBuni01BEwynnuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFicaronuni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9Oogonekoogonekuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5Wynnuni01F8uni01F9 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208 idblgraveuni020Aiinvertedbreveuni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0224uni0225 A_dotaccent a_dotaccentuni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233dotlessjaturnascript ascriptturnbhookcturnccurldtaildhookerevschwa schwahook epsilonlatinepsilonlatinrevepsilonlatinrevhookepsilonlatinrevclosed jdotlessbarghookgscript Gsmallcap gammalatinramshornhturnhhookhenghookibar iotalatin Ismallcap lmidtildelbeltlrthooklezhmturnedmlonglegturnedmhook nhookleftnrthook Nsmallcapobar OEsmallcap omegaclosedphilatinrturnrlonglegturned rhookturnedrlonglegrhook rfishhook rfishhookrev Rsmallcap Rsmallcapinvshookeshdotlessjstrokehook eshshortreveshcurltturntrthookubar upsilonlatinvhookvturnwturnyturn Ysmallcapzrthookzcurlezhezhcurl glottalstopglottalstoprevinvglottalstopinvcstretch bilabialclick Bsmallcap epsilonclosed Gsmallhook Hsmallcap jcrosstailkturn Lsmallcapqhookglottalstopbarglottalstopbarrevdzaltonedezhdzcurltsteshtccurluni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFhsuper hhooksuperjsuperrsuper rturnsuperrturnrthooksuper Rturnsuperwsuperysuperprimemod dblprimemod quoteleftmod apostrophe apostropherev ringhalfright ringhalfleftglottalstopmodglottalstopreversedmodfrontedbackedraisedloweredverticallinemodmacronmodifier acutemodifier gravemodifierverticallinelowmod macronlowmodgravesubacutesubcolontriangularmodcolontriangularhalfmodringhalfrightcenteredringhalfleftcentered tackupmid tackdownmidplusmodminusmoduni02DEuni02DF gammasuperlsuperssuperxsuperglottalrevsuper toneextrahightonehightonemidtonelow toneextralowuni02EAuni02EBuni02ECuni02EDuni02EEuni02EFuni02F0uni02F1uni02F2uni02F3uni02F4uni02F5uni02F6uni02F7uni02F8uni02F9uni02FAuni02FBuni02FCuni02FDuni02FEuni02FF gravecomb acutecomb circumflexcmb tildecomb macroncmb overlinecmbbrevecmb dotaccentcmb diaeresiscomb hookabovecombringcmbhungarumlautcmbcaroncmbverticallineabovecmbdblverticallineabovecmb gravedblnospcandrabinducmbbreveinvertedcmbcommaturnedabovecmb psilicomb dasiacombcommaaboverightcmb gravebelowcmb acutebelowcmblefttackbelowcmbuni0319uni031Ahorncmbringlefthalfsubnospuptackbelowcmbuni031Euni031F minusbelowcmbhookpalatalizedbelowcmbhookretroflexbelowcmb dotbelowcombdieresisbelowcmb ringbelowcmb commasubnosp cedillacmb ogonekcmblinevertsubnospbridgebelowcmbdblarchinvertedbelowcmb caronbelowcmbcircumflexbelowcmb brevebelowcmbbreveinvertedbelowcmb tildebelowcmbmacronbelowcmb lowlinecmb dbllowlinecmbtildeoverlaycmbstrokeshortoverlaycmbstrokelongoverlaycmbsolidusshortoverlaycmbsoliduslongoverlaycmbringrighthalfsubnospbridgeinvertedbelowcmbsquarebelowcmbseagullbelowcmb xabovecmbtildeverticalcmbdbloverlinecmbuni0340uni0341uni0342uni0343diaeresistonosnospuni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0350uni0351uni0352uni0353uni0354uni0355uni0356uni0357uni0358uni0359uni035Auni035Buni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0363uni0364uni0365uni0366uni0367uni0368uni0369uni036Auni036Buni036Cuni036Duni036Euni036Funi0374uni0375 ypogegrammeniuni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonostheta1 UpsilonhookUpsilonhooktonosUpsilonhookdiaeresisphi1 pisymbolgreekuni03D7uni03F0rhosymbolgreekuni03f4uni03F5Iecyrillic_grave Iocyrillic Djecyrillic Gjecyrillic Ecyrillic Dzecyrillic Icyrillic Yicyrillic Jecyrillic Ljecyrillic Njecyrillic Tshecyrillic KjecyrillicIicyrillic_graveUshortcyrillic Dzhecyrillic Acyrillic Becyrillic Vecyrillic Gecyrillic Decyrillic Iecyrillic Zhecyrillic Zecyrillic IicyrillicIishortcyrillic Kacyrillic Elcyrillic Emcyrillic Encyrillic Ocyrillic Pecyrillic Ercyrillic Escyrillic Tecyrillic Ucyrillic Efcyrillic Khacyrillic Tsecyrillic Checyrillic Shacyrillic ShchacyrillicHardsigncyrillic YericyrillicSoftsigncyrillicEreversedcyrillic IUcyrillic IAcyrillic acyrillic becyrillic vecyrillic gecyrillic decyrillic iecyrillic zhecyrillic zecyrillic iicyrilliciishortcyrillic kacyrillic elcyrillic emcyrillic encyrillic ocyrillic pecyrillic ercyrillic escyrillic tecyrillic ucyrillic efcyrillic khacyrillic tsecyrillic checyrillic shacyrillic shchacyrillichardsigncyrillic yericyrillicsoftsigncyrillicereversedcyrillic iucyrillic iacyrilliciecyrillic_grave iocyrillic djecyrillic gjecyrillic ecyrillic dzecyrillic icyrillic yicyrillic jecyrillic ljecyrillic njecyrillic tshecyrillic kjecyrilliciicyrillic_graveushortcyrillic dzhecyrillic Omegacyrillic omegacyrillicuni0470uni0471 Fitacyrillic fitacyrillicOmegatitlocyrillicomegatitlocyrillic Otcyrillic otcyrillicthousandcyrillictitlocyrilliccmbpalatalizationcyrilliccmbdasiapneumatacyrilliccmbpsilipneumatacyrilliccmbuni0487uni0488uni0489uni048auni048buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04d9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFDzeabkhasiancyrillicuni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04f6uni04f7uni04F8uni04F9uni0510uni0511uni0512uni0513uni051auni051buni051cuni051duni051euni051funi0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564 echarmenianuni0566uni0567uni0568uni0569uni056A iniarmenianuni056C xeharmenianuni056Euni056Funi0570uni0571uni0572uni0573 menarmenianuni0575 nowarmenianuni0577uni0578uni0579uni057Auni057Buni057Cuni057D vewarmenianuni057Funi0580uni0581 yiwnarmenianuni0583uni0584uni0585uni0586echyiwnarmenianuni0589uni058A afii57799 afii57801 afii57800 afii57802 hiriqhebrew tserehebrew segolhebrew patahhebrew qamatshebrew holamhebrew afii57796 dageshhebrew afii57839 afii57645 rafehebrew afii57842 shindothebrew sindothebrewsofpasuqhebrewupperdothebrew alefhebrew bethebrew gimelhebrew dalethebrewhehebrew vavhebrew zayinhebrew hethebrew tethebrew yodhebrewfinalkafhebrew kafhebrew lamedhebrewfinalmemhebrew memhebrewfinalnunhebrew nunhebrew samekhhebrew ayinhebrew finalpehebrewpehebrew tsadifinal tsadihebrew qofhebrew reshhebrew shinhebrew tavhebrew vavvavhebrew vavyodhebrew yodyodhebrew gereshhebrewgershayimhebrewuni0700uni0701uni0702uni0703uni0704uni0705uni0706uni0707uni0708uni0709uni070Auni070Buni070Cuni070Duni070Funi0710uni0711uni0712uni0713uni0714uni0715uni0716uni0717uni0718uni0719uni071Auni071Buni071Cuni071Duni071Euni071Funi0720uni0721uni0722uni0723uni0724uni0725uni0726uni0727uni0728uni0729uni072Auni072Buni072Cuni0730uni0731uni0732uni0733uni0734uni0735uni0736uni0737uni0738uni0739uni073Auni073Buni073Cuni073Duni073Euni073Funi0740uni0741uni0742uni0743uni0744uni0745uni0746uni0747uni0748uni0749uni074Auni0900candrabindudeva anusvaradeva visargadevauni0904adevaaadevaidevaiidevaudevauudeva rvocalicdeva lvocalicdeva ecandradeva eshortdevaedevaaideva ocandradeva oshortdevaodevaaudevakadevakhadevagadevaghadevangadevacadevachadevajadevajhadevanyadevattadevatthadevaddadevaddhadevannadevatadevathadevadadevadhadevanadevannnadevapadevaphadevabadevabhadevamadevayadevaradevarradevaladevalladevallladevavadevashadevassadevasadevahadeva nuktadeva avagrahadevaaavowelsigndevaivowelsigndevaiivowelsigndevauvowelsigndevauuvowelsigndevarvocalicvowelsigndevarrvocalicvowelsigndevaecandravowelsigndevaeshortvowelsigndevaevowelsigndevaaivowelsigndevaocandravowelsigndevaoshortvowelsigndevaovowelsigndevaauvowelsigndeva viramadevauni094eomdeva udattadeva anudattadeva gravedeva acutedevauni0955qadevakhhadevaghhadevazadeva dddhadevarhadevafadevayyadeva rrvocalicdeva llvocalicdevalvocalicvowelsigndevauni0963uni0964dbldandazerodevaonedevatwodevauni0969uni096Auni096Bsixdevauni096D eightdevaninedevaabbreviationsigndevauni0971uni0972uni0979uni097auni097buni097cuni097duni097euni097fbn_candrabindu bn_anusvara bn_visargabn_abn_aabn_ibn_iibn_ubn_uubn_ribn_libn_ebn_aibn_obn_aubn_kabn_khabn_gabn_ghabn_ngabn_cabn_chabn_jabn_jhabn_nyabn_ttabn_tthabn_ddabn_ddhabn_nnabn_tabn_thabn_dabn_dhabn_nabn_pabn_phabn_babn_bhabn_mabn_yabn_rabn_labn_shabn_ssabn_sabn_habn_nukta bn_avagraha bn_aakaarbn_ikaar bn_iikaarbn_ukaar bn_uukaar bn_rikaar bn_rrikaarbn_ekaar bn_aikaarbn_okaar bn_aukaar bn_hasanta bn_half_ta bn_aumarkbn_rrabn_rhabn_yyabn_rribn_lli bn_likaar bn_llikaarbn_zerobn_onebn_twobn_threebn_fourbn_fivebn_sixbn_sevenbn_eightbn_nine bn_asamira bn_asamiba bn_rupeemark bn_rupeesign bn_currency1 bn_currency2 bn_currency3 bn_currency4bn_currencyless bn_currency16 bn_issharuni0A01 bindigurmukhiuni0A03 agurmukhi aagurmukhi igurmukhi iigurmukhi ugurmukhi uugurmukhi eegurmukhi aigurmukhi oogurmukhi augurmukhi kagurmukhi khagurmukhi gagurmukhi ghagurmukhi ngagurmukhi cagurmukhi chagurmukhi jagurmukhi jhagurmukhi nyagurmukhi ttagurmukhi tthagurmukhi ddagurmukhi ddhagurmukhi nnagurmukhi tagurmukhi thagurmukhi dagurmukhi dhagurmukhi nagurmukhi pagurmukhi phagurmukhi bagurmukhi bhagurmukhi magurmukhi yagurmukhi ragurmukhi lagurmukhiuni0A33 vagurmukhi shagurmukhi sagurmukhi hagurmukhi nuktagurmukhiaamatragurmukhiimatragurmukhiiimatragurmukhiumatragurmukhiuumatragurmukhieematragurmukhiaimatragurmukhioomatragurmukhiaumatragurmukhihalantgurmukhiuni0a51 khhagurmukhi ghhagurmukhi zagurmukhi rragurmukhi fagurmukhi zerogurmukhi onegurmukhi twogurmukhi threegurmukhi fourgurmukhi fivegurmukhi sixgurmukhi sevengurmukhi eightgurmukhi ninegurmukhi tippigurmukhi addakgurmukhi irigurmukhi uragurmukhiekonkargurmukhiuni0a75candrabindugujaratianusvaragujarativisargagujarati agujarati aagujarati igujarati iigujarati ugujarati uugujaratirvocalicgujaratiuni0a8cecandragujarati egujarati aigujaratiocandragujarati ogujarati augujarati kagujarati khagujarati gagujarati ghagujarati ngagujarati cagujarati chagujarati jagujarati jhagujarati nyagujarati ttagujarati tthagujarati ddagujarati ddhagujarati nnagujarati tagujarati thagujarati dagujarati dhagujarati nagujarati pagujarati phagujarati bagujarati bhagujarati magujarati yagujarati ragujarati lagujarati llagujarati vagujarati shagujarati ssagujarati sagujarati hagujarati nuktagujaratiuni0ABDaavowelsigngujaratiivowelsigngujaratiiivowelsigngujaratiuvowelsigngujaratiuuvowelsigngujaratiuni0AC3 guj_rrvocalicecandravowelsigngujaratievowelsigngujaratiaivowelsigngujaratiocandravowelsigngujaratiovowelsigngujaratiauvowelsigngujarativiramagujarati omgujaratirrvocalicgujaratiuni0ae1uni0ae2uni0ae3 zerogujarati onegujarati twogujarati threegujarati fourgujarati fivegujarati sixgujarati sevengujarati eightgujarati ninegujaratiuni0AF1uni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10f9uni10fbuni10fcuni13A0uni13A1uni13A2uni13A3uni13A4uni13A5uni13A6uni13A7uni13A8uni13A9uni13AAuni13ABuni13ACuni13ADuni13AEuni13AFuni13B0uni13B1uni13B2uni13B3uni13B4uni13B5uni13B6uni13B7uni13B8uni13B9uni13BAuni13BBuni13BCuni13BDuni13BEuni13BFuni13C0uni13C1uni13C2uni13C3uni13C4uni13C5uni13C6uni13C7uni13C8uni13C9uni13CAuni13CBuni13CCuni13CDuni13CEuni13CFuni13D0uni13D1uni13D2uni13D3uni13D4uni13D5uni13D6uni13D7uni13D8uni13D9uni13DAuni13DBuni13DCuni13DDuni13DEuni13DFuni13E0uni13E1uni13E2uni13E3uni13E4uni13E5uni13E6uni13E7uni13E8uni13E9uni13EAuni13EBuni13ECuni13EDuni13EEuni13EFuni13F0uni13F1uni13F2uni13F3uni13F4uni1401uni1402uni1403uni1404uni1405uni1406uni1407uni1408uni1409uni140Auni140Buni140Cuni140Duni140Euni140Funi1410uni1411uni1412uni1413uni1414uni1415uni1416uni1417uni1418uni1419uni141Auni141Buni141Cuni141Duni141Euni141Funi1420uni1421uni1422uni1423uni1424uni1425uni1426uni1427uni1428uni1429uni142Auni142Buni142Cuni142Duni142Euni142Funi1430uni1431uni1432uni1433uni1434uni1435uni1436uni1437uni1438uni1439uni143Auni143Buni143Cuni143Duni143Euni143Funi1440uni1441uni1442uni1443uni1444uni1445uni1446uni1447uni1448uni1449uni144Auni144Buni144Cuni144Duni144Euni144Funi1450uni1451uni1452uni1453uni1454uni1455uni1456uni1457uni1458uni1459uni145Auni145Buni145Cuni145Duni145Euni145Funi1460uni1461uni1462uni1463uni1464uni1465uni1466uni1467uni1468uni1469uni146Auni146Buni146Cuni146Duni146Euni146Funi1470uni1471uni1472uni1473uni1474uni1475uni1476uni1477uni1478uni1479uni147Auni147Buni147Cuni147Duni147Euni147Funi1480uni1481uni1482uni1483uni1484uni1485uni1486uni1487uni1488uni1489uni148Auni148Buni148Cuni148Duni148Euni148Funi1490uni1491uni1492uni1493uni1494uni1495uni1496uni1497uni1498uni1499uni149Auni149Buni149Cuni149Duni149Euni149Funi14A0uni14A1uni14A2uni14A3uni14A4uni14A5uni14A6uni14A7uni14A8uni14A9uni14AAuni14ABuni14ACuni14ADuni14AEuni14AFuni14B0uni14B1uni14B2uni14B3uni14B4uni14B5uni14B6uni14B7uni14B8uni14B9uni14BAuni14BBuni14BCuni14BDuni14BEuni14BFuni14C0uni14C1uni14C2uni14C3uni14C4uni14C5uni14C6uni14C7uni14C8uni14C9uni14CAuni14CBuni14CCuni14CDuni14CEuni14CFuni14D0uni14D1uni14D2uni14D3uni14D4uni14D5uni14D6uni14D7uni14D8uni14D9uni14DAuni14DBuni14DCuni14DDuni14DEuni14DFuni14E0uni14E1uni14E2uni14E3uni14E4uni14E5uni14E6uni14E7uni14E8uni14E9uni14EAuni14EBuni14ECuni14EDuni14EEuni14EFuni14F0uni14F1uni14F2uni14F3uni14F4uni14F5uni14F6uni14F7uni14F8uni14F9uni14FAuni14FBuni14FCuni14FDuni14FEuni14FFuni1500uni1501uni1502uni1503uni1504uni1505uni1506uni1507uni1508uni1509uni150Auni150Buni150Cuni150Duni150Euni150Funi1510uni1511uni1512uni1513uni1514uni1515uni1516uni1517uni1518uni1519uni151Auni151Buni151Cuni151Duni151Euni151Funi1520uni1521uni1522uni1523uni1524uni1525uni1526uni1527uni1528uni1529uni152Auni152Buni152Cuni152Duni152Euni152Funi1530uni1531uni1532uni1533uni1534uni1535uni1536uni1537uni1538uni1539uni153Auni153Buni153Cuni153Duni153Euni153Funi1540uni1541uni1542uni1543uni1544uni1545uni1546uni1547uni1548uni1549uni154Auni154Buni154Cuni154Duni154Euni154Funi1550uni1551uni1552uni1553uni1554uni1555uni1556uni1557uni1558uni1559uni155Auni155Buni155Cuni155Duni155Euni155Funi1560uni1561uni1562uni1563uni1564uni1565uni1566uni1567uni1568uni1569uni156Auni156Buni156Cuni156Duni156Euni156Funi1570uni1571uni1572uni1573uni1574uni1575uni1576uni1577uni1578uni1579uni157Auni157Buni157Cuni157Duni157Euni157Funi1580uni1581uni1582uni1583uni1584uni1585uni1586uni1587uni1588uni1589uni158Auni158Buni158Cuni158Duni158Euni158Funi1590uni1591uni1592uni1593uni1594uni1595uni1596uni1597uni1598uni1599uni159Auni159Buni159Cuni159Duni159Euni159Funi15A0uni15A1uni15A2uni15A3uni15A4uni15A5uni15A6uni15A7uni15A8uni15A9uni15AAuni15ABuni15ACuni15ADuni15AEuni15AFuni15B0uni15B1uni15B2uni15B3uni15B4uni15B5uni15B6uni15B7uni15B8uni15B9uni15BAuni15BBuni15BCuni15BDuni15BEuni15BFuni15C0uni15C1uni15C2uni15C3uni15C4uni15C5uni15C6uni15C7uni15C8uni15C9uni15CAuni15CBuni15CCuni15CDuni15CEuni15CFuni15D0uni15D1uni15D2uni15D3uni15D4uni15D5uni15D6uni15D7uni15D8uni15D9uni15DAuni15DBuni15DCuni15DDuni15DEuni15DFuni15E0uni15E1uni15E2uni15E3uni15E4uni15E5uni15E6uni15E7uni15E8uni15E9uni15EAuni15EBuni15ECuni15EDuni15EEuni15EFuni15F0uni15F1uni15F2uni15F3uni15F4uni15F5uni15F6uni15F7uni15F8uni15F9uni15FAuni15FBuni15FCuni15FDuni15FEuni15FFuni1600uni1601uni1602uni1603uni1604uni1605uni1606uni1607uni1608uni1609uni160Auni160Buni160Cuni160Duni160Euni160Funi1610uni1611uni1612uni1613uni1614uni1615uni1616uni1617uni1618uni1619uni161Auni161Buni161Cuni161Duni161Euni161Funi1620uni1621uni1622uni1623uni1624uni1625uni1626uni1627uni1628uni1629uni162Auni162Buni162Cuni162Duni162Euni162Funi1630uni1631uni1632uni1633uni1634uni1635uni1636uni1637uni1638uni1639uni163Auni163Buni163Cuni163Duni163Euni163Funi1640uni1641uni1642uni1643uni1644uni1645uni1646uni1647uni1648uni1649uni164Auni164Buni164Cuni164Duni164Euni164Funi1650uni1651uni1652uni1653uni1654uni1655uni1656uni1657uni1658uni1659uni165Auni165Buni165Cuni165Duni165Euni165Funi1660uni1661uni1662uni1663uni1664uni1665uni1666uni1667uni1668uni1669uni166Auni166Buni166Cuni166Duni166Euni166Funi1670uni1671uni1672uni1673uni1674uni1675uni1676uni1677uni1678uni1679uni167auni167buni167cuni167duni167euni167funi18b0uni18b1uni18b2uni18b3uni18b4uni18b5uni18b6uni18b7uni18b8uni18b9uni18bauni18bbuni18bcuni18bduni18beuni18bfuni18c0uni18c1uni18c2uni18c3uni18c4uni18c5uni18c6uni18c7uni18c8uni18c9uni18cauni18cbuni18ccuni18cduni18ceuni18cfuni18d0uni18d1uni18d2uni18d3uni18d4uni18d5uni18d6uni18d7uni18d8uni18d9uni18dauni18dbuni18dcuni18dduni18deuni18dfuni18e0uni18e1uni18e2uni18e3uni18e4uni18e5uni18e6uni18e7uni18e8uni18e9uni18eauni18ebuni18ecuni18eduni18eeuni18efuni18f0uni18f1uni18f2uni18f3uni18f4uni18f5uni1E00uni1E01 Bdotaccent bdotaccentuni1E04uni1E05uni1E06uni1E07uni1E08uni1E09 Ddotaccent ddotaccentuni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1D Fdotaccent fdotaccentuni1E20uni1E21 Hdotaccent hdotaccentuni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Eidieresisacuteuni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3F Mdotaccent mdotaccentuni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55 Pdotaccent pdotaccent Rdotaccent rdotaccentuni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5F Sdotaccent sdotaccent Sdotbelow sdotbelowuni1E64uni1E65uni1E66uni1E67uni1E68uni1E69 Tdotaccent tdotaccent Tdotbelow tdotbelowuni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8D Ydotaccent ydotaccentuni1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1e9auni1E9B Adotbelow adotbelow Ahookabove ahookaboveAcircumflexacuteacircumflexacuteAcircumflexgraveacircumflexgraveAcircumflexhookaboveacircumflexhookaboveAcircumflextildeacircumflextildeAcircumflexdotbelowacircumflexdotbelow Abreveacute abreveacute Abrevegrave abrevegraveAbrevehookaboveabrevehookabove Abrevetilde abrevetildeAbrevedotbelowabrevedotbelow Edotbelow edotbelow Ehookabove ehookaboveEtildeetildeEcircumflexacuteecircumflexacuteEcircumflexgraveecircumflexgraveEcircumflexhookaboveecircumflexhookaboveEcircumflextildeecircumflextildeEcircumflexdotbelowecircumflexdotbelow Ihookabove ihookabove Idotbelow idotbelow Odotbelow odotbelow Ohookabove ohookaboveOcircumflexacuteocircumflexacuteOcircumflexgraveocircumflexgraveOcircumflexhookaboveocircumflexhookaboveOcircumflextildeocircumflextildeOcircumflexdotbelowocircumflexdotbelow Ohornacute ohornacute Ohorngrave ohorngraveOhornhookaboveohornhookabove Ohorntilde ohorntilde Ohorndotbelow ohorndotbelow Udotbelow udotbelow Uhookabove uhookaboveuni1EE8 uhornacute Uhorngrave uhorngraveUhornhookaboveuhornhookabove Uhorntilde uhorntilde Uhorndotbelow uhorndotbelowYgraveygrave Ydotbelow ydotbelow Yhookabove yhookaboveYtildeytildeuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBClenisprosgegrammenipsili perispomenidialytikaperispomeniuni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCC psilivaria psilioxiapsiliperispomeniuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDB dasiavaria dasiaoxiadasiaperispomeniuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECdialytikavaria dialytikaoxiavariauni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCoxiadasiaenquademquadenspaceemspacethreeperemspacefourperemspace sixperemspace figurespacepunctuationspace thinspace hairspacezerowidthspacezerowidthnonjoinerzerojoinuni200Euni200F hyphentwo hyphennobreak figuredash quotedashdblverticalbar underscoredbl quotereversed quotedblrevtrianglebulletonedotenleadertwodotenleader hyphendot lineseparatorparagraphseparatorlrerlepdflrorlouni202Fpertenthousandprimesecond primetripleprimerev primedblrevprimetriplerevcaret referencemark exclamdbl interrobangoverlineuni203Ftie caretinsertasterism hyphenbulletuni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Fclosureuni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni2064 zerosuperioruni2071 foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior plussuperior minussuperior equalsuperiorparenleftsuperiorparenrightsuperior nsuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferior plusinferioruni208B equalinferiorparenleftinferiorparenrightinferioruni2090uni2091uni2092uni2093uni2094 colonmonetarycruzeiroliramilluni20A6pesetauni20A8won afii57636dongEurouni20ADuni20AEuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20b8leftharpoonaccentrightharpoonaccentuni20D2uni20D3uni20d4uni20d5uni20D6uni20D7uni20d8uni20d9uni20dauni20DBuni20DCuni20DDuni20DEuni20DFuni20E0uni20E1uni20e4uni20E5uni20E6uni20E7uni20E8uni20E9uni20EAuni20EBuni20ECuni20EDuni20EEuni20EFuni20F0 accountofaddresssubjectCbb centigradeCLcareofcadaunaEulerscruple fahrenheitHscript HblackletterHbbplanck planckover2piIscriptIfrakturLscriptlitrelbbarNbbnumero recordright weierstrassPbbQbbRscriptRfrakturRbb prescriptionresponse servicemark telephoneversicleZbbOhmmho Zblackletteriotaturn degreekelvinangstromBscript Cblackletter estimatedescriptEscriptFscriptFturnMscript alephmathbethmath gimelmath dalethmathuni2139uni213auni213buni213cuni213euni213funi2141uni2142uni2143uni2144uni214auni214buni214duni214eonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217F arrowleftarrowup arrowright arrowdown arrowboth arrowupdn arrowupleft arrowuprightarrowdownright arrowdownleft arrowbarright arrowhookleftarrowhookrightcarriagereturnharpoonleftbarbuparrowleftbothalfharpoonupright harpoonupleftharpoonrightbarbuparrowrightbothalfharpoondownrightharpoondownleftharpoonrightleft arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblboth arrowdblbothvarrowsquiggleright universal existentialemptyset Delta.mathgradientelement notelementuni220Asuchthat notcontains ownersmalluni2210uni2213dotplus slashmath backslashmath asteriskmathuni2219 proportionalangledividesnotbarparallel notparallel logicaland logicalor intersectionunionuni222Cuni222Duni222E thereforesimilar reversedtildelazysinv wreathproduct notsimilaruni2242 asymptequalnotasymptequal congruentapproxnotequalnotapproxequaluni2249equivasymptotic approaches equivalence notidenticalmuchless muchgreaternotequivasymptoticnotless notgreater notlessequalnotgreaterequaluni2272uni2273precedesfollows precedesequal followsequal notprecedes notsucceedssubsetsuperset notsubset notsuperset reflexsubsetreflexsuperset notsubseteqlnotsuperseteqluni228C squareimagesquareoriginal subsetsqequalsupersetsqequalintersectionsqunionsq circleplusuni2296circlemultiply circledivide circledot turnstilelefttacklefttackdown perpendicular assertion truestate triangleright trianglelefttriangleftequaltriangrightequalnarylogicaland narylogicalornaryintersection naryuniondotmathuni22C6bowtiepreceedsnotequalfollowsnotequalnotsubsetsqequalnotsupersetsqequaluni2300 ceilingleft ceilingright floorleft floorright integraltp integralbtfrown slurbelow angleleft anglerightuni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23AEuni2400uni2401uni2402uni2403uni2404uni2405uni2406uni2407uni2408uni2409uni240auni240buni240cuni240duni240euni240funi2410uni2411uni2412uni2413uni2414uni2415uni2416uni2417uni2418uni2419uni241auni241buni241cuni241duni241euni241funi2420uni2421blankbblankuni2424uni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254BSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000upblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxsquare boxrounded boxnestedsquarehorizontalfillsquareverticalfillsquareorthogonalcrosshatchfillboxleftdiaghatchboxrtdiaghatchboxcrossdiaghatchsquaresmallsolidwhitesmallsquare filledrect rectanglefilledvertrect vertrectanglefilledparallelogram parallelogram trianglesolidtrianglesmalltrianglesld smalltriangleblackrightpointingtrianglewhiterightpointingtrianglesmalltrianglerightsldsmalltrianglerightblackrightpointingpointer triagrtopentriangledownsld triangleinvsmalltriangleinvsldsmalltriangleinvblackleftpointingtrianglewhiteleftpointingtrianglesmalltriangleleftsldsmalltriangleleftblackleftpointingpointer triaglfopen diamondsolid diamondrhombdiamondrhombnestedfisheyecircle dottedcirclecircleverthatchbullseye circlesolid circleleftsldcirclerightsldcirclebottomsld circletopsld circlenesld circlenwopensemicircleleftsldsemicirclelertsld bulletinversewhitecircleinverseinvsemicircleupinvsemicircledn nwquadarc nequadarc sequadarc swquadarctoparc bottomarc trianglesesld triangleswsld tranglenwsld trianglenesld whitebullet squareleftsldsquarerightsld squarenwsld squaresesldsquarevertbisect triangledottriangleleftsldtrianglerightsld largecircleuni25f0uni25f1uni25f2uni25f3uni25f4uni25f5uni25f6uni25f7uni25f8uni25f9uni25fauni25fbuni25fcuni25fduni25feuni25ffuni262Cspade heartopen diamondopenclubspadesuitwhiteheartdiamond clubsuitwhiteuni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2740uni2A00uni2A01uni2A02uni2A03uni2A04uni2A09uni2D30uni2D31uni2D32uni2D33uni2D34uni2D35uni2D36uni2D37uni2D38uni2D39uni2D3Auni2D3Buni2D3Cuni2D3Duni2D3Euni2D3Funi2D40uni2D41uni2D42uni2D43uni2D44uni2D45uni2D46uni2D47uni2D48uni2D49uni2D4Auni2D4Buni2D4Cuni2D4Duni2D4Euni2D4Funi2D50uni2D51uni2D52uni2D53uni2D54uni2D55uni2D56uni2D57uni2D58uni2D59uni2D5Auni2D5Buni2D5Cuni2D5Duni2D5Euni2D5Funi2D60uni2D61uni2D62uni2D63uni2D64uni2D65uni2D6Funi2E17uniA500uniA501uniA502uniA503uniA504uniA505uniA506uniA507uniA508uniA509uniA50AuniA50BuniA50CuniA50DuniA50EuniA50FuniA510uniA511uniA512uniA513uniA514uniA515uniA516uniA517uniA518uniA519uniA51AuniA51BuniA51CuniA51DuniA51EuniA51FuniA520uniA521uniA522uniA523uniA524uniA525uniA526uniA527uniA528uniA529uniA52AuniA52BuniA52CuniA52DuniA52EuniA52FuniA530uniA531uniA532uniA533uniA534uniA535uniA536uniA537uniA538uniA539uniA53AuniA53BuniA53CuniA53DuniA53EuniA53FuniA540uniA541uniA542uniA543uniA544uniA545uniA546uniA547uniA548uniA549uniA54AuniA54BuniA54CuniA54DuniA54EuniA54FuniA550uniA551uniA552uniA553uniA554uniA555uniA556uniA557uniA558uniA559uniA55AuniA55BuniA55CuniA55DuniA55EuniA55FuniA560uniA561uniA562uniA563uniA564uniA565uniA566uniA567uniA568uniA569uniA56AuniA56BuniA56CuniA56DuniA56EuniA56FuniA570uniA571uniA572uniA573uniA574uniA575uniA576uniA577uniA578uniA579uniA57AuniA57BuniA57CuniA57DuniA57EuniA57FuniA580uniA581uniA582uniA583uniA584uniA585uniA586uniA587uniA588uniA589uniA58AuniA58BuniA58CuniA58DuniA58EuniA58FuniA590uniA591uniA592uniA593uniA594uniA595uniA596uniA597uniA598uniA599uniA59AuniA59BuniA59CuniA59DuniA59EuniA59FuniA5A0uniA5A1uniA5A2uniA5A3uniA5A4uniA5A5uniA5A6uniA5A7uniA5A8uniA5A9uniA5AAuniA5ABuniA5ACuniA5ADuniA5AEuniA5AFuniA5B0uniA5B1uniA5B2uniA5B3uniA5B4uniA5B5uniA5B6uniA5B7uniA5B8uniA5B9uniA5BAuniA5BBuniA5BCuniA5BDuniA5BEuniA5BFuniA5C0uniA5C1uniA5C2uniA5C3uniA5C4uniA5C5uniA5C6uniA5C7uniA5C8uniA5C9uniA5CAuniA5CBuniA5CCuniA5CDuniA5CEuniA5CFuniA5D0uniA5D1uniA5D2uniA5D3uniA5D4uniA5D5uniA5D6uniA5D7uniA5D8uniA5D9uniA5DAuniA5DBuniA5DCuniA5DDuniA5DEuniA5DFuniA5E0uniA5E1uniA5E2uniA5E3uniA5E4uniA5E5uniA5E6uniA5E7uniA5E8uniA5E9uniA5EAuniA5EBuniA5ECuniA5EDuniA5EEuniA5EFuniA5F0uniA5F1uniA5F2uniA5F3uniA5F4uniA5F5uniA5F6uniA5F7uniA5F8uniA5F9uniA5FAuniA5FBuniA5FCuniA5FDuniA5FEuniA5FFuniA600uniA601uniA602uniA603uniA604uniA605uniA606uniA607uniA608uniA609uniA60AuniA60BuniA60CuniA60DuniA60EuniA60FuniA610uniA611uniA612uniA613uniA614uniA615uniA616uniA617uniA618uniA619uniA61AuniA61BuniA61CuniA61DuniA61EuniA61FuniA620uniA621uniA622uniA623uniA624uniA625uniA626uniA627uniA628uniA629uniA62AuniA62B lowcircumflex colonmodifier shortequalsSaltillosaltillocresc_cyrillic dot_cyrillictitlo_cyrillicyi_yi_lig_ukrainian ucas.ringucas.horizlineucas.shortvertucas.righttack ucas.lefttack NameMe.E968 NameMe.E969 NameMe.96A bn_initekaar bn_initaikaarbn_reph bn_kaphala bn_nnaphala bn_taphala bn_thaphala bn_thaphala1 bn_dhaphala bn_naphala bn_below_ba bn_bhaphala bn_raphala bn_laphala bn_half_ka bn_half_kha bn_half_ga bn_half_gha bn_half_nga bn_half_ca bn_half_ca1 bn_half_cha bn_half_ja bn_half_jha bn_half_nya bn_half_tta bn_half_ttha bn_half_dda bn_half_ddha bn_half_nna bn_half_tha bn_half_dha bn_half_da bn_half_na bn_half_pa bn_half_pha bn_half_ba bn_half_bha bn_half_ma bn_half_ya bn_half_ra bn_half_la bn_half_sha bn_half_ssa bn_half_sa bn_half_ha bn_half_rra bn_half_rha bn_half_yyabn_half_asamirabn_half_asamiba bn_khaphala bn_phaphala bn_baphala1 bn_maphala bn_maphala1 bn_yaphalabn_k_rabn_k_ra1bn_kh_rabn_g_rabn_gh_rabn_c_rabn_ch_rabn_j_rabn_tt_ra bn_tth_rabn_dd_ra bn_ddh_rabn_t_rabn_t_ra1bn_th_rabn_d_rabn_dh_rabn_n_rabn_n_ra1bn_p_rabn_ph_rabn_b_rabn_bh_ra bn_bh_ra1bn_m_rabn_y_rabn_sh_rabn_ss_rabn_s_rabn_s_ra1bn_h_ra bn_asamir_ra bn_asamib_ra bn_k_ss_rabn_k_kabn_k_tta bn_k_tt_rabn_k_tabn_k_ta1 bn_k_t_ba bn_k_t_ba1 bn_k_t_ra bn_k_t_ra1 bn_k_t_ra2bn_k_nabn_k_mabn_k_labn_k_ssa bn_k_ss_nna bn_k_ss_mabn_k_sabn_g_gabn_g_dabn_g_dha bn_g_dh_babn_g_labn_g_nabn_g_mabn_gh_nabn_ng_ka bn_ng_k_ra bn_ng_k_ssa bn_ng_k_ss_ra bn_ng_khabn_ng_ga bn_ng_gha bn_ng_gh_rabn_ng_ma bn_ng_ma1bn_c_cabn_c_cha bn_c_ch_ba bn_c_ch_rabn_c_nyabn_c_nabn_j_ja bn_j_j_babn_j_jhabn_j_nyabn_ny_ca bn_ny_chabn_ny_ja bn_ny_jha bn_tt_tta bn_tt_tt_rabn_tt_mabn_dd_ga bn_dd_ddabn_dd_ma bn_nn_tta bn_nn_tt_ra bn_nn_ttha bn_nn_dda bn_nn_dda1 bn_nn_dd_ra bn_nn_dd_ra1 bn_nn_ddha bn_nn_nnabn_nn_mabn_t_ta bn_t_t_babn_t_thabn_t_nabn_t_mabn_t_ma1bn_t_labn_d_gabn_d_ghabn_d_da bn_d_d_ba bn_d_d_rabn_d_dha bn_d_dh_babn_d_nabn_d_bha bn_d_bh_ra bn_d_bh_ra1bn_d_mabn_dh_nabn_dh_mabn_n_tta bn_n_tt_ra bn_n_tthabn_n_dda bn_n_dd_ra bn_n_ddhabn_n_ta bn_n_t_ba bn_n_t_ra bn_n_t_ra1bn_n_thabn_n_da bn_n_d_ba bn_n_d_rabn_n_dha bn_n_dh_ba bn_n_dh_rabn_n_nabn_n_mabn_n_ma1bn_n_sabn_p_ttabn_p_tabn_p_pabn_p_mabn_p_nabn_p_labn_p_sa bn_ph_ttabn_ph_labn_b_jabn_b_da bn_b_d_rabn_b_dhabn_b_nabn_b_bhabn_b_labn_bh_labn_m_tabn_m_thabn_m_dabn_m_nabn_m_na1bn_m_pa bn_m_p_ra bn_m_p_labn_m_pha bn_m_ph_rabn_m_bha bn_m_bh_ra bn_m_bh_ra1bn_m_mabn_m_ma1bn_m_labn_m_la1bn_m_sa bn_m_s_rabn_l_kabn_l_gabn_l_tta bn_l_tt_rabn_l_dda bn_l_dd_rabn_l_tabn_l_dabn_l_dhabn_l_pabn_l_pha bn_l_ph_rabn_l_mabn_l_labn_sh_ca bn_sh_chabn_sh_tabn_sh_nabn_sh_mabn_sh_labn_ss_ka bn_ss_k_ra bn_ss_k_ra1 bn_ss_tta bn_ss_tta1 bn_ss_tt_ra bn_ss_tt_ra1 bn_ss_ttha bn_ss_nnabn_ss_pa bn_ss_p_ra bn_ss_pha bn_ss_ph_rabn_ss_ma bn_ss_ma1bn_s_ka bn_s_k_ra bn_s_k_ra1bn_s_khabn_s_tta bn_s_tta1 bn_s_tt_ra bn_s_tt_ra1bn_s_ta bn_s_t_ba bn_s_t_ra bn_s_t_ra1bn_s_thabn_s_nabn_s_na1bn_s_pa bn_s_p_ra bn_s_p_labn_s_pha bn_s_ph_rabn_s_mabn_s_ma1bn_s_labn_s_la1bn_h_nnabn_h_nabn_h_mabn_h_labn_h_la1bn_rr_gabn_k_babn_g_babn_gh_babn_c_babn_ch_babn_j_babn_tt_babn_dd_babn_nn_babn_t_babn_th_babn_d_babn_dh_ba bn_dh_ba1bn_n_babn_n_ba1bn_p_babn_b_babn_bh_babn_m_ba bn_m_b_rabn_m_ba1 bn_m_b_ra1bn_l_babn_sh_babn_s_babn_s_ba1bn_h_babn_h_ba1 bn_kh_r_ukaarbn_kh_r_uukaar bn_g_ukaar bn_g_r_ukaar bn_g_r_uukaar bn_g_l_ukaar bn_g_l_uukaar bn_j_r_ukaar bn_j_r_uukaar bn_t_r_ukaar bn_t_r_uukaar bn_th_r_ukaarbn_th_r_uukaar bn_d_ukaar bn_d_r_ukaar bn_d_r_uukaar bn_dh_r_ukaarbn_dh_r_uukaar bn_n_ukaar bn_n_uukaar bn_n_rikaar bn_n_t_ukaarbn_n_d_r_ukaarbn_n_d_r_uukaar bn_p_r_ukaar bn_p_r_uukaar bn_p_l_ukaar bn_p_l_uukaar bn_b_r_ukaar bn_b_r_uukaar bn_b_l_ukaar bn_b_l_uukaar bn_bh_r_ukaarbn_bh_r_uukaar bn_m_r_ukaar bn_m_r_uukaarbn_m_p_r_ukaarbn_m_p_r_uukaar bn_r_ukaar bn_r_uukaar bn_l_g_ukaar bn_sh_ukaar bn_sh_r_ukaarbn_sh_r_uukaar bn_sh_l_ukaarbn_sh_l_uukaarbn_ss_p_r_ukaarbn_ss_p_r_uukaar bn_s_ukaar bn_s_uukaar bn_s_rikaar bn_s_t_ukaar bn_s_r_ukaar bn_s_r_uukaarbn_s_p_r_ukaarbn_s_p_r_uukaarbn_s_p_l_ukaarbn_s_p_l_uukaar bn_s_l_ukaar bn_s_l_uukaar bn_h_ukaar bn_h_rikaarbn_asamir_ukaarbn_asamir_uukaarbn_asamib_ukaarbn_asamib_uukaarbn_asamib_r_ukaarbn_asamib_r_uukaar bn_k_hasanta bn_kh_hasanta bn_g_hasanta bn_gh_hasanta bn_ng_hasanta bn_c_hasanta bn_ch_hasanta bn_j_hasanta bn_jh_hasanta bn_ny_hasanta bn_tt_hasantabn_tth_hasanta bn_dd_hasantabn_ddh_hasanta bn_nn_hasanta bn_t_hasanta bn_th_hasanta bn_d_hasanta bn_dh_hasanta bn_n_hasanta bn_p_hasanta bn_ph_hasanta bn_b_hasanta bn_bh_hasanta bn_m_hasanta bn_y_hasanta bn_r_hasanta bn_l_hasanta bn_sh_hasanta bn_ss_hasanta bn_s_hasanta bn_h_hasanta bn_rr_hasanta bn_rh_hasanta bn_yy_hasantabn_asamir_hasantabn_asamib_hasanta bn_post_k_raglyph569glyph570glyph571glyph572glyph57487 bn_baphala bn_below_ba2glyph578glyph579glyph580glyph581glyph582glyph583 bn_sh_ra.001bn_yaphala.002bn_d_yabn_n_ya bn_la.001bn_sh_yabn_ss_yabn_s_yaglyph593bn_h_yaglyph595 bn_ss_tta.002glyph597glyph598 bn_uukaar.1glyph600Adeva002Adeva003 deva_tta_nuktdeva_ttha_nukta.nuktglyph240glyph241deva_ii_anusvara.abvsdeva_e_candra_bindu.abvsdeva_o_cand_bindu.abvsdeva_au_ra_virama_candra_bindudeva_ai_ra_virama_candra_bindudeva_ra_virama_candra_binduhadeva_viramadeva.halnchadeva_virama.nuktchadeva_viramadeva.halnhadeva_rrvoc_ic_deva.blwskadeva_viramadeva_ssadeva.akhnjadeva_viramadeva_nyadeva.akhnuni924_94D.half_924.presuni924_930_94D.blwf.vatuuni936_94D.half_91A.presuni936_930_94D.blwf.vatuuni936_94D.half_935.presuni95B_930_94D.blwf.vatuuni92B_930_94D.blwf.vatuuni95E_930_94D.blwf.vatuuni92A_930_94D.blwf.vatuuni938_930_94D.blwf.vatudeva_ra_u.blwsdeva_ra_uu.blwsuni915_94D.half_928.preskhadeva_094D.half_0928.presghadeva_094D.half_0928.presglyph269deva_ka_virama.halfdeva_kha_virama.halfdeva_ga_virama.halfdeva_gha_virama.halfdeva_ca_virama.halfglyph275deva_ja_virama.halfdeva_jha_virama.halfdeva_nya_virama.halftadeva_094D.half_0928.presthadeva_094D.half_0928.presdadeva_094D.half_0928.presdeva_dha_094D.half_0928.presdeva_nna_virama.halfdeva_ta_virama.halfdeva_tha_virama.halfuni926_94D.hlf2_926_94D.presdeva_dha_virama.halfdeva_na_virama.halfglyph289deva_pa_virama.halfdeva_pha_virama.halfdeva_ba_virama.halfdeva_bha_virama.halfdeva_ma_virama.halfdeva_ya_virama.halfpadeva_094D.half_0928.presglyph297deva_la_virama.halfdeva_lla_virama.halfdeva_llla_virama.halfdeva_va_virama.halfdeva_sha_virama.halfdeva_ssa_virama.halfdeva_sa_virama.halfdeva_ha_virama.halfglyph306badeva_094D.half_0928.presglyph308madeva_094D.half_0928.presvadeva_094D.half_0928.presshadeva_094D.half_0928.preskadeva_094D.half_0915.presngadeva_094D.half_0915.presngadeva_094D.half_0916.presngadeva_094D.half_0917.presngadeva_094D.half_0918.presnyadeva_094D.half_091C.presdadeva_094D.half_0918.presdadeva_094D.half_0926.presdadeva_094D.half_0927.presdadeva_094D.half_092C.presdadeva_094D.half_092D.presdadeva_094D.half_092E.presdadeva_094D.half_092F.presdadeva_094D.half_0935.presttadeva_094D.half_091F.presttadeva_094D.half_0920.prestthadeva_094D.half_0920.presglyph329glyph330glyph331hadeva_094D.half_092E.preshadeva_094D.half_092F.presladeva_094D.half_0939.presglyph335u9_38_4D.hlf_24_4D_30prespresglyph337ra_viramadeva_afii301.halfu91A_94D.hlf2_91A_94D.halfsadeva_0928_094D.half.presglyph341glyph342glyph343glyph344glyph345glyph346glyph347glyph348glyph349uni915_94D_937.akhn_94D.halfu91C_94D_91E.akhn_94D.halfglyph352u924_94D.half_930_94D.blwf.vatuglyph354glyph355glyph356glyph357glyph358glyph359uni939_930_94D.blwf.blwsdeva_ra_virama.rphfdeva_ra_virama.blwfdeva_aa_candrabindu.abvsdeva_aa_anusvara.abvsglyph365glyph366glyph367glyph368glyph369deva_e_anusvara.abvsglyph371glyph372deva_ai_anusvara.abvsglyph374glyph375glyph376glyph377glyph378u9_38_4Dhalf1F_30_4Dblwfvtu2glyph380nadeva_094D.half_0928.presnga_viramadeva.halftta_viramadeva.halfttha_viramadeva.halfdda_viramadeva.halfddha_viramadeva.halfda_viramadeva.halfuni915_930_94D.blwf.vatuuni916_930_94D.blwf.presuni917_930_94D.blwf.presuni918_930_94D.blwf.vatuuni919_930_94D.blwf.vatuuni91A_930_94D.blwf.vatuuni91B_930_94D.blwf.vatuuni91C_930_94D.blwf.vatuuni91D_930_94D.blwf.vatuuni91E_930_94D.blwf.vatuuni91F_930_94D.blwf.vatuuni920_930_94D.blwf.vatuuni921_930_94D.blwf.vatuglyph402uni923_930_94D.blwf.vatutadeva_viramadeva_radeva.presuni925_930_94D.blwf.vatuuni926_930_94D.blwf.vatuuni927_930_94D.blwf.vatuuni928_930_94D.blwf.vatuuni92C_930_94D.blwf.vatuuni92D_930_94D.blwf.vatuuni92E_930_94D.blwf.vatuuni92F_930_94D.blwf.vatuuni930_930_94D.blwf.vatuuni932_930_94D.blwf.vatuuni936_94D.hlf2_932_94D.presuni937_94D.half_91F.presuni937_94D.half_920.presglyph418glyph419glyph420uni936_94D.hlf2_928_94D.presu938_4D.hlff24_4D.30_4Dbfvtuprsu926_94D.half_92E_94D.half.presuni924_94D.hlf2_928_94D.presuni939_94D.half_923.presuni939_94D.half_932.presuni939_94D.half_935.presu92A_94D.half_924_94D.half.presuni939_94D.half_928.presu939_94D.half_92E_94D.half.presu92A_94D.half_930_94D.blwf.vatungadeva_nuktadeva.nukt hadeva_nukt dadeva_nuktttadeva_nukt.halnuni920_93C.nukt_94D.halndddhadeva_viramadeva.halnrhadeva_viramadeva.halndadeva_nukt_viramauni939_93C.nukt_94D.halnuni919_93C.nukt_94D.halnu937_94D.half_91F.pres_94D.halnu937_94D.half_920.pres_94D.halnu939_94D.half_923.pres_94D.halnu939_94D.half_928.pres_94D.halnu939_94D.half_932.pres_94D.halnu939_94D.half_935.pres_94D.halnphadev_nuktadev_vir_dev.nuktjadev_nuktadev_vir_dev.nuktkagujarati_viramagujarati.halfkhagujarati_viramagujarati.halfgagujarati_viramagujarati.halfghagujarati_viramagujarati.halfcagujarati_viramagujarati.halfjagujarati_viramagujarati.halfjhagujarati_viramagujarati.halfnyagujarati_viramagujarati.halfnnagujarati_viramagujarati.halftagujarati_viramagujarati.halfthagujarati_viramagujarati.halfdhagujarati_viramagujarati.halfnagujarati_viramagujarati.halfpagujarati_viramagujarati.halfphagujarati_viramagujarati.halfbagujarati_viramagujarati.halfbhagujarati_viramagujarati.halfmagujarati_viramagujarati.halfyagujarati_viramagujarati.halflagujarati_viramagujarati.halfllagujarati_viramagujarati.halfvagujarati_viramagujarati.halfshagujarati_viramagujarati.halfssagujarati_viramagujarati.halfsagujarati_viramagujarati.halfhagujarati_viramagujarati.halfuniA95_ACD_AB7.akhn_ACD.halfuAA4_ACD.half_AA4_ACD.half.presuniAA4_ACD.half_AB0_ACD.vatuuAA8_ACD.half_AA8.pres_ACD.presuAB6_ACD.half_AB0_ACD.blwf.vatuuA96_ACD.half_AB0_ACD.blwf.vatuuA97_ACD.half_AB0_ACD.blwf.vatuuA98_ACD.half_AB0_ACD.blwf.vatuuA9A_ACD.half_AB0_ACD.blwf.vatuuA9C_ACD.half_AB0_ACD.blwf.vatuuAA5_ACD.half_AB0_ACD.blwf.vatuuAA7_ACD.half_AB0_ACD.blwf.vatuuAA8_ACD.half_AB0_ACD.blwf.vatuuAAA_ACD.half_AB0_ACD.blwf.vatuuAAC_ACD.half_AB0_ACD.blwf.vatuuAAD_ACD.half_AB0_ACD.blwf.vatuuAAE_ACD.half_AB0_ACD.blwf.vatuuAB8_ACD.half_AB0_ACD.blwf.vatuigujarati_anusvaragujarati.abvsguj_ii_anusvara.abvsugujarati_anusvaragujarati.abvsguj_uu_anusvara.abvsuniA95_ACD.half_A95.presuniA95_AB0_ACD.blwf.vatuguj_ja_aa.pstsguj_ja_ii.pstsuniA9C_AB0_ACD.blwf.vatuuniA9D_AB0_ACD.blwf.vatuguj_tta_virama_tta.presguj_tta_virama_ttha.presguj_ttha_virama_ttha.presguj_dda_virama_dda.presguj_dda_virama_ddha.presuniAA6_AB0_ACD.blwf.vatuguj_da_virama_ma.presguj_da_virama_da.presguj_da_virama_dha.presguj_da_virama_va.presuniAAB_AB0_ACD.blwf.vatu guj_ra_u.blwsguj_ra_uu.blwsnounicode_3_1_cduAB5_ACD.half_AB0_ACD.blwf.vatuuniAB6_ACD.half_AB5_ACD.presuniAB9_AB0_ACD.blwf.vatuuniAB9_ACD.half_AAE.presuniAB9_ACD.half_AAF.presuAB6_ACD.half_AA8.pres_ACD.presuniAB6_ACD.half_A9A_ACD.presguj_ddha_virama_ddha.presguj_ka_virama_ssa.akhnuniAA4_ACD.half_AA4.presuniAA4_AB0_ACD.blwf.vatuuniAA8_ACD.half_AA8.presuniAB6_AB0_ACD.blwf.vatuuniA96_AB0_ACD.blwf.vatuuniA97_AB0_ACD.blwf.vatuuniA98_AB0_ACD.blwf.vatuuniA9A_AB0_ACD.blwf.vatuuniAA5_AB0_ACD.blwf.vatuuniAA7_AB0_ACD.blwf.vatuuniAA8_AB0_ACD.blwf.vatuuniAAA_AB0_ACD.blwf.vatuuniAAC_AB0_ACD.blwf.vatuuniAAD_AB0_ACD.blwf.vatuuniAAE_AB0_ACD.blwf.vatuuniAB8_AB0_ACD.blwf.vatuuniAB5_AB0_ACD.blwf.vatuuniAB6_ACD.half_AB5.presuniAB6_ACD.half_AA8.presuniAB6_ACD.half_A9A.presguj_ra_virama.rphfguj_ra_virama.blwfuniAB7_ACD.half_AA0.presuniAB7_ACD.half_A9F.presuA_B7_CD.half_9F_B0_CD.blwfvatuuA_B7_CD.half_A0_B0_CDblwfvatuuniA9F_AB0_ACD.blwf.vatuguj_ja_virama_nya.akhnuniAA1_AB0_ACD.blwf.vatuuniAA0_AB0_ACD.blwf.vatuuniAA2_AB0_ACD.blwf.vatuglyph437glyph438glyph440glyph441guj_e_anusvara.abvsglyph443glyph444glyph445glyph446glyph447glyph448glyph449glyph450glyph451glyph452glyph453kagujarati_nuktagujarati.nuktkhagujarati_nuktagujarati.nuktgagujarati_nuktagujarati.nuktghagujarati_nuktagujarati.nuktngagujarati_nuktagujarati.nuktcagujarati_nuktagujarati.nuktchagujarati_nuktagujarati.nuktjagujarati_nuktagujarati.nuktjhagujarati_nuktagujarati.nuktnyagujarati_nuktagujarati.nuktttagujarati_nuktagujarati.nukttthagujarati_nuktagujarati.nuktddagujarati_nuktagujarati.nuktddhagujarati_nuktagujarati.nuktnnagujarati_nuktagujarati.nukttagujarati_nuktagujarati.nuktthagujarati_nuktagujarati.nuktdagujarati_nuktagujarati.nuktdhagujarati_nuktagujarati.nuktnagujarati_nuktagujarati.nuktpagujarati_nuktagujarati.nuktphagujarati_nuktagujarati.nuktbagujarati_nuktagujarati.nuktbhagujarati_nuktagujarati.nuktmagujarati_nuktagujarati.nuktyagujarati_nuktagujarati.nuktragujarati_nuktagujarati.nuktlagujarati_nuktagujarati.nuktllagujarati_nuktagujarati.nuktvagujarati_nuktagujarati.nuktshagujarati_nuktagujarati.nuktssagujarati_nuktagujarati.nuktsagujarati_nuktagujarati.nukthagujarati_nuktagujarati.nuktuniAA3_ACD.half_AB0_ACD.vatuguj_nna_ra_virama.vatugur_ra_halant.blwfgur_va_halant.blwfgur_ha_halant.blwfgur_ya_halant.pstfglyph152glyph153glyph154glyph155glyph156glyph157uniA30_A4D.blwf_A41.blwsuniA39_A4D.blwf_A41.blwsnounicode_3_1_3glyph161ragurmukhi_A4D.blwf_A42.blwsuniA39_A4D.blwf_A42.blwsnounicode_3_1_2fnounicode_3_1_30gur_na_uumatra_tippi.abvsgur_aamatra_bindi.abvsgur_u_addak.pstsgur_uu_addak.pstsgur_oo_addak.psts gur_ka.nukt gur_gha.nukt gur_nga.nukt gur_ca.nukt gur_cha.nukt gur_jha.nukt gur_nya.nukt gur_tta.nukt gur_ttha.nukt gur_ddha.nukt gur_nna.nukt gur_ta.nukt gur_tha.nukt gur_da.nukt gur_dha.nukt gur_na.nukt gur_pa.nukt gur_ba.nukt gur_bha.nukt gur_ma.nukt gur_ya.nukt gur_ra.nukt gur_va.nuktglyph194 gur_ha.nukt gur_a.nukt gur_aa.nukt gur_i.nukt gur_ii.nukt gur_u.nukt gur_uu.nukt gur_ee.nukt gur_ai.nukt gur_oo.nukt gur_au.nuktgur_aa_bindi.abvsglyph207uniA35_A4D.blwf_A41.blwsuniA35_A4D.blwf_A42.blwsuniA30_A4D.blwf_A4D.blwsuniA39_A4D.blwf_A4D.blwsuniA35_A4D.blwf_A4D.blwsEngsamiffffiffllongs_t m_n_armenian m_e_armenian m_i_armenian v_n_armenian m_x_armenianyodhiriqhebrewuniFB1EyodyodpatahhebrewayinaltonehebrewuniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29shinshindothebrewshinsindothebrewshindageshshindothebrewshindageshsindothebrewalefpatahhebrewalefqamatshebrewalefdageshhebrewbetdageshhebrewgimeldageshhebrewdaletdageshhebrewhedageshhebrewvavdageshhebrewzayindageshhebrewtetdageshhebrewyoddageshhebrewfinalkafdageshhebrewkafdageshhebrewlameddageshhebrewmemdageshhebrewnundageshhebrewsamekhdageshhebrewpefinaldageshhebrewpedageshhebrewtsadidageshhebrewqofdageshhebrewreshdageshhebrewshindageshhebrewtavdageshhebrewvavholamhebrew betrafehebrew kafrafehebrew perafehebrewaleflamedhebrewuniFFFDuni10380uni10381uni10382uni10383uni10384uni10385uni10386uni10387uni10388uni10389uni1038auni1038buni1038cuni1038duni1038euni1038funi10390uni10391uni10392uni10393uni10394uni10395uni10396uni10397uni10398uni10399uni1039auni1039buni1039cuni1039duni1039funi103a0uni103a1uni103a2uni103a3uni103a4uni103a5uni103a6uni103a7uni103a8uni103a9uni103aauni103abuni103acuni103aduni103aeuni103afuni103b0uni103b1uni103b2uni103b3uni103b4uni103b5uni103b6uni103b7uni103b8uni103b9uni103bauni103bbuni103bcuni103bduni103beuni103bfuni103c0uni103c1uni103c2uni103c3uni103c8uni103c9uni103cauni103cbuni103ccuni103cduni103ceuni103cfuni103d0uni103d1uni103d2uni103d3uni103d4uni103d5uni10480uni10481uni10482uni10483uni10484uni10485uni10486uni10487uni10488uni10489uni1048auni1048buni1048cuni1048duni1048euni1048funi10490uni10491uni10492uni10493uni10494uni10495uni10496uni10497uni10498uni10499uni1049auni1049buni1049cuni1049duni1049euni1049funi104a0uni104a1uni104a2uni104a3uni104a4uni104a5uni104a6uni104a7uni10900uni10901uni10902uni10903uni10904uni10905uni10906uni10907uni10908uni10909uni1090auni1090buni1090cuni1090duni1090euni1090funi10910uni10911uni10912uni10913uni10914uni10915uni10916uni10917uni10918uni10919uni1091auni1091buni1091f r-./0abcdpqrs^__`#$$%%&&''(()fghiijjknopqqrvw %&,--.011223<=>?BCDEz{         t u        GHHIIJOPQRSTXYYZ[\\]effg    $%%&,--.45566778899:QRRSSTTUUVVW]^^_`aabcddeeffgijjklmmnsttuuvvwz{{|    #$BCCDHIIJ^__`ijjk9::;bcfgijrs"  F 8DFLTzarmnbengbng2cyrldev2devageor$gjr2.grekLgujrVgur2tguruhebrlatnphnxsyrctml2ugarxpeo$  %(*.1  %(*.1  "&-/2  "&-/2  #'+03  #'+03 $), $), JII "ISM .LSM .NLD 6NSM .SKS .! 4aalt:abvs@abvsFabvsLakhnRakhnXakhn^blwfdblwfjblwfpblwfvblws|blwsblwsblwsccmpccmpccmpdligfrachalfhalfhalfhalnhalnhlighliginitligaligaligaligaligaloclnuktnuktnuktprespres pres(pstf0pstf6psts\""# #8'v'')),)D)*,X, -M,L6",bqcr28RX ,>Pbt     .     / $(,28DHLRX&8Z|                                         I "JT^hr|&0:DNXblvsvtvuvvvwvxvyvzv{v|v}v~vvvvvvvvvvvvvvvvvvvvvvvTu$.8BL`jt~w^x^y^^^oz^$^%^{^|^^^o}^~^^/^W^9:;=@CDEFJOS]0V(V`jt~ (2<FPZdnx"""""""""""."/"""""0"""""""""""""2"""""""""" % !&" Cs_]T[" 2o[3oB9@6 , XnoT TTBHNTZ`flrx~   6 "(IOILOLIIWA*  ,,,!YnoT &0:DNXblvUVWXZ[ ]^_^ J<FPZdnx",6@     TWYY[]bdfm ouCC +\fpz$.8BLVblvDoEoFoGooHoJoKoLoooooQoRoSooUoVoXoYoZo[o\o]oo o`oaobocodoeofogoooooooHho9>@LN]24#68&HH)*%PZdnx",6@JT^hr|`abcdeghijklmnoprqstuvwxyz{|}~ #,*  &Pf    "          "         *  TY=YYqu)Xblv",6@JT^hr~(YHYIYJYKY+Y,Y^YaY`YbYnEYLY2YMYNYOY7YPYQYRYGYSYYYYYnnYYYYY Y!Y;YY]_Y\^Y"Y TWYY[\^lrrtt" %S!HR\fpz$.8BLV`jt~5<:7=9;!9<=>?@ABCDEGHIJKLNOPQRTVZ\z}RXfV>HR\fpz$.8BL^^^^^^^^^^^^^^^^^^^^^^^^^^^^  4@Vb._-^/_1a0`Ba "6q5f4e3l'TFg "(AY<qUqWYVg [^Z_@ ^_`ae FV $.@Z n9@LFE; &,LYVGSR }D|C~D  &,28>D\{YzSyRxQwPvKuJt<Dc ?m>l :;DTg@:DNZdv  J\noTV n9@LALBLs@VML4HNLFE;PLL R^LiLkL]lL $V`mL8Y6> DC "(.4\LYVGSR r<q;p:o9 }D|C~D $*06<BHNT\{YzSyRxQwPvKuJt<TOL:;H\DEGLRSTUVXZ\`cdefg:d,NhT"T^J|Xz $  &,28>D &,$*06<  $*06< $*06<"(.4:@FLRX^djpv|   "(.4   &,'&$#"!( &,28>DJPV\bhnt;:8643210/.,+*)$*06<BHNTZ`flIHGFEDCBA@?>=< &,ONMLKJ $*06<BHNT]\[ZYXWUSQP"(.4:@FLRX^djpv|usrqponlkigecb`_ zyxw|`bcdehjkmoqrstuvwx{|}~Z &@,'&,'&,'& 9|8{n.  ?d>c 1fT]:z  *4FPbl(:L^p"4FXbt}  ~                                                         h    : '/=OZgopu, "'=#T$.8#D$D%D&DiXDhXgDHIJK "FPr(& &&% &)% $&,-P *%& +-&Q-%& ,`bijmn*  >>> *z)x[Z*6BN      &0:DNXblv0o.oooooooooooooo?]{|$%%PZdnx",6@JT^hr| #*  &'&/  TDFLTzarmnbengbng2cyrldev2devageorgjr2grekgujr gur2guru(hebr2latnLphnxZsyrcftml2rugar~xpeo    JII    abvmVabvm\blwmbblwmhkernnkerntlfbdzmarkmarkmarkmarkmarkmkmkrtbd     "*2:BLT\dlt|LhPB "$&l,6,-6<DJPV\bhnt,,,,,,,,dX,, P &,28>DJPV\bhntz "(.4:@FLRX^djpv|u}HuuQT6CTSCrn`=y66LT<nYiu!!!Q!!|!!!!!A!!!!6!!!!!!!X!W!!o!!!!;!!!vT!P!!]}G iikmpqv/EIK H 28>DJPV\bhnt].L7W.T+Z.^=@.<#:%_8c8 0&6 XXW{BN  "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<X:|bXXkX.W:lP1mXMW;8nX8l88naiXXXXXXjXXXXmmnmW:{yzyiiXXXbXX{{|{;mml mmS`xZNX8mclX88 888l86888W8($=D]4;CHMU]bglrtz|*389HHPRWWZZ^^beggqrtt  &&//44:;==AE !#')*+ , -1 &,28>DJPV\bhntzK]XbT\\[( # "ZXYVWZ  Z"F. d $*06<BHNTZ`flrx~ &,28>DJPV\bhntz X=aDo6xXXXXXX====aDDDD|z{z66666xxXX=D=D=D=D||||666ax$$((,,2288<<DDHHLLRR XX \\ $*27<AGIOQ*3W89arrcj< y $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|O3}[XXk{Xp3eO4mXMW? nonfodj3OYk};m `x^NWX9mm?&?m eo<W.#} y$%&'()*+,-./0123456789:;<=DFHJKLMNOPQRSTUVXZ\]45HPQRVWZ^bcdegqrtvyz{| /12347:;=ABCDE__ #&()+- u v: y |< @ B C D EF &,28>DJPV\bhntz "(.4:@FLRX^djpv|^OUR>X>RAUUUU/UU#U :U,X,S[XURUBB=X&U03>s=[T 2:.@  Yh  28RXy B >~ &,28>DJPV\bhntzSSS l SSSmb SS/<yvh^h^hbhhlphhM/hhjhhAhhjhKl5hkoUhQvU3hMkBkBRnR00b$= D]$ w x } ~  V\bhntz ^Adn1;Q(<   (((((d(\4B "FLRX^djpv| [ $8+TKt  2FFTmou{|}~"(.|`C]%f. D &,28>DJPV\bhntz |yfDmJUUkM_wq)bg.&O L|Q6?.'303h00m_weR; idbD9=?CDEFJOTUWX]w}=>?@DKOTY_abdtuvwxyz{|}~cdefo"(.Xtpk<&J #HNTZ`flrx~T ! *O;$&#0+). - #9TMx *   +FGTmouCD"(.zawlf $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTxaejgdi9jjedce _eqehaXaed ciecgffegaggaeac d hcea egeifga>>5|7@^^ag[i_didieeYgaeagWi#aeg4cge.e:cc^d^gddigcgg^g;e>>A;D>>kjd^^gdaedaagda aeWchgaj^9ddaddd ceecg ddg|7@jigeadaa++,.499 <= ?F HHJQSUWY ]]#ww${}%()$%*)),,1-=@3DD7KK8OO9TT:YY;__<ab=dd?t@TUX^_fghlmnotuxz%&ghijr"(.4:@FLkUgXdGLi@8Xjjkkssuuzz~~ kkww~~jksuz~M$$%%&&''(())**,,--..// 22 33 44 55 66 779:;;<<==          "" $$&&88::??yy      P P Z Z \ \ d d f f  x$$&&**,,--224466779:;;<<==DDFFGGHHII JJMM PQ RRSSTTUUVV WW XXYZ[[ \\]]         !! ""## $$%% &&++--//11338899::;;<< ==>> ??@@ ; ; Q Q Z Z [ [ \ \ ] ] d d e e f f g g    ]$%&'()*,-./2345679:;<= "$&8:?y   P Z \ d f ^NDDEEFFGGHHIIJJ KKNN PQRRSSUU VV WW XX YZ[[ \\]]      !! ## %% ++ -- // 11 33 99<<>>@@       ; ; Q Q [ [ ] ] e e g g HDDFF GGHHIIJJMMPQRR SS TTUU VVWWXX YZ[[\\]]          !!##%%++ -- // 11 33 99<<>>@@22     Q Q [ [ ] ] e e g g _DEFGHIJKNPQRSUVWXYZ[\] !#%+-/139<>@    ; Q [ ] e g ,}$$%%&'))**.. //22334466779: ;; << == DD EE FF HHIIJJKKNNPQRRSS UUVVWWXXYZ[[\\]]          !!""##$$%%--//3388 99:: ;; <<== >>?? @@22        ; ; P P Q Q Z Z [ [ \ \ ] ] d d e e f f g g  mm}}      $%&')*./234679:;<=DEFHIJKNPQRSUVWXYZ[\]  !"#$%-/389:;<=>?@2    ; P Q Z [ \ ] d e f g  mm}}         p$$&&**--224466779:;;<<==DDFHII JJMM PQ RRSS TTUU VV WW XX YZ[[ \\]]           !! ""## $$%% &&++ -- // 33 8899::;;<< ==>> ??@@ 22   ; ; Q Q Z Z [ [ \ \ ] ] d d e e f f g g    m}  YȻ!DarkRadiant-2.14.0/install/ui/gameconnection.fbp000066400000000000000000002601011413722237400215340ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect gameconnection 1000 none 0 gameconnection . 1 1 1 1 UI 0 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY GameConnectionMainPanel 557,310 0 wxTAB_TRAVERSAL mainVB wxVERTICAL none 5 wxEXPAND 0 topHB wxHORIZONTAL none 5 wxEXPAND 1 ConnectedSizer wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Connected 0 0 1 ConnectedCheckbox 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 Load From Art Provider; darkradiant:activityindicator.png; 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ConnectedActivityIndicator 1 protected 1 Resizable 1 ; ; forward_declare 0 5 wxEXPAND 1 bSizer12 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 0 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY (Re)Start game 0 0 0 1 RestartGameButton 1 protected 1 Resizable 1 ; ; forward_declare 0 Restarts current map in game, starting TheDarkMod if necessary. * Note that it saves the current map first. * Make sure to configure "File :: Game Setup" settings. * Can attach to running game if "com_automation 1" is set in game console. wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY dmap 0 0 1 DmapCheckbox 1 protected 1 Resizable 1 ; ; forward_declare 0 Dmap every time "Restart game" button is clicked. wxFILTER_NONE wxDefaultValidator 5 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_staticline3 1 protected 1 Resizable 1 wxLI_HORIZONTAL ; ; forward_declare 0 5 wxEXPAND 1 3 wxBOTH 0 controlsGrid wxFLEX_GROWMODE_SPECIFIED none 3 0 5 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Camera sync 0 0 0 1 m_staticText8 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 1 1 1 1 0 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Load from game 0 0 0 1 CameraLoadFromGameButton 1 protected 1 Resizable 1 ; ; forward_declare 0 Set preview camera to player's location in game. wxFILTER_NONE wxDefaultValidator 5 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Send to game 0 0 1 CameraSendToGameCheckbox 1 protected 1 Resizable 1 ; ; forward_declare 0 Player's location in game constantly follows preview camera. * Also enables "ghost mode": noclip + notarget +god. wxFILTER_NONE wxDefaultValidator 5 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Map file 0 0 0 1 m_staticText9 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 1 1 1 1 0 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Reload now 0 0 0 1 MapFileReloadNowButton 1 protected 1 Resizable 1 ; ; forward_declare 0 Reload game entities from .map file on disk. * You should save your map before doing this. * Game only updates entities which have changed since last hot reload update of any kind. wxFILTER_NONE wxDefaultValidator 5 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Reload on save 0 0 1 MapFileReloadOnSaveCheckbox 1 protected 1 Resizable 1 ; ; forward_declare 0 Reload game entities from .map file every time you save it. This has same effect as clicking "Reload now" after every save. wxFILTER_NONE wxDefaultValidator 5 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Hot reload 0 0 0 1 m_staticText10 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 1 1 1 1 0 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Update now 0 0 0 1 HotReloadUpdateNowButton 1 protected 1 Resizable 1 ; ; forward_declare 0 Quickly update game entities to their current state in DarkRadiant. * The .map file is not touched: modifications are sent directly to game. * To enable "Hot reload" mode: save map and click "Reload now". wxFILTER_NONE wxDefaultValidator 5 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Update on change 0 0 1 HotReloadUpdateOnChangeCheckbox 1 protected 1 Resizable 1 ; ; forward_declare 0 Update game entities automatically after every change. This has same effect as clicking "Update now" very often. wxFILTER_NONE wxDefaultValidator 5 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_staticline4 1 protected 1 Resizable 1 wxLI_HORIZONTAL ; ; forward_declare 0 5 wxEXPAND 1 buttonsHB wxHORIZONTAL none 5 wxALL 0 1 1 1 1 0 Load From Art Provider; darkradiant:refresh.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 RespawnSelectedButton 1 protected 1 Resizable 1 ; ; forward_declare 0 Respawns currently selected entities in game. Respawning means that existing game entity is deleted, and a fresh one is spawned. It allows to force in-game update of a modified entity after ordinary hot reload did not work. wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 0 Load From Art Provider; darkradiant:media-playback-pause.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 PauseGameButton 1 protected 1 Resizable 1 ; ; forward_declare 0 Pause/unpause the game. wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/gameconnection.xrc000066400000000000000000000205071413722237400215650ustar00rootroot00000000000000 557,310 wxVERTICAL wxEXPAND 5 wxHORIZONTAL wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 5 0 wxALIGN_CENTER_VERTICAL|wxALL 5 undefined.png wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 5 Restarts current map in game, starting TheDarkMod if necessary.\n\n* Note that it saves the current map first.\n* Make sure to configure "File :: Game Setup" settings.\n* Can attach to running game if "com__automation 1" is set in game console.\n 0 0 0 wxALIGN_CENTER_VERTICAL|wxALL 5 Dmap every time "Restart game" button is clicked. 1 wxEXPAND | wxALL 5 wxEXPAND 5 3 3 0 0 wxALL|wxALIGN_CENTER_VERTICAL 5 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 5 Set preview camera to player's location in game. 0 0 0 wxALL|wxALIGN_CENTER_VERTICAL 5 Player's location in game constantly follows preview camera.\n\n* Also enables "ghost mode": noclip + notarget +god. 0 wxALL|wxALIGN_CENTER_VERTICAL 5 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 5 Reload game entities from .map file on disk.\n\n* You should save your map before doing this.\n* Game only updates entities which have changed since last hot reload update of any kind. 0 0 0 wxALL|wxALIGN_CENTER_VERTICAL 5 Reload game entities from .map file every time you save it.\n\nThis has same effect as clicking "Reload now" after every save. 0 wxALL|wxALIGN_CENTER_VERTICAL 5 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 5 Quickly update game entities to their current state in DarkRadiant.\n\n* The .map file is not touched: modifications are sent directly to game.\n* To enable "Hot reload" mode: save map and click "Reload now". 0 0 0 wxALL|wxALIGN_CENTER_VERTICAL 5 Update game entities automatically after every change.\n\nThis has same effect as clicking "Update now" very often. 0 wxEXPAND | wxALL 5 wxEXPAND 5 wxHORIZONTAL wxALL 5 Respawns currently selected entities in game.\n\nRespawning means that existing game entity is deleted, and a fresh one is spawned. It allows to force in-game update of a modified entity after ordinary hot reload did not work. undefined.png 0 0 wxALL 5 Pause/unpause the game. undefined.png 0 0 DarkRadiant-2.14.0/install/ui/lightinspector.fbp000066400000000000000000002200341413722237400216020ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect lightinspector 1000 none 0 lightinspector . 1 1 1 1 UI 0 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY LightInspectorMainPanel 661,465 0 wxTAB_TRAVERSAL mainSizer wxHORIZONTAL none 12 wxALL|wxEXPAND 0 leftPanel wxVERTICAL none 12 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Light Volume 0 0 0 1 LightInspectorVolumeLabel 1 protected 1 Resizable 1 0 -1 12 wxBOTTOM|wxEXPAND|wxLEFT 0 bSizer8 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Omnidirectional 0 0 1 omniRbtn 1 protected 1 Resizable 1 wxRB_GROUP ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Projected 0 0 1 projectedRbtn 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 24 wxLEFT 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Use start/end 0 0 1 LightInspectorStartEnd 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Colour 0 0 0 1 LightInspectorColourLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 70,25 1 LightInspectorColour 1 protected 1 Resizable 1 -1,-1 wxCLRP_DEFAULT_STYLE 0 wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 BrightnessSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 50 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Options 0 0 0 1 LightInspectorOptionsLabel 1 protected 1 Resizable 1 0 -1 12 wxLEFT 0 bSizer7 wxVERTICAL none 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Parallel 0 0 1 LightInspectorParallel 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY No shadows 0 0 1 LightInspectorNoShadows 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY No specular 0 0 1 LightInspectorSkipSpecular 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY No diffuse 0 0 1 LightInspectorSkipDiffuse 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Affects Lightgem and AI 0 0 1 LightInspectorAiSee 1 protected 1 Resizable 1 0 Whether the light affects the player's light gem and AI ability to see other things wxFILTER_NONE wxDefaultValidator 12 wxALL|wxEXPAND 1 rightPanel wxVERTICAL none 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 LightInspectorChooserPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer81 wxVERTICAL none DarkRadiant-2.14.0/install/ui/lightinspector.xrc000066400000000000000000000123131413722237400216260ustar00rootroot00000000000000 661,465 wxHORIZONTAL wxALL|wxEXPAND 12 wxVERTICAL wxBOTTOM 12 -1 wxBOTTOM|wxEXPAND|wxLEFT 12 wxVERTICAL wxBOTTOM 6 0 wxBOTTOM 6 0 wxLEFT 24 1 wxBOTTOM 12 -1 wxEXPAND|wxLEFT|wxRIGHT 12 #000000 wxALL|wxEXPAND 5 50 0 100 wxBOTTOM|wxTOP 6 -1 wxLEFT 12 wxVERTICAL wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 Whether the light affects the player's light gem and AI ability to see other things 0 wxALL|wxEXPAND 12 wxVERTICAL wxEXPAND 0 wxVERTICAL DarkRadiant-2.14.0/install/ui/materialeditor.fbp000066400000000000000000141262721413722237400215670ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect materialeditor 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY MaterialEditorMainPanel 957,884 wxTAB_TRAVERSAL bSizer1 wxVERTICAL none 12 wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 MaterialEditorSplitter 1 protected 1 Resizable 0.0 0 -1 1 wxSPLIT_VERTICAL wxSP_3D|wxSP_3DBORDER 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 250,-1 1 MaterialEditorLeftArea 1 protected 1 Resizable 1 250,-1 0 wxTAB_TRAVERSAL bSizer2 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Material Definitions 0 0 0 1 MaterialEditorDefinitionLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 1 bSizer5 wxHORIZONTAL none 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,200 1 MaterialEditorTreeView 1 protected 1 Resizable 1 -1,200 0 wxTAB_TRAVERSAL bSizer135 wxVERTICAL none 6 wxEXPAND|wxLEFT|wxRIGHT 0 1 wxBOTH 0 6 fgSizer201 wxFLEX_GROWMODE_SPECIFIED none 0 0 0 wxEXPAND|wxLEFT|wxRIGHT 0 bSizer6 wxVERTICAL none 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_NEW New Material 0 0 0 1 MaterialEditorNewDefButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxTOP 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_COPY Copy Material 0 0 0 1 MaterialEditorCopyDefButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_COPY Discard Changes 0 0 0 1 MaterialEditorRevertButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxTOP 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_SAVE Save Material 0 0 0 1 MaterialEditorSaveDefButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_BOTTOM|wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_COPY Unlock Editing 0 0 0 1 MaterialEditorUnlockButton 1 protected 1 Resizable 1 0 This material is defined in a PK4 file and cannot be modified. Click unlock to create a copy. wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 2 bSizer81 wxVERTICAL none 6 wxALL|wxBOTTOM|wxEXPAND|wxLEFT|wxTOP 2 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialEditorBasicAdvancedNotebook 1 protected 1 Resizable 1 ; ; forward_declare 0 Basic 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicEditorPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer731 wxVERTICAL none 12 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicNameAndDescription 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL 2 wxBOTH 1 6 fgSizer1821 wxFLEX_GROWMODE_SPECIFIED none 0 12 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Name: 0 0 0 1 m_staticText611 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicName 1 protected 1 Resizable 1 wxTE_PROCESS_ENTER ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Material: 0 0 0 1 m_staticText5711 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 1 bSizer711 wxHORIZONTAL none 12 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicMaterialType 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Description: 0 0 0 1 m_staticText572 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicDescription 1 protected 1 Resizable 1 wxTE_PROCESS_ENTER ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 12 wxEXPAND|wxTOP 0 -1,-1 bSizer87 wxVERTICAL none 12 wxEXPAND|wxLEFT|wxRIGHT 1 3 wxBOTH 2 0 6 fgSizer21 wxFLEX_GROWMODE_SPECIFIED none 0 6 6 wxSHAPED 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,-1 1 BasicEditorImageTabImage 1 protected 1 Resizable 1 40,40 ; ; forward_declare 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Editor Image: 0 0 0 1 m_staticText6811 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 0 bSizer82 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 1 bSizer811 wxVERTICAL none 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicEditorImageEntry 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxSHAPED 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,-1 1 BasicDiffuseTabImage 1 protected 1 Resizable 1 40,40 ; ; forward_declare 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Diffusemap: 0 0 0 1 m_staticText681 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 0 bSizer84 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 1 bSizer83 wxVERTICAL none 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicDiffuseImageEntry 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxSHAPED 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,-1 1 BasicBumpTabImage 1 protected 1 Resizable 1 40,40 ; ; forward_declare 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Bumpmap: 0 0 0 1 m_staticText6812 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 1 bSizer87 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 1 bSizer88 wxVERTICAL none 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicBumpImageEntry 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxSHAPED 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,-1 1 BasicSpecularTabImage 1 protected 1 Resizable 1 40,40 ; ; forward_declare 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Specularmap: 0 0 0 1 m_staticText6813 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 1 bSizer90 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 1 bSizer891 wxVERTICAL none 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicSpecularImageEntry 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,-1 1 BasicFrobPlaceholder 1 protected 1 Resizable 1 40,40 ; ; forward_declare 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Frob Highlight: 0 0 0 1 m_staticText68131 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 1 bSizer921 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 1 3 wxBOTH 2 6 fgSizer22 wxFLEX_GROWMODE_SPECIFIED none 0 6 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 BasicAddFrobStages 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Remove 0 0 0 1 BasicRemoveFrobStages 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_RIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Test 0 0 0 1 BasicTestFrobStages 1 protected 1 Resizable 1 ; ; forward_declare 0 Enable the frob highlight as long as the mouse button is held down wxFILTER_NONE wxDefaultValidator 1 wxBOTTOM|wxEXPAND|wxRIGHT 1 1 1 1 1 wxSYS_COLOUR_3DLIGHT 1 0 1 1 0 Dock 0 Left 1 1 0 1 wxID_ANY 0 0 1 m_panel41 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer94 wxVERTICAL none 12 wxALL|wxEXPAND 0 bSizer95 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Image File: 0 0 0 1 m_staticText78 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 BasicImageFileEntry 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 12 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel43 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL 1 wxBOTH 0 0 0 fgSizer26 wxFLEX_GROWMODE_SPECIFIED none 1 0 0 wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,93,90,-1,70,0 0 0 wxID_ANY Drag and drop an Image File here to create a new Texture Map 0 0 0 1 m_staticText79 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 Advanced 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel38 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer79 wxVERTICAL none 6 wxALL|wxEXPAND 1 bSizer781 wxVERTICAL none 0 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialNameAndDescription 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL 2 wxBOTH 1 6 fgSizer182 wxFLEX_GROWMODE_SPECIFIED none 0 6 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Name: 0 0 0 1 m_staticText61 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialName 1 protected 1 Resizable 1 wxTE_PROCESS_ENTER ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Material: 0 0 0 1 m_staticText571 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 1 bSizer71 wxHORIZONTAL none 12 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialType 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Description: 0 0 0 1 m_staticText57 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDescription 1 protected 1 Resizable 1 wxTE_PROCESS_ENTER ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 1 bSizer82 wxHORIZONTAL none 0 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialEditorStageListPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer60 wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Material Stages 0 0 0 1 MaterialEditorMaterialStagesLabel 1 protected 1 Resizable 1 0 -1 0 wxEXPAND|wxLEFT 1 bSizer92 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,-1 1 MaterialEditorStageView 1 protected 1 Resizable 1 -1,-1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer103 wxVERTICAL none 0 wxEXPAND 0 2 wxBOTH 0,1 6 fgSizer17 wxFLEX_GROWMODE_SPECIFIED none 0 0 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 MaterialEditorAddStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Up 0 0 0 1 MaterialEditorMoveUpStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Remove 0 0 0 1 MaterialEditorRemoveStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Down 0 0 0 1 MaterialEditorMoveDownStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Toggle 0 0 0 1 MaterialEditorToggleStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Duplicate 0 0 0 1 MaterialEditorDuplicateStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 1 bSizer77 wxVERTICAL none 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,120 1 MaterialEditorStageSettingsPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer62 wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Global Material Settings 0 0 0 1 MaterialEditorStagePropertiesLabel 1 protected 1 Resizable 1 0 -1 6 wxEXPAND 1 bSizer8 wxVERTICAL none 6 wxBOTTOM|wxEXPAND|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialEditorImagePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer67 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Editor Image: 0 0 0 1 m_staticText59 1 protected 1 Resizable 1 ; ; forward_declare 0 qer_editorimage -1 6 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialEditorImage 1 protected 1 Resizable 1 wxTE_PROCESS_ENTER ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageSettingsNotebook 1 protected 1 Resizable 1 ; ; forward_declare 0 Interaction 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialPageInteraction 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer571 wxVERTICAL none 6 wxALL|wxEXPAND 0 2 wxBOTH 1 12 fgSizer191 wxFLEX_GROWMODE_SPECIFIED none 0 6 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Clamping: 0 0 0 1 m_staticText901 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialClampType 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Culling: 0 0 0 1 m_staticText64 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialCullType 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY polygonOffset: 0 0 1 MaterialFlagHasPolygonOffset 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 100,-1 0 0 1 MaterialPolygonOffsetValue 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY sort: 0 0 1 MaterialHasSortValue 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialSortValue 1 protected 1 Resizable -1 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Shadow Casting: 0 0 0 1 m_staticText65 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL 1 bSizer85 wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY noShadows 0 0 1 MaterialNoShadows 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY noSelfShadow 0 0 1 MaterialNoSelfShadow 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY forceShadows 0 0 1 MaterialForceShadows 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Coverage: 0 0 0 1 m_staticText661 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 1 bSizer86 wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY translucent 0 0 1 MaterialTranslucent 1 protected 1 Resizable 1 ; ; forward_declare 0 Blended with Background wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY forceOpaque 0 0 1 MaterialFlagForceOpaque 1 protected 1 Resizable 1 ; ; forward_declare 0 Completely fills the triangle wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY mirror 0 0 1 MaterialFlagMirror 1 protected 1 Resizable 1 ; ; forward_declare 0 Equivalent to "sort subview" and "forceOpaque" wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Fogging: 0 0 0 1 m_staticText67 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY noFog 0 0 1 MaterialNoFog 1 protected 1 Resizable 1 ; ; forward_declare 0 When checked, this surface does not create fog interactions wxFILTER_NONE wxDefaultValidator Light 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialPageLight 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer5711 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 12 fgSizer20 wxFLEX_GROWMODE_SPECIFIED none 0 6 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Light Flags: 0 0 0 1 m_staticText68 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxBOTTOM|wxEXPAND|wxTOP 1 2 wxBOTH 1 20 fgSizer711 wxFLEX_GROWMODE_SPECIFIED none 0 8 0 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY ambientLight 0 0 1 MaterialIsAmbientLight 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY cubicLight 0 0 1 MaterialIsCubicLight 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY ambientCubicLight 0 0 1 MaterialIsAmbientCubicLight 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY blendLight 0 0 1 MaterialIsBlendLight 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY fogLight 0 0 1 MaterialIsFogLight 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY noPortalFog 0 0 1 MaterialFlagNoPortalFog 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY LightFalloff Map: 0 0 0 1 m_staticText42 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialLightFalloffMap 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY LightFalloff Type: 0 0 0 1 m_staticText69 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialLightFalloffCubeMapType 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Spectrum: 0 0 1 MaterialHasSpectrum 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 1 99999 0 -99999 0 1 MaterialSpectrumValue 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 Surface Flags 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialPageSurfaceFlags 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer157 wxVERTICAL none 6 wxALL|wxEXPAND 1 5 wxBOTH 0,1,2,3,4 6 fgSizer24 wxFLEX_GROWMODE_SPECIFIED none 0 3 5 wxALL 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY solid 0 0 1 MaterialSurfaceFlagSolid 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY ikclip 0 0 1 MaterialSurfaceFlagIkclip 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY flashlight_trigger 0 0 1 MaterialSurfaceFlagFlashlighttrigger 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY discrete 0 0 1 MaterialSurfaceFlagDiscrete 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY noimpact 0 0 1 MaterialSurfaceFlagNoimpact 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY water 0 0 1 MaterialSurfaceFlagWater 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY blood 0 0 1 MaterialSurfaceFlagBlood 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY nonsolid 0 0 1 MaterialSurfaceFlagNonsolid 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY noFragment 0 0 1 MaterialSurfaceFlagNofragment 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY nodamage 0 0 1 MaterialSurfaceFlagNodamage 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY playerclip 0 0 1 MaterialSurfaceFlagPlayerclip 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY trigger 0 0 1 MaterialSurfaceFlagTrigger 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY nullNormal 0 0 1 MaterialSurfaceFlagNullnormal 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY slick 0 0 1 MaterialSurfaceFlagSlick 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY ladder 0 0 1 MaterialSurfaceFlagLadder 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY monsterclip 0 0 1 MaterialSurfaceFlagMonsterclip 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY aassolid 0 0 1 MaterialSurfaceFlagAassolid 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY areaPortal 0 0 1 MaterialSurfaceFlagAreaportal 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY collision 0 0 1 MaterialSurfaceFlagCollision 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY nosteps 0 0 1 MaterialSurfaceFlagNosteps 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY moveableclip 0 0 1 MaterialSurfaceFlagMoveableClip 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY aasobstacle 0 0 1 MaterialSurfaceFlagAasobstacle 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY qer_nocarve 0 0 1 MaterialSurfaceFlagQernocarve 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator Decals 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialPageDecals 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer57121 wxVERTICAL none 5 wxEXPAND 1 bSizer791 wxVERTICAL none 6 wxALL|wxEXPAND 0 2 wxBOTH 0,1 8 fgSizer7121 wxFLEX_GROWMODE_SPECIFIED none 0 8 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY noOverlays 0 0 1 MaterialFlagNoOverlays 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY DECAL_MACRO 0 0 1 MaterialHasDecalMacro 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY forceOverlays 0 0 1 MaterialFlagForceOverlays 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY TWOSIDED_DECAL_MACRO 0 0 1 MaterialHasTwoSidedDecalMacro 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxRIGHT 0 bSizer78 wxHORIZONTAL none 6 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY decalInfo 0 0 1 MaterialHasDecalInfo 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDecalInfoPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL 2 wxBOTH 0,1 24 fgSizer14 wxFLEX_GROWMODE_SPECIFIED none 0 8 0 wxEXPAND 1 bSizer7811 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Stay: 0 0 0 1 m_staticText4613 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 10 0 0 0 1 MaterialEditorDecalInfoStaySeconds 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY secs 0 0 0 1 m_staticText46112 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 1 bSizer7812 wxHORIZONTAL none 24 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Fade: 0 0 0 1 m_staticText46122 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 10 0 0 0 1 MaterialEditorDecalInfoFadeSeconds 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 6 wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY secs 0 0 0 1 m_staticText461112 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 1 bSizer78111 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Start RGB: 0 0 0 1 m_staticText46131 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialDecalInfoStartRgb 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 1 bSizer781111 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY End RGB: 0 0 0 1 m_staticText461311 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialDecalInfoEndRgb 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator Deform 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialPageDeform 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer108 wxVERTICAL none 6 wxEXPAND 0 bSizer109111 wxHORIZONTAL none 6 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialEditorDeformChoice 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALL 1 DeformPanels wxVERTICAL none 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 1 wxID_ANY 0 0 1 DeformFlarePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer781121 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Size: 0 0 0 1 m_staticText461321 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDeformFlareSize 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 1 wxID_ANY 0 0 1 DeformExpandPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer7811211 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Amount: 0 0 0 1 m_staticText4613211 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDeformExpandAmount 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 1 wxID_ANY 0 0 1 DeformMovePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer78112111 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Amount: 0 0 0 1 m_staticText46132111 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDeformMoveAmount 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 1 wxID_ANY 0 0 1 DeformTurbulentPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer821 wxVERTICAL none 0 wxEXPAND 0 2 wxBOTH 1 6 fgSizer161 wxFLEX_GROWMODE_SPECIFIED none 0 6 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Table: 0 0 0 1 m_staticText46132111111 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDeformTurbulentTableName 1 protected 1 Resizable 1 60,-1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Range: 0 0 0 1 m_staticText4613211111112 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDeformTurbulentRange 1 protected 1 Resizable 1 40,-1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Time Offset: 0 0 0 1 m_staticText4613211111111 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDeformTurbulentTimeOffset 1 protected 1 Resizable 1 40,-1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Domain: 0 0 0 1 m_staticText461321111111111 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDeformTurbulentDomain 1 protected 1 Resizable 1 40,-1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 1 wxID_ANY 0 0 1 DeformParticlePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer7811211111 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Particle Def: 0 0 0 1 m_staticText4613211111 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDeformParticleDeclName 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 1 wxID_ANY 0 0 1 DeformParticle2Panel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer78112111112 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Particle Def: 0 0 0 1 m_staticText46132111112 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialDeformParticle2DeclName 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator Misc 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialPageMisc 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer1081 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 20 fgSizer7111 wxFLEX_GROWMODE_SPECIFIED none 0 8 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY renderBump 0 0 1 MaterialHasRenderBump 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialRenderBumpArguments 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY renderBumpFlat 0 0 1 MaterialHasRenderBumpFlat 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialRenderBumpFlatArguments 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY isLightgemSurf 0 0 1 MaterialFlagIsLightGemSurf 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 3 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY unsmoothedTangents 0 0 1 MaterialFlagUnsmoothedTangents 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY GLASS_MACRO 0 0 1 MaterialHasGlassMacro 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 3 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY PARTICLE_MACRO 0 0 1 MaterialHasParticleMacro 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 3 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY guisurf 0 0 1 MaterialHasGuiSurf 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialGuiSurfPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer76 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY GUI Path: 0 0 1 MaterialGuiSurfRegular 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 0 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialGuiSurfPath 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY entity 0 0 1 MaterialGuiSurfEntity 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY entity2 0 0 1 MaterialGuiSurfEntity2 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY entity3 0 0 1 MaterialGuiSurfEntity3 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 6 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY ambientRimColor 0 0 1 MaterialRimColor 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 0 bSizer16121121 wxHORIZONTAL none 3 wxALIGN_CENTER_VERTICAL|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialAmbientRimColorExpression1 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY , 0 0 0 1 m_staticText166141 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 3 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialAmbientRimColorExpression2 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 3 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY , 0 0 0 1 m_staticText1661111 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialAmbientRimColorExpression3 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator Blending 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 StagePageBlending 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer26 wxVERTICAL none 6 wxALL|wxEXPAND 0 2 wxBOTH 1 12 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 8 6 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Image Map: 0 0 0 1 m_staticText9 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer93 wxHORIZONTAL none 0 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageImageMap 1 protected 1 Resizable 1 wxTE_PROCESS_ENTER 0 wxFILTER_NONE wxDefaultValidator 5 wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Blend: 0 0 0 1 m_staticText8 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer73 wxVERTICAL none 6 wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 30,-1 1 MaterialStageBlendType 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Function: 0 0 0 1 m_staticText81 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 0 bSizer803 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Source: 0 0 0 1 m_staticText60 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageBlendTypeSrc 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Dest: 0 0 0 1 m_staticText601 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageBlendTypeDest 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Map Type: 0 0 0 1 m_staticText94 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer78 wxHORIZONTAL none 6 wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageMapType 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL 1 bSizer792 wxVERTICAL none 3 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 1 wxID_ANY Waveform 0 0 1 MaterialStageSoundMapWaveform 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 1 wxID_ANY 0 0 1 MaterialStageRenderMapPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer8611 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Width: 0 0 0 1 m_staticText871 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 9999 0 0 0 1 MaterialStageRenderMapWidth 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 12 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Height: 0 0 0 1 m_staticText881 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 9999 0 0 0 1 MaterialStageRenderMapHeight 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 3 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 1 wxID_ANY Loop 0 0 1 MaterialStageVideoMapLoop 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Alphatest: 0 0 0 1 m_staticText62 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageAlphaTestExpression 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT|wxRIGHT 0 2 wxBOTH 1 12 fgSizer181 wxFLEX_GROWMODE_SPECIFIED none 0 6 6 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Mask: 0 0 0 1 m_staticText10 1 protected 1 Resizable 1 0 -1 0 wxALIGN_CENTER_VERTICAL 1 bSizer15 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Red 0 0 1 MaterialStageFlagMaskRed 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Green 0 0 1 MaterialStageFlagMaskGreen 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Blue 0 0 1 MaterialStageFlagMaskBlue 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Alpha 0 0 1 MaterialStageFlagMaskAlpha 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Colour 0 0 1 MaterialStageFlagMaskColour 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Depth 0 0 1 MaterialStageFlagMaskDepth 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Private Polygon Offset: 0 0 0 1 m_staticText111 1 protected 1 Resizable 1 0 -1 0 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 MaterialStagePrivatePolygonOffset 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Depth Function: 0 0 0 1 m_staticText96 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxEXPAND 1 bSizer161 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY ignoreAlphaTest 0 0 1 MaterialStageIgnoreAlphaTest 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY ignoreDepth 0 0 1 MaterialStageIgnoreDepth 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator Texture 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 StagePageTexture 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer89 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 12 fgSizer1131 wxFLEX_GROWMODE_SPECIFIED none 7 6 0 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY texGen: 0 0 0 1 m_staticText102 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxEXPAND 1 bSizer90 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageTexGenType 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageWobblySkyPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer911 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY x: 0 0 0 1 m_staticText91 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 -1,-1 0 1 MaterialStageWobbleSkyX 1 protected 1 Resizable 1 80,-1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY y: 0 0 0 1 m_staticText92 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 -1,-1 0 1 MaterialStageWobbleSkyY 1 protected 1 Resizable 1 80,-1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY z: 0 0 0 1 m_staticText93 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 -1,-1 0 1 MaterialStageWobbleSkyZ 1 protected 1 Resizable 1 80,-1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Clamping: 0 0 0 1 m_staticText90 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxBOTTOM|wxEXPAND|wxTOP 0 bSizer96 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageClampType 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Filtering: 0 0 0 1 m_staticText1021 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxBOTTOM|wxEXPAND|wxTOP 0 bSizer962 wxHORIZONTAL none 12 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY nearest 0 0 1 MaterialStageFilterNearest 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 12 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY linear 0 0 1 MaterialStageFilterLinear 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Compression: 0 0 0 1 m_staticText10211 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 0 bSizer963 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY highquality 0 0 1 MaterialStageHighQuality 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY forceHighQuality 0 0 1 MaterialStageForceHighQuality 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY nopicmip 0 0 1 MaterialStageNoPicMip 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator Transform 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 StagePageTransform 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer2612 wxVERTICAL none 0 wxEXPAND 0 2 wxBOTH 1 0 fgSizer19 wxFLEX_GROWMODE_SPECIFIED none 0 0 6 wxALL|wxEXPAND 0 bSizer802 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Add Transformation: 0 0 0 1 m_staticText66 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageAddTransformChoice 1 protected 1 Resizable 0 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 MaterialStageAddTransformButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Remove Selected 0 0 0 1 MaterialStageRemoveTransformButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageTransformations 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer801 wxVERTICAL none Vertex Colour 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 StagePageVertexColour 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer26121 wxVERTICAL none 5 wxEXPAND 1 bSizer158 wxVERTICAL none 6 wxALL|wxEXPAND 0 bSizer16221 wxHORIZONTAL none 3 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY No Vertex Color 0 0 1 MaterialStageNoVertexColourFlag 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY vertexColor 0 0 1 MaterialStageVertexColourFlag 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY inverseVertexColor 0 0 1 MaterialStageInverseVertexColourFlag 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 24 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY colored 0 0 1 MaterialStageColored 1 protected 1 Resizable 1 ; ; forward_declare 0 Shortcut for "color parm0, parm1, parm2, parm3" wxFILTER_NONE wxDefaultValidator 6 wxALL|wxEXPAND 0 2 wxBOTH 1 6 fgSizer18 wxFLEX_GROWMODE_SPECIFIED none 0 6 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Red: 0 0 0 1 m_staticText166 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageRed 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Green: 0 0 0 1 m_staticText1661 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageGreen 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Blue: 0 0 0 1 m_staticText16611 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageBlue 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Alpha: 0 0 0 1 m_staticText16612 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageAlpha 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator Condition 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 StagePageCondition 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer261211 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 12 fgSizer11211 wxFLEX_GROWMODE_SPECIFIED none 7 6 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Enable this stage if: 0 0 0 1 MaterialEditorStageRadialSpeedLabel 1 protected 1 Resizable 1 0 -1 0 wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialStageCondition 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator Program 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 StagePagePrograms 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer2612111 wxVERTICAL none 6 wxALL|wxEXPAND 0 4 wxBOTH 1,3 12 fgSizer111 wxFLEX_GROWMODE_SPECIFIED none 7 6 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY fragmentProgram 0 0 0 1 m_staticText202 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialStageFragmentProgram 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY vertexProgram 0 0 0 1 m_staticText204 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialStageVertexProgram 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 0 1 MaterialStageProgramParameters 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer80 wxVERTICAL none 0 wxALIGN_RIGHT 0 bSizer152 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 0 1 0 0 wxID_ANY Add Vertex Parameter 0 0 0 1 m_button11 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 0 1 0 0 wxID_ANY Add Fragment Map 0 0 0 1 m_button112 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialEditorPreviewPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer77 wxVERTICAL none 5 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialPreviewLightPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer831 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 6 fgSizer23 wxFLEX_GROWMODE_SPECIFIED none 0 6 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Classname: 0 0 0 1 m_staticText71 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxEXPAND 1 bSizer841 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialPreviewLightClassname 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Choose... 0 0 0 1 MaterialPreviewLightChooseClassnameButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Colour: 0 0 0 1 m_staticText72 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL 1 bSizer85 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MaterialPreviewLightColour 1 protected 1 Resizable 1 wxCLRP_DEFAULT_STYLE ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Reset to Entity Class Default 0 0 0 1 MaterialPreviewLightResetColourButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 12 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT 0 bSizer3 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 MaterialEditorSaveNote 1 protected 1 Resizable 1 0 -1 24 wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CLOSE Reload Image Files 0 0 0 1 MaterialEditorReloadImagesButton 1 protected 1 Resizable 1 0 Reloads the image files for the selected material only wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CLOSE Close 0 0 0 1 MaterialEditorCloseButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/materialeditor.xrc000066400000000000000000005314231413722237400216050ustar00rootroot00000000000000 957,884 wxVERTICAL wxALL|wxEXPAND 12 0 0 0 vertical 250,-1 wxVERTICAL wxBOTTOM 6 -1 wxEXPAND|wxLEFT 12 wxHORIZONTAL wxEXPAND | wxALL 0 -1,200 wxVERTICAL wxEXPAND|wxLEFT|wxRIGHT 6 0 1 0 6 0 wxEXPAND|wxLEFT|wxRIGHT 0 wxVERTICAL wxALL|wxEXPAND 0 0 0 wxEXPAND|wxTOP 6 0 0 wxTOP 6 0 0 wxEXPAND|wxTOP 6 0 0 wxALIGN_BOTTOM|wxALL|wxEXPAND 0 This material is defined in a PK4 file and cannot be modified.\nClick unlock to create a copy. 0 0 wxEXPAND|wxLEFT 6 wxVERTICAL wxALL|wxBOTTOM|wxEXPAND|wxLEFT|wxTOP 6 1 wxVERTICAL wxEXPAND | wxALL 12 0 2 12 6 1 wxALIGN_CENTER_VERTICAL 0 -1 wxEXPAND 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 12 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND|wxLEFT 6 wxEXPAND|wxTOP 12 wxVERTICAL wxEXPAND|wxLEFT|wxRIGHT 12 0 3 6 6 2 0 wxSHAPED 6 40,40 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP 0 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 wxVERTICAL wxEXPAND 0 wxSHAPED 6 40,40 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP 0 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 wxVERTICAL wxALL|wxEXPAND 0 wxSHAPED 6 40,40 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP 0 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 wxVERTICAL wxALL|wxEXPAND 0 wxSHAPED 6 40,40 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP 0 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 wxVERTICAL wxALL|wxEXPAND 0 wxALL 0 40,40 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 0 3 6 6 2 wxALIGN_CENTER_VERTICAL 0 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT 0 0 0 wxALIGN_RIGHT 0 Enable the frob highlight as long as the mouse button is held down 0 0 wxBOTTOM|wxEXPAND|wxRIGHT 1 #e3e3e3 1 wxVERTICAL wxALL|wxEXPAND 12 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 wxEXPAND | wxALL 12 1 1 0 0 0 0 wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL 0 normal 0 -1 0 wxVERTICAL wxALL|wxEXPAND 6 wxVERTICAL wxEXPAND | wxALL 0 0 2 6 6 1 wxALIGN_CENTER_VERTICAL 0 -1 wxEXPAND 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 12 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND|wxLEFT 6 wxEXPAND 0 wxHORIZONTAL wxEXPAND|wxLEFT 0 wxVERTICAL wxBOTTOM|wxTOP 6 -1 wxEXPAND|wxLEFT 0 wxVERTICAL wxBOTTOM|wxEXPAND 6 wxVERTICAL wxEXPAND 0 0 2 0 6 0,1 wxALL|wxEXPAND 0 0 0 wxALL|wxEXPAND 0 0 0 wxTOP|wxEXPAND 6 0 0 wxTOP|wxEXPAND 6 0 0 wxTOP|wxEXPAND 6 0 0 wxTOP|wxEXPAND 6 0 0 wxEXPAND|wxLEFT 6 wxVERTICAL wxEXPAND | wxALL 0 wxVERTICAL wxBOTTOM|wxTOP 6 -1 wxEXPAND 6 wxVERTICAL wxBOTTOM|wxEXPAND|wxTOP 6 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 6 qer__editorimage -1 wxALIGN_CENTER_VERTICAL 6 wxEXPAND 0 0 wxVERTICAL wxALL|wxEXPAND 6 0 2 6 12 1 wxALIGN_CENTER_VERTICAL 0 -1 wxALIGN_CENTER_VERTICAL 6 0 wxALIGN_CENTER_VERTICAL 6 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxALIGN_CENTER_VERTICAL 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 0 0 10 wxALIGN_CENTER_VERTICAL 0 0 wxALIGN_CENTER_VERTICAL 0 wxBOTTOM|wxTOP 6 -1 wxALIGN_CENTER_VERTICAL 0 wxVERTICAL wxBOTTOM|wxTOP 6 0 wxBOTTOM|wxTOP 6 0 wxBOTTOM|wxTOP 6 0 wxBOTTOM|wxTOP 6 -1 0 wxVERTICAL wxBOTTOM|wxTOP 6 Blended with Background 0 wxBOTTOM|wxTOP 6 Completely fills the triangle 0 wxBOTTOM|wxTOP 6 Equivalent to "sort subview" and "forceOpaque" 0 wxBOTTOM|wxTOP 6 -1 wxBOTTOM|wxTOP 6 When checked, this surface does not create fog interactions 0 0 wxVERTICAL wxALL|wxEXPAND 6 0 2 6 12 1 wxBOTTOM|wxTOP 6 -1 wxBOTTOM|wxEXPAND|wxTOP 6 0 2 8 20 1 0 0 0 0 0 0 0 0 0 0 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxEXPAND 0 wxBOTTOM|wxTOP 6 -1 wxALIGN_CENTER_VERTICAL 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 wxALL 0 1 -99999 99999 0 wxVERTICAL wxALL|wxEXPAND 6 0 5 3 6 0,1,2,3,4 wxALL 5 1 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 1 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 0 wxVERTICAL wxEXPAND 5 wxVERTICAL wxALL|wxEXPAND 6 0 2 8 8 0,1 wxALIGN_CENTER_VERTICAL 0 0 wxALIGN_CENTER_VERTICAL 0 0 0 wxALIGN_CENTER_VERTICAL 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 0 0 wxEXPAND|wxRIGHT 6 wxHORIZONTAL wxALL 6 0 wxEXPAND | wxALL 0 0 2 8 24 0,1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 0 0 0 10 wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 24 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 0 0 0 10 wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT 6 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 0 0 wxVERTICAL wxEXPAND 6 wxHORIZONTAL wxALL 6 0 0 wxALL 6 wxVERTICAL wxEXPAND 0 0 1 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 wxEXPAND | wxALL 0 0 1 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 wxEXPAND | wxALL 0 0 1 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 wxEXPAND | wxALL 0 0 1 wxVERTICAL wxEXPAND 0 0 2 6 6 1 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT 0 60,-1 wxALIGN_CENTER_VERTICAL 5 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 40,-1 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 40,-1 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 40,-1 wxEXPAND | wxALL 0 0 1 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 wxEXPAND | wxALL 0 0 1 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 0 wxVERTICAL wxALL|wxEXPAND 6 0 2 8 20 1 wxALIGN_CENTER_VERTICAL 0 0 0 wxALIGN_CENTER_VERTICAL|wxEXPAND 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 0 0 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 0 wxALIGN_CENTER_VERTICAL 0 0 wxBOTTOM|wxTOP 3 0 wxALIGN_CENTER_VERTICAL|wxALL 0 0 0 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 3 0 0 wxALIGN_CENTER_VERTICAL 3 0 0 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 6 0 0 wxALIGN_CENTER_VERTICAL 0 0 wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT 6 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 0 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 6 0 0 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 3 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 3 0 wxALIGN_CENTER_VERTICAL|wxRIGHT 3 -1 wxALIGN_CENTER_VERTICAL 6 0 1 wxVERTICAL wxALL|wxEXPAND 6 8 2 6 12 1 wxALIGN_CENTER_VERTICAL 0 -1 wxEXPAND 0 wxHORIZONTAL 0 wxTOP 5 -1 wxEXPAND 0 wxVERTICAL wxRIGHT 6 0 wxALIGN_CENTER_VERTICAL 0 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT 6 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT 6 0 wxALIGN_CENTER_VERTICAL 6 wxVERTICAL 3 1 0 wxEXPAND | wxALL 0 1 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 0 0 9999 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 12 -1 wxALIGN_CENTER_VERTICAL 0 0 0 9999 3 1 0 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 6 -1 wxALIGN_CENTER_VERTICAL 0 wxEXPAND|wxLEFT|wxRIGHT 6 0 2 6 12 1 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 6 -1 wxALIGN_CENTER_VERTICAL 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 1 wxALIGN_CENTER_VERTICAL|wxLEFT 0 -1 wxALL 0 0 0 10 wxBOTTOM|wxTOP 6 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 6 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 0 wxVERTICAL wxALL|wxEXPAND 6 7 2 6 12 1 wxALIGN_CENTER_VERTICAL|wxLEFT 0 -1 wxALIGN_CENTER_VERTICAL|wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 0 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 6 80,-1 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 0 80,-1 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 0 80,-1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxBOTTOM|wxEXPAND|wxTOP 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT 0 -1 wxBOTTOM|wxEXPAND|wxTOP 6 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 12 0 wxALIGN_CENTER_VERTICAL|wxLEFT 12 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 0 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 0 wxALIGN_CENTER_VERTICAL 6 0 0 wxVERTICAL wxEXPAND 0 0 2 0 0 1 wxALL|wxEXPAND 6 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT 5 0 0 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 6 0 0 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT 6 wxVERTICAL 0 wxVERTICAL wxEXPAND 5 wxVERTICAL wxALL|wxEXPAND 6 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxTOP 3 0 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxTOP 3 0 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxTOP 3 0 wxALIGN_CENTER_VERTICAL|wxLEFT 24 Shortcut for "color parm0, parm1, parm2, parm3" 0 wxALL|wxEXPAND 6 0 2 6 6 1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND|wxLEFT 6 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND|wxLEFT 6 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND|wxLEFT 6 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND|wxLEFT 6 0 wxVERTICAL wxALL|wxEXPAND 6 7 2 6 12 1 wxALIGN_CENTER_VERTICAL 6 -1 wxALL|wxEXPAND 0 0 wxVERTICAL wxALL|wxEXPAND 6 7 4 6 12 1,3 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 5 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 0 wxEXPAND | wxALL 6 0 wxVERTICAL wxALIGN_RIGHT 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT 6 0 0 0 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT 6 0 0 0 wxVERTICAL wxEXPAND | wxALL 5 wxVERTICAL wxALL|wxEXPAND 6 0 2 6 6 1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 #000000 wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 0 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT 12 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 5 -1 wxRIGHT 24 Reloads the image files for the selected material only 0 0 wxLEFT 6 0 0 DarkRadiant-2.14.0/install/ui/mergecontroldialog.fbp000066400000000000000000007604301413722237400224350ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect mergecontroldialog 1000 none 0 MyProject3 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY 300,-1 MergeControlDialogMainPanel 391,-1 wxTAB_TRAVERSAL bSizer23 wxVERTICAL none 0 wxEXPAND 0 -1,40 bSizer33 wxHORIZONTAL none 0 wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 3-Way Merge 0 0 -1,40 1 ThreeWayMode 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 1 0 wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Differential Merge 0 0 -1,40 1 TwoWayMode 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 12 wxALL|wxEXPAND 0 bSizer35 wxVERTICAL none 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MapFileSelectors 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer10 wxVERTICAL none 5 wxEXPAND 1 3 wxBOTH 0,2 0 fgSizer3 wxFLEX_GROWMODE_SPECIFIED none 2 0 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Map to be merged 0 0 0 1 MergeMapSelector 1 protected 1 Resizable 1 0 The map file to merge into the target map -1 5 0 bSizer16 wxVERTICAL none 6 wxBOTTOM|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Merge Target 0 0 0 1 TargetMapLabel 1 protected 1 Resizable 1 0 -1 0 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MergeMapFilename 1 protected 1 Resizable 1 ; ; forward_declare 0 The map file to merge into the target map wxFILTER_NONE wxDefaultValidator 3 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 Load From Art Provider; darkradiant:merge_arrow.png; 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_bitmap2 1 protected 1 Resizable 1 ; ; forward_declare 0 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 TargetMapFilename 1 protected 1 Resizable 1 ; ; forward_declare 0 The target map (this is the currently loaded one) wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 -1,-1 0 1 BaseMapPanel 1 protected 1 Resizable 1 -1,-1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer11 wxVERTICAL none 0 wxALIGN_CENTER|wxALL 0 1 1 1 1 Load From Art Provider; darkradiant:merge_fork.png; 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_bitmap1 1 protected 1 Resizable 1 ; ; forward_declare 0 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 200,-1 1 BaseMapFilename 1 protected 1 Resizable 1 ; ; forward_declare 0 A common base map both maps have started from, makes detecting merge conflicts much easier. wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Common Ancestor 0 0 0 1 BaseMapLabel 1 protected 1 Resizable 1 0 A common base map both maps have started from, makes detecting merge conflicts much easier. -1 0 wxEXPAND 0 -1,30 bSizer15 wxHORIZONTAL none 0 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY Start Merge 0 0 0 1 LoadAndCompareButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Abort Merge 0 0 0 1 AbortMergeButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY Finish Merge 0 0 0 1 FinishMergeButton 1 protected 1 Resizable 1 ; ; forward_declare 0 Apply the visible set of changes to the current map and finish the merge operation. wxFILTER_NONE wxDefaultValidator 12 wxALL|wxEXPAND 1 bSizer13 wxVERTICAL none 0 wxEXPAND 1 bSizer151 wxVERTICAL none 0 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 SummaryPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer27 wxVERTICAL none 6 wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY Merge Summary 0 0 0 1 m_staticText14 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 12 wxEXPAND|wxLEFT|wxTOP 1 4 wxBOTH 1,3 0 SummarySizer wxFLEX_GROWMODE_SPECIFIED none 4 6 6 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY 0 0 0 0 1 EntitiesAdded 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Entities to be added 0 0 0 1 m_staticText42 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY 0 0 0 0 1 EntitiesRemoved 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Entities to be removed 0 0 0 1 m_staticText24 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY 0 0 0 0 1 EntitiesModified 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Entities to be modified 0 0 0 1 m_staticText28 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxEXPAND 1 bSizer22 wxVERTICAL none 5 wxEXPAND 1 bSizer221 wxVERTICAL none 6 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY 0 0 0 0 1 PrimitivesAdded 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Primitives to be added 0 0 0 1 m_staticText29 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY 0 0 0 0 1 PrimitivesRemoved 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Primitives to be removed 0 0 0 1 m_staticText22 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY 0 0 0 0 1 UnresolvedConflicts 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxEXPAND 1 bSizer32 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Unresolved Conflicts 0 0 0 1 UnresolvedConflictsLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxLEFT 0 1 1 1 1 Load From Art Provider; wxART_GO_FORWARD; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Jump to next conflict 0 0 0 1 JumpToNextConflictButton 1 protected 1 Resizable 1 ; ; forward_declare 0 Jump to next conflict wxFILTER_NONE wxDefaultValidator 6 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ConflictDetailsPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer271 wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY Details 0 0 0 1 m_staticText142 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 12 wxEXPAND|wxLEFT 1 bSizer261 wxVERTICAL none 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,93,90,-1,70,0 0 0 wxID_ANY Select a single merge action to display its details here 0 0 0 1 NoMergeNodeSelected 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ActionDescriptionPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL ActionDescriptionSizer wxVERTICAL none 0 wxEXPAND 0 bSizer272 wxHORIZONTAL none 6 wxRIGHT 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Accept Changes 0 0 0 1 ResolveAcceptButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALL 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Reject Changes 0 0 0 1 ResolveRejectButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Keep both Entities 0 0 0 1 ResolveKeepBothButton 1 protected 1 Resizable 1 ; ; forward_declare 0 Keeps both versions of this entity wxFILTER_NONE wxDefaultValidator 12 wxEXPAND|wxTOP 0 bSizer28 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,90,92,-1,70,0 0 0 wxID_ANY Options 0 0 0 1 m_staticText141 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 12 wxLEFT 0 bSizer26 wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Merge Selection Group Information 0 0 1 KeepSelectionGroupsIntact 1 protected 1 Resizable 1 ; ; forward_declare 0 With this option checked, DarkRadiant will attempt to keep all links between selection groups intact. There's no guarantee that this will work 100%, since it's usually problematic when both maps have seen changes to the same elements and their grouping. wxFILTER_NONE wxDefaultValidator 6 wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Merge Layers (cannot be undone!) 0 0 1 MergeLayers 1 protected 1 Resizable 1 ; ; forward_declare 0 With this option checked the layers in this map are going to be adjusted to fit the incoming map, i.e. any changes made to layers in the merged map are applied to this map. New layers in the imported map are going to be created here. Layers in this map that are not present in the incoming map will be removed. Leave this option unchecked to reject any layer changes from the incoming map, all newly created elements will be placed in the active layer in this case. wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/mergecontroldialog.xrc000066400000000000000000000510661413722237400224600ustar00rootroot00000000000000 391,-1 wxVERTICAL wxEXPAND 0 -1,40 wxHORIZONTAL wxALL|wxEXPAND 0 1 wxALL|wxEXPAND 0 0 wxALL|wxEXPAND 12 wxVERTICAL wxEXPAND 0 wxVERTICAL wxEXPAND 5 2 3 0 0 0,2 wxBOTTOM 6 The map file to merge into the target map -1 5 wxVERTICAL wxBOTTOM|wxRIGHT 6 -1 wxEXPAND|wxRIGHT 0 The map file to merge into the target map wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 3 undefined.png wxEXPAND 0 The target map (this is the currently loaded one) wxALIGN_CENTER 0 wxVERTICAL wxALIGN_CENTER|wxALL 0 undefined.png wxEXPAND 0 A common base map both maps have started from, makes detecting merge conflicts much easier. wxALIGN_CENTER|wxTOP 6 A common base map both maps have started from, makes detecting merge conflicts much easier. -1 wxEXPAND 0 -1,30 wxHORIZONTAL wxEXPAND|wxRIGHT 0 bold 0 0 0 wxEXPAND 0 0 0 wxEXPAND 0 bold 0 Apply the visible set of changes to the current map and finish the merge operation. 0 0 wxALL|wxEXPAND 12 wxVERTICAL wxEXPAND 0 wxVERTICAL wxEXPAND|wxLEFT 0 wxVERTICAL wxTOP 6 bold 0 -1 wxEXPAND|wxLEFT|wxTOP 12 4 4 6 0 1,3 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 6 bold 0 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 6 bold 0 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 6 bold 0 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 5 wxVERTICAL wxEXPAND 5 wxVERTICAL wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 6 bold 0 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 6 bold 0 -1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT 6 bold 0 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxLEFT 6 Jump to next conflict undefined.png 0 wxEXPAND 6 wxVERTICAL wxBOTTOM|wxTOP 6 bold 0 -1 wxEXPAND|wxLEFT 12 wxVERTICAL wxALL 5 normal 0 -1 wxEXPAND | wxALL 0 wxVERTICAL wxEXPAND 0 wxHORIZONTAL wxRIGHT 6 0 0 wxALL 0 0 0 wxLEFT 6 Keeps both versions of this entity 0 0 wxEXPAND|wxTOP 12 wxVERTICAL wxBOTTOM 6 bold 0 -1 wxLEFT 12 wxVERTICAL wxBOTTOM|wxTOP 6 With this option checked, DarkRadiant will attempt to keep all links between selection groups intact. There's no guarantee that this will work 100%, since it's usually problematic when both maps have seen changes to the same elements and their grouping. 0 wxTOP 6 With this option checked the layers in this map are going to be adjusted to fit the incoming map, i.e. any changes made to layers in the merged map are applied to this map. New layers in the imported map are going to be created here. Layers in this map that are not present in the incoming map will be removed.\nLeave this option unchecked to reject any layer changes from the incoming map, all newly created elements will be placed in the active layer in this case. 0 DarkRadiant-2.14.0/install/ui/missioninfoeditdialog.fbp000066400000000000000000005773771413722237400231600ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject3 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY -1,-1 MissionInfoEditDialogMainPanel 900,546 wxTAB_TRAVERSAL bSizer23 wxVERTICAL none 12 wxALL|wxEXPAND 1 bSizer13 wxVERTICAL none 5 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 450 0 1 MissionInfoEditDialogSplitter 1 protected 1 Resizable 1 350 -1 1 wxSPLIT_VERTICAL wxSP_3D|wxSP_LIVE_UPDATE 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel1 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer14 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Mission Info 0 0 1 MissionInfoLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 2 wxBOTH 1 12 m_textCtrl1 wxFLEX_GROWMODE_SPECIFIED none 7 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Title: 0 0 1 m_staticText8 1 protected 1 Resizable 1 0 -1 6 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MissionInfoEditDialogTitleEntry 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Author: 0 0 1 m_staticText81 1 protected 1 Resizable 1 0 -1 6 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MissionInfoEditDialogAuthorEntry 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Description: 0 0 1 m_staticText9 1 protected 1 Resizable 1 0 -1 6 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,-1 1 MissionInfoEditDialogDescriptionEntry 1 protected 1 Resizable 1 -1,80 wxTE_MULTILINE|wxTE_WORDWRAP 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Version: 0 0 1 m_staticText811 1 protected 1 Resizable 1 0 -1 6 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MissionInfoEditDialogVersionEntry 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Required TDM Version: 0 0 1 m_staticText82 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer51 wxHORIZONTAL none 6 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MissionInfoEditDialogReqTdmVersionEntry 1 protected 1 Resizable 1 60,-1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY (optional, e.g. "2.03") 0 0 1 m_staticText83 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer5 wxVERTICAL none 6 wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Mission Titles: 0 0 1 m_staticText821 1 protected 1 Resizable 1 0 -1 6 wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 ,93,90,-1,70,0 0 0 wxID_ANY Optional. Fill in if this package is a campaign containing several maps 0 0 1 m_staticText8211 1 protected 1 Resizable 1 0 -1 6 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MissionInfoEditDialogMissionTitleList 1 protected 1 Resizable 1 -1,150 wxTR_DEFAULT_STYLE 0 6 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Output Path: 0 0 1 m_staticText12 1 protected 1 Resizable 1 0 -1 6 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY C:GamesDarkmodfmsgathers 0 0 1 MissionInfoEditDialogOutputPath 1 protected 1 Resizable 1 0 -1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MissionInfoEditDialogPreviewPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer7 wxVERTICAL none 12 wxEXPAND|wxTOP 0 3 wxBOTH 0 0 fgSizer2 wxFLEX_GROWMODE_SPECIFIED none 0 0 12 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Edit readme.txt... 0 0 -1,-1 1 MissionInfoEditDialogEditReadmeButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Save 0 0 -1,-1 1 MissionInfoEditDialogSaveButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 -1,-1 1 MissionInfoEditDialogCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/missioninfoeditdialog.xrc000066400000000000000000000221131413722237400231520ustar00rootroot00000000000000 900,546 wxVERTICAL wxALL|wxEXPAND 12 wxVERTICAL wxEXPAND 5 350 1 450 vertical wxVERTICAL wxBOTTOM 6 -1 wxEXPAND|wxLEFT 12 7 2 0 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxALL|wxEXPAND 6 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALL|wxEXPAND 6 wxTOP 6 -1 wxALL|wxEXPAND 6 -1,80 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALL|wxEXPAND 6 wxALIGN_CENTER_VERTICAL 0 -1 wxEXPAND 5 wxHORIZONTAL wxALL 6 60,-1 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxVERTICAL wxTOP 6 -1 wxTOP 6 normal 0 -1 wxALL|wxEXPAND 6 -1,150 wxALIGN_CENTER_VERTICAL|wxALL 6 -1 wxALL|wxEXPAND 6 -1 wxVERTICAL wxEXPAND|wxTOP 12 0 3 0 0 0 wxLEFT 12 0 wxLEFT 6 0 wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/missioninforeadmedialog.fbp000066400000000000000000002155371413722237400234530ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject3 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY -1,-1 MissionInfoReadmeDialogMainPanel 900,500 wxTAB_TRAVERSAL bSizer23 wxVERTICAL none 12 wxALL|wxEXPAND 1 bSizer13 wxVERTICAL none 5 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 450 0 1 MissionInfoReadmeSplitter 1 protected 1 Resizable 1 350 -1 1 wxSPLIT_VERTICAL wxSP_3D|wxSP_LIVE_UPDATE 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel1 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer14 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Mission Readme 0 0 1 MissionReadmeLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,-1 1 MissionInfoReadmeContentsEntry 1 protected 1 Resizable 1 -1,80 wxTE_MULTILINE|wxTE_WORDWRAP 0 wxFILTER_NONE wxDefaultValidator 12 wxEXPAND|wxLEFT 0 2 wxBOTH 1 12 m_textCtrl1 wxFLEX_GROWMODE_SPECIFIED none 7 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Output Path: 0 0 1 m_staticText12 1 protected 1 Resizable 1 0 -1 6 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY C:GamesDarkmodfmsgathers 0 0 1 MissionInfoReadmeOutputPath 1 protected 1 Resizable 1 0 -1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 MissionInfoReadmeDialogPreviewPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer7 wxVERTICAL none 12 wxALIGN_RIGHT|wxLEFT|wxTOP 0 bSizer9 wxHORIZONTAL none 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Save 0 0 -1,-1 1 MissionInfoReadmeDialogSaveButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 -1,-1 1 MissionInfoReadmeDialogCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/missioninforeadmedialog.xrc000066400000000000000000000075001413722237400234650ustar00rootroot00000000000000 900,500 wxVERTICAL wxALL|wxEXPAND 12 wxVERTICAL wxEXPAND 5 350 1 450 vertical wxVERTICAL wxBOTTOM 6 -1 wxEXPAND|wxLEFT|wxRIGHT 12 -1,80 wxEXPAND|wxLEFT 12 7 2 0 12 1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALL|wxEXPAND 6 -1 wxVERTICAL wxALIGN_RIGHT|wxLEFT|wxTOP 12 wxHORIZONTAL wxLEFT 6 0 wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/modelselector.fbp000066400000000000000000001731711413722237400214160ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect modelselector 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY -1,-1 ModelSelectorPanel -1,-1 wxTAB_TRAVERSAL bSizer1 wxVERTICAL none 12 wxALL|wxEXPAND 1 bSizer2 wxHORIZONTAL none 5 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 50 0 1 ModelSelectorSplitter 1 protected 1 Resizable 0.0 0 -1 1 wxSPLIT_VERTICAL wxSP_3D|wxSP_LIVE_UPDATE 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ModelSelectorLeftPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer4 wxVERTICAL none 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ModelSelectorOptionsPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer5 wxHORIZONTAL none 6 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Options: 0 0 0 1 m_staticText1 1 protected 1 Resizable 1 0 -1 6 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Surround with monsterclip brush 0 0 1 ModelSelectorMonsterClipOption 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ModelSelectorRightPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer61 wxVERTICAL none 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT 0 bSizer6 wxHORIZONTAL none 6 wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CANCEL Reload Skins 0 0 0 1 ModelSelectorReloadSkinsButton 1 protected 1 Resizable 1 0 Reload Skin declarations. Will rescan the model folders afterwards. wxFILTER_NONE wxDefaultValidator 6 wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CANCEL Reload Models 0 0 0 1 ModelSelectorReloadModelsButton 1 protected 1 Resizable 1 0 Reload all model to display geometry or material changes. Will also rescan the folders afterwards. wxFILTER_NONE wxDefaultValidator 24 wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CANCEL Rescan Folders 0 0 0 1 ModelSelectorRescanFoldersButton 1 protected 1 Resizable 1 0 Look for newly added files in the model folders wxFILTER_NONE wxDefaultValidator 6 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CANCEL Cancel 0 0 0 1 ModelSelectorCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_OK OK 0 0 0 1 ModelSelectorOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/modelselector.xrc000066400000000000000000000105161413722237400214340ustar00rootroot00000000000000 wxVERTICAL wxALL|wxEXPAND 12 wxHORIZONTAL wxEXPAND 5 0 0 50 vertical wxVERTICAL wxEXPAND 0 wxHORIZONTAL wxALL 6 -1 wxALL 6 0 wxVERTICAL wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT 12 wxHORIZONTAL wxRIGHT 6 Reload Skin declarations. Will rescan the model folders afterwards. 0 0 wxRIGHT 6 Reload all model to display geometry or material changes. Will also rescan the folders afterwards. 0 0 wxRIGHT 24 Look for newly added files in the model folders 0 0 6 0 0 wxLEFT 6 0 0 DarkRadiant-2.14.0/install/ui/objectivecomponentsdialog.fbp000066400000000000000000007170021413722237400240120ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY ObjCompMainPanel 670,600 wxTAB_TRAVERSAL bSizer10 wxVERTICAL none 12 wxALL|wxEXPAND 1 bSizer11 wxVERTICAL none 0 wxEXPAND 0 2 wxBOTH 1 12 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 8 10 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Description 0 0 0 1 m_staticText4 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompDescription 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Difficulty 0 0 0 1 Diff 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer12 wxHORIZONTAL none 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompDiffPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer13 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Initial State 0 0 0 1 m_staticText6 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompInitialState 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Flags 0 0 0 1 m_staticText26 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer34 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Mandatory 0 0 1 ObjCompObjMandatory 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 1 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Ongoing 0 0 1 ObjCompObjOngoing 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 1 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Irreversible 0 0 1 ObjCompObjIrreversible 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 1 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Visible 0 0 1 ObjCompObjVisible 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Enabling Objectives 0 0 0 1 m_staticText7 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompEnablingObjectives 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Success Logic 0 0 0 1 m_staticText8 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer14 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompSuccessLogic 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Failure Logic 0 0 0 1 m_staticText9 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompFailureLogic 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Completion Script 0 0 0 1 m_staticText81 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer141 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompCompletionScript 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Failure Script 0 0 0 1 m_staticText91 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompFailureScript 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Completion Target 0 0 0 1 m_staticText811 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1411 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompCompletionTarget 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Failure Target 0 0 0 1 m_staticText911 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompFailureTarget 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Components 0 0 0 1 ObjCompListLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 1 bSizer25 wxVERTICAL none 5 wxEXPAND 1 bSizer26 wxVERTICAL none 12 wxBOTTOM|wxEXPAND 0 bSizer27 wxHORIZONTAL none 5 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,80 1 ObjCompListViewPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer17 wxVERTICAL none 5 wxEXPAND 0 bSizer28 wxVERTICAL none 6 wxEXPAND|wxLEFT 0 bSizer29 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ADD Add 0 0 0 1 ObjCompAddComponentButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 0 1 ObjCompDeleteComponentButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompComponentEditPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer35 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 2 wxBOTH 1 12 fgSizer2 wxFLEX_GROWMODE_SPECIFIED none 2 12 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Type 0 0 0 1 m_staticText24 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompComponentType 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Flags 0 0 0 1 m_staticText25 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 0 bSizer31 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Satisfied at start 0 0 1 ObjCompSatisfiedAtStart 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Irreversible 0 0 1 ObjCompIrreversible 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Boolean NOT 0 0 1 ObjCompBooleanNOT 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Player responsible 0 0 1 ObjCompPlayerResponsible 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCompEditorContainer 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL|wxBORDER_STATIC bSizer32 wxVERTICAL none 12 wxEXPAND|wxTOP 0 0 1 0 0 0 1 0 0 m_sdbSizer1 protected DarkRadiant-2.14.0/install/ui/objectivecomponentsdialog.xrc000066400000000000000000000407151413722237400240370ustar00rootroot00000000000000 670,600 wxVERTICAL wxALL|wxEXPAND 12 wxVERTICAL wxEXPAND 0 8 2 10 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 5 -1 wxEXPAND 0 wxHORIZONTAL wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 0 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 5 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 5 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 5 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 5 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 5 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 5 wxBOTTOM|wxTOP 12 -1 wxEXPAND|wxLEFT 12 wxVERTICAL wxEXPAND 5 wxVERTICAL wxBOTTOM|wxEXPAND 12 wxHORIZONTAL wxEXPAND | wxALL 5 wxVERTICAL wxEXPAND 5 wxVERTICAL wxEXPAND|wxLEFT 6 wxVERTICAL wxBOTTOM|wxEXPAND 6 0 0 wxEXPAND 5 0 0 wxEXPAND | wxALL 0 wxVERTICAL wxBOTTOM|wxEXPAND 6 2 2 12 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxALIGN_CENTER_VERTICAL 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxEXPAND 0 wxVERTICAL wxEXPAND|wxTOP 12 wxALIGN_CENTER_HORIZONTAL|wxALL 5 wxALIGN_CENTER_HORIZONTAL|wxALL 5 DarkRadiant-2.14.0/install/ui/objectiveconditionsdialog.fbp000066400000000000000000004503441413722237400240010ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY ObjCondDialogMainPanel 500,600 wxTAB_TRAVERSAL bSizer5 wxVERTICAL none 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Objective Conditions 0 0 1 ObjCondDialogTopLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 1 bSizer61 wxHORIZONTAL none 6 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCondDialogConditionViewPanel 1 protected 1 Resizable 1 -1,120 0 wxTAB_TRAVERSAL bSizer7 wxVERTICAL none 5 wxEXPAND 0 ButtonSizer1 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 1 ObjCondDialogAddConditionButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 1 ObjCondDialogDeleteConditionButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Condition 0 0 1 ObjCondDialogConditionLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 bSizer6 wxHORIZONTAL none 12 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCondDialogConditionEditPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL 2 wxBOTH 1 12 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 7 6 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Source Mission: 0 0 1 m_staticText6 1 protected 1 Resizable 1 0 -1 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ObjCondDialogSourceMission 1 protected 1 Resizable 1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Source Objective: 0 0 1 m_staticText7 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ObjCondDialogSourceObjective 1 protected 1 Resizable 1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Source Objective State: 0 0 1 m_staticText8 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCondDialogSourceObjectiveState 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Target Objective: 0 0 1 m_staticText71 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCondDialogTargetObjective 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Action: 0 0 1 m_staticText9 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCondDialogAction 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Action Value: 0 0 1 m_staticText10 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjCondDialogActionValue 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Sentence 0 0 1 ObjCondDialogSentenceLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 bSizer91 wxHORIZONTAL none 12 wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY - 0 0 1 ObjCondDialogSentence 1 protected 1 Resizable 1 0 -1 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 bSizer8 wxHORIZONTAL none 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 1 ObjCondDialogCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY OK 0 0 1 ObjCondDialogOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/objectiveconditionsdialog.xrc000066400000000000000000000177271413722237400240320ustar00rootroot00000000000000 500,600 wxVERTICAL wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxRIGHT 6 -1,120 wxVERTICAL wxEXPAND 5 wxVERTICAL wxBOTTOM|wxEXPAND 6 80,-1 0 wxEXPAND 6 80,-1 0 wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxLEFT 12 7 2 6 12 1 wxALIGN_CENTER_VERTICAL 0 -1 wxALL|wxEXPAND 0 0 0 10 wxALIGN_CENTER_VERTICAL 0 -1 wxEXPAND 5 0 0 10 wxALIGN_CENTER_VERTICAL 0 -1 wxEXPAND 0 0 wxALIGN_CENTER_VERTICAL 0 -1 wxEXPAND 0 0 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 0 0 wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxLEFT 12 -1 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxLEFT 6 0 wxEXPAND|wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/objectiveseditor.fbp000066400000000000000000003761071413722237400221250ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY ObjDialogMainPanel 500,600 wxTAB_TRAVERSAL bSizer5 wxVERTICAL none 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Objective Entities 0 0 1 ObjDialogEntityLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 1 bSizer61 wxHORIZONTAL none 6 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjDialogEntityPanel 1 protected 1 Resizable 1 -1,120 0 wxTAB_TRAVERSAL bSizer7 wxVERTICAL none 5 wxEXPAND 0 ButtonSizer1 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 1 ObjDialogAddEntityButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 1 ObjDialogDeleteEntityButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Objectives 0 0 1 ObjDialogObjectivesLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 4 bSizer6 wxHORIZONTAL none 6 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjDialogObjectivesPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer9 wxVERTICAL none 5 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ObjDialogObjectiveButtonPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL ButtonSizer wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 1 ObjDialogAddObjectiveButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Delete 0 0 1 ObjDialogDeleteObjectiveButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Clear 0 0 1 ObjDialogClearObjectiveButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Edit 0 0 1 ObjDialogEditObjectiveButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_staticline1 1 protected 1 Resizable 1 wxLI_HORIZONTAL 0 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Move up 0 0 1 ObjDialogMoveObjUpButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Move down 0 0 1 ObjDialogMoveObjDownButton 1 protected 1 Resizable 1 80,-1 0 wxFILTER_NONE wxDefaultValidator 12 wxLEFT|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Success Logic 0 0 1 ObjDialogLogicLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 bSizer91 wxHORIZONTAL none 12 wxLEFT 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Edit Mission Success Logic 0 0 1 ObjDialogSuccessLogicButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Edit Objective Conditions 0 0 1 ObjDialogObjConditionsButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 0 bSizer8 wxHORIZONTAL none 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 1 ObjDialogCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY OK 0 0 1 ObjDialogOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/objectiveseditor.xrc000066400000000000000000000160551413722237400221430ustar00rootroot00000000000000 500,600 wxVERTICAL wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxRIGHT 6 -1,120 wxVERTICAL wxEXPAND 5 wxVERTICAL wxBOTTOM|wxEXPAND 6 80,-1 0 wxEXPAND 6 80,-1 0 wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxRIGHT 6 wxVERTICAL wxEXPAND | wxALL 5 wxVERTICAL wxBOTTOM|wxEXPAND 6 80,-1 0 wxBOTTOM|wxEXPAND 6 80,-1 0 wxBOTTOM|wxEXPAND 6 80,-1 0 wxBOTTOM|wxEXPAND 6 80,-1 0 wxEXPAND | wxALL 5 wxBOTTOM|wxEXPAND 6 80,-1 0 wxBOTTOM|wxEXPAND 6 80,-1 0 wxLEFT|wxRIGHT|wxTOP 12 -1 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxLEFT 12 0 wxLEFT 6 0 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP 12 wxHORIZONTAL wxEXPAND|wxLEFT 6 0 wxEXPAND|wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/overlaydialog.fbp000066400000000000000000004645321413722237400214220ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY OverlayDialogMainPanel 500,380 wxTAB_TRAVERSAL bSizer1 wxVERTICAL none 12 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Use background image 0 0 1 OverlayDialogUseBackgroundImage 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 OverlayDialogControlPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL 2 wxBOTH 1 6 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 6 6 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Image file 0 0 1 OverlayDialogLabelFile 1 protected 1 Resizable 1 0 -1 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 Select a file 0 1 OverlayDialogFilePicker 1 protected 1 Resizable 1 wxFLP_DEFAULT_STYLE|wxFLP_OPEN 0 wxFILTER_NONE wxDefaultValidator *.* 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Transparency 0 0 1 OverlayDialogLabelTrans 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer11 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY transparent 0 0 1 m_staticText8 1 protected 1 Resizable 1 0 -1 3 wxEXPAND|wxTOP 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 OverlayDialogTransparencySlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 12 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY opaque 0 0 1 m_staticText81 1 protected 1 Resizable 1 0 -1 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Image scale 0 0 1 OverlayDialogLabelScale 1 protected 1 Resizable 1 0 -1 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 OverlayDialogScalePanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer5 wxHORIZONTAL none 3 wxTOP 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 2000 0 0 0 1 OverlayDialogScaleSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 100 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Horizontal offset 0 0 1 OverlayDialogLabelHOffset 1 protected 1 Resizable 1 0 -1 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 OverlayDialogHorizOffsetPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer51 wxHORIZONTAL none 3 wxTOP 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 2000 0 -2000 0 1 OverlayDialogHorizOffsetSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Vertical offset 0 0 1 OverlayDialogLabelVOffset 1 protected 1 Resizable 1 0 -1 0 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 OverlayDialogVertOffsetPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer52 wxHORIZONTAL none 3 wxTOP 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 2000 0 -2000 0 1 OverlayDialogVertOffsetSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Options 0 0 1 OverlayDialogLabelOptions 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer4 wxVERTICAL none 6 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Keep aspect ratio 0 0 1 OverlayDialogKeepAspect 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Zoom image with viewport 0 0 1 OverlayDialogZoomWithViewport 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Pan image with viewport 0 0 1 OverlayDialogPanWithViewport 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CLOSE Close 0 0 1 OverlayDialogCloseButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/overlaydialog.xrc000066400000000000000000000172301413722237400214340ustar00rootroot00000000000000 500,380 wxVERTICAL wxALL 12 0 wxEXPAND | wxALL 12 6 2 6 6 1 wxALIGN_CENTER_VERTICAL|wxALL 5 -1 wxALL|wxEXPAND 5 Select a file *.* wxALIGN_CENTER_VERTICAL|wxALL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 wxEXPAND|wxTOP 3 50 0 100 wxALIGN_CENTER_VERTICAL|wxRIGHT 12 -1 wxALL 5 -1 wxEXPAND | wxALL 0 wxHORIZONTAL wxTOP 3 100 0 2000 wxALL 5 -1 wxEXPAND | wxALL 0 wxHORIZONTAL wxTOP 3 0 -2000 2000 wxALL 5 -1 wxEXPAND | wxALL 0 wxHORIZONTAL wxTOP 3 0 -2000 2000 wxALL 5 -1 wxEXPAND 0 wxVERTICAL wxALL 6 0 wxALL 6 0 wxALL 6 0 wxALIGN_RIGHT|wxBOTTOM|wxLEFT|wxRIGHT 12 0 DarkRadiant-2.14.0/install/ui/particleeditor.fbp000066400000000000000000066175221413722237400216000ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY ParticleEditorMainPanel 800,665 wxTAB_TRAVERSAL bSizer1 wxVERTICAL none 12 wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 ParticleEditorSplitter 1 protected 1 Resizable 0.0 0 -1 1 wxSPLIT_VERTICAL wxSP_3D 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 250,-1 1 m_panel1 1 protected 1 Resizable 1 250,-1 0 wxTAB_TRAVERSAL bSizer2 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Particle Definitions 0 0 1 ParticleEditorDefinitionLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 3 bSizer5 wxHORIZONTAL none 5 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,120 1 ParticleEditorDefinitionView 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer135 wxVERTICAL none 6 wxEXPAND|wxLEFT 0 bSizer6 wxVERTICAL none 0 wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_NEW New 0 0 1 ParticleEditorNewDefButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_SAVE Save 0 0 1 ParticleEditorSaveDefButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_COPY Copy 0 0 1 ParticleEditorCopyDefButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Particle Stages 0 0 1 ParticleEditorStageLabel 1 protected 1 Resizable 1 0 -1 0 wxEXPAND | wxALL 2 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,120 1 ParticleEditorStagePanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer8 wxHORIZONTAL none 12 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,120 1 ParticleEditorStageView 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer136 wxVERTICAL none 6 wxEXPAND|wxLEFT 0 bSizer9 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 1 bSizer11 wxHORIZONTAL none 6 wxRIGHT 1 bSizer61 wxVERTICAL none 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 1 ParticleEditorAddStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Remove 0 0 1 ParticleEditorRemoveStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Toggle Visibility 0 0 1 ParticleEditorToggleStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 1 bSizer62 wxVERTICAL none 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Up 0 0 1 ParticleEditorMoveUpStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Down 0 0 1 ParticleEditorMoveDownStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Duplicate 0 0 1 ParticleEditorDuplicateStageButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_RIGHT 0 bSizer14 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Depth Hack: 0 0 1 m_staticText4 1 protected 1 Resizable 1 0 -1 0 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorDepthHack 1 protected 1 Resizable 1 80,-1 wxSP_ARROW_KEYS 0 12 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Stage Settings 0 0 1 ParticleEditorStageSettingsLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ParticleEditorSettingsNotebook 1 protected 1 Resizable 1 0 Shader 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel5 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer26 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 12 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 7 6 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Shader: 0 0 1 m_staticText8 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ParticleEditorStageShader 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Colour: 0 0 1 m_staticText9 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ParticleEditorStageColour 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Fade Colour: 0 0 1 m_staticText10 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer15 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ParticleEditorStageFadeColour 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Use Entity Colour 0 0 1 ParticleEditorStageUseEntityColour 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Fade In Fraction: 0 0 1 m_staticText11 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer16 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageFadeInFrac 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageFadeInFracSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Fade Out Fraction: 0 0 1 m_staticText12 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer161 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageFadeOutFrac 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageFadeOutFracSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Fade Index Fraction: 0 0 1 m_staticText13 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1611 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageFadeIdxFrac 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageFadeIdxFracSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Animation: 0 0 1 m_staticText14 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer19 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Frames: 0 0 1 m_staticText15 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 9999 0 0 0 1 ParticleEditorStageAnimFrames 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS 0 6 wxLEFT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Rate: 0 0 1 m_staticText16 1 protected 1 Resizable 1 0 -1 0 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageAnimRate 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS 0 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY FPS 0 0 1 m_staticText17 1 protected 1 Resizable 1 0 -1 Count / Time 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel6 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer261 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 12 fgSizer11 wxFLEX_GROWMODE_SPECIFIED none 7 6 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Count: 0 0 1 m_staticText111 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer162 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 999 0 0 0 1 ParticleEditorStageCount 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 999 0 0 0 1 ParticleEditorStageCountSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Duration / sec: 0 0 1 m_staticText121 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1612 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageDuration 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageDurationSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Bunching: 0 0 1 m_staticText131 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer16111 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageBunching 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageBunchingSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Cycles: 0 0 1 m_staticText1311 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer161111 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 999 0 0 0 1 ParticleEditorStageCycles 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 999 0 1 0 1 ParticleEditorStageCyclesSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 1 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Time Offset / sec: 0 0 1 m_staticText13111 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1611111 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageTimeOffset 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageTimeOffsetSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Dead Time / sec: 0 0 1 m_staticText131111 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer16111111 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageDeadTime 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageDeadTimeSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 Size / Speed 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel7 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer2611 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 12 fgSizer111 wxFLEX_GROWMODE_SPECIFIED none 7 6 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Speed: 0 0 1 m_staticText1111 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1621 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY From: 0 0 1 m_staticText66 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageSpeedFrom 1 protected 1 Resizable 1 50,-1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageSpeedFromSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY To: 0 0 1 m_staticText67 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageSpeedTo 1 protected 1 Resizable 1 50,-1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageSpeedToSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Size: 0 0 1 m_staticText1211 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer16211 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY From: 0 0 1 m_staticText661 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageSizeFrom 1 protected 1 Resizable 1 50,-1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageSizeFromSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY To: 0 0 1 m_staticText671 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageSizeTo 1 protected 1 Resizable 1 50,-1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageSizeToSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Rotation Speed: 0 0 1 m_staticText1312 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer162111 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY From: 0 0 1 m_staticText6611 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageRotationSpeedFrom 1 protected 1 Resizable 1 50,-1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageRotationSpeedFromSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY To: 0 0 1 m_staticText6711 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageRotationSpeedTo 1 protected 1 Resizable 1 50,-1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageRotationSpeedToSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Aspect Ratio: 0 0 1 m_staticText13112 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer162112 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY From: 0 0 1 m_staticText6612 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageAspectFrom 1 protected 1 Resizable 1 50,-1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageAspectFromSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY To: 0 0 1 m_staticText6712 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageAspectTo 1 protected 1 Resizable 1 50,-1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageAspectToSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Gravity: 0 0 1 m_staticText131112 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer16111112 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageGravity 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageGravitySlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 6 wxLEFT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Use World Gravity 0 0 1 ParticleEditorStageUseWorldGravity 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Bounds Expansion: 0 0 1 m_staticText1311111 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer161111111 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageBoundsExpansion 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 Distribution 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel61 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer2612 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 12 fgSizer112 wxFLEX_GROWMODE_SPECIFIED none 7 6 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Shape: 0 0 1 m_staticText1112 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1622 wxHORIZONTAL none 3 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Rectangular 0 0 1 ParticleEditorStageShapeRect 1 protected 1 Resizable 1 wxRB_GROUP 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Cylindric 0 0 1 ParticleEditorStageShapeCyl 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Spherical 0 0 1 ParticleEditorStageSpherical 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY X Size: 0 0 1 m_staticText1212 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer16121 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageXSize 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageXSizeSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Y Size: 0 0 1 m_staticText1313 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer161112 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageYSize 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageYSizeSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Z Size: 0 0 1 m_staticText13113 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1611112 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageZSize 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageZSizeSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Ring Size: 0 0 1 ParticleEditorStageRingSizeLabel 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer16111113 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageRingSize 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageRingSizeSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Offset: 0 0 1 m_staticText1311112 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ParticleEditorStageOffset 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Randomness: 0 0 1 m_staticText97 1 protected 1 Resizable 1 0 -1 3 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Distribute Particles randomly within Volume 0 0 1 ParticleEditorStageRandomDist 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator Direction / Orientation 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel611 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer26121 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 12 fgSizer1121 wxFLEX_GROWMODE_SPECIFIED none 7 6 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Direction: 0 0 1 m_staticText11121 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer16221 wxHORIZONTAL none 3 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Cone 0 0 1 ParticleEditorStageCone 1 protected 1 Resizable 1 wxRB_GROUP 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Outward 0 0 1 ParticleEditorStageOutward 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Cone Angle: 0 0 1 ParticleEditorStageConeAngleLabel 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer161211 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageConeAngle 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageConeAngleSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Upward Bias: 0 0 1 ParticleEditorStageUpwardBiasLabel 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1611121 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageUpwardBias 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageUpwardBiasSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Orientation: 0 0 1 m_staticText131131 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer16111121 wxHORIZONTAL none 3 wxALL|wxBOTTOM|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY View 0 0 1 ParticleEditorStageOrientView 1 protected 1 Resizable 1 wxRB_GROUP 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALL|wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Aimed 0 0 1 ParticleEditorStageOrientAimed 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALL|wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY X 0 0 1 ParticleEditorStageOrientX 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALL|wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Y 0 0 1 ParticleEditorStageOrientY 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALL|wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Z 0 0 1 ParticleEditorStageOrientZ 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Trails: 0 0 1 ParticleEditorStageTrailsLabel 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer161111131 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 500 0 0 0 1 ParticleEditorStageTrails 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageTrailsSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Time: 0 0 1 ParticleEditorStageTimeLabel 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer1611111121 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageAimedTime 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageAimedTimeSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Initial Angle: 0 0 1 m_staticText971 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer16111111211 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageInitialAngle 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageInitialAngleSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 Path 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel6111 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer261211 wxVERTICAL none 6 wxALL|wxEXPAND 1 2 wxBOTH 1 12 fgSizer11211 wxFLEX_GROWMODE_SPECIFIED none 7 6 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Path Type: 0 0 1 m_staticText111211 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer162211 wxHORIZONTAL none 3 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Standard 0 0 1 ParticleEditorStagePathStandard 1 protected 1 Resizable 1 wxRB_GROUP 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Flies 0 0 1 ParticleEditorStagePathFlies 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 3 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Helix 0 0 1 ParticleEditorStagePathHelix 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Radial Speed: 0 0 1 ParticleEditorStageRadialSpeedLabel 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1612111 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageRadialSpeed 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageRadialSpeedSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Axial Speed: 0 0 1 ParticleEditorStageAxialSpeedLabel 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer16111211 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageAxialSpeed 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageAxialSpeedSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Sphere Radius: 0 0 1 ParticleEditorStageSphereRadiusLabel 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer161112111 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageSphereRadius 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageSphereRadiusSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Cylinder Size X: 0 0 1 ParticleEditorStageCylSizeXLabel 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer1611111311 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageCylSizeX 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageCylSizeXSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Cylinder Size Y: 0 0 1 ParticleEditorStageCylSizeYLabel 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer16111111212 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageCylSizeY 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageCylSizeYSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Cylinder Size Z: 0 0 1 ParticleEditorStageCylSizeZLabel 1 protected 1 Resizable 1 0 -1 0 wxEXPAND 1 bSizer161111112111 wxHORIZONTAL none 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ParticleEditorStageCylSizeZ 1 protected 1 Resizable 1 70,-1 wxSP_ARROW_KEYS 0 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 100 0 0 0 1 ParticleEditorStageCylSizeZSlider 1 protected 1 Resizable 1 wxSL_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 50 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ParticleEditorPreviewPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer137 wxVERTICAL none 12 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT 0 bSizer3 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Note: changes will be written to the file ..... 0 0 1 ParticleEditorSaveNote 1 protected 1 Resizable 1 0 -1 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CLOSE Close 0 0 1 ParticleEditorCloseButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/particleeditor.xrc000066400000000000000000003437261413722237400216210ustar00rootroot00000000000000 800,665 wxVERTICAL wxALL|wxEXPAND 12 0 0 0 vertical 250,-1 wxVERTICAL wxBOTTOM 6 -1 wxEXPAND|wxLEFT 12 wxHORIZONTAL wxEXPAND | wxALL 5 wxVERTICAL wxEXPAND|wxLEFT 6 wxVERTICAL wxALL 0 0 wxTOP 6 0 wxTOP 6 0 wxBOTTOM|wxTOP 6 -1 wxEXPAND | wxALL 0 wxHORIZONTAL wxEXPAND|wxLEFT 12 wxVERTICAL wxEXPAND|wxLEFT 6 wxVERTICAL wxBOTTOM|wxEXPAND 6 wxHORIZONTAL wxRIGHT 6 wxVERTICAL wxALL|wxEXPAND 0 0 wxTOP|wxEXPAND 6 0 wxTOP|wxEXPAND 6 0 0 wxVERTICAL wxALL|wxEXPAND 0 0 wxTOP|wxEXPAND 6 0 wxTOP|wxEXPAND 6 0 wxALIGN_RIGHT 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALL 0 80,-1 0 0 10 wxBOTTOM 12 -1 wxEXPAND|wxLEFT 12 0 wxVERTICAL wxALL|wxEXPAND 6 7 2 6 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 wxALL|wxALIGN_CENTER_VERTICAL 5 0 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 60,-1 0 0 9999 wxLEFT|wxALIGN_CENTER_VERTICAL 6 -1 wxALL 0 60,-1 0 0 10 wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 1 wxVERTICAL wxALL|wxEXPAND 6 7 2 6 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 999 wxALIGN_CENTER_VERTICAL 5 0 0 999 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 999 wxALIGN_CENTER_VERTICAL 5 1 1 999 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 0 wxVERTICAL wxALL|wxEXPAND 6 7 2 6 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 6 50,-1 0 0 10 wxALIGN_CENTER_VERTICAL 0 50 0 100 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 5 50,-1 0 0 10 wxALIGN_CENTER_VERTICAL 0 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 6 50,-1 0 0 10 wxALIGN_CENTER_VERTICAL 0 50 0 100 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 5 50,-1 0 0 10 wxALIGN_CENTER_VERTICAL 0 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 6 50,-1 0 0 10 wxALIGN_CENTER_VERTICAL 0 50 0 100 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 5 50,-1 0 0 10 wxALIGN_CENTER_VERTICAL 0 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 6 50,-1 0 0 10 wxALIGN_CENTER_VERTICAL 0 50 0 100 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 5 50,-1 0 0 10 wxALIGN_CENTER_VERTICAL 0 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxLEFT|wxALIGN_CENTER_VERTICAL 6 0 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 0 wxVERTICAL wxALL|wxEXPAND 6 7 2 6 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 3 0 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 3 0 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM 3 0 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxALIGN_CENTER_VERTICAL 5 -1 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM 3 0 0 wxVERTICAL wxALL|wxEXPAND 6 7 2 6 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 3 0 wxALIGN_CENTER_VERTICAL|wxALL 3 0 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALL|wxBOTTOM|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL 3 0 wxALL|wxALIGN_CENTER_VERTICAL 3 0 wxALL|wxALIGN_CENTER_VERTICAL 3 0 wxALL|wxALIGN_CENTER_VERTICAL 3 0 wxALL|wxALIGN_CENTER_VERTICAL 3 0 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 500 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 0 wxVERTICAL wxALL|wxEXPAND 6 7 2 6 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 3 0 wxALIGN_CENTER_VERTICAL|wxALL 3 0 wxALL 3 0 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 5 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxALIGN_CENTER_VERTICAL 5 -1 wxEXPAND 0 wxHORIZONTAL wxRIGHT|wxALIGN_CENTER_VERTICAL 6 70,-1 0 0 10 wxALIGN_CENTER_VERTICAL 5 50 0 100 wxVERTICAL wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT 12 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 5 -1 wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/patchcreatedialog.fbp000066400000000000000000001251671413722237400222220ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject4 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY PatchCreatePanel 200,110 wxTAB_TRAVERSAL bSizer25 wxVERTICAL none 12 wxBOTTOM|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Create simple Patch Mesh 0 0 1 PatchCreateTopLabel 1 protected 1 Resizable 1 0 -1 6 wxLEFT 0 bSizer26 wxVERTICAL none 12 wxBOTTOM|wxEXPAND 0 2 wxBOTH 12 fgSizer3 wxFLEX_GROWMODE_SPECIFIED none 2 6 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Width: 0 0 1 m_staticText15 1 protected 1 Resizable 1 0 -1 0 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 PatchCreateWidthChoice 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Height: 0 0 1 m_staticText16 1 protected 1 Resizable 1 0 -1 0 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 PatchCreateHeightChoice 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Remove selected Brush 0 0 1 PatchCreateRemoveSelectedBrush 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/patchcreatedialog.xrc000066400000000000000000000047111413722237400222360ustar00rootroot00000000000000 200,110 wxVERTICAL wxBOTTOM|wxRIGHT 12 -1 wxLEFT 6 wxVERTICAL wxBOTTOM|wxEXPAND 12 2 2 6 12 wxALIGN_CENTER_VERTICAL 0 -1 wxALL 0 0 wxALIGN_CENTER_VERTICAL 0 -1 0 0 wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/patchinspector.fbp000066400000000000000000002567331413722237400216110ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect patchinspector 1000 none 0 MyProject3 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY PatchInspectorMainPanel 219,285 wxTAB_TRAVERSAL bSizer23 wxVERTICAL none 12 wxALL|wxEXPAND 1 bSizer13 wxVERTICAL none 0 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 PatchInspectorVertexPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer16 wxVERTICAL none 6 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Patch Control Vertices 0 0 0 1 PatchInspectorVertexLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT|wxRIGHT 0 2 wxBOTH 1 12 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 2 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Row: 0 0 0 1 m_staticText8 1 protected 1 Resizable 1 0 -1 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 "0" 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 PatchInspectorControlRow 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Column: 0 0 0 1 m_staticText9 1 protected 1 Resizable 1 0 -1 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 "0" 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 PatchInspectorControlColumn 1 protected 1 Resizable 0 1 0 wxFILTER_NONE wxDefaultValidator 12 wxEXPAND|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 PatchInspectorCoordPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer15 wxVERTICAL none 8 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Coordinates 0 0 0 1 PatchInspectorCoordLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 PatchInspectorTessPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer20 wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Patch Tesselation 0 0 0 1 PatchInspectorTessLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 1 bSizer14 wxVERTICAL none 6 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Fixed Subdivisions 0 0 1 PatchInspectorFixedSubdivisions 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxTOP 0 2 wxBOTH 1 12 fgSizer2 wxFLEX_GROWMODE_SPECIFIED none 2 6 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Horizontal: 0 0 0 1 PatchInspectorSubdivisionsXLabel 1 protected 1 Resizable 1 0 -1 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 1 16384 0 1 0 1 PatchInspectorSubdivisionsX 1 protected 1 Resizable 1 wxSP_ARROW_KEYS 0 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Vertical: 0 0 0 1 PatchInspectorSubdivisionsYLabel 1 protected 1 Resizable 1 0 -1 0 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 1 16384 0 1 0 1 PatchInspectorSubdivisionsY 1 protected 1 Resizable 1 wxSP_ARROW_KEYS 0 DarkRadiant-2.14.0/install/ui/patchinspector.xrc000066400000000000000000000150331413722237400216200ustar00rootroot00000000000000 219,285 wxVERTICAL wxALL|wxEXPAND 12 wxVERTICAL wxEXPAND 0 wxVERTICAL wxBOTTOM 6 -1 wxEXPAND|wxLEFT|wxRIGHT 12 2 2 0 12 1 wxALIGN_CENTER_VERTICAL 5 -1 wxALL|wxEXPAND 5 0 0 wxALIGN_CENTER_VERTICAL 0 -1 wxALL|wxEXPAND 5 0 0 wxEXPAND|wxLEFT|wxRIGHT 12 wxVERTICAL wxBOTTOM|wxTOP 8 -1 wxEXPAND|wxRIGHT 12 wxVERTICAL wxBOTTOM|wxTOP 6 -1 wxEXPAND|wxLEFT 12 wxVERTICAL wxBOTTOM|wxTOP 6 0 wxEXPAND|wxTOP 6 2 2 6 12 1 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL 0 1 1 16384 wxALIGN_CENTER_VERTICAL 0 -1 0 1 1 16384 DarkRadiant-2.14.0/install/ui/patchthickendialog.fbp000066400000000000000000001527371413722237400224070ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY ThickenDialogMainPanel 300,185 wxTAB_TRAVERSAL bSizer9 wxVERTICAL none 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Thicken selected Patches 0 0 1 ThickenDialogTopLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 bSizer10 wxVERTICAL none 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Extrude along Vertex Normals 0 0 1 ThickenDialogExtrudeAlongNormals 1 protected 1 Resizable 1 wxRB_GROUP 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Extrude along X-Axis 0 0 1 ThickenDialogExtrudeAlongX 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Extrude along Y-Axis 0 0 1 ThickenDialogExtrudeAlongY 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Extrude along Z-Axis 0 0 1 ThickenDialogExtrudeAlongZ 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 12 wxEXPAND|wxLEFT|wxRIGHT 0 bSizer11 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Thickness (units): 0 0 1 m_staticText6 1 protected 1 Resizable 1 0 -1 5 wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ThickenDialogThickness 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 16 6 wxBOTTOM|wxTOP 1 bSizer12 wxVERTICAL none 12 wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Create Seams ("side walls") 0 0 1 ThickenDialogCreateSeams 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/patchthickendialog.xrc000066400000000000000000000061271413722237400224230ustar00rootroot00000000000000 300,185 wxVERTICAL wxALL 5 -1 wxEXPAND|wxLEFT 12 wxVERTICAL wxALL 5 0 wxALL 5 0 wxALL 5 0 wxALL 5 0 wxEXPAND|wxLEFT|wxRIGHT 12 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 -1 wxALL 5 16 wxBOTTOM|wxTOP 6 wxVERTICAL wxLEFT|wxRIGHT 12 1 DarkRadiant-2.14.0/install/ui/readableeditor.fbp000066400000000000000000013115561413722237400215250ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject2 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY ReadableEditorMainPanel 850,600 wxTAB_TRAVERSAL bSizer3 wxVERTICAL none 12 wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 450 0 1 ReadableEditorSplitter 1 protected 1 Resizable 1 350 -1 1 wxSPLIT_VERTICAL wxSP_3D|wxSP_LIVE_UPDATE 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_panel1 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer9 wxVERTICAL none 6 wxEXPAND|wxRIGHT 1 bSizer4 wxVERTICAL none 12 wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY General Properties 0 0 1 ReadableEditorGeneralLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 0 2 wxBOTH 1 12 fgSizer1 wxFLEX_GROWMODE_SPECIFIED none 4 6 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Inventory Name: 0 0 1 m_staticText2 1 protected 1 Resizable 1 0 -1 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ReadableEditorInventoryName 1 protected 1 Resizable 1 wxTE_PROCESS_ENTER|wxTE_PROCESS_TAB 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY XData Name: 0 0 1 m_staticText3 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer5 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ReadableEditorXDataName 1 protected 1 Resizable 1 wxTE_PROCESS_ENTER|wxTE_PROCESS_TAB 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 Load From Art Provider; wxART_FILE_OPEN; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 1 ReadableEditorXDBrowseButton 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Number of Pages: 0 0 1 m_staticText4 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 bSizer6 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 10 0 0 0 1 ReadableEditorNumPages 1 protected 1 Resizable 1 wxSP_ARROW_KEYS 0 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Layout: 0 0 1 m_staticText6 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY One-sided 0 0 1 ReadableEditorOneSided 1 protected 1 Resizable 1 wxRB_GROUP 0 wxFILTER_NONE wxDefaultValidator 1 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Two-sided 0 0 1 ReadableEditorTwoSided 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Pageturn Sound: 0 0 1 m_staticText5 1 protected 1 Resizable 1 0 -1 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ReadableEditorPageTurnSound 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 12 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Page Editing 0 0 1 ReadableEditorPageLabel 1 protected 1 Resizable 1 0 -1 12 wxEXPAND|wxLEFT 1 bSizer7 wxVERTICAL none 12 wxBOTTOM|wxEXPAND 0 bSizer8 wxHORIZONTAL none 6 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_INSERT Insert Page 0 0 1 ReadableEditorInsertPage 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 Load From Art Provider; wxART_GOTO_FIRST; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 1 ReadableEditorGotoFirstPage 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 Load From Art Provider; wxART_GO_BACK; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 1 ReadableEditorGotoPreviousPage 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Current Page: 0 0 1 m_staticText15 1 protected 1 Resizable 1 0 -1 0 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 1 0 0 1 ReadableEditorCurPage 1 protected 1 Resizable 1 0 -1 6 wxLEFT 0 1 1 1 1 Load From Art Provider; wxART_GO_FORWARD; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 1 ReadableEditorGotoNextPage 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 Load From Art Provider; wxART_GOTO_LAST; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 1 ReadableEditorGotoLastPage 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 1 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_DELETE Remove Page 0 0 1 ReadableEditorDeletePage 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 bSizer71 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY GUI Definition: 0 0 1 m_staticText9 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_VERTICAL|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ReadableEditorGuiDefinition 1 protected 1 Resizable 1 wxTE_PROCESS_ENTER|wxTE_PROCESS_TAB 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 Load From Art Provider; wxART_FILE_OPEN; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 1 ReadableEditorGuiBrowseButton 1 protected 1 Resizable 1 wxBU_AUTODRAW 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 1 3 wxBOTH 1,2 2 12 fgSizer2 wxFLEX_GROWMODE_SPECIFIED none 3 6 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_staticText10 1 protected 1 Resizable 1 0 -1 6 wxALIGN_BOTTOM|wxALIGN_CENTER_HORIZONTAL|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Left 0 0 1 ReadableEditorPageLeftLabel 1 protected 1 Resizable 1 0 -1 6 wxALIGN_CENTER_HORIZONTAL|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Right 0 0 1 ReadableEditorPageRightLabel 1 protected 1 Resizable 1 0 -1 0 wxALIGN_CENTER|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Title 0 0 1 m_staticText13 1 protected 1 Resizable 1 0 -1 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ReadableEditorTitleLeft 1 protected 1 Resizable 1 -1,70 wxTE_MULTILINE|wxTE_WORDWRAP 0 wxFILTER_NONE wxDefaultValidator 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ReadableEditorTitleRight 1 protected 1 Resizable 1 -1,70 wxTE_MULTILINE|wxTE_WORDWRAP 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Body 0 0 1 m_staticText14 1 protected 1 Resizable 1 0 -1 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ReadableEditorBodyLeft 1 protected 1 Resizable 1 -1,-1 wxTE_MULTILINE|wxTE_WORDWRAP 0 wxFILTER_NONE wxDefaultValidator 0 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ReadableEditorBodyRight 1 protected 1 Resizable 1 wxTE_MULTILINE|wxTE_WORDWRAP 0 wxFILTER_NONE wxDefaultValidator 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ReadableEditorPreviewPanel 1 protected 1 Resizable 1 0 wxTAB_TRAVERSAL bSizer13 wxVERTICAL none 12 wxALIGN_RIGHT|wxALL 0 bSizer12 wxHORIZONTAL none 24 wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Tools 0 0 1 ReadableEditorTools 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Cancel 0 0 1 ReadableEditorCancel 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Save 0 0 1 ReadableEditorSave 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Save and Close 0 0 1 ReadableEditorSaveAndClose 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/readableeditor.xrc000066400000000000000000000414021413722237400215370ustar00rootroot00000000000000 850,600 wxVERTICAL wxALL|wxEXPAND 12 350 1 450 vertical wxVERTICAL wxEXPAND|wxRIGHT 6 wxVERTICAL wxBOTTOM 12 -1 wxEXPAND|wxLEFT 12 4 2 6 12 1 wxALIGN_CENTER_VERTICAL 6 -1 wxALL|wxEXPAND 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 wxLEFT 6 undefined.png 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 0 0 10 wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 1 wxALIGN_CENTER_VERTICAL 6 0 wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALL|wxEXPAND 0 wxBOTTOM|wxTOP 12 -1 wxEXPAND|wxLEFT 12 wxVERTICAL wxBOTTOM|wxEXPAND 12 wxHORIZONTAL 6 0 wxLEFT 6 undefined.png 0 wxLEFT 6 undefined.png 0 wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT 6 -1 wxALIGN_CENTER_VERTICAL|wxLEFT 0 -1 wxLEFT 6 undefined.png 0 wxLEFT 6 undefined.png 0 wxLEFT 6 0 wxBOTTOM|wxEXPAND 6 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 wxALIGN_CENTER_VERTICAL|wxLEFT 6 undefined.png 0 wxEXPAND 0 3 3 6 12 1,2 2 wxALL 5 -1 wxALIGN_BOTTOM|wxALIGN_CENTER_HORIZONTAL|wxTOP 6 -1 wxALIGN_CENTER_HORIZONTAL|wxTOP 6 -1 wxALIGN_CENTER|wxALL 0 -1 wxALL|wxEXPAND 0 -1,70 wxALL|wxEXPAND 0 -1,70 wxALIGN_CENTER|wxALL 0 -1 wxALL|wxEXPAND 0 wxALL|wxEXPAND 0 wxVERTICAL wxALIGN_RIGHT|wxALL 12 wxHORIZONTAL wxRIGHT 24 0 wxLEFT 6 0 wxLEFT 6 0 wxLEFT 6 0 DarkRadiant-2.14.0/install/ui/renderpreview.fbp000066400000000000000000001232731413722237400214340ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY RenderPreviewPanel 500,300 wxTAB_TRAVERSAL RenderPreviewSizer wxVERTICAL none 0 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 bSizer2 wxHORIZONTAL none 3 wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 RenderPreviewAnimToolbar 1 1 protected 1 Resizable 5 1 wxTB_HORIZONTAL|wxTB_NODIVIDER 0 Load From Art Provider; darkradiant:media-playback-start-ltr.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_NORMAL startTimeButton startTimeButton protected Start Render Time Load From Art Provider; darkradiant:media-playback-pause.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_NORMAL pauseTimeButton pauseTimeButton protected Pause Render Time Load From Art Provider; darkradiant:media-playback-stop.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_NORMAL stopTimeButton stopTimeButton protected Stop Render Time protected Load From Art Provider; wxART_GO_BACK; wxART_TOOLBAR 0 wxID_ANY wxITEM_NORMAL prevButton prevButton protected Previous Frame Load From Art Provider; wxART_GO_FORWARD; wxART_TOOLBAR 0 wxID_ANY wxITEM_NORMAL nextButton nextButton protected Next Frame 5 wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 RenderPreviewFilterToolbar 1 1 protected 1 Resizable 5 1 wxTB_HORIZONTAL|wxTB_HORZ_TEXT|wxTB_NODIVIDER 0 3 wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 0 1 1 1 1 20,20 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 RenderPreviewRenderModeToolbar 1 1 protected 1 Resizable 5 1 wxTB_HORIZONTAL|wxTB_NODIVIDER 0 Load From Art Provider; darkradiant:textureMode16.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_RADIO texturedModeButton texturedModeButton protected Switch to Textured Mode Load From Art Provider; darkradiant:lightingMode.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_RADIO lightingModeButton lightingModeButton protected Switch to Lighting Mode 3 wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 0 1 1 1 1 20,20 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 RenderPreviewUtilToolbar 1 1 protected 1 Resizable 5 1 wxTB_HORIZONTAL|wxTB_NODIVIDER 0 Load From Art Provider; darkradiant:grid_toggle.png; wxART_TOOLBAR 0 wxID_ANY wxITEM_CHECK gridButton gridButton protected Toggle a 16 unit wide Grid DarkRadiant-2.14.0/install/ui/renderpreview.xrc000066400000000000000000000110041413722237400214450ustar00rootroot00000000000000 500,300 wxVERTICAL wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 wxHORIZONTAL wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 3 1 5 Start Render Time undefined.png Pause Render Time undefined.png Stop Render Time undefined.png Previous Frame undefined.png Next Frame undefined.png wxEXPAND 5 1 5 wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 3 20,20 1 5 Switch to Textured Mode undefined.png 1 Switch to Lighting Mode undefined.png 1 wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 3 20,20 1 5 Toggle a 16 unit wide Grid undefined.png 1 DarkRadiant-2.14.0/install/ui/stimresponseeditor.fbp000066400000000000000000016541601413722237400225220ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY SREditorMainPanel 1000,665 wxTAB_TRAVERSAL bSizer1 wxVERTICAL none 12 wxEXPAND | wxALL 1 1 1 1 1 16,16 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 SREditorNotebook 1 protected 1 Resizable 1 ; ; forward_declare 0 Load From Art Provider; darkradiant:sr_stim.png; wxART_MENU Stims 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 SREditorStimEditorContainer 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer78 wxHORIZONTAL none 6 wxALL|wxEXPAND 0 bSizer81 wxVERTICAL none 6 wxBOTTOM|wxEXPAND|wxTOP 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 SREditorStimList 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer16 wxVERTICAL none 0 wxEXPAND 0 bSizer83 wxHORIZONTAL none 6 wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 StimTypeComboBox 1 protected 1 Resizable -1 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 AddStimButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Remove 0 0 0 1 RemoveStimButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 SREditorStimPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer67 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 bSizer68 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Type: 0 0 0 1 m_staticText15 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 12 wxEXPAND|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 1 StimEditorTypeCombo 1 protected 1 Resizable -1 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxBOTTOM 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Active 0 0 1 StimEditorActive 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND 0 2 wxBOTH 1 12 fgSizer9 wxFLEX_GROWMODE_SPECIFIED none 2 6 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Activation Timer: 0 0 1 StimEditorActivationTimer 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 1 StimEditorActivationTimerPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer69 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxFIXED_MINSIZE|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 200 0 0 0 1 StimEditorAcivationTimerHour 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY h 0 0 0 1 m_staticText21 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 59 0 0 0 1 StimEditorAcivationTimerMinute 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY m 0 0 0 1 m_staticText211 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 59 0 0 0 1 StimEditorAcivationTimerSecond 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY s 0 0 0 1 m_staticText212 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 999 0 0 0 1 StimEditorAcivationTimerMS 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 6 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY ms 0 0 0 1 m_staticText213 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Timer restarts after firing 0 0 1 StimEditorTimerRestarts 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 1 StimEditorTimerRestartPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer70 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Timer reloads 0 0 1 StimEditorTimerReloads 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 1000 0 0 0 1 StimEditorTimerReloadsTimes 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY times 0 0 0 1 m_staticText30 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxTOP|wxBOTTOM 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Timer waits for start (when disabled: starts at spawn time) 0 0 1 StimEditorTimerWaitsForStart 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 4 wxEXPAND|wxTOP 0 2 wxBOTH 1 12 fgSizer10 wxFLEX_GROWMODE_SPECIFIED none 10 6 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Time interval: 0 0 1 StimEditorTimeInterval 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 bSizer71 wxHORIZONTAL none 5 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 9999999 0 0 0 1 StimEditorTimeIntervalValue 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY ms 0 0 0 1 StimEditorTimeIntervalUnitLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Duration: 0 0 1 StimEditorDuration 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 bSizer72 wxHORIZONTAL none 5 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 9999999 0 0 0 1 StimEditorDurationValue 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY ms 0 0 0 1 StimEditorDurationUnitLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Radius 0 0 1 StimEditorRadius 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 bSizer73 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 99999 0 0 0 1 StimEditorRadiusValue 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 12 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Use bounds 0 0 1 StimEditorRadiusUseBounds 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Radius changes over time to: 0 0 1 StimEditorRadiusChangesOverTime 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 99999 0 0 0 1 StimEditorRadiusChangesOverTimeValue 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Magnitude: 0 0 1 StimEditorMagnitude 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 1 StimEditorMagnitudePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer74 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 1 10000 0 0 0 1 StimEditorMagnitudeValue 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 1 12 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Falloff Exponent: 0 0 1 StimEditorMagnitudeFalloff 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Max Fire Count: 0 0 1 StimEditorMaxFireCount 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND|wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 1000000 0 0 0 1 StimEditorMaxFireCountValue 1 protected 1 Resizable 1 wxSP_ARROW_KEYS ; ; forward_declare 0 0 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Chance: 0 0 1 StimEditorChance 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 1 StimEditorChanceValuePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer75 wxVERTICAL none 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Velocity: 0 0 1 StimEditorVelocity 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 0 1 StimEditorVelocityValue 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Bounds: 0 0 1 StimEditorBounds 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 1 StimEditorBoundsPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer76 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Min: 0 0 0 1 m_staticText19 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 0 1 StimEditorBoundsMinValue 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Max: 0 0 0 1 m_staticText20 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 0 1 StimEditorBoundsMaxValue 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator Load From Art Provider; darkradiant:sr_response.png; Responses 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 SREditorResponseEditorContainer 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer22 wxHORIZONTAL none 6 wxALL|wxEXPAND 0 bSizer26 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 SREditorResponseList 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer27 wxVERTICAL none 5 wxEXPAND 0 bSizer831 wxHORIZONTAL none 6 wxRIGHT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ResponseTypeComboBox 1 protected 1 Resizable -1 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Add 0 0 0 1 AddResponseButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND|wxLEFT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Remove 0 0 0 1 RemoveResponseButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxEXPAND | wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 SREditorResponsePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer17 wxVERTICAL none 6 wxBOTTOM|wxEXPAND 0 bSizer18 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Type: 0 0 0 1 m_staticText151 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 12 wxALIGN_CENTER_VERTICAL|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 1 ResponseEditorTypeCombo 1 protected 1 Resizable -1 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxTOP|wxBOTTOM 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Active 0 0 1 ResponseEditorActive 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 4 wxEXPAND|wxTOP 0 2 wxBOTH 1 12 fgSizer3 wxFLEX_GROWMODE_SPECIFIED none 10 6 5 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Chance: 0 0 1 ResponseEditorChance 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 1 ResponseEditorChanceValuePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer19 wxVERTICAL none 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Random Effects: 0 0 1 ResponseEditorRandomFX 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALL|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 0 1 ResponseEditorRandomFXValue 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 10 wxBOTTOM|wxTOP 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY Response Effects 0 0 0 1 ResponseEditorFXLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 wxID_ANY 0 0 1 ResponseEditorFXPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer20 wxVERTICAL none Load From Art Provider; darkradiant:sr_icon_custom.png; Custom Stims 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 SREditorCustomStimEditorContainer 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer33 wxVERTICAL none 12 wxALIGN_RIGHT|wxBOTTOM|wxRIGHT 0 bSizer3 wxHORIZONTAL none 6 wxRIGHT 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_OK OK 0 0 0 1 SREditorOkButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 6 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_CANCEL Cancel 0 0 0 1 SREditorCancelButton 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/stimresponseeditor.xrc000066400000000000000000000745511413722237400225460ustar00rootroot00000000000000 1000,665 wxVERTICAL wxEXPAND | wxALL 12 0 undefined.png wxHORIZONTAL wxALL|wxEXPAND 6 wxVERTICAL wxBOTTOM|wxEXPAND|wxTOP 6 wxVERTICAL wxEXPAND 0 wxHORIZONTAL wxRIGHT 6 wxEXPAND 6 0 0 wxEXPAND|wxLEFT 6 0 0 wxEXPAND | wxALL 6 wxVERTICAL wxBOTTOM|wxEXPAND 6 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 -1 wxEXPAND|wxLEFT 12 wxTOP|wxBOTTOM 6 0 wxBOTTOM|wxEXPAND 6 2 2 6 12 1 wxALIGN_CENTER_VERTICAL 5 0 wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxFIXED_MINSIZE|wxRIGHT 6 60,-1 0 0 200 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxRIGHT|wxALIGN_CENTER_VERTICAL 6 60,-1 0 0 59 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 60,-1 0 0 59 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALIGN_CENTER_VERTICAL 6 60,-1 0 0 999 wxALL 6 -1 wxALIGN_CENTER_VERTICAL 5 0 wxEXPAND|wxALL 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 5 0 wxLEFT|wxRIGHT 6 60,-1 0 0 1000 wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 wxTOP|wxBOTTOM 6 0 wxEXPAND|wxTOP 4 10 2 6 12 1 wxALIGN_CENTER_VERTICAL 5 0 wxEXPAND 5 wxHORIZONTAL wxEXPAND 5 0 0 9999999 wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 wxALIGN_CENTER_VERTICAL 5 0 wxEXPAND 5 wxHORIZONTAL wxEXPAND 5 0 0 9999999 wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 wxALIGN_CENTER_VERTICAL 5 0 wxEXPAND 5 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 5 0 0 99999 wxALIGN_CENTER_VERTICAL|wxLEFT 12 0 wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxEXPAND 5 0 0 99999 wxALIGN_CENTER_VERTICAL 5 0 wxEXPAND|wxALL 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 5 1 0 10000 wxALIGN_CENTER_VERTICAL|wxLEFT 12 0 wxALIGN_CENTER_VERTICAL 5 0 wxEXPAND|wxALIGN_CENTER_VERTICAL 5 0 0 1000000 wxALIGN_CENTER_VERTICAL 5 0 wxEXPAND|wxALL 0 wxVERTICAL wxALIGN_CENTER_VERTICAL 0 0 wxALL|wxEXPAND 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 0 wxEXPAND|wxALL 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxRIGHT 6 0 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 6 -1 wxALL 0 0 1 undefined.png wxHORIZONTAL wxALL|wxEXPAND 6 wxVERTICAL wxBOTTOM|wxEXPAND 6 wxVERTICAL wxEXPAND 5 wxHORIZONTAL wxRIGHT 6 wxEXPAND 6 0 0 wxEXPAND|wxLEFT 6 0 0 wxEXPAND | wxALL 6 wxVERTICAL wxBOTTOM|wxEXPAND 6 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 -1 wxALIGN_CENTER_VERTICAL|wxLEFT 12 wxTOP|wxBOTTOM 6 0 wxEXPAND|wxTOP 4 10 2 6 12 1 wxALIGN_CENTER_VERTICAL 5 0 wxEXPAND|wxALL 0 wxVERTICAL wxALIGN_CENTER_VERTICAL 0 0 wxALL|wxEXPAND 0 0 wxBOTTOM|wxTOP 10 -1 wxEXPAND|wxALL 0 wxVERTICAL 0 undefined.png wxVERTICAL wxALIGN_RIGHT|wxBOTTOM|wxRIGHT 12 wxHORIZONTAL wxRIGHT 6 0 0 6 0 0 DarkRadiant-2.14.0/install/ui/texturetoolmanipulationpanel.fbp000066400000000000000000004216611413722237400246140ustar00rootroot00000000000000 ; XRC 1 source_name 0 0 res UTF-8 connect texturetoolmanipulationpanel 1000 none 0 MyProject1 . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT wxSYS_COLOUR_APPWORKSPACE 1 1 impl_virtual 0 wxID_ANY TextureToolManipulatorPanel -1,-1 ; ; forward_declare wxTAB_TRAVERSAL bSizer1 wxVERTICAL none 0 wxEXPAND | wxALL 0 1 1 1 1 48,48,48 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 -1,1 0 1 m_panel12 1 protected 1 Resizable 1 -1,1 ; ; forward_declare 0 8 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ShiftPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer2 wxVERTICAL none 6 wxALIGN_CENTER|wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Shift 0 0 0 1 ShiftLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER|wxBOTTOM 1 bSizer15 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 Load From Art Provider; darkradiant:arrow_left_blue.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 ShiftLeftButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 3 wxALIGN_CENTER|wxLEFT|wxRIGHT 1 bSizer21 wxVERTICAL none 0 wxALIGN_CENTER 0 1 1 1 1 Load From Art Provider; darkradiant:arrow_up_blue.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 ShiftUpButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER 0 1 1 1 1 Load From Art Provider; darkradiant:arrow_down_blue.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 ShiftDownButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 Load From Art Provider; darkradiant:arrow_right_blue.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 ShiftRightButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxEXPAND | wxALL 0 1 1 1 1 48,48,48 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 -1,1 0 1 m_panel1 1 protected 1 Resizable 1 -1,1 ; ; forward_declare 0 8 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 ScalePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer22 wxVERTICAL none 6 wxALIGN_CENTER|wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Scale 0 0 0 1 ScaleLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER|wxBOTTOM 0 bSizer211 wxHORIZONTAL none 0 wxALIGN_CENTER|wxBOTTOM 0 1 1 1 1 Load From Art Provider; darkradiant:hscale_down.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 ScaleHorizSmallerButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 Load From Art Provider; darkradiant:hscale_up.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 ScaleHorizLargerButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 999 0 -1,60 1 0 1 HorizScaleFactor 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS ; ; forward_declare 0 3 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY % 0 0 0 1 m_staticText4 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER|wxBOTTOM 1 bSizer2111 wxHORIZONTAL none 0 wxALIGN_CENTER|wxBOTTOM 0 1 1 1 1 Load From Art Provider; darkradiant:vscale_down.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 ScaleVertSmallerButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 Load From Art Provider; darkradiant:vscale_up.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 ScaleVertLargerButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 999 0 -1,60 1 0 1 VertScaleFactor 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS ; ; forward_declare 0 3 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY % 0 0 0 1 m_staticText41 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND 0 1 1 1 1 48,48,48 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 -1,1 0 1 m_panel11 1 protected 1 Resizable 1 -1,1 ; ; forward_declare 0 8 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 RotatePanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL bSizer221 wxVERTICAL none 6 wxALIGN_CENTER|wxBOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Rotate 0 0 0 1 RotateLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER|wxBOTTOM 0 bSizer2112 wxHORIZONTAL none 0 wxALIGN_CENTER|wxBOTTOM 0 1 1 1 1 Load From Art Provider; darkradiant:rotate_cw.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 RotateClockWiseButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxLEFT 0 1 1 1 1 Load From Art Provider; darkradiant:rotate_ccw.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY MyButton 0 0 0 1 RotateCounterClockWiseButton 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 999 0 -1,60 1 0 1 RotateAngle 1 protected 1 Resizable 1 60,-1 wxSP_ARROW_KEYS ; ; forward_declare 0 3 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY ° 0 0 0 1 m_staticText42 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxEXPAND | wxALL 0 1 1 1 1 48,48,48 1 0 1 1 0 Dock 0 Left 0 1 0 0 wxID_ANY 0 -1,1 0 1 m_panel111 1 protected 1 Resizable 1 -1,1 ; ; forward_declare 0 DarkRadiant-2.14.0/install/ui/texturetoolmanipulationpanel.xrc000066400000000000000000000233551413722237400246370ustar00rootroot00000000000000 #ababab wxVERTICAL wxEXPAND | wxALL 0 -1,1 #303030 0 wxEXPAND | wxALL 8 wxVERTICAL wxALIGN_CENTER|wxBOTTOM 6 -1 wxALIGN_CENTER|wxBOTTOM 6 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 undefined.png 0 wxALIGN_CENTER|wxLEFT|wxRIGHT 3 wxVERTICAL wxALIGN_CENTER 0 undefined.png 0 wxALIGN_CENTER 0 undefined.png 0 wxALIGN_CENTER_VERTICAL 0 undefined.png 0 wxEXPAND | wxALL 0 -1,1 #303030 0 wxALL|wxEXPAND 8 wxVERTICAL wxALIGN_CENTER|wxBOTTOM 6 -1 wxALIGN_CENTER|wxBOTTOM 6 wxHORIZONTAL wxALIGN_CENTER|wxBOTTOM 0 undefined.png 0 wxLEFT 6 undefined.png 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 60,-1 0 1 999 wxALIGN_CENTER_VERTICAL|wxLEFT 3 -1 wxALIGN_CENTER|wxBOTTOM 6 wxHORIZONTAL wxALIGN_CENTER|wxBOTTOM 0 undefined.png 0 wxLEFT 6 undefined.png 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 60,-1 0 1 999 wxALIGN_CENTER_VERTICAL|wxLEFT 3 -1 wxEXPAND 0 -1,1 #303030 0 wxEXPAND | wxALL 8 wxVERTICAL wxALIGN_CENTER|wxBOTTOM 6 -1 wxALIGN_CENTER|wxBOTTOM 6 wxHORIZONTAL wxALIGN_CENTER|wxBOTTOM 0 undefined.png 0 wxLEFT 6 undefined.png 0 wxALIGN_CENTER_VERTICAL|wxLEFT 6 60,-1 0 1 999 wxALIGN_CENTER_VERTICAL|wxLEFT 3 -1 wxEXPAND | wxALL 0 -1,1 #303030 0 DarkRadiant-2.14.0/install/ui/vcscommitdialog.fbp000066400000000000000000001032241413722237400217310ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect vcscommitdialog 1000 none 0 VcsCommitDialog . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY -1,-1 VcsCommitPanel -1,-1 wxTAB_TRAVERSAL|wxWANTS_CHARS bSizer23 wxVERTICAL none 12 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 1 2 wxBOTH 1 6 fgSizer4 wxFLEX_GROWMODE_SPECIFIED none 0 12 6 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Name: 0 0 0 1 m_staticText29 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALL|wxEXPAND 0 bSizer22 wxHORIZONTAL none 6 wxALIGN_CENTER_VERTICAL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 CommitNameEntry 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY E-Mail: 0 0 0 1 m_staticText30 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxLEFT 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 CommitEmailEntry 1 protected 1 Resizable 1 ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 0 wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Message: 0 0 0 1 m_staticText31 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxBOTTOM|wxEXPAND 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 -1,60 1 CommitMessage 1 protected 1 Resizable 1 wxTE_MULTILINE ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator 6 wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 0 0 1 0 0 0 1 0 0 m_sdbSizer1 protected DarkRadiant-2.14.0/install/ui/vcscommitdialog.xrc000066400000000000000000000060311413722237400217540ustar00rootroot00000000000000 wxVERTICAL wxEXPAND|wxLEFT|wxRIGHT|wxTOP 12 0 2 12 6 1 wxALIGN_CENTER_VERTICAL|wxRIGHT 6 -1 wxALL|wxEXPAND 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 6 wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 wxLEFT 0 -1 wxBOTTOM|wxEXPAND 6 wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP 6 wxALIGN_CENTER_HORIZONTAL|wxALL 5 wxALIGN_CENTER_HORIZONTAL|wxALL 5 DarkRadiant-2.14.0/install/ui/vcsstatusbar.fbp000066400000000000000000001263111413722237400212730ustar00rootroot00000000000000 XRC 1 source_name 0 0 res UTF-8 connect vcsstatusbar 1000 none 0 VcsStatusBar . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT 1 1 impl_virtual 0 wxID_ANY -1,-1 VcsStatusBar -1,-1 wxTAB_TRAVERSAL|wxWANTS_CHARS bSizer23 wxHORIZONTAL none 1 wxALL 1 2 wxBOTH 0,1 6 fgSizer3 wxFLEX_GROWMODE_SPECIFIED none 0 0 6 wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Map 0 0 0 1 MapStatusLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_RIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 RemoteStatusPanel 1 protected 1 Resizable 1 ; ; forward_declare 0 wxTAB_TRAVERSAL|wxWANTS_CHARS bSizer20 wxHORIZONTAL none 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 Load From Art Provider; darkradiant:incoming_commits.png; 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 IncomingCommitsIcon 1 protected 1 Resizable 1 18,18 ; ; forward_declare 0 0 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 1 0 0 0 1 NumIncomingCommits 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 Load From Art Provider; darkradiant:outgoing_commits.png; 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 OutgoingCommitsIcon 1 protected 1 Resizable 1 18,18 ; ; forward_declare 0 0 wxALIGN_CENTER_VERTICAL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 1 0 0 0 1 NumOutgoingCommits 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 6 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Status 0 0 0 1 RemoteStatusLabel 1 protected 1 Resizable 1 ; ; forward_declare 0 -1 4 wxRIGHT 0 1 1 1 1 Load From Art Provider; darkradiant:arrow_up.png; 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY ... 0 0 -1,20 0 1 VcsMenuButton 1 protected 1 Resizable 1 -1,20 wxBU_RIGHT ; ; forward_declare 0 wxFILTER_NONE wxDefaultValidator DarkRadiant-2.14.0/install/ui/vcsstatusbar.xrc000066400000000000000000000063441413722237400213230ustar00rootroot00000000000000 wxHORIZONTAL wxALL 1 0 2 0 6 0,1 wxALIGN_CENTER_VERTICAL|wxLEFT 6 -1 wxALIGN_RIGHT 0 wxHORIZONTAL wxALIGN_CENTER_VERTICAL 0 18,18 undefined.png wxALIGN_CENTER_VERTICAL|wxALL 0 -1 wxALIGN_CENTER_VERTICAL 0 18,18 undefined.png wxALIGN_CENTER_VERTICAL 0 -1 wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT 6 -1 wxRIGHT 4 -1,20 undefined.png 0 DarkRadiant-2.14.0/install/user.xml000066400000000000000000000416271413722237400171470ustar00rootroot00000000000000 DarkRadiant-2.14.0/libs/000077500000000000000000000000001413722237400147205ustar00rootroot00000000000000DarkRadiant-2.14.0/libs/BasicTexture2D.h000066400000000000000000000026061413722237400176650ustar00rootroot00000000000000#pragma once #include "Texture.h" /** * \brief * Implementation of Texture for a 2D image texture. */ class BasicTexture2D : public Texture { // The GL bind number for use in OpenGL calls GLuint texture_number; // Texture Dimensions std::size_t _width, _height; // Texture name std::string _name; public: // Constructor BasicTexture2D(GLuint texNum = 0, const std::string& name = "") : texture_number(texNum), _name(name) {} ~BasicTexture2D() { if (texture_number != 0) { // Remove this texture from openGL if it's still loaded glDeleteTextures(1, &texture_number); } } /** * \brief * Set the texture number. */ void setGLTexNum(GLuint texnum) { texture_number = texnum; } /** * \brief * Set the image width. */ void setWidth(std::size_t width) { _width = width; } /** * \brief * Set the image height. */ void setHeight(std::size_t height) { _height = height; } /* Texture interface */ std::string getName() const { return _name; } GLuint getGLTexNum() const { return texture_number; } std::size_t getWidth() const { return _width; } std::size_t getHeight() const { return _height; } }; // class Texture typedef std::shared_ptr BasicTexture2DPtr; DarkRadiant-2.14.0/libs/BasicUndoMemento.h000066400000000000000000000006221413722237400202650ustar00rootroot00000000000000#pragma once #include "iundo.h" namespace undo { /** * An UndoMemento implementation capable of holding a single * copyable object, which is stored by value. */ template class BasicUndoMemento : public IUndoMemento { Copyable _data; public: BasicUndoMemento(const Copyable& data) : _data(data) {} const Copyable& data() const { return _data; } }; } // namespace DarkRadiant-2.14.0/libs/DirectoryArchiveFile.h000066400000000000000000000016171413722237400211440ustar00rootroot00000000000000#pragma once #include "iarchive.h" #include "stream/FileInputStream.h" namespace archive { /// \brief An ArchiveFile which is stored as a single file on disk. class DirectoryArchiveFile : public ArchiveFile { private: std::string _name; stream::FileInputStream _istream; stream::FileInputStream::size_type _size; public: typedef stream::FileInputStream::size_type size_type; DirectoryArchiveFile(const std::string& name, const std::string& filename) : _name(name), _istream(filename) { if (!failed()) { _istream.seek(0, stream::FileInputStream::end); _size = _istream.tell(); _istream.seek(0); } else { _size = 0; } } bool failed() const { return _istream.failed(); } size_type size() const override { return _size; } const std::string& getName() const override { return _name; } InputStream& getInputStream() override { return _istream; } }; }DarkRadiant-2.14.0/libs/EventRateLimiter.h000066400000000000000000000034761413722237400203260ustar00rootroot00000000000000#pragma once #include /** * \brief * Helper class to restrict the frequency of an event, such as updating a GTK * dialog in response to rapidly-changing data. * * An EventRateLimiter provides a simple means for the frequency of an arbitrary * event to be limited. It provides a single method, readyForEvent(), which * returns a boolean indicating whether the event should be triggered or not. * The EventRateLimiter is initalised with a value indicating how often the * events may be triggered. * * Note that the EventRateLimiter has no knowledge of the underlying event, it * simply returns a value from the readyForEvent() function, assuming that the * calling code will fire the event if the return value is true. */ class EventRateLimiter { // Separation time provided at construction unsigned long _separationTime; // Last clock invocation clock_t _lastClock; public: /** * \brief * Construct an EventRateLimiter with the given event separation time. * * \param separationTime * Number of milliseconds that should elapse between subsequent events. */ EventRateLimiter(unsigned long separationTimeMillis) : _separationTime(separationTimeMillis), _lastClock(clock()) { } /** * \brief * Test whether the event is ready to be triggered. * * If the return value is false, the calling code should not trigger the * event. If the return value is true, the timer is reset and the event may * be triggered by the calling code. */ bool readyForEvent() { clock_t currentClk = clock(); float diffMillis = (currentClk - _lastClock) / (0.001f * CLOCKS_PER_SEC); if (diffMillis >= _separationTime) { _lastClock = currentClk; return true; } else { return false; } } }; DarkRadiant-2.14.0/libs/GameConfigUtil.h000066400000000000000000000041201413722237400177230ustar00rootroot00000000000000#pragma once #include "igame.h" #include "registry/registry.h" #include "os/path.h" #include "os/file.h" namespace game { /** * Some algorithms built around the GameConfiguration class. */ class GameConfigUtil { public: // Loads the property values of this instance from the XMLRegistry static GameConfiguration LoadFromRegistry() { GameConfiguration result; result.gameType = registry::getValue(RKEY_GAME_TYPE); result.enginePath = os::standardPathWithSlash(registry::getValue(RKEY_ENGINE_PATH)); result.modPath = os::standardPathWithSlash(registry::getValue(RKEY_MOD_PATH)); result.modBasePath = os::standardPathWithSlash(registry::getValue(RKEY_MOD_BASE_PATH)); return result; } // Persists the values of this instance to the XMLRegistry static void SaveToRegistry(const GameConfiguration& config) { registry::setValue(RKEY_GAME_TYPE, config.gameType); registry::setValue(RKEY_ENGINE_PATH, config.enginePath); registry::setValue(RKEY_MOD_PATH, config.modPath); registry::setValue(RKEY_MOD_BASE_PATH, config.modBasePath); } // Makes sure that all paths are normalised OS paths static void EnsurePathsNormalised(GameConfiguration& config) { config.enginePath = os::standardPathWithSlash(config.enginePath); config.modPath = os::standardPathWithSlash(config.modPath); config.modBasePath = os::standardPathWithSlash(config.modBasePath); } // Returns true if the paths in this config are pointing to valid OS folders static bool PathsValid(const GameConfiguration& config) { if (!os::fileOrDirExists(config.enginePath)) { // Engine path doesn't exist return false; } // Check the mod base path, if appropriate if (!config.modBasePath.empty() && !os::fileOrDirExists(config.modBasePath)) { // Mod base name is not empty, but folder doesnt' exist return false; } // Check the mod path, if appropriate if (!config.modPath.empty() && !os::fileOrDirExists(config.modPath)) { // Mod name is not empty, but mod folder doesnt' exist return false; } return true; // all paths ok } }; } DarkRadiant-2.14.0/libs/KeyValueStore.h000066400000000000000000000021531413722237400176340ustar00rootroot00000000000000#pragma once #include "ikeyvaluestore.h" #include #include /** * Default implementation of a key/value store by use of std::map. */ class KeyValueStore : public virtual IKeyValueStore { private: typedef std::map KeyValues; KeyValues _keyValues; public: std::size_t getPropertyCount() const { return _keyValues.size(); } virtual void clearProperties() override { _keyValues.clear(); } virtual std::string getProperty(const std::string& key) const override { auto existing = _keyValues.find(key); return existing != _keyValues.end() ? existing->second : std::string(); } virtual void setProperty(const std::string& key, const std::string& value) override { if (value.empty()) { removeProperty(key); return; } _keyValues[key] = value; } virtual void removeProperty(const std::string& key) override { _keyValues.erase(key); } virtual void foreachProperty(const std::function& visitor) const override { for (const auto& pair : _keyValues) { visitor(pair.first, pair.second); } } }; DarkRadiant-2.14.0/libs/ObservedSelectable.h000066400000000000000000000030121413722237400206220ustar00rootroot00000000000000#pragma once #include "iselectable.h" #include "iselection.h" namespace selection { /** * \brief * Implementation of the Selectable interface which invokes a user-specified * callback function when the selection state is changed. */ class ObservedSelectable : public ISelectable { // Callback to invoke on selection changed SelectionChangedSlot _onchanged; // Current selection state bool _selected; public: /** * \brief * Construct an ObservedSelectable with the given callback function. */ ObservedSelectable(const SelectionChangedSlot& onchanged) : _onchanged(onchanged), _selected(false) { } /** * \brief * Copy constructor. */ ObservedSelectable(const ObservedSelectable& other) : ISelectable(other), _onchanged(other._onchanged), _selected(false) { setSelected(other.isSelected()); } ObservedSelectable& operator=(const ObservedSelectable& other) { setSelected(other.isSelected()); return *this; } virtual ~ObservedSelectable() { setSelected(false); } /** * \brief * Set the selection state. */ virtual void setSelected(bool select) override { // Change state and invoke callback only if the new state is different // from the current state if (select ^ _selected) { _selected = select; if (_onchanged) { _onchanged(*this); } } } virtual bool isSelected() const override { return _selected; } }; } // namespace DarkRadiant-2.14.0/libs/ObservedUndoable.h000066400000000000000000000041241413722237400203150ustar00rootroot00000000000000#pragma once #include "iundo.h" #include #include "BasicUndoMemento.h" namespace undo { template class ObservedUndoable : public IUndoable { typedef std::function ImportCallback; typedef std::function RestoreFinishedCallback; Copyable& _object; ImportCallback _importCallback; RestoreFinishedCallback _finishedCallback; IUndoStateSaver* _undoStateSaver; std::string _debugName; public: ObservedUndoable(Copyable& object, const ImportCallback& importCallback) : ObservedUndoable(object, importCallback, RestoreFinishedCallback(), "") {} ObservedUndoable(Copyable& object, const ImportCallback& importCallback, const RestoreFinishedCallback& finishedCallback, const std::string& debugName) : _object(object), _importCallback(importCallback), _finishedCallback(finishedCallback), _undoStateSaver(nullptr), _debugName(debugName) {} void connectUndoSystem(IUndoSystem& undoSystem) { _undoStateSaver = undoSystem.getStateSaver(*this); } void disconnectUndoSystem(IUndoSystem& undoSystem) { _undoStateSaver = nullptr; undoSystem.releaseStateSaver(*this); } // Returns true if this Undoable is connected to an UndoSystem bool isConnected() const { return _undoStateSaver != nullptr; } IUndoSystem& getUndoSystem() { if (!_undoStateSaver) throw std::logic_error("ObservedUndoable node connected to any UndoSystem"); return _undoStateSaver->getUndoSystem(); } void save() { if (_undoStateSaver != nullptr) { _undoStateSaver->saveState(); } } IUndoMementoPtr exportState() const override { return IUndoMementoPtr(new BasicUndoMemento(_object)); } void importState(const IUndoMementoPtr& state) override { save(); _importCallback(std::static_pointer_cast >(state)->data()); } void onOperationRestored() override { if (_finishedCallback) { _finishedCallback(); } } }; } // namespace DarkRadiant-2.14.0/libs/RGBAImage.h000066400000000000000000000050741413722237400165550ustar00rootroot00000000000000#pragma once #include "igl.h" #include "iimage.h" #include "BasicTexture2D.h" #include #include "util/Noncopyable.h" #include "debugging/gl.h" /// A single pixel with 8-bit RGBA components struct RGBAPixel { uint8_t red, green, blue, alpha; }; /** * An RGBA image represents a single-mipmap image with certain * dimensions. The memory for the actual pixelmap is allocated * and de-allocated automatically. */ class RGBAImage : public Image, public util::Noncopyable { std::size_t _width; std::size_t _height; public: RGBAPixel* pixels; /// Construct image and initialise internal storage RGBAImage(std::size_t width, std::size_t height): _width(width), _height(height), pixels(new RGBAPixel[_width * _height]) {} ~RGBAImage() { delete[] pixels; } /* Image implementation */ uint8_t* getPixels() const override { return reinterpret_cast(pixels); } std::size_t getWidth(std::size_t = 0) const override { return _width; } std::size_t getHeight(std::size_t = 0) const override { return _height; } std::size_t getLevels() const override { return 1; } GLenum getGLFormat() const override { return GL_RGBA; } /* BindableTexture implementation */ TexturePtr bindTexture(const std::string& name, Role role) const override { GLuint textureNum; debug::assertNoGlErrors(); // Allocate a new texture number and store it into the Texture structure glGenTextures(1, &textureNum); glBindTexture(GL_TEXTURE_2D, textureNum); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Upload the image to OpenGL, choosing an internal format based on role GLint format = GL_RGBA8; if (role == Role::NORMAL_MAP) { format = GL_RG8; } // Download image and set up mipmaps and filtering glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, static_cast(getWidth()), static_cast(getHeight()), GL_RGBA, GL_UNSIGNED_BYTE, getPixels()); // Un-bind the texture glBindTexture(GL_TEXTURE_2D, 0); // Construct texture object BasicTexture2DPtr tex2DObject(new BasicTexture2D(textureNum, name)); tex2DObject->setWidth(getWidth()); tex2DObject->setHeight(getHeight()); debug::assertNoGlErrors(); return tex2DObject; } bool isPrecompressed() const override { return false; // not compressed } }; typedef std::shared_ptr RGBAImagePtr; DarkRadiant-2.14.0/libs/RandomOrigin.h000066400000000000000000000014721413722237400174650ustar00rootroot00000000000000#pragma once #include "math/Vector3.h" #include #include /** * Utility class containing a method to generate a random vector within a * certain distance of the world origin. */ class RandomOrigin { public: /** * Generate a random vector within of the world origin, returning * a string formatted correctly as an "origin" key. */ static std::string generate(int maxDist) { // Generate three random numbers between 0 and maxDist float x = maxDist * (float(std::rand()) / float(RAND_MAX)); float y = maxDist * (float(std::rand()) / float(RAND_MAX)); float z = maxDist * (float(std::rand()) / float(RAND_MAX)); // Construct a vector and return the formatted string return string::to_string(Vector3(x, y, z)); } }; DarkRadiant-2.14.0/libs/Rectangle.h000066400000000000000000000032561413722237400170030ustar00rootroot00000000000000#pragma once #include "math/Vector2.h" #include namespace selection { class Rectangle { public: Vector2 min; Vector2 max; Rectangle() {} Rectangle(const Vector2& min_, const Vector2& max_) : min(min_), max(max_) {} bool empty() const { return (min - max).getLengthSquared() == 0; } // Converts this rectangle to window coordinates, pass width and height of the window void toScreenCoords(std::size_t width, std::size_t height) { min = device2screen(min, width, height); max = device2screen(max, width, height); } // Public typedef typedef std::function Callback; // Constructs a Rectangle centered at the given point, with edge length 2*epsilon // This is used to construct small rectangles at some mouse coordinates for selection tests static Rectangle ConstructFromPoint(const Vector2& point, const Vector2& epsilon) { return Rectangle(point - epsilon, point + epsilon); } // greebo: Constructs a Rectangle from (start) to (start + delta) and ensures // that the resulting Rectangle's min is smaller than its max, in case delta has negative components static Rectangle ConstructFromArea(const Vector2& start, const Vector2& delta) { return Rectangle( Vector2( delta[0] < 0 ? (start[0] + delta[0]) : start[0], delta[1] < 0 ? (start[1] + delta[1]) : start[1] ), Vector2( delta[0] > 0 ? (start[0] + delta[0]) : start[0], delta[1] > 0 ? (start[1] + delta[1]) : start[1] ) ); } private: Vector2 device2screen(const Vector2& coord, std::size_t width, std::size_t height) { return Vector2( ((coord.x() + 1.0) * 0.5) * width, ((coord.y() + 1.0) * 0.5) * height ); } }; } // namespace DarkRadiant-2.14.0/libs/SequentialTaskQueue.h000066400000000000000000000062721413722237400210420ustar00rootroot00000000000000#pragma once #include #include #include #include namespace util { /** * Queueing helper, allowing to run queued tasks one after the other, * each of which will be run asynchronously (by means of std::async). * No task will be started before a previous one is completed. * * Destroying this object will remove all unstarted tasks from the queue, * but will block until the currently running task is done. */ class SequentialTaskQueue { private: mutable std::mutex _queueLock; std::list> _queue; mutable std::recursive_mutex _currentLock; std::future _current; std::future _finished; public: ~SequentialTaskQueue() { clear(); } // Adds the given task to the queue. This will launch the task // immediately if no other task is currently processed void enqueue(const std::function& task) { { std::lock_guard lock(_queueLock); _queue.push_front(task); } if (isIdle()) { startNextTask(); } } // Removes all tasks that have not been processed yet // Doesn't affect the currently running one void clearPendingTasks() { // Lock the queue and remove any tasks such that no new ones are added std::lock_guard lock(_queueLock); _queue.clear(); } // Clears the queue. This might block waiting for any currently // active task to finish void clear() { clearPendingTasks(); _current = std::future(); _finished = std::future(); } private: bool isIdle() const { std::lock_guard lock(_currentLock); return !_current.valid() || _current.wait_for(std::chrono::seconds(0)) == std::future_status::ready; } std::function dequeueOne() { std::lock_guard lock(_queueLock); if (_queue.empty()) { return std::function(); } // No active task, dispatch a new one auto frontOfQueue = _queue.front(); _queue.pop_front(); return frontOfQueue; } void startNextTask() { auto task = dequeueOne(); if (!task) { return; } // Wrap the given task in our own lambda to start the next task right afterwards std::lock_guard lock(_currentLock); _current = std::async(std::launch::async, [this, task]() { task(); { // Move our own task to the finished lane, // to avoid blocking when assigning a new future std::lock_guard lock(_currentLock); _finished = std::move(_current); // _current is now empty, so we can start a new task // We still hold the _currentLock such that no other thread will // check the _current future in isIdle in the meantime. // Since the mutex is recursive, this thread can assign to _current startNextTask(); } }); } }; } DarkRadiant-2.14.0/libs/SurfaceShader.h000066400000000000000000000107741413722237400176210ustar00rootroot00000000000000#pragma once #include #include #include "debugging/debugging.h" #include "util/Noncopyable.h" #include "irender.h" #include "shaderlib.h" /** * Encapsulates a GL ShaderPtr and keeps track whether this * shader is actually in use in the map or not. The shader * is captured and released based on whether there is a * shadersystem reference available. */ class SurfaceShader : public util::Noncopyable, public Shader::Observer { private: // greebo: The name of the material std::string _materialName; RenderSystemPtr _renderSystem; ShaderPtr _glShader; // In-use flag bool _inUse; bool _realised; // Client signals sigc::signal _signalRealised; sigc::signal _signalUnrealised; public: // Constructor. The renderSystem reference will be kept internally as reference // The SurfaceShader will try to de-reference it when capturing shaders. SurfaceShader(const std::string& materialName, const RenderSystemPtr& renderSystem = RenderSystemPtr()) : _materialName(materialName), _renderSystem(renderSystem), _inUse(false), _realised(false) { captureShader(); } // Destructor virtual ~SurfaceShader() { releaseShader(); } /** * Indicates whether this Shader is actually in use in the scene or not. * The shader is not in use if the owning Patch resides on the UndoStack, forex. */ void setInUse(bool isUsed) { _inUse = isUsed; if (!_glShader) return; // Update the shader's use count if (_inUse) { _glShader->incrementUsed(); } else { _glShader->decrementUsed(); } } /** * \brief * Get the material name. */ const std::string& getMaterialName() const { return _materialName; } /** * \brief * Set the material name. */ void setMaterialName(const std::string& name) { // return, if the shader is the same as the currently used if (shader_equal(_materialName, name)) return; releaseShader(); _materialName = name; captureShader(); } /** * \brief * Return the Shader for rendering. */ const ShaderPtr& getGLShader() const { return _glShader; } // Return the dimensions of the editorimage of the contained material std::size_t getWidth() const { if (_realised) { return _glShader->getMaterial()->getEditorImage()->getWidth(); } return 1; } std::size_t getHeight() const { if (_realised) { return _glShader->getMaterial()->getEditorImage()->getHeight(); } return 1; } float getTextureAspectRatio() const { return static_cast(getWidth()) / getHeight(); } void setRenderSystem(const RenderSystemPtr& renderSystem) { _renderSystem = renderSystem; captureShader(); } // Get the signal which is fired when this shader is realised sigc::signal& signal_Realised() { return _signalRealised; } // Get the signal which is fired when this shader is unrealised sigc::signal& signal_Unrealised() { return _signalUnrealised; } // Called when the GL shader is realised void realise() { assert(!_realised); _realised = true; signal_Realised().emit(); } // Called when the GL shader is unrealised void unrealise() { assert(_realised); signal_Unrealised().emit(); _realised = false; } bool isRealised() const { return _realised; } private: // Shader capture and release void captureShader() { // Release previous resources in any case releaseShader(); // Check if we have a rendersystem - can we capture already? if (_renderSystem) { _glShader = _renderSystem->capture(_materialName); assert(_glShader); _glShader->attachObserver(*this); if (_inUse) { _glShader->incrementUsed(); } } } void releaseShader() { if (_glShader) { _glShader->detachObserver(*this); if (_inUse) { _glShader->decrementUsed(); } _glShader.reset(); } } // Inherited via Observer void onShaderRealised() override { realise(); } void onShaderUnrealised() override { unrealise(); } }; DarkRadiant-2.14.0/libs/ThreadedDefLoader.h000066400000000000000000000074271413722237400203710ustar00rootroot00000000000000#pragma once #include #include namespace util { /** * Helper class used to asynchronically parse/load def files in a separate thread. * * The worker thread itself is ensured to be called in a thread-safe * way (to prevent the worker from being invoked twice). Subsequent calls to * get() or start() will not start the loader again, unless the reset() method * is called. * * Client code (even from multiple threads) can retrieve (and wait for) the result * by calling the get() method. */ template class ThreadedDefLoader { typedef std::function LoadFunction; LoadFunction _loadFunc; std::function _finishedFunc; std::shared_future _result; std::shared_future _finisher; std::mutex _mutex; bool _loadingStarted; public: ThreadedDefLoader(const LoadFunction& loadFunc) : ThreadedDefLoader(loadFunc, std::function()) {} ThreadedDefLoader(const LoadFunction& loadFunc, const std::function& finishedFunc) : _loadFunc(loadFunc), _finishedFunc(finishedFunc), _loadingStarted(false) {} ~ThreadedDefLoader() { // wait for any worker thread to finish reset(); } // Starts the loader in the background. This can be called multiple // times from separate threads, the worker will only launched once and // cannot be started a second time unless reset() is called. void start() { ensureLoaderStarted(); } // Ensures that the worker thread has been started and is done processing // This will block and wait for the worker execution before returning to the caller. void ensureFinished() { get(); } // Retrieve the result of the asynchronous worker function // This will block and wait for the result if worker has not been // run yet or in case it's still running ReturnType get() { // Make sure we already started the loader ensureLoaderStarted(); // Wait for the result or return if it's already done. return _result.get(); } // Resets the state of the loader to the state it had after construction. // If a background thread has been started, this will block and wait for it to finish. void reset() { std::lock_guard lock(_mutex); // Wait for any running thread to finish if (_loadingStarted) { _loadingStarted = false; if (_result.valid()) { _result.get(); } if (_finisher.valid()) { _finisher.get(); } _result = std::shared_future(); _finisher = std::shared_future(); } } private: struct FinishFunctionCaller { std::function _function; std::shared_future& _targetFuture; FinishFunctionCaller(const std::function& function, std::shared_future& targetFuture) : _function(function), _targetFuture(targetFuture) {} ~FinishFunctionCaller() { if (_function) { _targetFuture = std::async(std::launch::async, _function); } } }; void ensureLoaderStarted() { std::lock_guard lock(_mutex); if (!_loadingStarted) { _loadingStarted = true; _result = std::async(std::launch::async, [&]() { // When going out of scope, this instance invokes the finished callback in a separate thread FinishFunctionCaller finisher(_finishedFunc, _finisher); return _loadFunc(); }); } } }; } DarkRadiant-2.14.0/libs/Transformable.h000066400000000000000000000125271413722237400176770ustar00rootroot00000000000000#pragma once #include "itransformable.h" #include "math/Matrix4.h" #include "math/Quaternion.h" const Vector3 c_translation_identity(0, 0, 0); const Quaternion c_rotation_identity(Quaternion::Identity()); const Vector3 c_scale_identity(1, 1, 1); /** * Base implementation of the ITransformable interface. */ class Transformable : public ITransformable { protected: // Flags to signal which type of transformation this is about enum TransformationType { NoTransform = 0, Translation = 1 << 0, Rotation = 1 << 1, Scale = 1 << 2, }; private: Vector3 _translation; Quaternion _rotation; Vector3 _scale; TransformModifierType _type; unsigned int _transformationType; public: Transformable() : _translation(c_translation_identity), _rotation(Quaternion::Identity()), _scale(c_scale_identity), _type(TRANSFORM_PRIMITIVE), _transformationType(NoTransform) {} void setType(TransformModifierType type) override { _type = type; } TransformModifierType getType() const { return _type; } void setTranslation(const Vector3& value) override { _translation = value; _transformationType |= Translation; _onTransformationChanged(); } void setRotation(const Quaternion& value) override { _rotation = value; _transformationType |= Rotation; _onTransformationChanged(); } void setRotation(const Quaternion& value, const Vector3& worldPivot, const Matrix4& localToWorld) override { // greebo: When rotating around a pivot, the operation can be split into a rotation // and a translation part. Calculate the translation part and apply it. // Translate the world pivot into local coordinates (we only care about the translation part) Vector3 localPivot = worldPivot - localToWorld.translation(); Matrix4 rotation = Matrix4::getRotationQuantised(value); // This is basically T = P - R*P Vector3 translation( localPivot.x() - rotation.xx()*localPivot.x() - rotation.yx()*localPivot.y() - rotation.zx()*localPivot.z(), localPivot.y() - rotation.xy()*localPivot.x() - rotation.yy()*localPivot.y() - rotation.zy()*localPivot.z(), localPivot.z() - rotation.xz()*localPivot.x() - rotation.yz()*localPivot.y() - rotation.zz()*localPivot.z() ); _translation = translation; _transformationType |= Translation; // Regardless of the pivot, the object rotates "by itself", so let's apply the rotation in any case _rotation = value; _transformationType |= Rotation; _onTransformationChanged(); } void setScale(const Vector3& value) override { _scale = value; _transformationType |= Scale; _onTransformationChanged(); } void freezeTransform() override { if (_translation != c_translation_identity || _rotation != c_rotation_identity || _scale != c_scale_identity) { _applyTransformation(); _translation = c_translation_identity; _rotation = c_rotation_identity; _scale = c_scale_identity; _transformationType = NoTransform; _onTransformationChanged(); } } /* greebo: This reverts the currently active transformation * by setting the scale/rotation/translation to identity. * It's enough to call _onTransformationChanged() as this * usually marks the node's geometry as "needs re-evaluation", * and during next rendering turn everything will be updated. */ void revertTransform() override { _translation = c_translation_identity; _rotation = c_rotation_identity; _scale = c_scale_identity; _transformationType = NoTransform; _onTransformationChanged(); } const Vector3& getTranslation() const { return _translation; } const Quaternion& getRotation() const { return _rotation; } const Vector3& getScale() const { return _scale; } Matrix4 calculateTransform() const { return getMatrixForComponents(getTranslation(), getRotation(), getScale()); } protected: /** * Returns a bitmask indicating which transformation classes we're dealing with * to allow subclasses to specialise their math on the requested transformation. * See TransformationType enum for bit values. */ unsigned int getTransformationType() const { return _transformationType; } /** * greebo: Signal method for subclasses. This gets called * as soon as anything (translation, scale, rotation) is changed. * * To be implemented by subclasses */ virtual void _onTransformationChanged() = 0; /** * greebo: Signal method to be implemented by subclasses. * Is invoked whenever the transformation is frozen. */ virtual void _applyTransformation() = 0; // For rotation around pivot points the code needs to know the object center // before the operation started. // Subclasses need to provide this information. virtual const Vector3& getUntransformedOrigin() override { static Vector3 center(0, 0, 0); return center; } private: static Matrix4 getMatrixForComponents(const Vector3& translation, const Quaternion& rotation, const Vector3& scale) { Matrix4 result(Matrix4::getRotationQuantised(rotation)); result.setXCol(result.xCol3() * scale.x()); result.setYCol(result.yCol3() * scale.y()); result.setZCol(result.zCol3() * scale.z()); result.setTranslation(translation); return result; } }; DarkRadiant-2.14.0/libs/UndoFileChangeTracker.h000066400000000000000000000035671413722237400212330ustar00rootroot00000000000000#pragma once #include "iundo.h" #include "imapfilechangetracker.h" #include #include class UndoFileChangeTracker : public IMapFileChangeTracker { private: constexpr static std::size_t MAPFILE_MAX_CHANGES = std::numeric_limits::max(); std::size_t _currentChangeCount; std::size_t _savedChangeCount; sigc::signal _changed; public: UndoFileChangeTracker() : _currentChangeCount(0), _savedChangeCount(MAPFILE_MAX_CHANGES) {} void setSavedChangeCount() override { _savedChangeCount = _currentChangeCount; _changed.emit(); } // Returns true if the current undo history position corresponds to the most recently saved state bool isAtSavedPosition() const override { return _savedChangeCount == _currentChangeCount; } sigc::signal& signal_changed() override { return _changed; } std::size_t getCurrentChangeCount() const override { return _currentChangeCount; } void onUndoEvent(IUndoSystem::EventType type, const std::string& operationName) { switch (type) { case IUndoSystem::EventType::OperationRecorded: if (_currentChangeCount < _savedChangeCount) { // redo queue has been flushed.. it is now impossible to get back to the saved state via undo/redo _savedChangeCount = MAPFILE_MAX_CHANGES; } ++_currentChangeCount; break; case IUndoSystem::EventType::OperationUndone: --_currentChangeCount; break; case IUndoSystem::EventType::OperationRedone: ++_currentChangeCount; break; case IUndoSystem::EventType::AllOperationsCleared: _currentChangeCount = 0; break; } _changed.emit(); } }; DarkRadiant-2.14.0/libs/VcsMapResourceStream.h000066400000000000000000000001031413722237400211400ustar00rootroot00000000000000#pragma once #include "MapResourceStream.h" namespace stream { } DarkRadiant-2.14.0/libs/VersionControlLib.h000066400000000000000000000025051413722237400205100ustar00rootroot00000000000000#pragma once #include #include #include namespace vcs { namespace detail { constexpr const char* const UriPattern = "^(\\w+)://(\\w+)/(.+)$"; constexpr std::size_t PrefixMatchIndex = 1; constexpr std::size_t RevisionMatchIndex = 2; constexpr std::size_t FilePathMatchIndex = 3; constexpr const char* const UriFormat = "{0}://{1}/{2}"; inline std::string getVcsPatternMatch(const std::string& uri, std::size_t index) { std::smatch results; return std::regex_match(uri, results, std::regex(UriPattern)) ? results[index].str() : std::string(); } } inline bool pathIsVcsUri(const std::string& path) { return std::regex_match(path, std::regex(detail::UriPattern)); } inline std::string getVcsPrefix(const std::string& uri) { return detail::getVcsPatternMatch(uri, detail::PrefixMatchIndex); } inline std::string getVcsRevision(const std::string& uri) { return detail::getVcsPatternMatch(uri, detail::RevisionMatchIndex); } inline std::string getVcsFilePath(const std::string& uri) { return detail::getVcsPatternMatch(uri, detail::FilePathMatchIndex); } inline std::string constructVcsFileUri(const std::string& prefix, const std::string& revision, const std::string& path) { return fmt::format(detail::UriFormat, prefix, revision, path); } } DarkRadiant-2.14.0/libs/character.h000066400000000000000000000024101413722237400170220ustar00rootroot00000000000000/* Copyright (C) 2001-2006, William Joseph. All Rights Reserved. This file is part of GtkRadiant. GtkRadiant 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. GtkRadiant 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 GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #if !defined(INCLUDED_CHARACTER_H) #define INCLUDED_CHARACTER_H /// \file /// \brief Character encoding. /// \brief Returns true if \p c is an ASCII character that can be represented with 7 bits. inline bool char_is_ascii(char c) { return (c & 0x80) == 0; } /// \brief Returns true if \p string consists entirely of ASCII characters. inline bool string_is_ascii(const char* string) { while(*string != '\0') { if(!char_is_ascii(*string++)) { return false; } } return true; } #endif DarkRadiant-2.14.0/libs/command/000077500000000000000000000000001413722237400163365ustar00rootroot00000000000000DarkRadiant-2.14.0/libs/command/ExecutionFailure.h000066400000000000000000000006461413722237400217700ustar00rootroot00000000000000#pragma once #include namespace cmd { /** * Exception type thrown when an operation failed. * Any function executed by the CommandSystem can throw this type, * it will be caught by the CommandSystem and possibly end up * displayed in an error popup window. */ class ExecutionFailure : public std::runtime_error { public: ExecutionFailure(const std::string& msg) : std::runtime_error(msg) {} }; } DarkRadiant-2.14.0/libs/command/ExecutionNotPossible.h000066400000000000000000000014111413722237400226310ustar00rootroot00000000000000#pragma once #include #include "ExecutionFailure.h" namespace cmd { /** * Exception type thrown when an operation cannot be executed. * Any function called by the CommandSystem can throw this type, * it will be caught by the CommandSystem and possibly end up * displayed in an error popup window. */ class ExecutionNotPossible : public ExecutionFailure { public: ExecutionNotPossible(const std::string& msg) : ExecutionFailure(msg) {} // Converts a function that is throwing an ExecutionNotPossible // to one that returns false instead (true if no exception is thrown) static bool ToBool(const std::function& func) { try { func(); return true; } catch (ExecutionNotPossible&) { return false; } } }; } DarkRadiant-2.14.0/libs/debugging/000077500000000000000000000000001413722237400166535ustar00rootroot00000000000000DarkRadiant-2.14.0/libs/debugging/ScenegraphUtils.h000066400000000000000000000044631413722237400221330ustar00rootroot00000000000000#pragma once #include "ipath.h" #include "inode.h" #include "math/AABB.h" #include "iscenegraph.h" #include "string/convert.h" #include "itextstream.h" inline std::string getNameForNodeType(scene::INode::Type type) { switch (type) { case scene::INode::Type::MapRoot: return "map"; case scene::INode::Type::Entity: return "entity"; case scene::INode::Type::Brush: return "brush"; case scene::INode::Type::Patch: return "patch"; case scene::INode::Type::Model: return "model"; case scene::INode::Type::Particle: return "particle"; case scene::INode::Type::EntityConnection: return "entityconnection"; case scene::INode::Type::MergeAction: return "mergeaction"; default: return "unknown"; }; } // greebo: Return information about the given node inline std::string getNodeInfo(const scene::INodePtr& node) { std::string returnValue; if (node == NULL) { return "NULL"; } returnValue += getNameForNodeType(node->getNodeType()); returnValue += " (" + node->name() + ")"; return returnValue; } // greebo: Stream insertion operator for scene::INode inline std::ostream& operator<<(std::ostream& st, const scene::INodePtr& node) { st << getNodeInfo(node); return st; } inline std::string getPathInfo(const scene::Path& path) { std::string name; for (scene::Path::const_iterator i = path.begin(); i != path.end(); i++) { // Cast the INode onto a scene::Node scene::INodePtr node = *i; name += (name.empty()) ? "" : ", "; name += getNodeInfo(node); } name = std::string("[") + string::to_string(path.size()) + "] {" + name + "} extents: "; name += "<" + string::to_string(path.top()->worldAABB().extents.x()) + ","; name += string::to_string(path.top()->worldAABB().extents.y()) + ","; name += string::to_string(path.top()->worldAABB().extents.z()) + ">"; return name; } // greebo: Stream-insertion operator for scene::Paths, printing out information on the referenced scene::Nodes inline std::ostream& operator<<(std::ostream& st, const scene::Path& path) { st << getPathInfo(path); return st; } class SceneGraphDumper : public scene::NodeVisitor { public: bool pre(const scene::INodePtr& node) { rMessage() << getNodeInfo(node) << "\n"; return true; } }; inline void dumpSceneGraph() { SceneGraphDumper dumper; GlobalSceneGraph().root()->traverseChildren(dumper); } DarkRadiant-2.14.0/libs/debugging/ScopedDebugTimer.h000066400000000000000000000046431413722237400222200ustar00rootroot00000000000000#pragma once #include "itextstream.h" #if defined(_MSC_VER) || defined(_WINDOWS_) #include #include #undef min #undef max #if !defined(_WINSOCK2API_) && !defined(_WINSOCKAPI_) struct timeval { long tv_sec; long tv_usec; }; #endif #else #include #endif #if defined(_MSC_VER) || defined(_WINDOWS_) inline int gettimeofday(struct timeval* tv, void*) { union { long long ns100; FILETIME ft; } now; GetSystemTimeAsFileTime (&now.ft); tv->tv_usec = (long) ((now.ns100 / 10LL) % 1000000LL); tv->tv_sec = (long) ((now.ns100 - 116444736000000000LL) / 10000000LL); return (0); } #endif #include namespace { const double MILLION = 1000000.0; /** * Operator- for timeval structures. * * @returns * Double-precision float representing the difference in seconds between * the two times. */ double operator-(const timeval& l, const timeval& r) { // Convert timevals to double double dl = (double) l.tv_sec + ((double) l.tv_usec / MILLION); double dr = (double) r.tv_sec + ((double) r.tv_usec / MILLION); return dl - dr; } } /** * Debugging class to time a particular event. The clock is saved during * construction, and the time difference calculated at destruction. */ class ScopedDebugTimer { private: // Start time timeval _s; // Name of operation std::string _op; // Show FPS? bool _fps; public: /** * Constructor. Set the name of the operation to be printed out on * destruction. * * @param name * The name of the operation. * * @param showFps * If true, a nominal FPS value will be calculated for the given operation * time. */ ScopedDebugTimer(const std::string& name, bool showFps = false) : _op(name), _fps(showFps) { #ifndef NDEBUG // Save start time gettimeofday(&_s, NULL); #endif } /** * Destructor. Prints out the time of the operation. */ ~ScopedDebugTimer() { #ifndef NDEBUG // Get the current time timeval end; gettimeofday(&end, NULL); // Calculate duration double duration = end - _s; TemporaryThreadsafeStream stream = rMessage(); stream << "[ScopedDebugTimer] \"" << _op << "\" in " << duration << " seconds"; if (_fps) { stream << " (" << (1.0 / duration) << " FPS)"; } stream << std::endl; #endif } }; DarkRadiant-2.14.0/libs/debugging/debugging.cpp000066400000000000000000000015441413722237400213160ustar00rootroot00000000000000/* Copyright (C) 2001-2006, William Joseph. All Rights Reserved. This file is part of GtkRadiant. GtkRadiant 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. GtkRadiant 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 GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "debugging.h" void TEST_ASSERT() { ERROR_MESSAGE("test"); ASSERT_NOTNULL(0); } DarkRadiant-2.14.0/libs/debugging/debugging.h000066400000000000000000000027531413722237400207660ustar00rootroot00000000000000#pragma once /// \brief Debugging macros for fatal error/assert messages. #if defined(_DEBUG) #define DEBUG_ASSERTS #endif #include "imodule.h" // for GlobalErrorHandler() #if defined(DEBUG_ASSERTS) // Define the breakpoint function, to fire up the debugger #if defined(_MSC_VER) && defined(_M_IX86) #define DEBUGGER_BREAKPOINT() __asm { int 3 } #elif defined(_MSC_VER) && defined(_WIN64) #define DEBUGGER_BREAKPOINT() __debugbreak() #elif defined(__linux__) #include #define DEBUGGER_BREAKPOINT() raise(SIGTRAP); #else #define DEBUGGER_BREAKPOINT() #endif #define STR(x) #x #define STR2(x) STR(x) #define FILE_LINE __FILE__ ":" STR2(__LINE__) /// \brief Sends a \p message to the current debug-message-handler text-output-stream if \p condition evaluates to false. #define ASSERT_MESSAGE(condition, message)\ if(!(condition)) { GlobalErrorHandler()("DarkRadiant - Assertion Failure", std::string(FILE_LINE) + "\nAssertion failure: " + message + "\nBreak into the debugger?"); } /// \brief Sends a \p message to the current debug-message-handler text-output-stream. #define ERROR_MESSAGE(message)\ { GlobalErrorHandler()("DarkRadiant - Runtime Error", std::string(FILE_LINE) + "\nRuntime Error: " + message + "\nBreak into the debugger?"); } #define ASSERT_NOTNULL(ptr) ASSERT_MESSAGE(ptr != 0, "pointer \"" #ptr "\" is null") #else // Release Builds #define ASSERT_MESSAGE(condition, message) #define ERROR_MESSAGE(message) #define ASSERT_NOTNULL(ptr) #define DEBUGGER_BREAKPOINT() #endif DarkRadiant-2.14.0/libs/debugging/gl.h000066400000000000000000000032301413722237400174240ustar00rootroot00000000000000#pragma once #include "igl.h" #include "string/convert.h" namespace debug { /** * \brief Check and print GL errors * * Reads GL errors and dumps them to the internal console, returning the most * recent error to calling code. * * \param context * Optional caller-defined context string which will be printed along with any * errors. This can help identify what code was doing at the point where GL * errors were detected. * * \return The last GL error, or 0 if there is no error */ inline GLenum checkGLErrors(const std::string& context = {}) { // Return if no error GLenum error = glGetError(); if (error == GL_NO_ERROR) { return GL_NO_ERROR; } // Build list of all GL errors std::string allErrString; int maxErrors = 10; GLenum lastError = error; for (; error != GL_NO_ERROR; error = glGetError()) { const char* strErr = reinterpret_cast( gluErrorString(error) ); allErrString += string::to_string(error); allErrString += " (" + std::string(strErr) + ") "; if (--maxErrors <= 0) { allErrString += "---> Maximum number of GL errors reached, maybe there is a problem with the GL context?"; break; } lastError = error; } // Show the error message return last error rError() << "OpenGL Error(s)" << (context.empty() ? "" : " [" + context + "]") << ":\n" << allErrString << "\n"; return lastError; } /// Check GL errors only in debug mode inline void assertNoGlErrors(const std::string& context = {}) { #if !defined(NDEBUG) checkGLErrors(context); #endif } } DarkRadiant-2.14.0/libs/debugging/render.h000066400000000000000000000055761413722237400203200ustar00rootroot00000000000000#pragma once #include #include "render/Colour4.h" namespace debug { namespace detail { inline bool boolFromGLBool(GLboolean b) { return b == GL_TRUE; } } /// Streamable object to insert render state flags struct StateFlagsInserter { int flags; StateFlagsInserter(int f): flags(f) { } }; inline std::ostream& operator<<(std::ostream& os, const StateFlagsInserter& s) { #define OUTPUT_RENDERFLAG(x) if (s.flags & (x)) { os << "|" << #x; } OUTPUT_RENDERFLAG(RENDER_LINESTIPPLE); OUTPUT_RENDERFLAG(RENDER_POLYGONSTIPPLE); OUTPUT_RENDERFLAG(RENDER_ALPHATEST); OUTPUT_RENDERFLAG(RENDER_DEPTHTEST); OUTPUT_RENDERFLAG(RENDER_DEPTHWRITE); OUTPUT_RENDERFLAG(RENDER_MASKCOLOUR); OUTPUT_RENDERFLAG(RENDER_CULLFACE); OUTPUT_RENDERFLAG(RENDER_SCALED); OUTPUT_RENDERFLAG(RENDER_SMOOTH); OUTPUT_RENDERFLAG(RENDER_LIGHTING); OUTPUT_RENDERFLAG(RENDER_BLEND); OUTPUT_RENDERFLAG(RENDER_OFFSETLINE); OUTPUT_RENDERFLAG(RENDER_FILL); OUTPUT_RENDERFLAG(RENDER_VERTEX_COLOUR); OUTPUT_RENDERFLAG(RENDER_TEXTURE_2D); OUTPUT_RENDERFLAG(RENDER_TEXTURE_CUBEMAP); OUTPUT_RENDERFLAG(RENDER_BUMP); OUTPUT_RENDERFLAG(RENDER_PROGRAM); OUTPUT_RENDERFLAG(RENDER_OVERRIDE); return os; } /// Streamable object to insert glColorMask value class ColorMaskInserter { }; inline std::ostream& operator<<(std::ostream& os, const ColorMaskInserter& i) { using namespace detail; GLboolean vals[4]; glGetBooleanv(GL_COLOR_WRITEMASK, &vals[0]); os << "{ R = " << boolFromGLBool(vals[0]) << ", G = " << boolFromGLBool(vals[1]) << ", B = " << boolFromGLBool(vals[2]) << ", A = " << boolFromGLBool(vals[3]) << " }"; return os; } /// Streamable object to insert glDepthMask value class DepthMaskInserter { }; inline std::ostream& operator<<(std::ostream& os, const DepthMaskInserter& i) { GLboolean mask; glGetBooleanv(GL_DEPTH_WRITEMASK, &mask); os << detail::boolFromGLBool(mask); return os; } /// Get the current GL_COLOR as a Colour4 for debugging inline Colour4 getGLColor() { Colour4 result; glGetFloatv(GL_CURRENT_COLOR, &result[0]); return result; } /// Get a GL integer for debugging inline int getGLInt(GLenum name) { int result; glGetIntegerv(name, &result); return result; } /// Get a GL boolean for debugging inline bool getGLBool(GLenum name) { GLboolean result; glGetBooleanv(name, &result); return result == GL_TRUE; } } DarkRadiant-2.14.0/libs/decl/000077500000000000000000000000001413722237400156275ustar00rootroot00000000000000DarkRadiant-2.14.0/libs/decl/SpliceHelper.h000066400000000000000000000045011413722237400203570ustar00rootroot00000000000000#pragma once #include #include namespace decl { // Helper class which is able to cut out an existing declaration from the given // input stream. The first line of the declaration is identified using the given regex. // The part of the input stream leading up to the def is piped to the output stream in unmodified form, // excluding the declaration block itself. // Piping will either stop once the declaration is found (and omitted) or the input stream is exhausted. // The capture group in the regex is used to identify an opening brace in the same line as the decl name. class SpliceHelper { public: static void PipeStreamUntilInsertionPoint(std::istream& input, std::ostream& output, const std::regex& patternToFind) { std::string line; while (std::getline(input, line)) { std::smatch matches; // See if this line contains the def in question if (std::regex_match(line, matches, patternToFind)) { // Line matches, march from opening brace to the other one std::size_t openBraces = 0; bool blockStarted = false; if (!matches[1].str().empty()) { // We've had an opening brace in the first line openBraces++; blockStarted = true; } while (std::getline(input, line)) { for (std::size_t i = 0; i < line.length(); ++i) { if (line[i] == '{') { openBraces++; blockStarted = true; } else if (line[i] == '}') { openBraces--; } } if (blockStarted && openBraces == 0) { break; } } return; // stop right here, return to caller } else { // No particular match, add line to output output << line; } // Append a newline in any case output << std::endl; } } }; } DarkRadiant-2.14.0/libs/dragplanes.h000066400000000000000000000242721413722237400172200ustar00rootroot00000000000000#pragma once #include "iselectiontest.h" #include "ObservedSelectable.h" #include "math/AABB.h" #include "math/Line.h" namespace selection { /** * Selection-test and transformation helper for drag-resizable objects. * This is used by PatchNodes, LightNodes and SpeakerNodes. */ class DragPlanes { private: ObservedSelectable _selectableRight; // +x ObservedSelectable _selectableLeft; // -x ObservedSelectable _selectableFront; // +y ObservedSelectable _selectableBack; // -y ObservedSelectable _selectableTop; // +z ObservedSelectable _selectableBottom; // -z public: AABB m_bounds; DragPlanes(const SelectionChangedSlot& onchanged) : _selectableRight(onchanged), _selectableLeft(onchanged), _selectableFront(onchanged), _selectableBack(onchanged), _selectableTop(onchanged), _selectableBottom(onchanged) {} // Returns true if any of the 6 planes is selected bool isSelected() const { return _selectableRight.isSelected() || _selectableLeft.isSelected() || _selectableFront.isSelected() || _selectableBack.isSelected() || _selectableTop.isSelected() || _selectableBottom.isSelected(); } void setSelected(bool selected) { _selectableRight.setSelected(selected); _selectableLeft.setSelected(selected); _selectableFront.setSelected(selected); _selectableBack.setSelected(selected); _selectableTop.setSelected(selected); _selectableBottom.setSelected(selected); } // greebo: Test-select each of the 6 planes and add suitable ones to the Selector // for further consideration. The basic idea of this method is to do a simple // "is this test position in front of any of these 6 planes"-test by calculating // dot products with all corresponding 4 corner vertices of each plane. For a plane // to pass the test it's required that all its 4 corner vertices need to pass. // Everything passed in here should be specified in local coordinates, any // local2world transformation needs to be set up in the SelectionTest beforehand. void selectPlanes(const AABB& aabb, Selector& selector, SelectionTest& test, const PlaneCallback& selectedPlaneCallback) { // Provided that the object's local2World matrix has been fed into the SelectionTest // the getNear() and getFar() methods will return local coordinates. Line line(test.getNear(), test.getFar()); // Calculate the corners (local coords) Vector3 corners[8]; aabb.getCorners(corners); Plane3 planes[6]; aabb.getPlanes(planes); // Next calculate the vectors for the upcoming dot-product // Take the closest point of the selection ray and calc the distance vector for (Vector3* i = corners; i != corners + 8; ++i) { *i = line.getClosestPoint(*i) - (*i); } if (planes[0].normal().dot(corners[1]) > 0 && planes[0].normal().dot(corners[2]) > 0 && planes[0].normal().dot(corners[5]) > 0 && planes[0].normal().dot(corners[6]) > 0) { Selector_add(selector, _selectableRight); selectedPlaneCallback(planes[0]); //rMessage() << "right\n"; } if (planes[1].normal().dot(corners[0]) > 0 && planes[1].normal().dot(corners[3]) > 0 && planes[1].normal().dot(corners[4]) > 0 && planes[1].normal().dot(corners[7]) > 0) { Selector_add(selector, _selectableLeft); selectedPlaneCallback(planes[1]); //rMessage() << "left\n"; } if (planes[2].normal().dot(corners[0]) > 0 && planes[2].normal().dot(corners[1]) > 0 && planes[2].normal().dot(corners[4]) > 0 && planes[2].normal().dot(corners[5]) > 0) { Selector_add(selector, _selectableFront); selectedPlaneCallback(planes[2]); //rMessage() << "front\n"; } if (planes[3].normal().dot(corners[2]) > 0 && planes[3].normal().dot(corners[3]) > 0 && planes[3].normal().dot(corners[6]) > 0 && planes[3].normal().dot(corners[7]) > 0) { Selector_add(selector, _selectableBack); selectedPlaneCallback(planes[3]); //rMessage() << "back\n"; } if (planes[4].normal().dot(corners[0]) > 0 && planes[4].normal().dot(corners[1]) > 0 && planes[4].normal().dot(corners[2]) > 0 && planes[4].normal().dot(corners[3]) > 0) { Selector_add(selector, _selectableTop); selectedPlaneCallback(planes[4]); //rMessage() << "top\n"; } if (planes[5].normal().dot(corners[4]) > 0 && planes[5].normal().dot(corners[5]) > 0 && planes[5].normal().dot(corners[6]) > 0 && planes[5].normal().dot(corners[7]) > 0) { Selector_add(selector, _selectableBottom); selectedPlaneCallback(planes[5]); //rMessage() << "bottom\n"; } m_bounds = aabb; } void selectReversedPlanes(const AABB& aabb, Selector& selector, const SelectedPlanes& selectedPlanes) { Plane3 planes[6]; aabb.getPlanes(planes); if (selectedPlanes.contains(-planes[0])) { Selector_add(selector, _selectableRight); } if (selectedPlanes.contains(-planes[1])) { Selector_add(selector, _selectableLeft); } if (selectedPlanes.contains(-planes[2])) { Selector_add(selector, _selectableFront); } if (selectedPlanes.contains(-planes[3])) { Selector_add(selector, _selectableBack); } if (selectedPlanes.contains(-planes[4])) { Selector_add(selector, _selectableTop); } if (selectedPlanes.contains(-planes[5])) { Selector_add(selector, _selectableBottom); } } // greebo: This calculates a new AABB for the given translation. Everything used in here is in local coordinates: // The m_bounds member (which has to be set beforehand) as well as the translation vector. // Based on the selection status of the 6 planes a new min/max vector pair is calculated // and the resulting AABB is returned. AABB evaluateResize(const Vector3& translation) const { Vector3 min = m_bounds.getOrigin() - m_bounds.getExtents(); Vector3 max = m_bounds.getOrigin() + m_bounds.getExtents(); // Handle x translation if (m_bounds.extents.x() != 0) { if (_selectableRight.isSelected()) { max.x() += translation.x(); //rMessage() << "moving right\n"; } if (_selectableLeft.isSelected()) { min.x() += translation.x(); //rMessage() << "moving left\n"; } } // Handle y translation if (m_bounds.extents.y() != 0) { if (_selectableFront.isSelected()) { max.y() += translation.y(); //rMessage() << "moving front\n"; } if (_selectableBack.isSelected()) { min.y() += translation.y(); //rMessage() << "moving back\n"; } } // Handle z translation if (m_bounds.extents.z() != 0) { if (_selectableTop.isSelected()) { max.z() += translation.z(); //rMessage() << "moving top\n"; } if(_selectableBottom.isSelected()) { min.z() += translation.z(); //rMessage() << "moving bottom\n"; } } return AABB::createFromMinMax(min, max); } // greebo: Evaluates the given translation for the rotated m_bounds and return a new one. // Translation is in world coordinates, whereas the (previously set) m_bounds AABB is in local coords. // The given rotation matrix is used to transform the incoming translation. Only those planes which // have been selected beforehand will be translated. The m_bounds member needs to be set beforehand. // As PatchNodes and SpeakerNodes are quasi non-rotated objects, this code applies to LightNodes only. AABB evaluateResize(const Vector3& translation, const Matrix4& rotation) const { //rMessage() << "Translation: " << translation << ", to local: " << translationToLocal(translation, rotation) << std::endl; // Convert the translation to local coords and calculate a resized AABB (in local coords). AABB aabb(evaluateResize(translationToLocal(translation, rotation))); // The origin is moved by this operation as well: // Rotate the diff vector between oldLocalOrigin and newLocalOrigin and apply it to the AABB aabb.origin = m_bounds.origin + translationFromLocal(aabb.origin - m_bounds.origin, rotation); return aabb; } // greebo: This is used by PatchNodes to calculate a generic transformation matrix from the given // drag-manipulation, which is then applied to the whole object. Matrix4 evaluateTransform(const Vector3& translation) const { AABB aabb(evaluateResize(translation)); Vector3 scale( m_bounds.extents[0] != 0 ? aabb.extents[0] / m_bounds.extents[0] : 1, m_bounds.extents[1] != 0 ? aabb.extents[1] / m_bounds.extents[1] : 1, m_bounds.extents[2] != 0 ? aabb.extents[2] / m_bounds.extents[2] : 1 ); Matrix4 matrix = Matrix4::getTranslation(aabb.origin - m_bounds.origin); matrix.scaleBy(scale, m_bounds.origin); return matrix; } private: // local must be a pure rotation Vector3 translationToLocal(const Vector3& translation, const Matrix4& local) const { return local.getTransposed().getTranslatedBy(translation).getMultipliedBy(local).translation(); } // local must be a pure rotation Vector3 translationFromLocal(const Vector3& translation, const Matrix4& local) const { return local.getTranslatedBy(translation).getMultipliedBy(local.getTransposed()).translation(); } }; } // namespace DarkRadiant-2.14.0/libs/eclass.h000066400000000000000000000070261413722237400163500ustar00rootroot00000000000000/** * \file * Helper functions for dealing with IEntityClass and related objects. */ #pragma once #include "ieclass.h" #include #include #include "string/predicate.h" namespace eclass { typedef std::vector AttributeList; namespace detail { class AttributeSuffixComparator { // Starting position to convert to a number std::size_t _startPos; public: /// Constructor. Initialise the start position. AttributeSuffixComparator(std::size_t startPos) : _startPos(startPos) { } bool operator() (const EntityClassAttribute& x, const EntityClassAttribute& y) const { // Get both substrings. An empty suffix comes first. std::string sx = x.getName().substr(_startPos); std::string sy = y.getName().substr(_startPos); if (sx.empty()) return true; else if (sy.empty()) return false; // Try numeric sort first, then fall back to lexicographic if the // prefixes are not integers. try { int ix = std::stoi(sx); int iy = std::stoi(sy); // Perform the comparison and return return ix < iy; } catch (std::logic_error&) { // greebo: Non-numeric operands, use ordinary string comparison return sx < sy; } } }; } /** * \brief * Return a list of all class spawnargs matching the given prefix. * * The list is sorted by the numeric or lexicographic ordering of the suffixes. * This ensures that "editor_usage1", "editor_usage2" etc are returned in the * correct order. * * \param eclass * Entity class object to search * * \param prefix * String prefix for the spawnargs of interest * * \param includeInherited * Whether to include class spawnargs inherited from the parent class. Defaults * to true. */ inline AttributeList getSpawnargsWithPrefix(const IEntityClass& eclass, const std::string& prefix, bool includeInherited = true) { // Populate the list with with matching attributes AttributeList matches; eclass.forEachAttribute( [&](const EntityClassAttribute& a, bool inherited) { if (string::istarts_with(a.getName(), prefix) && (includeInherited || !inherited)) { matches.push_back(a); } }, true // include editor_keys ); // Sort the list in suffix order before returning detail::AttributeSuffixComparator comp(prefix.length()); std::sort(matches.begin(), matches.end(), comp); return matches; } /** * \brief * Get the usage text for an entity class. * * The usage text consists of the values of all "editor_usage" spawnargs * concatenated in order. */ inline std::string getUsage(const IEntityClass& entityClass) { // Find all relevant spawnargs in order AttributeList usageAttrs = getSpawnargsWithPrefix( entityClass, "editor_usage", false ); // Build the string std::ostringstream usage; bool firstLine = true; for (const EntityClassAttribute& a : usageAttrs) { if (firstLine) { usage << a.getValue(); firstLine = false; } else { usage << '\n' << a.getValue(); } } return usage.str(); } } DarkRadiant-2.14.0/libs/entitylib.h000066400000000000000000000264561413722237400171110ustar00rootroot00000000000000#pragma once #include "debugging/debugging.h" #include "ientity.h" #include "ieclass.h" #include "irender.h" #include "iselection.h" #include "igl.h" #include "iselectiontest.h" #include "generic/callback.h" #include "math/AABB.h" #include "scenelib.h" #include #include inline void arrow_draw(const Vector3& origin, const Vector3& direction) { Vector3 up(0, 0, 1); Vector3 left(-direction[1], direction[0], 0); Vector3 endpoint(origin + direction*32.0); Vector3 tip1(endpoint + direction *(-8.0) + up*(-4.0)); Vector3 tip2(tip1 + up*8.0); Vector3 tip3(endpoint + direction*(-8.0) + left*(-4.0)); Vector3 tip4(tip3 + left*8.0); glBegin (GL_LINES); glVertex3dv(origin); glVertex3dv(endpoint); glVertex3dv(endpoint); glVertex3dv(tip1); glVertex3dv(endpoint); glVertex3dv(tip2); glVertex3dv(endpoint); glVertex3dv(tip3); glVertex3dv(endpoint); glVertex3dv(tip4); glVertex3dv(tip1); glVertex3dv(tip3); glVertex3dv(tip3); glVertex3dv(tip2); glVertex3dv(tip2); glVertex3dv(tip4); glVertex3dv(tip4); glVertex3dv(tip1); glEnd(); } class SelectionIntersection; inline void aabb_testselect(const AABB& aabb, SelectionTest& test, SelectionIntersection& best) { const IndexPointer::index_type indices[24] = { 2, 1, 5, 6, 1, 0, 4, 5, 0, 1, 2, 3, 3, 7, 4, 0, 3, 2, 6, 7, 7, 6, 5, 4, }; Vector3 points[8]; aabb.getCorners(points); VertexPointer pointer(points, sizeof(Vector3)); test.TestQuads(pointer, IndexPointer(indices, 24), best); } inline void aabb_draw_wire(const Vector3 points[8]) { typedef unsigned int index_t; index_t indices[24] = { 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7, }; #if 1 glVertexPointer(3, GL_DOUBLE, 0, points); glDrawElements(GL_LINES, sizeof(indices)/sizeof(index_t), GL_UNSIGNED_INT, indices); #else glBegin(GL_LINES); for(std::size_t i = 0; i < sizeof(indices)/sizeof(index_t); ++i) { glVertex3dv(points[indices[i]]); } glEnd(); #endif } inline void aabb_draw_flatshade(const Vector3 points[8]) { glBegin(GL_QUADS); glNormal3dv(aabb_normals[0]); glVertex3dv(points[2]); glVertex3dv(points[1]); glVertex3dv(points[5]); glVertex3dv(points[6]); glNormal3dv(aabb_normals[1]); glVertex3dv(points[1]); glVertex3dv(points[0]); glVertex3dv(points[4]); glVertex3dv(points[5]); glNormal3dv(aabb_normals[2]); glVertex3dv(points[0]); glVertex3dv(points[1]); glVertex3dv(points[2]); glVertex3dv(points[3]); glNormal3dv(aabb_normals[3]); glVertex3dv(points[0]); glVertex3dv(points[3]); glVertex3dv(points[7]); glVertex3dv(points[4]); glNormal3dv(aabb_normals[4]); glVertex3dv(points[3]); glVertex3dv(points[2]); glVertex3dv(points[6]); glVertex3dv(points[7]); glNormal3dv(aabb_normals[5]); glVertex3dv(points[7]); glVertex3dv(points[6]); glVertex3dv(points[5]); glVertex3dv(points[4]); glEnd(); } inline void aabb_draw_wire(const AABB& aabb) { Vector3 points[8]; aabb.getCorners(points); aabb_draw_wire(points); } inline void aabb_draw_flatshade(const AABB& aabb) { Vector3 points[8]; aabb.getCorners(points); aabb_draw_flatshade(points); } inline void aabb_draw_textured(const AABB& aabb) { Vector3 points[8]; aabb.getCorners(points); glBegin(GL_QUADS); glNormal3dv(aabb_normals[0]); glTexCoord2dv(aabb_texcoord_topleft); glVertex3dv(points[2]); glTexCoord2dv(aabb_texcoord_topright); glVertex3dv(points[1]); glTexCoord2dv(aabb_texcoord_botright); glVertex3dv(points[5]); glTexCoord2dv(aabb_texcoord_botleft); glVertex3dv(points[6]); glNormal3dv(aabb_normals[1]); glTexCoord2dv(aabb_texcoord_topleft); glVertex3dv(points[1]); glTexCoord2dv(aabb_texcoord_topright); glVertex3dv(points[0]); glTexCoord2dv(aabb_texcoord_botright); glVertex3dv(points[4]); glTexCoord2dv(aabb_texcoord_botleft); glVertex3dv(points[5]); glNormal3dv(aabb_normals[2]); glTexCoord2dv(aabb_texcoord_topleft); glVertex3dv(points[0]); glTexCoord2dv(aabb_texcoord_topright); glVertex3dv(points[1]); glTexCoord2dv(aabb_texcoord_botright); glVertex3dv(points[2]); glTexCoord2dv(aabb_texcoord_botleft); glVertex3dv(points[3]); glNormal3dv(aabb_normals[3]); glTexCoord2dv(aabb_texcoord_topleft); glVertex3dv(points[0]); glTexCoord2dv(aabb_texcoord_topright); glVertex3dv(points[3]); glTexCoord2dv(aabb_texcoord_botright); glVertex3dv(points[7]); glTexCoord2dv(aabb_texcoord_botleft); glVertex3dv(points[4]); glNormal3dv(aabb_normals[4]); glTexCoord2dv(aabb_texcoord_topleft); glVertex3dv(points[3]); glTexCoord2dv(aabb_texcoord_topright); glVertex3dv(points[2]); glTexCoord2dv(aabb_texcoord_botright); glVertex3dv(points[6]); glTexCoord2dv(aabb_texcoord_botleft); glVertex3dv(points[7]); glNormal3dv(aabb_normals[5]); glTexCoord2dv(aabb_texcoord_topleft); glVertex3dv(points[7]); glTexCoord2dv(aabb_texcoord_topright); glVertex3dv(points[6]); glTexCoord2dv(aabb_texcoord_botright); glVertex3dv(points[5]); glTexCoord2dv(aabb_texcoord_botleft); glVertex3dv(points[4]); glEnd(); } inline void aabb_draw_solid(const AABB& aabb, RenderStateFlags state) { if(state & RENDER_TEXTURE_2D) { aabb_draw_textured(aabb); } else { aabb_draw_flatshade(aabb); } } inline void aabb_draw(const AABB& aabb, RenderStateFlags state) { if(state & RENDER_FILL) { aabb_draw_solid(aabb, state); } else { aabb_draw_wire(aabb); } } class RenderableSolidAABB : public OpenGLRenderable { const AABB& m_aabb; public: RenderableSolidAABB(const AABB& aabb) : m_aabb(aabb) { } void render(const RenderInfo& info) const { aabb_draw_solid(m_aabb, info.getFlags()); } const AABB& getAABB() const { return m_aabb; } }; class RenderableWireframeAABB : public OpenGLRenderable { const AABB& m_aabb; public: RenderableWireframeAABB(const AABB& aabb) : m_aabb(aabb) { } void render(const RenderInfo& info) const { aabb_draw_wire(m_aabb); } }; /** * Stream insertion for Entity objects. */ inline std::ostream& operator<< (std::ostream& os, const Entity& entity) { os << "Entity { name=\"" << entity.getKeyValue("name") << "\", " << "classname=\"" << entity.getKeyValue("classname") << "\", " << "origin=\"" << entity.getKeyValue("origin") << "\" }"; return os; } class EntityNodeFindByClassnameWalker : public scene::NodeVisitor { protected: // Name to search for std::string _name; // The search result scene::INodePtr _entityNode; public: // Constructor EntityNodeFindByClassnameWalker(const std::string& name) : _name(name) {} scene::INodePtr getEntityNode() { return _entityNode; } Entity* getEntity() { return _entityNode != NULL ? Node_getEntity(_entityNode) : NULL; } // Pre-descent callback bool pre(const scene::INodePtr& node) { if (_entityNode == NULL) { // Entity not found yet Entity* entity = Node_getEntity(node); if (entity != NULL) { // Got an entity, let's see if the name matches if (entity->getKeyValue("classname") == _name) { _entityNode = node; } return false; // don't traverse entities } else { // Not an entity, traverse return true; } } else { // Entity already found, don't traverse any further return false; } } }; /* greebo: Finds an entity with the given classname */ inline Entity* Scene_FindEntityByClass(const std::string& className) { // Instantiate a walker to find the entity EntityNodeFindByClassnameWalker walker(className); // Walk the scenegraph GlobalSceneGraph().root()->traverse(walker); return walker.getEntity(); } /* Check if a node is the worldspawn. */ inline bool Node_isWorldspawn(const scene::INodePtr& node) { Entity* entity = Node_getEntity(node); return entity != nullptr && entity->isWorldspawn(); } /** * greebo: Changing the entity classname is a non-trivial operation in DarkRadiant, as * the actual c++ class of an entity is depending on it. Changing the classname * therefore means 1) to recreate a new entity 2) to copy all spawnargs over from the old one * and 3) re-parent any child nodes to the new entity. * * @node: The entity node to change the classname of. * @classname: The new classname. * * @returns: The new entity node. */ inline scene::INodePtr changeEntityClassname(const scene::INodePtr& node, const std::string& classname) { // Make a copy of this node first scene::INodePtr oldNode(node); // greebo: First, get the eclass IEntityClassPtr eclass = GlobalEntityClassManager().findOrInsert( classname, scene::hasChildPrimitives(oldNode) // whether this entity has child primitives ); // must not fail, findOrInsert always returns non-NULL assert(eclass); // Create a new entity with the given class IEntityNodePtr newNode(GlobalEntityModule().createEntity(eclass)); Entity* oldEntity = Node_getEntity(oldNode); // Traverse the old entity with a walker Entity& newEntity = newNode->getEntity(); // Copy all keyvalues except classname oldEntity->forEachKeyValue([&](const std::string& key, const std::string& value) { if (key != "classname") { newEntity.setKeyValue(key, value); } }); // Remember the oldNode's parent before removing it scene::INodePtr parent = oldNode->getParent(); // The old node must not be the root node or an orphaned one assert(parent); // Traverse the child and reparent all primitives to the new entity node scene::parentPrimitives(oldNode, newNode); // Remove the old entity node from the parent. This will disconnect // oldNode from the scene and the UndoSystem, so it's important to do // this step last, after the primitives have been moved. (#4718) scene::removeNodeFromParent(oldNode); // Let the new node keep its layer information (#4710) // Apply the layers to the whole subgraph (#5214) scene::AssignNodeToLayersWalker layerWalker(oldNode->getLayers()); newNode->traverse(layerWalker); // Insert the new entity to the parent parent->addChildNode(newNode); return newNode; } /** * greebo: This class can be used to traverse a subgraph to search * for a specific spawnarg on the worldspawn entity. The method * getValue() can be used to retrieve the value of the key as specified * in the constructor. */ class WorldspawnArgFinder : public scene::NodeVisitor { std::string _key; std::string _value; public: WorldspawnArgFinder(const std::string& keyName) : _key(keyName) {} bool pre(const scene::INodePtr& node) override { // Try to cast this node onto an entity auto* ent = Node_getEntity(node); if (ent != nullptr) { if (ent->isWorldspawn()) { // Load the description spawnarg _value = ent->getKeyValue(_key); } return false; // don't traverse entities } return true; } /** * Returns the found value for the desired spawnarg. If not found, * this function will return an empty string "". */ const std::string& getFoundValue() const { return _value; } }; namespace scene { inline void foreachSelectedEntity(const std::function& functor) { GlobalSelectionSystem().foreachSelected([&](const INodePtr& node) { if (Node_isEntity(node)) { functor(*Node_getEntity(node)); } }); } } DarkRadiant-2.14.0/libs/gamelib.h000066400000000000000000000041011413722237400164650ustar00rootroot00000000000000#pragma once #include "igame.h" #include "registry/registry.h" #include "string/convert.h" #include "os/path.h" namespace game { namespace current { /** * \brief * Get the node(s) identified by the given path in the current game tree. */ inline xml::NodeList getNodes(const std::string& localPath) { return GlobalGameManager().currentGame()->getLocalXPath(localPath); } /** * \brief * Get the value of the current game's tree in the registry and convert it * to type T. If the key cannot be found or is not convertible to the * required type, a default-constructed T will be returned. * * T must be default-constructible, copy-constructible and convertible from * an std::string using string::convert. */ template inline T getValue(const std::string& localXPath, T defaultVal = T()) { xml::NodeList list = getNodes(localXPath); return list.empty() ? defaultVal : string::convert(list[0].getAttributeValue("value")); } /** * Returns the current "mod" part of the full path. For Doom3-style games this is the part * relative to the engine path. For TDM-style games there's not necessarily a fs_game or * fs_game_base set, in this case we fall back to the current game's name. */ inline std::string getModPath(const std::string& fullPath) { std::string relPath = os::getRelativePathMinusFilename(fullPath, registry::getValue(RKEY_ENGINE_PATH)); // For the TDM game we don't necessarily have a "base" or "fs_game" directory // Fall back to the game name instead if (relPath.empty()) { return GlobalGameManager().currentGame()->getKeyValue("name"); } return relPath; } // Returns the extension of the auxiliary info file (including the leading dot character) inline std::string getInfoFileExtension() { constexpr const char* const GKEY_INFO_FILE_EXTENSION = "/mapFormat/infoFileExtension"; auto extension = getValue(GKEY_INFO_FILE_EXTENSION); if (!extension.empty() && extension[0] != '.') { extension = "." + extension; } return extension; } } // namespace } // namespace DarkRadiant-2.14.0/libs/generic/000077500000000000000000000000001413722237400163345ustar00rootroot00000000000000DarkRadiant-2.14.0/libs/generic/callback.h000066400000000000000000000003271413722237400202430ustar00rootroot00000000000000#ifndef _CALLBACK_H_ #define _CALLBACK_H_ #include // Typedef to satisfy old code - in many places the "Callback" type is still used typedef std::function Callback; #endif /* _CALLBACK_H_ */ DarkRadiant-2.14.0/libs/libfmt/000077500000000000000000000000001413722237400161755ustar00rootroot00000000000000DarkRadiant-2.14.0/libs/libfmt/LICENSE.rst000066400000000000000000000026001413722237400200070ustar00rootroot00000000000000Copyright (c) 2012 - present, Victor Zverovich 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. --- Optional exception to the license --- As an exception, if, as a result of your compiling your source code, portions of this Software are embedded into a machine-executable object form of such source code, you may redistribute such embedded portions in such object form without including the above copyright and permission notices. DarkRadiant-2.14.0/libs/libfmt/fmt/000077500000000000000000000000001413722237400167635ustar00rootroot00000000000000DarkRadiant-2.14.0/libs/libfmt/fmt/chrono.h000066400000000000000000000622511413722237400204320ustar00rootroot00000000000000// Formatting library for C++ - chrono support // // Copyright (c) 2012 - present, Victor Zverovich // All rights reserved. // // For the license information refer to format.h. #ifndef FMT_CHRONO_H_ #define FMT_CHRONO_H_ #include "format.h" #include "locale.h" #include #include #include #include // enable safe chrono durations, unless explicitly disabled #ifndef FMT_SAFE_DURATION_CAST # define FMT_SAFE_DURATION_CAST 1 #endif #if FMT_SAFE_DURATION_CAST # include "safe-duration-cast.h" #endif FMT_BEGIN_NAMESPACE // Prevents expansion of a preceding token as a function-style macro. // Usage: f FMT_NOMACRO() #define FMT_NOMACRO namespace internal { inline null<> localtime_r FMT_NOMACRO(...) { return null<>(); } inline null<> localtime_s(...) { return null<>(); } inline null<> gmtime_r(...) { return null<>(); } inline null<> gmtime_s(...) { return null<>(); } } // namespace internal // Thread-safe replacement for std::localtime inline std::tm localtime(std::time_t time) { struct dispatcher { std::time_t time_; std::tm tm_; dispatcher(std::time_t t) : time_(t) {} bool run() { using namespace fmt::internal; return handle(localtime_r(&time_, &tm_)); } bool handle(std::tm* tm) { return tm != nullptr; } bool handle(internal::null<>) { using namespace fmt::internal; return fallback(localtime_s(&tm_, &time_)); } bool fallback(int res) { return res == 0; } #if !FMT_MSC_VER bool fallback(internal::null<>) { using namespace fmt::internal; std::tm* tm = std::localtime(&time_); if (tm) tm_ = *tm; return tm != nullptr; } #endif }; dispatcher lt(time); // Too big time values may be unsupported. if (!lt.run()) FMT_THROW(format_error("time_t value out of range")); return lt.tm_; } // Thread-safe replacement for std::gmtime inline std::tm gmtime(std::time_t time) { struct dispatcher { std::time_t time_; std::tm tm_; dispatcher(std::time_t t) : time_(t) {} bool run() { using namespace fmt::internal; return handle(gmtime_r(&time_, &tm_)); } bool handle(std::tm* tm) { return tm != nullptr; } bool handle(internal::null<>) { using namespace fmt::internal; return fallback(gmtime_s(&tm_, &time_)); } bool fallback(int res) { return res == 0; } #if !FMT_MSC_VER bool fallback(internal::null<>) { std::tm* tm = std::gmtime(&time_); if (tm) tm_ = *tm; return tm != nullptr; } #endif }; dispatcher gt(time); // Too big time values may be unsupported. if (!gt.run()) FMT_THROW(format_error("time_t value out of range")); return gt.tm_; } namespace internal { inline std::size_t strftime(char* str, std::size_t count, const char* format, const std::tm* time) { return std::strftime(str, count, format, time); } inline std::size_t strftime(wchar_t* str, std::size_t count, const wchar_t* format, const std::tm* time) { return std::wcsftime(str, count, format, time); } } // namespace internal template struct formatter { template auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { auto it = ctx.begin(); if (it != ctx.end() && *it == ':') ++it; auto end = it; while (end != ctx.end() && *end != '}') ++end; tm_format.reserve(internal::to_unsigned(end - it + 1)); tm_format.append(it, end); tm_format.push_back('\0'); return end; } template auto format(const std::tm& tm, FormatContext& ctx) -> decltype(ctx.out()) { basic_memory_buffer buf; std::size_t start = buf.size(); for (;;) { std::size_t size = buf.capacity() - start; std::size_t count = internal::strftime(&buf[start], size, &tm_format[0], &tm); if (count != 0) { buf.resize(start + count); break; } if (size >= tm_format.size() * 256) { // If the buffer is 256 times larger than the format string, assume // that `strftime` gives an empty result. There doesn't seem to be a // better way to distinguish the two cases: // https://github.com/fmtlib/fmt/issues/367 break; } const std::size_t MIN_GROWTH = 10; buf.reserve(buf.capacity() + (size > MIN_GROWTH ? size : MIN_GROWTH)); } return std::copy(buf.begin(), buf.end(), ctx.out()); } basic_memory_buffer tm_format; }; namespace internal { template FMT_CONSTEXPR const char* get_units() { return nullptr; } template <> FMT_CONSTEXPR const char* get_units() { return "as"; } template <> FMT_CONSTEXPR const char* get_units() { return "fs"; } template <> FMT_CONSTEXPR const char* get_units() { return "ps"; } template <> FMT_CONSTEXPR const char* get_units() { return "ns"; } template <> FMT_CONSTEXPR const char* get_units() { return "µs"; } template <> FMT_CONSTEXPR const char* get_units() { return "ms"; } template <> FMT_CONSTEXPR const char* get_units() { return "cs"; } template <> FMT_CONSTEXPR const char* get_units() { return "ds"; } template <> FMT_CONSTEXPR const char* get_units>() { return "s"; } template <> FMT_CONSTEXPR const char* get_units() { return "das"; } template <> FMT_CONSTEXPR const char* get_units() { return "hs"; } template <> FMT_CONSTEXPR const char* get_units() { return "ks"; } template <> FMT_CONSTEXPR const char* get_units() { return "Ms"; } template <> FMT_CONSTEXPR const char* get_units() { return "Gs"; } template <> FMT_CONSTEXPR const char* get_units() { return "Ts"; } template <> FMT_CONSTEXPR const char* get_units() { return "Ps"; } template <> FMT_CONSTEXPR const char* get_units() { return "Es"; } template <> FMT_CONSTEXPR const char* get_units>() { return "m"; } template <> FMT_CONSTEXPR const char* get_units>() { return "h"; } enum class numeric_system { standard, // Alternative numeric system, e.g. 十二 instead of 12 in ja_JP locale. alternative }; // Parses a put_time-like format string and invokes handler actions. template FMT_CONSTEXPR const Char* parse_chrono_format(const Char* begin, const Char* end, Handler&& handler) { auto ptr = begin; while (ptr != end) { auto c = *ptr; if (c == '}') break; if (c != '%') { ++ptr; continue; } if (begin != ptr) handler.on_text(begin, ptr); ++ptr; // consume '%' if (ptr == end) FMT_THROW(format_error("invalid format")); c = *ptr++; switch (c) { case '%': handler.on_text(ptr - 1, ptr); break; case 'n': { const char newline[] = "\n"; handler.on_text(newline, newline + 1); break; } case 't': { const char tab[] = "\t"; handler.on_text(tab, tab + 1); break; } // Day of the week: case 'a': handler.on_abbr_weekday(); break; case 'A': handler.on_full_weekday(); break; case 'w': handler.on_dec0_weekday(numeric_system::standard); break; case 'u': handler.on_dec1_weekday(numeric_system::standard); break; // Month: case 'b': handler.on_abbr_month(); break; case 'B': handler.on_full_month(); break; // Hour, minute, second: case 'H': handler.on_24_hour(numeric_system::standard); break; case 'I': handler.on_12_hour(numeric_system::standard); break; case 'M': handler.on_minute(numeric_system::standard); break; case 'S': handler.on_second(numeric_system::standard); break; // Other: case 'c': handler.on_datetime(numeric_system::standard); break; case 'x': handler.on_loc_date(numeric_system::standard); break; case 'X': handler.on_loc_time(numeric_system::standard); break; case 'D': handler.on_us_date(); break; case 'F': handler.on_iso_date(); break; case 'r': handler.on_12_hour_time(); break; case 'R': handler.on_24_hour_time(); break; case 'T': handler.on_iso_time(); break; case 'p': handler.on_am_pm(); break; case 'Q': handler.on_duration_value(); break; case 'q': handler.on_duration_unit(); break; case 'z': handler.on_utc_offset(); break; case 'Z': handler.on_tz_name(); break; // Alternative representation: case 'E': { if (ptr == end) FMT_THROW(format_error("invalid format")); c = *ptr++; switch (c) { case 'c': handler.on_datetime(numeric_system::alternative); break; case 'x': handler.on_loc_date(numeric_system::alternative); break; case 'X': handler.on_loc_time(numeric_system::alternative); break; default: FMT_THROW(format_error("invalid format")); } break; } case 'O': if (ptr == end) FMT_THROW(format_error("invalid format")); c = *ptr++; switch (c) { case 'w': handler.on_dec0_weekday(numeric_system::alternative); break; case 'u': handler.on_dec1_weekday(numeric_system::alternative); break; case 'H': handler.on_24_hour(numeric_system::alternative); break; case 'I': handler.on_12_hour(numeric_system::alternative); break; case 'M': handler.on_minute(numeric_system::alternative); break; case 'S': handler.on_second(numeric_system::alternative); break; default: FMT_THROW(format_error("invalid format")); } break; default: FMT_THROW(format_error("invalid format")); } begin = ptr; } if (begin != ptr) handler.on_text(begin, ptr); return ptr; } struct chrono_format_checker { FMT_NORETURN void report_no_date() { FMT_THROW(format_error("no date")); } template void on_text(const Char*, const Char*) {} FMT_NORETURN void on_abbr_weekday() { report_no_date(); } FMT_NORETURN void on_full_weekday() { report_no_date(); } FMT_NORETURN void on_dec0_weekday(numeric_system) { report_no_date(); } FMT_NORETURN void on_dec1_weekday(numeric_system) { report_no_date(); } FMT_NORETURN void on_abbr_month() { report_no_date(); } FMT_NORETURN void on_full_month() { report_no_date(); } void on_24_hour(numeric_system) {} void on_12_hour(numeric_system) {} void on_minute(numeric_system) {} void on_second(numeric_system) {} FMT_NORETURN void on_datetime(numeric_system) { report_no_date(); } FMT_NORETURN void on_loc_date(numeric_system) { report_no_date(); } FMT_NORETURN void on_loc_time(numeric_system) { report_no_date(); } FMT_NORETURN void on_us_date() { report_no_date(); } FMT_NORETURN void on_iso_date() { report_no_date(); } void on_12_hour_time() {} void on_24_hour_time() {} void on_iso_time() {} void on_am_pm() {} void on_duration_value() {} void on_duration_unit() {} FMT_NORETURN void on_utc_offset() { report_no_date(); } FMT_NORETURN void on_tz_name() { report_no_date(); } }; template ::value)> inline bool isnan(T) { return false; } template ::value)> inline bool isnan(T value) { return std::isnan(value); } template ::value)> inline bool isfinite(T) { return true; } template ::value)> inline bool isfinite(T value) { return std::isfinite(value); } // Convers value to int and checks that it's in the range [0, upper). template ::value)> inline int to_nonnegative_int(T value, int upper) { FMT_ASSERT(value >= 0 && value <= upper, "invalid value"); (void)upper; return static_cast(value); } template ::value)> inline int to_nonnegative_int(T value, int upper) { FMT_ASSERT( std::isnan(value) || (value >= 0 && value <= static_cast(upper)), "invalid value"); (void)upper; return static_cast(value); } template ::value)> inline T mod(T x, int y) { return x % y; } template ::value)> inline T mod(T x, int y) { return std::fmod(x, static_cast(y)); } // If T is an integral type, maps T to its unsigned counterpart, otherwise // leaves it unchanged (unlike std::make_unsigned). template ::value> struct make_unsigned_or_unchanged { using type = T; }; template struct make_unsigned_or_unchanged { using type = typename std::make_unsigned::type; }; #if FMT_SAFE_DURATION_CAST // throwing version of safe_duration_cast template To fmt_safe_duration_cast(std::chrono::duration from) { int ec; To to = safe_duration_cast::safe_duration_cast(from, ec); if (ec) FMT_THROW(format_error("cannot format duration")); return to; } #endif template ::value)> inline std::chrono::duration get_milliseconds( std::chrono::duration d) { // this may overflow and/or the result may not fit in the // target type. #if FMT_SAFE_DURATION_CAST using CommonSecondsType = typename std::common_type::type; const auto d_as_common = fmt_safe_duration_cast(d); const auto d_as_whole_seconds = fmt_safe_duration_cast(d_as_common); // this conversion should be nonproblematic const auto diff = d_as_common - d_as_whole_seconds; const auto ms = fmt_safe_duration_cast>(diff); return ms; #else auto s = std::chrono::duration_cast(d); return std::chrono::duration_cast(d - s); #endif } template ::value)> inline std::chrono::duration get_milliseconds( std::chrono::duration d) { using common_type = typename std::common_type::type; auto ms = mod(d.count() * static_cast(Period::num) / static_cast(Period::den) * 1000, 1000); return std::chrono::duration(static_cast(ms)); } template OutputIt format_chrono_duration_value(OutputIt out, Rep val, int precision) { if (precision >= 0) return format_to(out, "{:.{}f}", val, precision); return format_to(out, std::is_floating_point::value ? "{:g}" : "{}", val); } template static OutputIt format_chrono_duration_unit(OutputIt out) { if (const char* unit = get_units()) return format_to(out, "{}", unit); if (Period::den == 1) return format_to(out, "[{}]s", Period::num); return format_to(out, "[{}/{}]s", Period::num, Period::den); } template struct chrono_formatter { FormatContext& context; OutputIt out; int precision; // rep is unsigned to avoid overflow. using rep = conditional_t::value && sizeof(Rep) < sizeof(int), unsigned, typename make_unsigned_or_unchanged::type>; rep val; using seconds = std::chrono::duration; seconds s; using milliseconds = std::chrono::duration; bool negative; using char_type = typename FormatContext::char_type; explicit chrono_formatter(FormatContext& ctx, OutputIt o, std::chrono::duration d) : context(ctx), out(o), val(d.count()), negative(false) { if (d.count() < 0) { val = 0 - val; negative = true; } // this may overflow and/or the result may not fit in the // target type. #if FMT_SAFE_DURATION_CAST // might need checked conversion (rep!=Rep) auto tmpval = std::chrono::duration(val); s = fmt_safe_duration_cast(tmpval); #else s = std::chrono::duration_cast( std::chrono::duration(val)); #endif } // returns true if nan or inf, writes to out. bool handle_nan_inf() { if (isfinite(val)) { return false; } if (isnan(val)) { write_nan(); return true; } // must be +-inf if (val > 0) { write_pinf(); } else { write_ninf(); } return true; } Rep hour() const { return static_cast(mod((s.count() / 3600), 24)); } Rep hour12() const { Rep hour = static_cast(mod((s.count() / 3600), 12)); return hour <= 0 ? 12 : hour; } Rep minute() const { return static_cast(mod((s.count() / 60), 60)); } Rep second() const { return static_cast(mod(s.count(), 60)); } std::tm time() const { auto time = std::tm(); time.tm_hour = to_nonnegative_int(hour(), 24); time.tm_min = to_nonnegative_int(minute(), 60); time.tm_sec = to_nonnegative_int(second(), 60); return time; } void write_sign() { if (negative) { *out++ = '-'; negative = false; } } void write(Rep value, int width) { write_sign(); if (isnan(value)) return write_nan(); uint32_or_64_t n = to_unsigned( to_nonnegative_int(value, (std::numeric_limits::max)())); int num_digits = internal::count_digits(n); if (width > num_digits) out = std::fill_n(out, width - num_digits, '0'); out = format_decimal(out, n, num_digits); } void write_nan() { std::copy_n("nan", 3, out); } void write_pinf() { std::copy_n("inf", 3, out); } void write_ninf() { std::copy_n("-inf", 4, out); } void format_localized(const tm& time, const char* format) { if (isnan(val)) return write_nan(); auto locale = context.locale().template get(); auto& facet = std::use_facet>(locale); std::basic_ostringstream os; os.imbue(locale); facet.put(os, os, ' ', &time, format, format + std::strlen(format)); auto str = os.str(); std::copy(str.begin(), str.end(), out); } void on_text(const char_type* begin, const char_type* end) { std::copy(begin, end, out); } // These are not implemented because durations don't have date information. void on_abbr_weekday() {} void on_full_weekday() {} void on_dec0_weekday(numeric_system) {} void on_dec1_weekday(numeric_system) {} void on_abbr_month() {} void on_full_month() {} void on_datetime(numeric_system) {} void on_loc_date(numeric_system) {} void on_loc_time(numeric_system) {} void on_us_date() {} void on_iso_date() {} void on_utc_offset() {} void on_tz_name() {} void on_24_hour(numeric_system ns) { if (handle_nan_inf()) return; if (ns == numeric_system::standard) return write(hour(), 2); auto time = tm(); time.tm_hour = to_nonnegative_int(hour(), 24); format_localized(time, "%OH"); } void on_12_hour(numeric_system ns) { if (handle_nan_inf()) return; if (ns == numeric_system::standard) return write(hour12(), 2); auto time = tm(); time.tm_hour = to_nonnegative_int(hour12(), 12); format_localized(time, "%OI"); } void on_minute(numeric_system ns) { if (handle_nan_inf()) return; if (ns == numeric_system::standard) return write(minute(), 2); auto time = tm(); time.tm_min = to_nonnegative_int(minute(), 60); format_localized(time, "%OM"); } void on_second(numeric_system ns) { if (handle_nan_inf()) return; if (ns == numeric_system::standard) { write(second(), 2); #if FMT_SAFE_DURATION_CAST // convert rep->Rep using duration_rep = std::chrono::duration; using duration_Rep = std::chrono::duration; auto tmpval = fmt_safe_duration_cast(duration_rep{val}); #else auto tmpval = std::chrono::duration(val); #endif auto ms = get_milliseconds(tmpval); if (ms != std::chrono::milliseconds(0)) { *out++ = '.'; write(ms.count(), 3); } return; } auto time = tm(); time.tm_sec = to_nonnegative_int(second(), 60); format_localized(time, "%OS"); } void on_12_hour_time() { if (handle_nan_inf()) return; format_localized(time(), "%r"); } void on_24_hour_time() { if (handle_nan_inf()) { *out++ = ':'; handle_nan_inf(); return; } write(hour(), 2); *out++ = ':'; write(minute(), 2); } void on_iso_time() { on_24_hour_time(); *out++ = ':'; if (handle_nan_inf()) return; write(second(), 2); } void on_am_pm() { if (handle_nan_inf()) return; format_localized(time(), "%p"); } void on_duration_value() { if (handle_nan_inf()) return; write_sign(); out = format_chrono_duration_value(out, val, precision); } void on_duration_unit() { out = format_chrono_duration_unit(out); } }; } // namespace internal template struct formatter, Char> { private: basic_format_specs specs; int precision; using arg_ref_type = internal::arg_ref; arg_ref_type width_ref; arg_ref_type precision_ref; mutable basic_string_view format_str; using duration = std::chrono::duration; struct spec_handler { formatter& f; basic_parse_context& context; basic_string_view format_str; template FMT_CONSTEXPR arg_ref_type make_arg_ref(Id arg_id) { context.check_arg_id(arg_id); return arg_ref_type(arg_id); } FMT_CONSTEXPR arg_ref_type make_arg_ref(basic_string_view arg_id) { context.check_arg_id(arg_id); const auto str_val = internal::string_view_metadata(format_str, arg_id); return arg_ref_type(str_val); } FMT_CONSTEXPR arg_ref_type make_arg_ref(internal::auto_id) { return arg_ref_type(context.next_arg_id()); } void on_error(const char* msg) { FMT_THROW(format_error(msg)); } void on_fill(Char fill) { f.specs.fill[0] = fill; } void on_align(align_t align) { f.specs.align = align; } void on_width(unsigned width) { f.specs.width = width; } void on_precision(unsigned precision) { f.precision = precision; } void end_precision() {} template void on_dynamic_width(Id arg_id) { f.width_ref = make_arg_ref(arg_id); } template void on_dynamic_precision(Id arg_id) { f.precision_ref = make_arg_ref(arg_id); } }; using iterator = typename basic_parse_context::iterator; struct parse_range { iterator begin; iterator end; }; FMT_CONSTEXPR parse_range do_parse(basic_parse_context& ctx) { auto begin = ctx.begin(), end = ctx.end(); if (begin == end || *begin == '}') return {begin, begin}; spec_handler handler{*this, ctx, format_str}; begin = internal::parse_align(begin, end, handler); if (begin == end) return {begin, begin}; begin = internal::parse_width(begin, end, handler); if (begin == end) return {begin, begin}; if (*begin == '.') { if (std::is_floating_point::value) begin = internal::parse_precision(begin, end, handler); else handler.on_error("precision not allowed for this argument type"); } end = parse_chrono_format(begin, end, internal::chrono_format_checker()); return {begin, end}; } public: formatter() : precision(-1) {} FMT_CONSTEXPR auto parse(basic_parse_context& ctx) -> decltype(ctx.begin()) { auto range = do_parse(ctx); format_str = basic_string_view( &*range.begin, internal::to_unsigned(range.end - range.begin)); return range.end; } template auto format(const duration& d, FormatContext& ctx) -> decltype(ctx.out()) { auto begin = format_str.begin(), end = format_str.end(); // As a possible future optimization, we could avoid extra copying if width // is not specified. basic_memory_buffer buf; auto out = std::back_inserter(buf); using range = internal::output_range; internal::basic_writer w(range(ctx.out())); internal::handle_dynamic_spec( specs.width, width_ref, ctx, format_str.begin()); internal::handle_dynamic_spec( precision, precision_ref, ctx, format_str.begin()); if (begin == end || *begin == '}') { out = internal::format_chrono_duration_value(out, d.count(), precision); internal::format_chrono_duration_unit(out); } else { internal::chrono_formatter f( ctx, out, d); f.precision = precision; parse_chrono_format(begin, end, f); } w.write(buf.data(), buf.size(), specs); return w.out(); } }; FMT_END_NAMESPACE #endif // FMT_CHRONO_H_ DarkRadiant-2.14.0/libs/libfmt/fmt/color.h000066400000000000000000000545171413722237400202660ustar00rootroot00000000000000// Formatting library for C++ - color support // // Copyright (c) 2018 - present, Victor Zverovich and fmt contributors // All rights reserved. // // For the license information refer to format.h. #ifndef FMT_COLOR_H_ #define FMT_COLOR_H_ #include "format.h" FMT_BEGIN_NAMESPACE enum class color : uint32_t { alice_blue = 0xF0F8FF, // rgb(240,248,255) antique_white = 0xFAEBD7, // rgb(250,235,215) aqua = 0x00FFFF, // rgb(0,255,255) aquamarine = 0x7FFFD4, // rgb(127,255,212) azure = 0xF0FFFF, // rgb(240,255,255) beige = 0xF5F5DC, // rgb(245,245,220) bisque = 0xFFE4C4, // rgb(255,228,196) black = 0x000000, // rgb(0,0,0) blanched_almond = 0xFFEBCD, // rgb(255,235,205) blue = 0x0000FF, // rgb(0,0,255) blue_violet = 0x8A2BE2, // rgb(138,43,226) brown = 0xA52A2A, // rgb(165,42,42) burly_wood = 0xDEB887, // rgb(222,184,135) cadet_blue = 0x5F9EA0, // rgb(95,158,160) chartreuse = 0x7FFF00, // rgb(127,255,0) chocolate = 0xD2691E, // rgb(210,105,30) coral = 0xFF7F50, // rgb(255,127,80) cornflower_blue = 0x6495ED, // rgb(100,149,237) cornsilk = 0xFFF8DC, // rgb(255,248,220) crimson = 0xDC143C, // rgb(220,20,60) cyan = 0x00FFFF, // rgb(0,255,255) dark_blue = 0x00008B, // rgb(0,0,139) dark_cyan = 0x008B8B, // rgb(0,139,139) dark_golden_rod = 0xB8860B, // rgb(184,134,11) dark_gray = 0xA9A9A9, // rgb(169,169,169) dark_green = 0x006400, // rgb(0,100,0) dark_khaki = 0xBDB76B, // rgb(189,183,107) dark_magenta = 0x8B008B, // rgb(139,0,139) dark_olive_green = 0x556B2F, // rgb(85,107,47) dark_orange = 0xFF8C00, // rgb(255,140,0) dark_orchid = 0x9932CC, // rgb(153,50,204) dark_red = 0x8B0000, // rgb(139,0,0) dark_salmon = 0xE9967A, // rgb(233,150,122) dark_sea_green = 0x8FBC8F, // rgb(143,188,143) dark_slate_blue = 0x483D8B, // rgb(72,61,139) dark_slate_gray = 0x2F4F4F, // rgb(47,79,79) dark_turquoise = 0x00CED1, // rgb(0,206,209) dark_violet = 0x9400D3, // rgb(148,0,211) deep_pink = 0xFF1493, // rgb(255,20,147) deep_sky_blue = 0x00BFFF, // rgb(0,191,255) dim_gray = 0x696969, // rgb(105,105,105) dodger_blue = 0x1E90FF, // rgb(30,144,255) fire_brick = 0xB22222, // rgb(178,34,34) floral_white = 0xFFFAF0, // rgb(255,250,240) forest_green = 0x228B22, // rgb(34,139,34) fuchsia = 0xFF00FF, // rgb(255,0,255) gainsboro = 0xDCDCDC, // rgb(220,220,220) ghost_white = 0xF8F8FF, // rgb(248,248,255) gold = 0xFFD700, // rgb(255,215,0) golden_rod = 0xDAA520, // rgb(218,165,32) gray = 0x808080, // rgb(128,128,128) green = 0x008000, // rgb(0,128,0) green_yellow = 0xADFF2F, // rgb(173,255,47) honey_dew = 0xF0FFF0, // rgb(240,255,240) hot_pink = 0xFF69B4, // rgb(255,105,180) indian_red = 0xCD5C5C, // rgb(205,92,92) indigo = 0x4B0082, // rgb(75,0,130) ivory = 0xFFFFF0, // rgb(255,255,240) khaki = 0xF0E68C, // rgb(240,230,140) lavender = 0xE6E6FA, // rgb(230,230,250) lavender_blush = 0xFFF0F5, // rgb(255,240,245) lawn_green = 0x7CFC00, // rgb(124,252,0) lemon_chiffon = 0xFFFACD, // rgb(255,250,205) light_blue = 0xADD8E6, // rgb(173,216,230) light_coral = 0xF08080, // rgb(240,128,128) light_cyan = 0xE0FFFF, // rgb(224,255,255) light_golden_rod_yellow = 0xFAFAD2, // rgb(250,250,210) light_gray = 0xD3D3D3, // rgb(211,211,211) light_green = 0x90EE90, // rgb(144,238,144) light_pink = 0xFFB6C1, // rgb(255,182,193) light_salmon = 0xFFA07A, // rgb(255,160,122) light_sea_green = 0x20B2AA, // rgb(32,178,170) light_sky_blue = 0x87CEFA, // rgb(135,206,250) light_slate_gray = 0x778899, // rgb(119,136,153) light_steel_blue = 0xB0C4DE, // rgb(176,196,222) light_yellow = 0xFFFFE0, // rgb(255,255,224) lime = 0x00FF00, // rgb(0,255,0) lime_green = 0x32CD32, // rgb(50,205,50) linen = 0xFAF0E6, // rgb(250,240,230) magenta = 0xFF00FF, // rgb(255,0,255) maroon = 0x800000, // rgb(128,0,0) medium_aquamarine = 0x66CDAA, // rgb(102,205,170) medium_blue = 0x0000CD, // rgb(0,0,205) medium_orchid = 0xBA55D3, // rgb(186,85,211) medium_purple = 0x9370DB, // rgb(147,112,219) medium_sea_green = 0x3CB371, // rgb(60,179,113) medium_slate_blue = 0x7B68EE, // rgb(123,104,238) medium_spring_green = 0x00FA9A, // rgb(0,250,154) medium_turquoise = 0x48D1CC, // rgb(72,209,204) medium_violet_red = 0xC71585, // rgb(199,21,133) midnight_blue = 0x191970, // rgb(25,25,112) mint_cream = 0xF5FFFA, // rgb(245,255,250) misty_rose = 0xFFE4E1, // rgb(255,228,225) moccasin = 0xFFE4B5, // rgb(255,228,181) navajo_white = 0xFFDEAD, // rgb(255,222,173) navy = 0x000080, // rgb(0,0,128) old_lace = 0xFDF5E6, // rgb(253,245,230) olive = 0x808000, // rgb(128,128,0) olive_drab = 0x6B8E23, // rgb(107,142,35) orange = 0xFFA500, // rgb(255,165,0) orange_red = 0xFF4500, // rgb(255,69,0) orchid = 0xDA70D6, // rgb(218,112,214) pale_golden_rod = 0xEEE8AA, // rgb(238,232,170) pale_green = 0x98FB98, // rgb(152,251,152) pale_turquoise = 0xAFEEEE, // rgb(175,238,238) pale_violet_red = 0xDB7093, // rgb(219,112,147) papaya_whip = 0xFFEFD5, // rgb(255,239,213) peach_puff = 0xFFDAB9, // rgb(255,218,185) peru = 0xCD853F, // rgb(205,133,63) pink = 0xFFC0CB, // rgb(255,192,203) plum = 0xDDA0DD, // rgb(221,160,221) powder_blue = 0xB0E0E6, // rgb(176,224,230) purple = 0x800080, // rgb(128,0,128) rebecca_purple = 0x663399, // rgb(102,51,153) red = 0xFF0000, // rgb(255,0,0) rosy_brown = 0xBC8F8F, // rgb(188,143,143) royal_blue = 0x4169E1, // rgb(65,105,225) saddle_brown = 0x8B4513, // rgb(139,69,19) salmon = 0xFA8072, // rgb(250,128,114) sandy_brown = 0xF4A460, // rgb(244,164,96) sea_green = 0x2E8B57, // rgb(46,139,87) sea_shell = 0xFFF5EE, // rgb(255,245,238) sienna = 0xA0522D, // rgb(160,82,45) silver = 0xC0C0C0, // rgb(192,192,192) sky_blue = 0x87CEEB, // rgb(135,206,235) slate_blue = 0x6A5ACD, // rgb(106,90,205) slate_gray = 0x708090, // rgb(112,128,144) snow = 0xFFFAFA, // rgb(255,250,250) spring_green = 0x00FF7F, // rgb(0,255,127) steel_blue = 0x4682B4, // rgb(70,130,180) tan = 0xD2B48C, // rgb(210,180,140) teal = 0x008080, // rgb(0,128,128) thistle = 0xD8BFD8, // rgb(216,191,216) tomato = 0xFF6347, // rgb(255,99,71) turquoise = 0x40E0D0, // rgb(64,224,208) violet = 0xEE82EE, // rgb(238,130,238) wheat = 0xF5DEB3, // rgb(245,222,179) white = 0xFFFFFF, // rgb(255,255,255) white_smoke = 0xF5F5F5, // rgb(245,245,245) yellow = 0xFFFF00, // rgb(255,255,0) yellow_green = 0x9ACD32 // rgb(154,205,50) }; // enum class color enum class terminal_color : uint8_t { black = 30, red, green, yellow, blue, magenta, cyan, white, bright_black = 90, bright_red, bright_green, bright_yellow, bright_blue, bright_magenta, bright_cyan, bright_white }; enum class emphasis : uint8_t { bold = 1, italic = 1 << 1, underline = 1 << 2, strikethrough = 1 << 3 }; // rgb is a struct for red, green and blue colors. // Using the name "rgb" makes some editors show the color in a tooltip. struct rgb { FMT_CONSTEXPR rgb() : r(0), g(0), b(0) {} FMT_CONSTEXPR rgb(uint8_t r_, uint8_t g_, uint8_t b_) : r(r_), g(g_), b(b_) {} FMT_CONSTEXPR rgb(uint32_t hex) : r((hex >> 16) & 0xFF), g((hex >> 8) & 0xFF), b(hex & 0xFF) {} FMT_CONSTEXPR rgb(color hex) : r((uint32_t(hex) >> 16) & 0xFF), g((uint32_t(hex) >> 8) & 0xFF), b(uint32_t(hex) & 0xFF) {} uint8_t r; uint8_t g; uint8_t b; }; namespace internal { // color is a struct of either a rgb color or a terminal color. struct color_type { FMT_CONSTEXPR color_type() FMT_NOEXCEPT : is_rgb(), value{} {} FMT_CONSTEXPR color_type(color rgb_color) FMT_NOEXCEPT : is_rgb(true), value{} { value.rgb_color = static_cast(rgb_color); } FMT_CONSTEXPR color_type(rgb rgb_color) FMT_NOEXCEPT : is_rgb(true), value{} { value.rgb_color = (static_cast(rgb_color.r) << 16) | (static_cast(rgb_color.g) << 8) | rgb_color.b; } FMT_CONSTEXPR color_type(terminal_color term_color) FMT_NOEXCEPT : is_rgb(), value{} { value.term_color = static_cast(term_color); } bool is_rgb; union color_union { uint8_t term_color; uint32_t rgb_color; } value; }; } // namespace internal // Experimental text formatting support. class text_style { public: FMT_CONSTEXPR text_style(emphasis em = emphasis()) FMT_NOEXCEPT : set_foreground_color(), set_background_color(), ems(em) {} FMT_CONSTEXPR text_style& operator|=(const text_style& rhs) { if (!set_foreground_color) { set_foreground_color = rhs.set_foreground_color; foreground_color = rhs.foreground_color; } else if (rhs.set_foreground_color) { if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb) FMT_THROW(format_error("can't OR a terminal color")); foreground_color.value.rgb_color |= rhs.foreground_color.value.rgb_color; } if (!set_background_color) { set_background_color = rhs.set_background_color; background_color = rhs.background_color; } else if (rhs.set_background_color) { if (!background_color.is_rgb || !rhs.background_color.is_rgb) FMT_THROW(format_error("can't OR a terminal color")); background_color.value.rgb_color |= rhs.background_color.value.rgb_color; } ems = static_cast(static_cast(ems) | static_cast(rhs.ems)); return *this; } friend FMT_CONSTEXPR text_style operator|(text_style lhs, const text_style& rhs) { return lhs |= rhs; } FMT_CONSTEXPR text_style& operator&=(const text_style& rhs) { if (!set_foreground_color) { set_foreground_color = rhs.set_foreground_color; foreground_color = rhs.foreground_color; } else if (rhs.set_foreground_color) { if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb) FMT_THROW(format_error("can't AND a terminal color")); foreground_color.value.rgb_color &= rhs.foreground_color.value.rgb_color; } if (!set_background_color) { set_background_color = rhs.set_background_color; background_color = rhs.background_color; } else if (rhs.set_background_color) { if (!background_color.is_rgb || !rhs.background_color.is_rgb) FMT_THROW(format_error("can't AND a terminal color")); background_color.value.rgb_color &= rhs.background_color.value.rgb_color; } ems = static_cast(static_cast(ems) & static_cast(rhs.ems)); return *this; } friend FMT_CONSTEXPR text_style operator&(text_style lhs, const text_style& rhs) { return lhs &= rhs; } FMT_CONSTEXPR bool has_foreground() const FMT_NOEXCEPT { return set_foreground_color; } FMT_CONSTEXPR bool has_background() const FMT_NOEXCEPT { return set_background_color; } FMT_CONSTEXPR bool has_emphasis() const FMT_NOEXCEPT { return static_cast(ems) != 0; } FMT_CONSTEXPR internal::color_type get_foreground() const FMT_NOEXCEPT { assert(has_foreground() && "no foreground specified for this style"); return foreground_color; } FMT_CONSTEXPR internal::color_type get_background() const FMT_NOEXCEPT { assert(has_background() && "no background specified for this style"); return background_color; } FMT_CONSTEXPR emphasis get_emphasis() const FMT_NOEXCEPT { assert(has_emphasis() && "no emphasis specified for this style"); return ems; } private: FMT_CONSTEXPR text_style(bool is_foreground, internal::color_type text_color) FMT_NOEXCEPT : set_foreground_color(), set_background_color(), ems() { if (is_foreground) { foreground_color = text_color; set_foreground_color = true; } else { background_color = text_color; set_background_color = true; } } friend FMT_CONSTEXPR_DECL text_style fg(internal::color_type foreground) FMT_NOEXCEPT; friend FMT_CONSTEXPR_DECL text_style bg(internal::color_type background) FMT_NOEXCEPT; internal::color_type foreground_color; internal::color_type background_color; bool set_foreground_color; bool set_background_color; emphasis ems; }; FMT_CONSTEXPR text_style fg(internal::color_type foreground) FMT_NOEXCEPT { return text_style(/*is_foreground=*/true, foreground); } FMT_CONSTEXPR text_style bg(internal::color_type background) FMT_NOEXCEPT { return text_style(/*is_foreground=*/false, background); } FMT_CONSTEXPR text_style operator|(emphasis lhs, emphasis rhs) FMT_NOEXCEPT { return text_style(lhs) | rhs; } namespace internal { template struct ansi_color_escape { FMT_CONSTEXPR ansi_color_escape(internal::color_type text_color, const char* esc) FMT_NOEXCEPT { // If we have a terminal color, we need to output another escape code // sequence. if (!text_color.is_rgb) { bool is_background = esc == internal::data::background_color; uint32_t value = text_color.value.term_color; // Background ASCII codes are the same as the foreground ones but with // 10 more. if (is_background) value += 10u; std::size_t index = 0; buffer[index++] = static_cast('\x1b'); buffer[index++] = static_cast('['); if (value >= 100u) { buffer[index++] = static_cast('1'); value %= 100u; } buffer[index++] = static_cast('0' + value / 10u); buffer[index++] = static_cast('0' + value % 10u); buffer[index++] = static_cast('m'); buffer[index++] = static_cast('\0'); return; } for (int i = 0; i < 7; i++) { buffer[i] = static_cast(esc[i]); } rgb color(text_color.value.rgb_color); to_esc(color.r, buffer + 7, ';'); to_esc(color.g, buffer + 11, ';'); to_esc(color.b, buffer + 15, 'm'); buffer[19] = static_cast(0); } FMT_CONSTEXPR ansi_color_escape(emphasis em) FMT_NOEXCEPT { uint8_t em_codes[4] = {}; uint8_t em_bits = static_cast(em); if (em_bits & static_cast(emphasis::bold)) em_codes[0] = 1; if (em_bits & static_cast(emphasis::italic)) em_codes[1] = 3; if (em_bits & static_cast(emphasis::underline)) em_codes[2] = 4; if (em_bits & static_cast(emphasis::strikethrough)) em_codes[3] = 9; std::size_t index = 0; for (int i = 0; i < 4; ++i) { if (!em_codes[i]) continue; buffer[index++] = static_cast('\x1b'); buffer[index++] = static_cast('['); buffer[index++] = static_cast('0' + em_codes[i]); buffer[index++] = static_cast('m'); } buffer[index++] = static_cast(0); } FMT_CONSTEXPR operator const Char*() const FMT_NOEXCEPT { return buffer; } FMT_CONSTEXPR const Char* begin() const FMT_NOEXCEPT { return buffer; } FMT_CONSTEXPR const Char* end() const FMT_NOEXCEPT { return buffer + std::strlen(buffer); } private: Char buffer[7u + 3u * 4u + 1u]; static FMT_CONSTEXPR void to_esc(uint8_t c, Char* out, char delimiter) FMT_NOEXCEPT { out[0] = static_cast('0' + c / 100); out[1] = static_cast('0' + c / 10 % 10); out[2] = static_cast('0' + c % 10); out[3] = static_cast(delimiter); } }; template FMT_CONSTEXPR ansi_color_escape make_foreground_color( internal::color_type foreground) FMT_NOEXCEPT { return ansi_color_escape(foreground, internal::data::foreground_color); } template FMT_CONSTEXPR ansi_color_escape make_background_color( internal::color_type background) FMT_NOEXCEPT { return ansi_color_escape(background, internal::data::background_color); } template FMT_CONSTEXPR ansi_color_escape make_emphasis(emphasis em) FMT_NOEXCEPT { return ansi_color_escape(em); } template inline void fputs(const Char* chars, FILE* stream) FMT_NOEXCEPT { std::fputs(chars, stream); } template <> inline void fputs(const wchar_t* chars, FILE* stream) FMT_NOEXCEPT { std::fputws(chars, stream); } template inline void reset_color(FILE* stream) FMT_NOEXCEPT { fputs(internal::data::reset_color, stream); } template <> inline void reset_color(FILE* stream) FMT_NOEXCEPT { fputs(internal::data::wreset_color, stream); } template inline void reset_color(basic_memory_buffer& buffer) FMT_NOEXCEPT { const char* begin = data::reset_color; const char* end = begin + sizeof(data::reset_color) - 1; buffer.append(begin, end); } template std::basic_string vformat(const text_style& ts, basic_string_view format_str, basic_format_args > args) { basic_memory_buffer buffer; bool has_style = false; if (ts.has_emphasis()) { has_style = true; ansi_color_escape escape = make_emphasis(ts.get_emphasis()); buffer.append(escape.begin(), escape.end()); } if (ts.has_foreground()) { has_style = true; ansi_color_escape escape = make_foreground_color(ts.get_foreground()); buffer.append(escape.begin(), escape.end()); } if (ts.has_background()) { has_style = true; ansi_color_escape escape = make_background_color(ts.get_background()); buffer.append(escape.begin(), escape.end()); } internal::vformat_to(buffer, format_str, args); if (has_style) { reset_color(buffer); } return fmt::to_string(buffer); } } // namespace internal template > void vprint(std::FILE* f, const text_style& ts, const S& format, basic_format_args > args) { bool has_style = false; if (ts.has_emphasis()) { has_style = true; internal::fputs(internal::make_emphasis(ts.get_emphasis()), f); } if (ts.has_foreground()) { has_style = true; internal::fputs( internal::make_foreground_color(ts.get_foreground()), f); } if (ts.has_background()) { has_style = true; internal::fputs( internal::make_background_color(ts.get_background()), f); } vprint(f, format, args); if (has_style) { internal::reset_color(f); } } /** Formats a string and prints it to the specified file stream using ANSI escape sequences to specify text formatting. Example: fmt::print(fmt::emphasis::bold | fg(fmt::color::red), "Elapsed time: {0:.2f} seconds", 1.23); */ template ::value)> void print(std::FILE* f, const text_style& ts, const S& format_str, const Args&... args) { internal::check_format_string(format_str); using context = buffer_context >; format_arg_store as{args...}; vprint(f, ts, format_str, basic_format_args(as)); } /** Formats a string and prints it to stdout using ANSI escape sequences to specify text formatting. Example: fmt::print(fmt::emphasis::bold | fg(fmt::color::red), "Elapsed time: {0:.2f} seconds", 1.23); */ template ::value)> void print(const text_style& ts, const S& format_str, const Args&... args) { return print(stdout, ts, format_str, args...); } template > inline std::basic_string vformat( const text_style& ts, const S& format_str, basic_format_args > args) { return internal::vformat(ts, to_string_view(format_str), args); } /** \rst Formats arguments and returns the result as a string using ANSI escape sequences to specify text formatting. **Example**:: #include std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red), "The answer is {}", 42); \endrst */ template > inline std::basic_string format(const text_style& ts, const S& format_str, const Args&... args) { return internal::vformat(ts, to_string_view(format_str), {internal::make_args_checked(format_str, args...)}); } FMT_END_NAMESPACE #endif // FMT_COLOR_H_ DarkRadiant-2.14.0/libs/libfmt/fmt/compile.h000066400000000000000000000365111413722237400205720ustar00rootroot00000000000000// Formatting library for C++ - experimental format string compilation // // Copyright (c) 2012 - present, Victor Zverovich and fmt contributors // All rights reserved. // // For the license information refer to format.h. #ifndef FMT_COMPILE_H_ #define FMT_COMPILE_H_ #include #include "format.h" FMT_BEGIN_NAMESPACE namespace internal { template struct format_part { public: struct named_argument_id { FMT_CONSTEXPR named_argument_id(internal::string_view_metadata id) : id(id) {} internal::string_view_metadata id; }; struct argument_id { FMT_CONSTEXPR argument_id() : argument_id(0u) {} FMT_CONSTEXPR argument_id(unsigned id) : which(which_arg_id::index), val(id) {} FMT_CONSTEXPR argument_id(internal::string_view_metadata id) : which(which_arg_id::named_index), val(id) {} enum class which_arg_id { index, named_index }; which_arg_id which; union value { FMT_CONSTEXPR value() : index(0u) {} FMT_CONSTEXPR value(unsigned id) : index(id) {} FMT_CONSTEXPR value(internal::string_view_metadata id) : named_index(id) {} unsigned index; internal::string_view_metadata named_index; } val; }; struct specification { FMT_CONSTEXPR specification() : arg_id(0u) {} FMT_CONSTEXPR specification(unsigned id) : arg_id(id) {} FMT_CONSTEXPR specification(internal::string_view_metadata id) : arg_id(id) {} argument_id arg_id; internal::dynamic_format_specs parsed_specs; }; FMT_CONSTEXPR format_part() : which(kind::argument_id), end_of_argument_id(0u), val(0u) {} FMT_CONSTEXPR format_part(internal::string_view_metadata text) : which(kind::text), end_of_argument_id(0u), val(text) {} FMT_CONSTEXPR format_part(unsigned id) : which(kind::argument_id), end_of_argument_id(0u), val(id) {} FMT_CONSTEXPR format_part(named_argument_id arg_id) : which(kind::named_argument_id), end_of_argument_id(0u), val(arg_id) {} FMT_CONSTEXPR format_part(specification spec) : which(kind::specification), end_of_argument_id(0u), val(spec) {} enum class kind { argument_id, named_argument_id, text, specification }; kind which; std::size_t end_of_argument_id; union value { FMT_CONSTEXPR value() : arg_id(0u) {} FMT_CONSTEXPR value(unsigned id) : arg_id(id) {} FMT_CONSTEXPR value(named_argument_id named_id) : named_arg_id(named_id.id) {} FMT_CONSTEXPR value(internal::string_view_metadata t) : text(t) {} FMT_CONSTEXPR value(specification s) : spec(s) {} unsigned arg_id; internal::string_view_metadata named_arg_id; internal::string_view_metadata text; specification spec; } val; }; template class format_preparation_handler : public internal::error_handler { private: using part = format_part; public: using iterator = typename basic_string_view::iterator; FMT_CONSTEXPR format_preparation_handler(basic_string_view format, PartsContainer& parts) : parts_(parts), format_(format), parse_context_(format) {} FMT_CONSTEXPR void on_text(const Char* begin, const Char* end) { if (begin == end) return; const auto offset = begin - format_.data(); const auto size = end - begin; parts_.push_back(part(string_view_metadata(offset, size))); } FMT_CONSTEXPR void on_arg_id() { parts_.push_back(part(parse_context_.next_arg_id())); } FMT_CONSTEXPR void on_arg_id(unsigned id) { parse_context_.check_arg_id(id); parts_.push_back(part(id)); } FMT_CONSTEXPR void on_arg_id(basic_string_view id) { const auto view = string_view_metadata(format_, id); const auto arg_id = typename part::named_argument_id(view); parts_.push_back(part(arg_id)); } FMT_CONSTEXPR void on_replacement_field(const Char* ptr) { parts_.back().end_of_argument_id = ptr - format_.begin(); } FMT_CONSTEXPR const Char* on_format_specs(const Char* begin, const Char* end) { const auto specs_offset = to_unsigned(begin - format_.begin()); using parse_context = basic_parse_context; internal::dynamic_format_specs parsed_specs; dynamic_specs_handler handler(parsed_specs, parse_context_); begin = parse_format_specs(begin, end, handler); if (*begin != '}') on_error("missing '}' in format string"); auto& last_part = parts_.back(); auto specs = last_part.which == part::kind::argument_id ? typename part::specification(last_part.val.arg_id) : typename part::specification(last_part.val.named_arg_id); specs.parsed_specs = parsed_specs; last_part = part(specs); last_part.end_of_argument_id = specs_offset; return begin; } private: PartsContainer& parts_; basic_string_view format_; basic_parse_context parse_context_; }; template class prepared_format { public: using char_type = char_t; using format_part_t = format_part; constexpr prepared_format(Format f) : format_(std::move(f)), parts_provider_(to_string_view(format_)) {} prepared_format() = delete; using context = buffer_context; template auto vformat_to(Range out, basic_format_args args) const -> typename Context::iterator { const auto format_view = internal::to_string_view(format_); basic_parse_context parse_ctx(format_view); Context ctx(out.begin(), args); const auto& parts = parts_provider_.parts(); for (auto part_it = parts.begin(); part_it != parts.end(); ++part_it) { const auto& part = *part_it; const auto& value = part.val; switch (part.which) { case format_part_t::kind::text: { const auto text = value.text.to_view(format_view.data()); auto output = ctx.out(); auto&& it = internal::reserve(output, text.size()); it = std::copy_n(text.begin(), text.size(), it); ctx.advance_to(output); } break; case format_part_t::kind::argument_id: { advance_parse_context_to_specification(parse_ctx, part); format_arg(parse_ctx, ctx, value.arg_id); } break; case format_part_t::kind::named_argument_id: { advance_parse_context_to_specification(parse_ctx, part); const auto named_arg_id = value.named_arg_id.to_view(format_view.data()); format_arg(parse_ctx, ctx, named_arg_id); } break; case format_part_t::kind::specification: { const auto& arg_id_value = value.spec.arg_id.val; const auto arg = value.spec.arg_id.which == format_part_t::argument_id::which_arg_id::index ? ctx.arg(arg_id_value.index) : ctx.arg(arg_id_value.named_index.to_view( to_string_view(format_).data())); auto specs = value.spec.parsed_specs; handle_dynamic_spec( specs.width, specs.width_ref, ctx, format_view.begin()); handle_dynamic_spec( specs.precision, specs.precision_ref, ctx, format_view.begin()); check_prepared_specs(specs, arg.type()); advance_parse_context_to_specification(parse_ctx, part); ctx.advance_to( visit_format_arg(arg_formatter(ctx, nullptr, &specs), arg)); } break; } } return ctx.out(); } private: void advance_parse_context_to_specification( basic_parse_context& parse_ctx, const format_part_t& part) const { const auto view = to_string_view(format_); const auto specification_begin = view.data() + part.end_of_argument_id; advance_to(parse_ctx, specification_begin); } template void format_arg(basic_parse_context& parse_ctx, Context& ctx, Id arg_id) const { parse_ctx.check_arg_id(arg_id); const auto stopped_at = visit_format_arg(arg_formatter(ctx), ctx.arg(arg_id)); ctx.advance_to(stopped_at); } template void check_prepared_specs(const basic_format_specs& specs, internal::type arg_type) const { internal::error_handler h; numeric_specs_checker checker(h, arg_type); if (specs.align == align::numeric) checker.require_numeric_argument(); if (specs.sign != sign::none) checker.check_sign(); if (specs.alt) checker.require_numeric_argument(); if (specs.precision >= 0) checker.check_precision(); } private: Format format_; PreparedPartsProvider parts_provider_; }; template struct part_counter { unsigned num_parts = 0; FMT_CONSTEXPR void on_text(const Char* begin, const Char* end) { if (begin != end) ++num_parts; } FMT_CONSTEXPR void on_arg_id() { ++num_parts; } FMT_CONSTEXPR void on_arg_id(unsigned) { ++num_parts; } FMT_CONSTEXPR void on_arg_id(basic_string_view) { ++num_parts; } FMT_CONSTEXPR void on_replacement_field(const Char*) {} FMT_CONSTEXPR const Char* on_format_specs(const Char* begin, const Char* end) { // Find the matching brace. unsigned braces_counter = 0; for (; begin != end; ++begin) { if (*begin == '{') { ++braces_counter; } else if (*begin == '}') { if (braces_counter == 0u) break; --braces_counter; } } return begin; } FMT_CONSTEXPR void on_error(const char*) {} }; template class compiletime_prepared_parts_type_provider { private: using char_type = char_t; static FMT_CONSTEXPR unsigned count_parts() { FMT_CONSTEXPR_DECL const auto text = to_string_view(Format{}); part_counter counter; internal::parse_format_string(text, counter); return counter.num_parts; } // Workaround for old compilers. Compiletime parts preparation will not be // performed with them anyway. #if FMT_USE_CONSTEXPR static FMT_CONSTEXPR_DECL const unsigned number_of_format_parts = compiletime_prepared_parts_type_provider::count_parts(); #else static const unsigned number_of_format_parts = 0u; #endif public: template struct format_parts_array { using value_type = format_part; FMT_CONSTEXPR format_parts_array() : arr{} {} FMT_CONSTEXPR value_type& operator[](unsigned ind) { return arr[ind]; } FMT_CONSTEXPR const value_type* begin() const { return arr; } FMT_CONSTEXPR const value_type* end() const { return begin() + N; } private: value_type arr[N]; }; struct empty { // Parts preparator will search for it using value_type = format_part; }; using type = conditional_t, empty>; }; template class compiletime_prepared_parts_collector { private: using format_part = typename Parts::value_type; public: FMT_CONSTEXPR explicit compiletime_prepared_parts_collector(Parts& parts) : parts_{parts}, counter_{0u} {} FMT_CONSTEXPR void push_back(format_part part) { parts_[counter_++] = part; } FMT_CONSTEXPR format_part& back() { return parts_[counter_ - 1]; } private: Parts& parts_; unsigned counter_; }; template FMT_CONSTEXPR PartsContainer prepare_parts(basic_string_view format) { PartsContainer parts; internal::parse_format_string( format, format_preparation_handler(format, parts)); return parts; } template FMT_CONSTEXPR PartsContainer prepare_compiletime_parts(basic_string_view format) { using collector = compiletime_prepared_parts_collector; PartsContainer parts; collector c(parts); internal::parse_format_string( format, format_preparation_handler(format, c)); return parts; } template class runtime_parts_provider { public: runtime_parts_provider() = delete; template runtime_parts_provider(basic_string_view format) : parts_(prepare_parts(format)) {} const PartsContainer& parts() const { return parts_; } private: PartsContainer parts_; }; template struct compiletime_parts_provider { compiletime_parts_provider() = delete; template FMT_CONSTEXPR compiletime_parts_provider(basic_string_view) {} const PartsContainer& parts() const { static FMT_CONSTEXPR_DECL const PartsContainer prepared_parts = prepare_compiletime_parts( internal::to_string_view(Format{})); return prepared_parts; } }; } // namespace internal #if FMT_USE_CONSTEXPR template ::value)> FMT_CONSTEXPR auto compile(S format_str) -> internal::prepared_format< S, internal::compiletime_parts_provider< S, typename internal::compiletime_prepared_parts_type_provider::type>, Args...> { return format_str; } #endif template auto compile(const Char (&format_str)[N]) -> internal::prepared_format< std::basic_string, internal::runtime_parts_provider>>, Args...> { return std::basic_string(format_str, N - 1); } template std::basic_string format(const CompiledFormat& cf, const Args&... args) { basic_memory_buffer buffer; using range = internal::buffer_range; using context = buffer_context; cf.template vformat_to(range(buffer), {make_format_args(args...)}); return to_string(buffer); } template OutputIt format_to(OutputIt out, const CompiledFormat& cf, const Args&... args) { using char_type = typename CompiledFormat::char_type; using range = internal::output_range; using context = format_context_t; return cf.template vformat_to( range(out), {make_format_args(args...)}); } template ::value)> format_to_n_result format_to_n(OutputIt out, size_t n, const CompiledFormat& cf, const Args&... args) { auto it = format_to(internal::truncating_iterator(out, n), cf, args...); return {it.base(), it.count()}; } template std::size_t formatted_size(const CompiledFormat& cf, const Args&... args) { return fmt::format_to( internal::counting_iterator(), cf, args...) .count(); } FMT_END_NAMESPACE #endif // FMT_COMPILE_H_ DarkRadiant-2.14.0/libs/libfmt/fmt/core.h000066400000000000000000001334101413722237400200660ustar00rootroot00000000000000// Formatting library for C++ - the core API // // Copyright (c) 2012 - present, Victor Zverovich // All rights reserved. // // For the license information refer to format.h. #ifndef FMT_CORE_H_ #define FMT_CORE_H_ #include #include // std::FILE #include #include #include #include // The fmt library version in the form major * 10000 + minor * 100 + patch. #define FMT_VERSION 60000 #ifdef __has_feature # define FMT_HAS_FEATURE(x) __has_feature(x) #else # define FMT_HAS_FEATURE(x) 0 #endif #if defined(__has_include) && !defined(__INTELLISENSE__) && \ !(defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1600) # define FMT_HAS_INCLUDE(x) __has_include(x) #else # define FMT_HAS_INCLUDE(x) 0 #endif #ifdef __has_cpp_attribute # define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) #else # define FMT_HAS_CPP_ATTRIBUTE(x) 0 #endif #if defined(__GNUC__) && !defined(__clang__) # define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) #else # define FMT_GCC_VERSION 0 #endif #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) # define FMT_HAS_GXX_CXX11 FMT_GCC_VERSION #else # define FMT_HAS_GXX_CXX11 0 #endif #ifdef _MSC_VER # define FMT_MSC_VER _MSC_VER #else # define FMT_MSC_VER 0 #endif // Check if relaxed C++14 constexpr is supported. // GCC doesn't allow throw in constexpr until version 6 (bug 67371). #ifndef FMT_USE_CONSTEXPR # define FMT_USE_CONSTEXPR \ (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \ (FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L)) #endif #if FMT_USE_CONSTEXPR # define FMT_CONSTEXPR constexpr # define FMT_CONSTEXPR_DECL constexpr #else # define FMT_CONSTEXPR inline # define FMT_CONSTEXPR_DECL #endif #ifndef FMT_OVERRIDE # if FMT_HAS_FEATURE(cxx_override) || \ (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900 # define FMT_OVERRIDE override # else # define FMT_OVERRIDE # endif #endif // Check if exceptions are disabled. #ifndef FMT_EXCEPTIONS # if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \ FMT_MSC_VER && !_HAS_EXCEPTIONS # define FMT_EXCEPTIONS 0 # else # define FMT_EXCEPTIONS 1 # endif #endif // Define FMT_USE_NOEXCEPT to make fmt use noexcept (C++11 feature). #ifndef FMT_USE_NOEXCEPT # define FMT_USE_NOEXCEPT 0 #endif #if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \ (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900 # define FMT_DETECTED_NOEXCEPT noexcept # define FMT_HAS_CXX11_NOEXCEPT 1 #else # define FMT_DETECTED_NOEXCEPT throw() # define FMT_HAS_CXX11_NOEXCEPT 0 #endif #ifndef FMT_NOEXCEPT # if FMT_EXCEPTIONS || FMT_HAS_CXX11_NOEXCEPT # define FMT_NOEXCEPT FMT_DETECTED_NOEXCEPT # else # define FMT_NOEXCEPT # endif #endif // [[noreturn]] is disabled on MSVC because of bogus unreachable code warnings. #if FMT_EXCEPTIONS && FMT_HAS_CPP_ATTRIBUTE(noreturn) && !FMT_MSC_VER # define FMT_NORETURN [[noreturn]] #else # define FMT_NORETURN #endif #ifndef FMT_DEPRECATED # if (FMT_HAS_CPP_ATTRIBUTE(deprecated) && __cplusplus >= 201402L) || \ FMT_MSC_VER >= 1900 # define FMT_DEPRECATED [[deprecated]] # else # if defined(__GNUC__) || defined(__clang__) # define FMT_DEPRECATED __attribute__((deprecated)) # elif FMT_MSC_VER # define FMT_DEPRECATED __declspec(deprecated) # else # define FMT_DEPRECATED /* deprecated */ # endif # endif #endif #ifndef FMT_BEGIN_NAMESPACE # if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \ FMT_MSC_VER >= 1900 # define FMT_INLINE_NAMESPACE inline namespace # define FMT_END_NAMESPACE \ } \ } # else # define FMT_INLINE_NAMESPACE namespace # define FMT_END_NAMESPACE \ } \ using namespace v6; \ } # endif # define FMT_BEGIN_NAMESPACE \ namespace fmt { \ FMT_INLINE_NAMESPACE v6 { #endif #if !defined(FMT_HEADER_ONLY) && defined(_WIN32) # ifdef FMT_EXPORT # define FMT_API __declspec(dllexport) # elif defined(FMT_SHARED) # define FMT_API __declspec(dllimport) # define FMT_EXTERN_TEMPLATE_API FMT_API # endif #endif #ifndef FMT_API # define FMT_API #endif #ifndef FMT_EXTERN_TEMPLATE_API # define FMT_EXTERN_TEMPLATE_API #endif #ifndef FMT_HEADER_ONLY # define FMT_EXTERN extern #else # define FMT_EXTERN #endif #ifndef FMT_ASSERT # define FMT_ASSERT(condition, message) assert((condition) && message) #endif // libc++ supports string_view in pre-c++17. #if (FMT_HAS_INCLUDE() && \ (__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \ (defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910) # include # define FMT_USE_STRING_VIEW #elif FMT_HAS_INCLUDE("experimental/string_view") && __cplusplus >= 201402L # include # define FMT_USE_EXPERIMENTAL_STRING_VIEW #endif FMT_BEGIN_NAMESPACE // Implementations of enable_if_t and other types for pre-C++14 systems. template using enable_if_t = typename std::enable_if::type; template using conditional_t = typename std::conditional::type; template using bool_constant = std::integral_constant; template using remove_reference_t = typename std::remove_reference::type; template using remove_const_t = typename std::remove_const::type; struct monostate {}; // An enable_if helper to be used in template parameters which results in much // shorter symbols: https://godbolt.org/z/sWw4vP. Extra parentheses are needed // to workaround a bug in MSVC 2019 (see #1140 and #1186). #define FMT_ENABLE_IF(...) enable_if_t<(__VA_ARGS__), int> = 0 namespace internal { // A workaround for gcc 4.8 to make void_t work in a SFINAE context. template struct void_t_impl { using type = void; }; #if defined(FMT_USE_STRING_VIEW) template using std_string_view = std::basic_string_view; #elif defined(FMT_USE_EXPERIMENTAL_STRING_VIEW) template using std_string_view = std::experimental::basic_string_view; #else template struct std_string_view {}; #endif // Casts nonnegative integer to unsigned. template FMT_CONSTEXPR typename std::make_unsigned::type to_unsigned(Int value) { FMT_ASSERT(value >= 0, "negative value"); return static_cast::type>(value); } } // namespace internal template using void_t = typename internal::void_t_impl::type; /** An implementation of ``std::basic_string_view`` for pre-C++17. It provides a subset of the API. ``fmt::basic_string_view`` is used for format strings even if ``std::string_view`` is available to prevent issues when a library is compiled with a different ``-std`` option than the client code (which is not recommended). */ template class basic_string_view { private: const Char* data_; size_t size_; public: using char_type = Char; using iterator = const Char*; FMT_CONSTEXPR basic_string_view() FMT_NOEXCEPT : data_(nullptr), size_(0) {} /** Constructs a string reference object from a C string and a size. */ FMT_CONSTEXPR basic_string_view(const Char* s, size_t count) FMT_NOEXCEPT : data_(s), size_(count) {} /** \rst Constructs a string reference object from a C string computing the size with ``std::char_traits::length``. \endrst */ basic_string_view(const Char* s) : data_(s), size_(std::char_traits::length(s)) {} /** Constructs a string reference from a ``std::basic_string`` object. */ template FMT_CONSTEXPR basic_string_view(const std::basic_string& s) FMT_NOEXCEPT : data_(s.data()), size_(s.size()) {} template < typename S, FMT_ENABLE_IF(std::is_same>::value)> FMT_CONSTEXPR basic_string_view(S s) FMT_NOEXCEPT : data_(s.data()), size_(s.size()) {} /** Returns a pointer to the string data. */ FMT_CONSTEXPR const Char* data() const { return data_; } /** Returns the string size. */ FMT_CONSTEXPR size_t size() const { return size_; } FMT_CONSTEXPR iterator begin() const { return data_; } FMT_CONSTEXPR iterator end() const { return data_ + size_; } FMT_CONSTEXPR void remove_prefix(size_t n) { data_ += n; size_ -= n; } // Lexicographically compare this string reference to other. int compare(basic_string_view other) const { size_t str_size = size_ < other.size_ ? size_ : other.size_; int result = std::char_traits::compare(data_, other.data_, str_size); if (result == 0) result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1); return result; } friend bool operator==(basic_string_view lhs, basic_string_view rhs) { return lhs.compare(rhs) == 0; } friend bool operator!=(basic_string_view lhs, basic_string_view rhs) { return lhs.compare(rhs) != 0; } friend bool operator<(basic_string_view lhs, basic_string_view rhs) { return lhs.compare(rhs) < 0; } friend bool operator<=(basic_string_view lhs, basic_string_view rhs) { return lhs.compare(rhs) <= 0; } friend bool operator>(basic_string_view lhs, basic_string_view rhs) { return lhs.compare(rhs) > 0; } friend bool operator>=(basic_string_view lhs, basic_string_view rhs) { return lhs.compare(rhs) >= 0; } }; using string_view = basic_string_view; using wstring_view = basic_string_view; #ifndef __cpp_char8_t // A UTF-8 code unit type. enum char8_t : unsigned char {}; #endif /** Specifies if ``T`` is a character type. Can be specialized by users. */ template struct is_char : std::false_type {}; template <> struct is_char : std::true_type {}; template <> struct is_char : std::true_type {}; template <> struct is_char : std::true_type {}; template <> struct is_char : std::true_type {}; template <> struct is_char : std::true_type {}; /** \rst Returns a string view of `s`. In order to add custom string type support to {fmt} provide an overload of `to_string_view` for it in the same namespace as the type for the argument-dependent lookup to work. **Example**:: namespace my_ns { inline string_view to_string_view(const my_string& s) { return {s.data(), s.length()}; } } std::string message = fmt::format(my_string("The answer is {}"), 42); \endrst */ template ::value)> inline basic_string_view to_string_view(const Char* s) { return s; } template inline basic_string_view to_string_view( const std::basic_string& s) { return {s.data(), s.size()}; } template inline basic_string_view to_string_view(basic_string_view s) { return s; } template >::value)> inline basic_string_view to_string_view( internal::std_string_view s) { return s; } // A base class for compile-time strings. It is defined in the fmt namespace to // make formatting functions visible via ADL, e.g. format(fmt("{}"), 42). struct compile_string {}; template struct is_compile_string : std::is_base_of {}; template ::value)> constexpr basic_string_view to_string_view(const S& s) { return s; } namespace internal { void to_string_view(...); using fmt::v6::to_string_view; // Specifies whether S is a string type convertible to fmt::basic_string_view. // It should be a constexpr function but MSVC 2017 fails to compile it in // enable_if and MSVC 2015 fails to compile it as an alias template. template struct is_string : std::is_class()))> { }; template struct char_t_impl {}; template struct char_t_impl::value>> { using result = decltype(to_string_view(std::declval())); using type = typename result::char_type; }; struct error_handler { FMT_CONSTEXPR error_handler() {} FMT_CONSTEXPR error_handler(const error_handler&) {} // This function is intentionally not constexpr to give a compile-time error. FMT_NORETURN FMT_API void on_error(const char* message); }; } // namespace internal /** String's character type. */ template using char_t = typename internal::char_t_impl::type; // Parsing context consisting of a format string range being parsed and an // argument counter for automatic indexing. template class basic_parse_context : private ErrorHandler { private: basic_string_view format_str_; int next_arg_id_; public: using char_type = Char; using iterator = typename basic_string_view::iterator; explicit FMT_CONSTEXPR basic_parse_context(basic_string_view format_str, ErrorHandler eh = ErrorHandler()) : ErrorHandler(eh), format_str_(format_str), next_arg_id_(0) {} // Returns an iterator to the beginning of the format string range being // parsed. FMT_CONSTEXPR iterator begin() const FMT_NOEXCEPT { return format_str_.begin(); } // Returns an iterator past the end of the format string range being parsed. FMT_CONSTEXPR iterator end() const FMT_NOEXCEPT { return format_str_.end(); } // Advances the begin iterator to ``it``. FMT_CONSTEXPR void advance_to(iterator it) { format_str_.remove_prefix(internal::to_unsigned(it - begin())); } // Returns the next argument index. FMT_CONSTEXPR int next_arg_id() { if (next_arg_id_ >= 0) return next_arg_id_++; on_error("cannot switch from manual to automatic argument indexing"); return 0; } FMT_CONSTEXPR bool check_arg_id(int) { if (next_arg_id_ > 0) { on_error("cannot switch from automatic to manual argument indexing"); return false; } next_arg_id_ = -1; return true; } FMT_CONSTEXPR void check_arg_id(basic_string_view) {} FMT_CONSTEXPR void on_error(const char* message) { ErrorHandler::on_error(message); } FMT_CONSTEXPR ErrorHandler error_handler() const { return *this; } }; using format_parse_context = basic_parse_context; using wformat_parse_context = basic_parse_context; using parse_context FMT_DEPRECATED = basic_parse_context; using wparse_context FMT_DEPRECATED = basic_parse_context; template class basic_format_arg; template class basic_format_args; // A formatter for objects of type T. template struct formatter { // A deleted default constructor indicates a disabled formatter. formatter() = delete; }; template struct FMT_DEPRECATED convert_to_int : bool_constant::value && std::is_convertible::value> {}; namespace internal { // Specifies if T has an enabled formatter specialization. A type can be // formattable even if it doesn't have a formatter e.g. via a conversion. template using has_formatter = std::is_constructible>; /** A contiguous memory buffer with an optional growing ability. */ template class buffer { private: buffer(const buffer&) = delete; void operator=(const buffer&) = delete; T* ptr_; std::size_t size_; std::size_t capacity_; protected: // Don't initialize ptr_ since it is not accessed to save a few cycles. buffer(std::size_t sz) FMT_NOEXCEPT : size_(sz), capacity_(sz) {} buffer(T* p = nullptr, std::size_t sz = 0, std::size_t cap = 0) FMT_NOEXCEPT : ptr_(p), size_(sz), capacity_(cap) {} /** Sets the buffer data and capacity. */ void set(T* buf_data, std::size_t buf_capacity) FMT_NOEXCEPT { ptr_ = buf_data; capacity_ = buf_capacity; } /** Increases the buffer capacity to hold at least *capacity* elements. */ virtual void grow(std::size_t capacity) = 0; public: using value_type = T; using const_reference = const T&; virtual ~buffer() {} T* begin() FMT_NOEXCEPT { return ptr_; } T* end() FMT_NOEXCEPT { return ptr_ + size_; } /** Returns the size of this buffer. */ std::size_t size() const FMT_NOEXCEPT { return size_; } /** Returns the capacity of this buffer. */ std::size_t capacity() const FMT_NOEXCEPT { return capacity_; } /** Returns a pointer to the buffer data. */ T* data() FMT_NOEXCEPT { return ptr_; } /** Returns a pointer to the buffer data. */ const T* data() const FMT_NOEXCEPT { return ptr_; } /** Resizes the buffer. If T is a POD type new elements may not be initialized. */ void resize(std::size_t new_size) { reserve(new_size); size_ = new_size; } /** Clears this buffer. */ void clear() { size_ = 0; } /** Reserves space to store at least *capacity* elements. */ void reserve(std::size_t new_capacity) { if (new_capacity > capacity_) grow(new_capacity); } void push_back(const T& value) { reserve(size_ + 1); ptr_[size_++] = value; } /** Appends data to the end of the buffer. */ template void append(const U* begin, const U* end); T& operator[](std::size_t index) { return ptr_[index]; } const T& operator[](std::size_t index) const { return ptr_[index]; } }; // A container-backed buffer. template class container_buffer : public buffer { private: Container& container_; protected: void grow(std::size_t capacity) FMT_OVERRIDE { container_.resize(capacity); this->set(&container_[0], capacity); } public: explicit container_buffer(Container& c) : buffer(c.size()), container_(c) {} }; // Extracts a reference to the container from back_insert_iterator. template inline Container& get_container(std::back_insert_iterator it) { using bi_iterator = std::back_insert_iterator; struct accessor : bi_iterator { accessor(bi_iterator iter) : bi_iterator(iter) {} using bi_iterator::container; }; return *accessor(it).container; } template struct fallback_formatter { fallback_formatter() = delete; }; // Specifies if T has an enabled fallback_formatter specialization. template using has_fallback_formatter = std::is_constructible>; template struct named_arg_base; template struct named_arg; enum type { none_type, named_arg_type, // Integer types should go first, int_type, uint_type, long_long_type, ulong_long_type, bool_type, char_type, last_integer_type = char_type, // followed by floating-point types. double_type, long_double_type, last_numeric_type = long_double_type, cstring_type, string_type, pointer_type, custom_type }; // Maps core type T to the corresponding type enum constant. template struct type_constant : std::integral_constant {}; #define FMT_TYPE_CONSTANT(Type, constant) \ template \ struct type_constant : std::integral_constant {} FMT_TYPE_CONSTANT(const named_arg_base&, named_arg_type); FMT_TYPE_CONSTANT(int, int_type); FMT_TYPE_CONSTANT(unsigned, uint_type); FMT_TYPE_CONSTANT(long long, long_long_type); FMT_TYPE_CONSTANT(unsigned long long, ulong_long_type); FMT_TYPE_CONSTANT(bool, bool_type); FMT_TYPE_CONSTANT(Char, char_type); FMT_TYPE_CONSTANT(double, double_type); FMT_TYPE_CONSTANT(long double, long_double_type); FMT_TYPE_CONSTANT(const Char*, cstring_type); FMT_TYPE_CONSTANT(basic_string_view, string_type); FMT_TYPE_CONSTANT(const void*, pointer_type); FMT_CONSTEXPR bool is_integral(type t) { FMT_ASSERT(t != named_arg_type, "invalid argument type"); return t > none_type && t <= last_integer_type; } FMT_CONSTEXPR bool is_arithmetic(type t) { FMT_ASSERT(t != named_arg_type, "invalid argument type"); return t > none_type && t <= last_numeric_type; } template struct string_value { const Char* data; std::size_t size; }; template struct custom_value { using parse_context = basic_parse_context; const void* value; void (*format)(const void* arg, parse_context& parse_ctx, Context& ctx); }; // A formatting argument value. template class value { public: using char_type = typename Context::char_type; union { int int_value; unsigned uint_value; long long long_long_value; unsigned long long ulong_long_value; bool bool_value; char_type char_value; double double_value; long double long_double_value; const void* pointer; string_value string; custom_value custom; const named_arg_base* named_arg; }; FMT_CONSTEXPR value(int val = 0) : int_value(val) {} FMT_CONSTEXPR value(unsigned val) : uint_value(val) {} value(long long val) : long_long_value(val) {} value(unsigned long long val) : ulong_long_value(val) {} value(double val) : double_value(val) {} value(long double val) : long_double_value(val) {} value(bool val) : bool_value(val) {} value(char_type val) : char_value(val) {} value(const char_type* val) { string.data = val; } value(basic_string_view val) { string.data = val.data(); string.size = val.size(); } value(const void* val) : pointer(val) {} template value(const T& val) { custom.value = &val; // Get the formatter type through the context to allow different contexts // have different extension points, e.g. `formatter` for `format` and // `printf_formatter` for `printf`. custom.format = format_custom_arg< T, conditional_t::value, typename Context::template formatter_type, fallback_formatter>>; } value(const named_arg_base& val) { named_arg = &val; } private: // Formats an argument of a custom type, such as a user-defined class. template static void format_custom_arg(const void* arg, basic_parse_context& parse_ctx, Context& ctx) { Formatter f; parse_ctx.advance_to(f.parse(parse_ctx)); ctx.advance_to(f.format(*static_cast(arg), ctx)); } }; template FMT_CONSTEXPR basic_format_arg make_arg(const T& value); // To minimize the number of types we need to deal with, long is translated // either to int or to long long depending on its size. enum { long_short = sizeof(long) == sizeof(int) }; using long_type = conditional_t; using ulong_type = conditional_t; // Maps formatting arguments to core types. template struct arg_mapper { using char_type = typename Context::char_type; FMT_CONSTEXPR int map(signed char val) { return val; } FMT_CONSTEXPR unsigned map(unsigned char val) { return val; } FMT_CONSTEXPR int map(short val) { return val; } FMT_CONSTEXPR unsigned map(unsigned short val) { return val; } FMT_CONSTEXPR int map(int val) { return val; } FMT_CONSTEXPR unsigned map(unsigned val) { return val; } FMT_CONSTEXPR long_type map(long val) { return val; } FMT_CONSTEXPR ulong_type map(unsigned long val) { return val; } FMT_CONSTEXPR long long map(long long val) { return val; } FMT_CONSTEXPR unsigned long long map(unsigned long long val) { return val; } FMT_CONSTEXPR bool map(bool val) { return val; } template ::value)> FMT_CONSTEXPR char_type map(T val) { static_assert( std::is_same::value || std::is_same::value, "mixing character types is disallowed"); return val; } FMT_CONSTEXPR double map(float val) { return static_cast(val); } FMT_CONSTEXPR double map(double val) { return val; } FMT_CONSTEXPR long double map(long double val) { return val; } FMT_CONSTEXPR const char_type* map(char_type* val) { return val; } FMT_CONSTEXPR const char_type* map(const char_type* val) { return val; } template ::value)> FMT_CONSTEXPR basic_string_view map(const T& val) { static_assert(std::is_same>::value, "mixing character types is disallowed"); return to_string_view(val); } template , T>::value && !is_string::value)> FMT_CONSTEXPR basic_string_view map(const T& val) { return basic_string_view(val); } FMT_CONSTEXPR const char* map(const signed char* val) { static_assert(std::is_same::value, "invalid string type"); return reinterpret_cast(val); } FMT_CONSTEXPR const char* map(const unsigned char* val) { static_assert(std::is_same::value, "invalid string type"); return reinterpret_cast(val); } FMT_CONSTEXPR const void* map(void* val) { return val; } FMT_CONSTEXPR const void* map(const void* val) { return val; } FMT_CONSTEXPR const void* map(std::nullptr_t val) { return val; } template FMT_CONSTEXPR int map(const T*) { // Formatting of arbitrary pointers is disallowed. If you want to output // a pointer cast it to "void *" or "const void *". In particular, this // forbids formatting of "[const] volatile char *" which is printed as bool // by iostreams. static_assert(!sizeof(T), "formatting of non-void pointers is disallowed"); return 0; } template ::value && !has_formatter::value && !has_fallback_formatter::value)> FMT_CONSTEXPR int map(const T& val) { return static_cast(val); } template ::value && !is_char::value && (has_formatter::value || has_fallback_formatter::value))> FMT_CONSTEXPR const T& map(const T& val) { return val; } template FMT_CONSTEXPR const named_arg_base& map( const named_arg& val) { auto arg = make_arg(val.value); std::memcpy(val.data, &arg, sizeof(arg)); return val; } }; // A type constant after applying arg_mapper. template using mapped_type_constant = type_constant().map(std::declval())), typename Context::char_type>; // Maximum number of arguments with packed types. enum { max_packed_args = 15 }; enum : unsigned long long { is_unpacked_bit = 1ull << 63 }; template class arg_map; } // namespace internal // A formatting argument. It is a trivially copyable/constructible type to // allow storage in basic_memory_buffer. template class basic_format_arg { private: internal::value value_; internal::type type_; template friend FMT_CONSTEXPR basic_format_arg internal::make_arg( const T& value); template friend FMT_CONSTEXPR auto visit_format_arg(Visitor&& vis, const basic_format_arg& arg) -> decltype(vis(0)); friend class basic_format_args; friend class internal::arg_map; using char_type = typename Context::char_type; public: class handle { public: explicit handle(internal::custom_value custom) : custom_(custom) {} void format(basic_parse_context& parse_ctx, Context& ctx) const { custom_.format(custom_.value, parse_ctx, ctx); } private: internal::custom_value custom_; }; FMT_CONSTEXPR basic_format_arg() : type_(internal::none_type) {} FMT_CONSTEXPR explicit operator bool() const FMT_NOEXCEPT { return type_ != internal::none_type; } internal::type type() const { return type_; } bool is_integral() const { return internal::is_integral(type_); } bool is_arithmetic() const { return internal::is_arithmetic(type_); } }; /** \rst Visits an argument dispatching to the appropriate visit method based on the argument type. For example, if the argument type is ``double`` then ``vis(value)`` will be called with the value of type ``double``. \endrst */ template FMT_CONSTEXPR auto visit_format_arg(Visitor&& vis, const basic_format_arg& arg) -> decltype(vis(0)) { using char_type = typename Context::char_type; switch (arg.type_) { case internal::none_type: break; case internal::named_arg_type: FMT_ASSERT(false, "invalid argument type"); break; case internal::int_type: return vis(arg.value_.int_value); case internal::uint_type: return vis(arg.value_.uint_value); case internal::long_long_type: return vis(arg.value_.long_long_value); case internal::ulong_long_type: return vis(arg.value_.ulong_long_value); case internal::bool_type: return vis(arg.value_.bool_value); case internal::char_type: return vis(arg.value_.char_value); case internal::double_type: return vis(arg.value_.double_value); case internal::long_double_type: return vis(arg.value_.long_double_value); case internal::cstring_type: return vis(arg.value_.string.data); case internal::string_type: return vis(basic_string_view(arg.value_.string.data, arg.value_.string.size)); case internal::pointer_type: return vis(arg.value_.pointer); case internal::custom_type: return vis(typename basic_format_arg::handle(arg.value_.custom)); } return vis(monostate()); } namespace internal { // A map from argument names to their values for named arguments. template class arg_map { private: arg_map(const arg_map&) = delete; void operator=(const arg_map&) = delete; using char_type = typename Context::char_type; struct entry { basic_string_view name; basic_format_arg arg; }; entry* map_; unsigned size_; void push_back(value val) { const auto& named = *val.named_arg; map_[size_] = {named.name, named.template deserialize()}; ++size_; } public: arg_map() : map_(nullptr), size_(0) {} void init(const basic_format_args& args); ~arg_map() { delete[] map_; } basic_format_arg find(basic_string_view name) const { // The list is unsorted, so just return the first matching name. for (entry *it = map_, *end = map_ + size_; it != end; ++it) { if (it->name == name) return it->arg; } return {}; } }; // A type-erased reference to an std::locale to avoid heavy include. class locale_ref { private: const void* locale_; // A type-erased pointer to std::locale. public: locale_ref() : locale_(nullptr) {} template explicit locale_ref(const Locale& loc); template Locale get() const; }; template constexpr unsigned long long encode_types() { return 0; } template constexpr unsigned long long encode_types() { return mapped_type_constant::value | (encode_types() << 4); } template FMT_CONSTEXPR basic_format_arg make_arg(const T& value) { basic_format_arg arg; arg.type_ = mapped_type_constant::value; arg.value_ = arg_mapper().map(value); return arg; } template inline value make_arg(const T& val) { return arg_mapper().map(val); } template inline basic_format_arg make_arg(const T& value) { return make_arg(value); } } // namespace internal // Formatting context. template class basic_format_context { public: /** The character type for the output. */ using char_type = Char; private: OutputIt out_; basic_format_args args_; internal::arg_map map_; internal::locale_ref loc_; basic_format_context(const basic_format_context&) = delete; void operator=(const basic_format_context&) = delete; public: using iterator = OutputIt; using format_arg = basic_format_arg; template using formatter_type = formatter; /** Constructs a ``basic_format_context`` object. References to the arguments are stored in the object so make sure they have appropriate lifetimes. */ basic_format_context(OutputIt out, basic_format_args ctx_args, internal::locale_ref loc = internal::locale_ref()) : out_(out), args_(ctx_args), loc_(loc) {} format_arg arg(int id) const { return args_.get(id); } // Checks if manual indexing is used and returns the argument with the // specified name. format_arg arg(basic_string_view name); internal::error_handler error_handler() { return {}; } void on_error(const char* message) { error_handler().on_error(message); } // Returns an iterator to the beginning of the output range. iterator out() { return out_; } // Advances the begin iterator to ``it``. void advance_to(iterator it) { out_ = it; } internal::locale_ref locale() { return loc_; } }; template using buffer_context = basic_format_context>, Char>; using format_context = buffer_context; using wformat_context = buffer_context; /** \rst An array of references to arguments. It can be implicitly converted into `~fmt::basic_format_args` for passing into type-erased formatting functions such as `~fmt::vformat`. \endrst */ template class format_arg_store { private: static const size_t num_args = sizeof...(Args); static const bool is_packed = num_args < internal::max_packed_args; using value_type = conditional_t, basic_format_arg>; // If the arguments are not packed, add one more element to mark the end. value_type data_[num_args + (num_args == 0 ? 1 : 0)]; friend class basic_format_args; public: static constexpr unsigned long long types = is_packed ? internal::encode_types() : internal::is_unpacked_bit | num_args; FMT_DEPRECATED static constexpr unsigned long long TYPES = types; format_arg_store(const Args&... args) : data_{internal::make_arg(args)...} {} }; /** \rst Constructs an `~fmt::format_arg_store` object that contains references to arguments and can be implicitly converted to `~fmt::format_args`. `Context` can be omitted in which case it defaults to `~fmt::context`. See `~fmt::arg` for lifetime considerations. \endrst */ template inline format_arg_store make_format_args( const Args&... args) { return {args...}; } /** Formatting arguments. */ template class basic_format_args { public: using size_type = int; using format_arg = basic_format_arg; private: // To reduce compiled code size per formatting function call, types of first // max_packed_args arguments are passed in the types_ field. unsigned long long types_; union { // If the number of arguments is less than max_packed_args, the argument // values are stored in values_, otherwise they are stored in args_. // This is done to reduce compiled code size as storing larger objects // may require more code (at least on x86-64) even if the same amount of // data is actually copied to stack. It saves ~10% on the bloat test. const internal::value* values_; const format_arg* args_; }; bool is_packed() const { return (types_ & internal::is_unpacked_bit) == 0; } internal::type type(int index) const { int shift = index * 4; return static_cast((types_ & (0xfull << shift)) >> shift); } friend class internal::arg_map; void set_data(const internal::value* values) { values_ = values; } void set_data(const format_arg* args) { args_ = args; } format_arg do_get(int index) const { format_arg arg; if (!is_packed()) { auto num_args = max_size(); if (index < num_args) arg = args_[index]; return arg; } if (index > internal::max_packed_args) return arg; arg.type_ = type(index); if (arg.type_ == internal::none_type) return arg; internal::value& val = arg.value_; val = values_[index]; return arg; } public: basic_format_args() : types_(0) {} /** \rst Constructs a `basic_format_args` object from `~fmt::format_arg_store`. \endrst */ template basic_format_args(const format_arg_store& store) : types_(static_cast(store.types)) { set_data(store.data_); } /** \rst Constructs a `basic_format_args` object from a dynamic set of arguments. \endrst */ basic_format_args(const format_arg* args, int count) : types_(internal::is_unpacked_bit | internal::to_unsigned(count)) { set_data(args); } /** Returns the argument at specified index. */ format_arg get(int index) const { format_arg arg = do_get(index); if (arg.type_ == internal::named_arg_type) arg = arg.value_.named_arg->template deserialize(); return arg; } int max_size() const { unsigned long long max_packed = internal::max_packed_args; return static_cast(is_packed() ? max_packed : types_ & ~internal::is_unpacked_bit); } }; /** An alias to ``basic_format_args``. */ // It is a separate type rather than an alias to make symbols readable. struct format_args : basic_format_args { template format_args(Args&&... args) : basic_format_args(std::forward(args)...) {} }; struct wformat_args : basic_format_args { template wformat_args(Args&&... args) : basic_format_args(std::forward(args)...) {} }; template struct is_contiguous : std::false_type {}; template struct is_contiguous> : std::true_type {}; template struct is_contiguous> : std::true_type {}; namespace internal { template struct is_contiguous_back_insert_iterator : std::false_type {}; template struct is_contiguous_back_insert_iterator> : is_contiguous {}; template struct named_arg_base { basic_string_view name; // Serialized value. mutable char data[sizeof(basic_format_arg>)]; named_arg_base(basic_string_view nm) : name(nm) {} template basic_format_arg deserialize() const { basic_format_arg arg; std::memcpy(&arg, data, sizeof(basic_format_arg)); return arg; } }; template struct named_arg : named_arg_base { const T& value; named_arg(basic_string_view name, const T& val) : named_arg_base(name), value(val) {} }; template ::value)> inline void check_format_string(const S&) { #if defined(FMT_ENFORCE_COMPILE_STRING) static_assert(is_compile_string::value, "FMT_ENFORCE_COMPILE_STRING requires all format strings to " "utilize FMT_STRING() or fmt()."); #endif } template ::value)> void check_format_string(S); struct view {}; template struct bool_pack; template using all_true = std::is_same, bool_pack>; template > inline format_arg_store, remove_reference_t...> make_args_checked(const S& format_str, const remove_reference_t&... args) { static_assert(all_true<(!std::is_base_of>() || !std::is_reference())...>::value, "passing views as lvalues is disallowed"); check_format_string>...>(format_str); return {args...}; } template std::basic_string vformat(basic_string_view format_str, basic_format_args> args); template typename buffer_context::iterator vformat_to( buffer& buf, basic_string_view format_str, basic_format_args> args); } // namespace internal /** \rst Returns a named argument to be used in a formatting function. The named argument holds a reference and does not extend the lifetime of its arguments. Consequently, a dangling reference can accidentally be created. The user should take care to only pass this function temporaries when the named argument is itself a temporary, as per the following example. **Example**:: fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23)); \endrst */ template > inline internal::named_arg arg(const S& name, const T& arg) { static_assert(internal::is_string::value, ""); return {name, arg}; } // Disable nested named arguments, e.g. ``arg("a", arg("b", 42))``. template void arg(S, internal::named_arg) = delete; /** Formats a string and writes the output to ``out``. */ // GCC 8 and earlier cannot handle std::back_insert_iterator with // vformat_to(...) overload, so SFINAE on iterator type instead. template , FMT_ENABLE_IF( internal::is_contiguous_back_insert_iterator::value)> OutputIt vformat_to(OutputIt out, const S& format_str, basic_format_args> args) { using container = remove_reference_t; internal::container_buffer buf((internal::get_container(out))); internal::vformat_to(buf, to_string_view(format_str), args); return out; } template ::value&& internal::is_string::value)> inline std::back_insert_iterator format_to( std::back_insert_iterator out, const S& format_str, Args&&... args) { return vformat_to( out, to_string_view(format_str), {internal::make_args_checked(format_str, args...)}); } template > inline std::basic_string vformat( const S& format_str, basic_format_args> args) { return internal::vformat(to_string_view(format_str), args); } /** \rst Formats arguments and returns the result as a string. **Example**:: #include std::string message = fmt::format("The answer is {}", 42); \endrst */ // Pass char_t as a default template parameter instead of using // std::basic_string> to reduce the symbol size. template > inline std::basic_string format(const S& format_str, Args&&... args) { return internal::vformat( to_string_view(format_str), {internal::make_args_checked(format_str, args...)}); } FMT_API void vprint(std::FILE* f, string_view format_str, format_args args); FMT_API void vprint(std::FILE* f, wstring_view format_str, wformat_args args); /** \rst Prints formatted data to the file *f*. For wide format strings, *f* should be in wide-oriented mode set via ``fwide(f, 1)`` or ``_setmode(_fileno(f), _O_U8TEXT)`` on Windows. **Example**:: fmt::print(stderr, "Don't {}!", "panic"); \endrst */ template ::value)> inline void print(std::FILE* f, const S& format_str, Args&&... args) { vprint(f, to_string_view(format_str), internal::make_args_checked(format_str, args...)); } FMT_API void vprint(string_view format_str, format_args args); FMT_API void vprint(wstring_view format_str, wformat_args args); /** \rst Prints formatted data to ``stdout``. **Example**:: fmt::print("Elapsed time: {0:.2f} seconds", 1.23); \endrst */ template ::value)> inline void print(const S& format_str, Args&&... args) { vprint(to_string_view(format_str), internal::make_args_checked(format_str, args...)); } FMT_END_NAMESPACE #endif // FMT_CORE_H_ DarkRadiant-2.14.0/libs/libfmt/fmt/format-inl.h000066400000000000000000001062741413722237400212160ustar00rootroot00000000000000// Formatting library for C++ // // Copyright (c) 2012 - 2016, Victor Zverovich // All rights reserved. // // For the license information refer to format.h. #ifndef FMT_FORMAT_INL_H_ #define FMT_FORMAT_INL_H_ #include "format.h" #include #include #include #include #include #include #include // for std::ptrdiff_t #include // for std::memmove #include #if !defined(FMT_STATIC_THOUSANDS_SEPARATOR) # include #endif #if FMT_USE_WINDOWS_H # if !defined(FMT_HEADER_ONLY) && !defined(WIN32_LEAN_AND_MEAN) # define WIN32_LEAN_AND_MEAN # endif # if defined(NOMINMAX) || defined(FMT_WIN_MINMAX) # include # else # define NOMINMAX # include # undef NOMINMAX # endif #endif #if FMT_EXCEPTIONS # define FMT_TRY try # define FMT_CATCH(x) catch (x) #else # define FMT_TRY if (true) # define FMT_CATCH(x) if (false) #endif #ifdef _MSC_VER # pragma warning(push) # pragma warning(disable : 4127) // conditional expression is constant # pragma warning(disable : 4702) // unreachable code // Disable deprecation warning for strerror. The latter is not called but // MSVC fails to detect it. # pragma warning(disable : 4996) #endif // Dummy implementations of strerror_r and strerror_s called if corresponding // system functions are not available. inline fmt::internal::null<> strerror_r(int, char*, ...) { return fmt::internal::null<>(); } inline fmt::internal::null<> strerror_s(char*, std::size_t, ...) { return fmt::internal::null<>(); } FMT_BEGIN_NAMESPACE namespace internal { #ifndef _MSC_VER # define FMT_SNPRINTF snprintf #else // _MSC_VER inline int fmt_snprintf(char* buffer, size_t size, const char* format, ...) { va_list args; va_start(args, format); int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args); va_end(args); return result; } # define FMT_SNPRINTF fmt_snprintf #endif // _MSC_VER using format_func = void (*)(internal::buffer&, int, string_view); // Portable thread-safe version of strerror. // Sets buffer to point to a string describing the error code. // This can be either a pointer to a string stored in buffer, // or a pointer to some static immutable string. // Returns one of the following values: // 0 - success // ERANGE - buffer is not large enough to store the error message // other - failure // Buffer should be at least of size 1. FMT_FUNC int safe_strerror(int error_code, char*& buffer, std::size_t buffer_size) FMT_NOEXCEPT { FMT_ASSERT(buffer != nullptr && buffer_size != 0, "invalid buffer"); class dispatcher { private: int error_code_; char*& buffer_; std::size_t buffer_size_; // A noop assignment operator to avoid bogus warnings. void operator=(const dispatcher&) {} // Handle the result of XSI-compliant version of strerror_r. int handle(int result) { // glibc versions before 2.13 return result in errno. return result == -1 ? errno : result; } // Handle the result of GNU-specific version of strerror_r. int handle(char* message) { // If the buffer is full then the message is probably truncated. if (message == buffer_ && strlen(buffer_) == buffer_size_ - 1) return ERANGE; buffer_ = message; return 0; } // Handle the case when strerror_r is not available. int handle(internal::null<>) { return fallback(strerror_s(buffer_, buffer_size_, error_code_)); } // Fallback to strerror_s when strerror_r is not available. int fallback(int result) { // If the buffer is full then the message is probably truncated. return result == 0 && strlen(buffer_) == buffer_size_ - 1 ? ERANGE : result; } #if !FMT_MSC_VER // Fallback to strerror if strerror_r and strerror_s are not available. int fallback(internal::null<>) { errno = 0; buffer_ = strerror(error_code_); return errno; } #endif public: dispatcher(int err_code, char*& buf, std::size_t buf_size) : error_code_(err_code), buffer_(buf), buffer_size_(buf_size) {} int run() { return handle(strerror_r(error_code_, buffer_, buffer_size_)); } }; return dispatcher(error_code, buffer, buffer_size).run(); } FMT_FUNC void format_error_code(internal::buffer& out, int error_code, string_view message) FMT_NOEXCEPT { // Report error code making sure that the output fits into // inline_buffer_size to avoid dynamic memory allocation and potential // bad_alloc. out.resize(0); static const char SEP[] = ": "; static const char ERROR_STR[] = "error "; // Subtract 2 to account for terminating null characters in SEP and ERROR_STR. std::size_t error_code_size = sizeof(SEP) + sizeof(ERROR_STR) - 2; auto abs_value = static_cast>(error_code); if (internal::is_negative(error_code)) { abs_value = 0 - abs_value; ++error_code_size; } error_code_size += internal::to_unsigned(internal::count_digits(abs_value)); internal::writer w(out); if (message.size() <= inline_buffer_size - error_code_size) { w.write(message); w.write(SEP); } w.write(ERROR_STR); w.write(error_code); assert(out.size() <= inline_buffer_size); } // A wrapper around fwrite that throws on error. FMT_FUNC void fwrite_fully(const void* ptr, size_t size, size_t count, FILE* stream) { size_t written = std::fwrite(ptr, size, count, stream); if (written < count) { FMT_THROW(system_error(errno, "cannot write to file")); } } FMT_FUNC void report_error(format_func func, int error_code, string_view message) FMT_NOEXCEPT { memory_buffer full_message; func(full_message, error_code, message); // Don't use fwrite_fully because the latter may throw. (void)std::fwrite(full_message.data(), full_message.size(), 1, stderr); std::fputc('\n', stderr); } } // namespace internal #if !defined(FMT_STATIC_THOUSANDS_SEPARATOR) namespace internal { template locale_ref::locale_ref(const Locale& loc) : locale_(&loc) { static_assert(std::is_same::value, ""); } template Locale locale_ref::get() const { static_assert(std::is_same::value, ""); return locale_ ? *static_cast(locale_) : std::locale(); } template FMT_FUNC Char thousands_sep_impl(locale_ref loc) { return std::use_facet>(loc.get()) .thousands_sep(); } template FMT_FUNC Char decimal_point_impl(locale_ref loc) { return std::use_facet>(loc.get()) .decimal_point(); } } // namespace internal #else template FMT_FUNC Char internal::thousands_sep_impl(locale_ref) { return FMT_STATIC_THOUSANDS_SEPARATOR; } template FMT_FUNC Char internal::decimal_point_impl(locale_ref) { return '.'; } #endif FMT_API FMT_FUNC format_error::~format_error() FMT_NOEXCEPT {} FMT_API FMT_FUNC system_error::~system_error() FMT_NOEXCEPT {} FMT_FUNC void system_error::init(int err_code, string_view format_str, format_args args) { error_code_ = err_code; memory_buffer buffer; format_system_error(buffer, err_code, vformat(format_str, args)); std::runtime_error& base = *this; base = std::runtime_error(to_string(buffer)); } namespace internal { template <> FMT_FUNC int count_digits<4>(internal::fallback_uintptr n) { // Assume little endian; pointer formatting is implementation-defined anyway. int i = static_cast(sizeof(void*)) - 1; while (i > 0 && n.value[i] == 0) --i; auto char_digits = std::numeric_limits::digits / 4; return i >= 0 ? i * char_digits + count_digits<4, unsigned>(n.value[i]) : 1; } template int format_float(char* buf, std::size_t size, const char* format, int precision, T value) { #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION if (precision > 100000) throw std::runtime_error( "fuzz mode - avoid large allocation inside snprintf"); #endif // Suppress the warning about nonliteral format string. auto snprintf_ptr = FMT_SNPRINTF; return precision < 0 ? snprintf_ptr(buf, size, format, value) : snprintf_ptr(buf, size, format, precision, value); } template const char basic_data::digits[] = "0001020304050607080910111213141516171819" "2021222324252627282930313233343536373839" "4041424344454647484950515253545556575859" "6061626364656667686970717273747576777879" "8081828384858687888990919293949596979899"; template const char basic_data::hex_digits[] = "0123456789abcdef"; #define FMT_POWERS_OF_10(factor) \ factor * 10, factor * 100, factor * 1000, factor * 10000, factor * 100000, \ factor * 1000000, factor * 10000000, factor * 100000000, \ factor * 1000000000 template const uint64_t basic_data::powers_of_10_64[] = { 1, FMT_POWERS_OF_10(1), FMT_POWERS_OF_10(1000000000ull), 10000000000000000000ull}; template const uint32_t basic_data::zero_or_powers_of_10_32[] = {0, FMT_POWERS_OF_10(1)}; template const uint64_t basic_data::zero_or_powers_of_10_64[] = { 0, FMT_POWERS_OF_10(1), FMT_POWERS_OF_10(1000000000ull), 10000000000000000000ull}; // Normalized 64-bit significands of pow(10, k), for k = -348, -340, ..., 340. // These are generated by support/compute-powers.py. template const uint64_t basic_data::pow10_significands[] = { 0xfa8fd5a0081c0288, 0xbaaee17fa23ebf76, 0x8b16fb203055ac76, 0xcf42894a5dce35ea, 0x9a6bb0aa55653b2d, 0xe61acf033d1a45df, 0xab70fe17c79ac6ca, 0xff77b1fcbebcdc4f, 0xbe5691ef416bd60c, 0x8dd01fad907ffc3c, 0xd3515c2831559a83, 0x9d71ac8fada6c9b5, 0xea9c227723ee8bcb, 0xaecc49914078536d, 0x823c12795db6ce57, 0xc21094364dfb5637, 0x9096ea6f3848984f, 0xd77485cb25823ac7, 0xa086cfcd97bf97f4, 0xef340a98172aace5, 0xb23867fb2a35b28e, 0x84c8d4dfd2c63f3b, 0xc5dd44271ad3cdba, 0x936b9fcebb25c996, 0xdbac6c247d62a584, 0xa3ab66580d5fdaf6, 0xf3e2f893dec3f126, 0xb5b5ada8aaff80b8, 0x87625f056c7c4a8b, 0xc9bcff6034c13053, 0x964e858c91ba2655, 0xdff9772470297ebd, 0xa6dfbd9fb8e5b88f, 0xf8a95fcf88747d94, 0xb94470938fa89bcf, 0x8a08f0f8bf0f156b, 0xcdb02555653131b6, 0x993fe2c6d07b7fac, 0xe45c10c42a2b3b06, 0xaa242499697392d3, 0xfd87b5f28300ca0e, 0xbce5086492111aeb, 0x8cbccc096f5088cc, 0xd1b71758e219652c, 0x9c40000000000000, 0xe8d4a51000000000, 0xad78ebc5ac620000, 0x813f3978f8940984, 0xc097ce7bc90715b3, 0x8f7e32ce7bea5c70, 0xd5d238a4abe98068, 0x9f4f2726179a2245, 0xed63a231d4c4fb27, 0xb0de65388cc8ada8, 0x83c7088e1aab65db, 0xc45d1df942711d9a, 0x924d692ca61be758, 0xda01ee641a708dea, 0xa26da3999aef774a, 0xf209787bb47d6b85, 0xb454e4a179dd1877, 0x865b86925b9bc5c2, 0xc83553c5c8965d3d, 0x952ab45cfa97a0b3, 0xde469fbd99a05fe3, 0xa59bc234db398c25, 0xf6c69a72a3989f5c, 0xb7dcbf5354e9bece, 0x88fcf317f22241e2, 0xcc20ce9bd35c78a5, 0x98165af37b2153df, 0xe2a0b5dc971f303a, 0xa8d9d1535ce3b396, 0xfb9b7cd9a4a7443c, 0xbb764c4ca7a44410, 0x8bab8eefb6409c1a, 0xd01fef10a657842c, 0x9b10a4e5e9913129, 0xe7109bfba19c0c9d, 0xac2820d9623bf429, 0x80444b5e7aa7cf85, 0xbf21e44003acdd2d, 0x8e679c2f5e44ff8f, 0xd433179d9c8cb841, 0x9e19db92b4e31ba9, 0xeb96bf6ebadf77d9, 0xaf87023b9bf0ee6b, }; // Binary exponents of pow(10, k), for k = -348, -340, ..., 340, corresponding // to significands above. template const int16_t basic_data::pow10_exponents[] = { -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954, -927, -901, -874, -847, -821, -794, -768, -741, -715, -688, -661, -635, -608, -582, -555, -529, -502, -475, -449, -422, -396, -369, -343, -316, -289, -263, -236, -210, -183, -157, -130, -103, -77, -50, -24, 3, 30, 56, 83, 109, 136, 162, 189, 216, 242, 269, 295, 322, 348, 375, 402, 428, 455, 481, 508, 534, 561, 588, 614, 641, 667, 694, 720, 747, 774, 800, 827, 853, 880, 907, 933, 960, 986, 1013, 1039, 1066}; template const char basic_data::foreground_color[] = "\x1b[38;2;"; template const char basic_data::background_color[] = "\x1b[48;2;"; template const char basic_data::reset_color[] = "\x1b[0m"; template const wchar_t basic_data::wreset_color[] = L"\x1b[0m"; template struct bits { static FMT_CONSTEXPR_DECL const int value = static_cast(sizeof(T) * std::numeric_limits::digits); }; // A handmade floating-point number f * pow(2, e). class fp { private: using significand_type = uint64_t; // All sizes are in bits. // Subtract 1 to account for an implicit most significant bit in the // normalized form. static FMT_CONSTEXPR_DECL const int double_significand_size = std::numeric_limits::digits - 1; static FMT_CONSTEXPR_DECL const uint64_t implicit_bit = 1ull << double_significand_size; public: significand_type f; int e; static FMT_CONSTEXPR_DECL const int significand_size = bits::value; fp() : f(0), e(0) {} fp(uint64_t f_val, int e_val) : f(f_val), e(e_val) {} // Constructs fp from an IEEE754 double. It is a template to prevent compile // errors on platforms where double is not IEEE754. template explicit fp(Double d) { // Assume double is in the format [sign][exponent][significand]. using limits = std::numeric_limits; const int exponent_size = bits::value - double_significand_size - 1; // -1 for sign const uint64_t significand_mask = implicit_bit - 1; const uint64_t exponent_mask = (~0ull >> 1) & ~significand_mask; const int exponent_bias = (1 << exponent_size) - limits::max_exponent - 1; auto u = bit_cast(d); auto biased_e = (u & exponent_mask) >> double_significand_size; f = u & significand_mask; if (biased_e != 0) f += implicit_bit; else biased_e = 1; // Subnormals use biased exponent 1 (min exponent). e = static_cast(biased_e - exponent_bias - double_significand_size); } // Normalizes the value converted from double and multiplied by (1 << SHIFT). template void normalize() { // Handle subnormals. auto shifted_implicit_bit = implicit_bit << SHIFT; while ((f & shifted_implicit_bit) == 0) { f <<= 1; --e; } // Subtract 1 to account for hidden bit. auto offset = significand_size - double_significand_size - SHIFT - 1; f <<= offset; e -= offset; } // Compute lower and upper boundaries (m^- and m^+ in the Grisu paper), where // a boundary is a value half way between the number and its predecessor // (lower) or successor (upper). The upper boundary is normalized and lower // has the same exponent but may be not normalized. void compute_boundaries(fp& lower, fp& upper) const { lower = f == implicit_bit ? fp((f << 2) - 1, e - 2) : fp((f << 1) - 1, e - 1); upper = fp((f << 1) + 1, e - 1); upper.normalize<1>(); // 1 is to account for the exponent shift above. lower.f <<= lower.e - upper.e; lower.e = upper.e; } }; // Returns an fp number representing x - y. Result may not be normalized. inline fp operator-(fp x, fp y) { FMT_ASSERT(x.f >= y.f && x.e == y.e, "invalid operands"); return fp(x.f - y.f, x.e); } // Computes an fp number r with r.f = x.f * y.f / pow(2, 64) rounded to nearest // with half-up tie breaking, r.e = x.e + y.e + 64. Result may not be // normalized. FMT_FUNC fp operator*(fp x, fp y) { int exp = x.e + y.e + 64; #if FMT_USE_INT128 auto product = static_cast<__uint128_t>(x.f) * y.f; auto f = static_cast(product >> 64); if ((static_cast(product) & (1ULL << 63)) != 0) ++f; return fp(f, exp); #else // Multiply 32-bit parts of significands. uint64_t mask = (1ULL << 32) - 1; uint64_t a = x.f >> 32, b = x.f & mask; uint64_t c = y.f >> 32, d = y.f & mask; uint64_t ac = a * c, bc = b * c, ad = a * d, bd = b * d; // Compute mid 64-bit of result and round. uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31); return fp(ac + (ad >> 32) + (bc >> 32) + (mid >> 32), exp); #endif } // Returns cached power (of 10) c_k = c_k.f * pow(2, c_k.e) such that its // (binary) exponent satisfies min_exponent <= c_k.e <= min_exponent + 28. FMT_FUNC fp get_cached_power(int min_exponent, int& pow10_exponent) { const double one_over_log2_10 = 0.30102999566398114; // 1 / log2(10) int index = static_cast( std::ceil((min_exponent + fp::significand_size - 1) * one_over_log2_10)); // Decimal exponent of the first (smallest) cached power of 10. const int first_dec_exp = -348; // Difference between 2 consecutive decimal exponents in cached powers of 10. const int dec_exp_step = 8; index = (index - first_dec_exp - 1) / dec_exp_step + 1; pow10_exponent = first_dec_exp + index * dec_exp_step; return fp(data::pow10_significands[index], data::pow10_exponents[index]); } enum round_direction { unknown, up, down }; // Given the divisor (normally a power of 10), the remainder = v % divisor for // some number v and the error, returns whether v should be rounded up, down, or // whether the rounding direction can't be determined due to error. // error should be less than divisor / 2. inline round_direction get_round_direction(uint64_t divisor, uint64_t remainder, uint64_t error) { FMT_ASSERT(remainder < divisor, ""); // divisor - remainder won't overflow. FMT_ASSERT(error < divisor, ""); // divisor - error won't overflow. FMT_ASSERT(error < divisor - error, ""); // error * 2 won't overflow. // Round down if (remainder + error) * 2 <= divisor. if (remainder <= divisor - remainder && error * 2 <= divisor - remainder * 2) return down; // Round up if (remainder - error) * 2 >= divisor. if (remainder >= error && remainder - error >= divisor - (remainder - error)) { return up; } return unknown; } namespace digits { enum result { more, // Generate more digits. done, // Done generating digits. error // Digit generation cancelled due to an error. }; } // Generates output using the Grisu digit-gen algorithm. // error: the size of the region (lower, upper) outside of which numbers // definitely do not round to value (Delta in Grisu3). template digits::result grisu_gen_digits(fp value, uint64_t error, int& exp, Handler& handler) { fp one(1ull << -value.e, value.e); // The integral part of scaled value (p1 in Grisu) = value / one. It cannot be // zero because it contains a product of two 64-bit numbers with MSB set (due // to normalization) - 1, shifted right by at most 60 bits. uint32_t integral = static_cast(value.f >> -one.e); FMT_ASSERT(integral != 0, ""); FMT_ASSERT(integral == value.f >> -one.e, ""); // The fractional part of scaled value (p2 in Grisu) c = value % one. uint64_t fractional = value.f & (one.f - 1); exp = count_digits(integral); // kappa in Grisu. // Divide by 10 to prevent overflow. auto result = handler.on_start(data::powers_of_10_64[exp - 1] << -one.e, value.f / 10, error * 10, exp); if (result != digits::more) return result; // Generate digits for the integral part. This can produce up to 10 digits. do { uint32_t digit = 0; // This optimization by miloyip reduces the number of integer divisions by // one per iteration. switch (exp) { case 10: digit = integral / 1000000000; integral %= 1000000000; break; case 9: digit = integral / 100000000; integral %= 100000000; break; case 8: digit = integral / 10000000; integral %= 10000000; break; case 7: digit = integral / 1000000; integral %= 1000000; break; case 6: digit = integral / 100000; integral %= 100000; break; case 5: digit = integral / 10000; integral %= 10000; break; case 4: digit = integral / 1000; integral %= 1000; break; case 3: digit = integral / 100; integral %= 100; break; case 2: digit = integral / 10; integral %= 10; break; case 1: digit = integral; integral = 0; break; default: FMT_ASSERT(false, "invalid number of digits"); } --exp; uint64_t remainder = (static_cast(integral) << -one.e) + fractional; result = handler.on_digit(static_cast('0' + digit), data::powers_of_10_64[exp] << -one.e, remainder, error, exp, true); if (result != digits::more) return result; } while (exp > 0); // Generate digits for the fractional part. for (;;) { fractional *= 10; error *= 10; char digit = static_cast('0' + static_cast(fractional >> -one.e)); fractional &= one.f - 1; --exp; result = handler.on_digit(digit, one.f, fractional, error, exp, false); if (result != digits::more) return result; } } // The fixed precision digit handler. struct fixed_handler { char* buf; int size; int precision; int exp10; bool fixed; digits::result on_start(uint64_t divisor, uint64_t remainder, uint64_t error, int& exp) { // Non-fixed formats require at least one digit and no precision adjustment. if (!fixed) return digits::more; // Adjust fixed precision by exponent because it is relative to decimal // point. precision += exp + exp10; // Check if precision is satisfied just by leading zeros, e.g. // format("{:.2f}", 0.001) gives "0.00" without generating any digits. if (precision > 0) return digits::more; if (precision < 0) return digits::done; auto dir = get_round_direction(divisor, remainder, error); if (dir == unknown) return digits::error; buf[size++] = dir == up ? '1' : '0'; return digits::done; } digits::result on_digit(char digit, uint64_t divisor, uint64_t remainder, uint64_t error, int, bool integral) { FMT_ASSERT(remainder < divisor, ""); buf[size++] = digit; if (size < precision) return digits::more; if (!integral) { // Check if error * 2 < divisor with overflow prevention. // The check is not needed for the integral part because error = 1 // and divisor > (1 << 32) there. if (error >= divisor || error >= divisor - error) return digits::error; } else { FMT_ASSERT(error == 1 && divisor > 2, ""); } auto dir = get_round_direction(divisor, remainder, error); if (dir != up) return dir == down ? digits::done : digits::error; ++buf[size - 1]; for (int i = size - 1; i > 0 && buf[i] > '9'; --i) { buf[i] = '0'; ++buf[i - 1]; } if (buf[0] > '9') { buf[0] = '1'; buf[size++] = '0'; } return digits::done; } }; // The shortest representation digit handler. template struct grisu_shortest_handler { char* buf; int size; // Distance between scaled value and upper bound (wp_W in Grisu3). uint64_t diff; digits::result on_start(uint64_t, uint64_t, uint64_t, int&) { return digits::more; } // Decrement the generated number approaching value from above. void round(uint64_t d, uint64_t divisor, uint64_t& remainder, uint64_t error) { while ( remainder < d && error - remainder >= divisor && (remainder + divisor < d || d - remainder >= remainder + divisor - d)) { --buf[size - 1]; remainder += divisor; } } // Implements Grisu's round_weed. digits::result on_digit(char digit, uint64_t divisor, uint64_t remainder, uint64_t error, int exp, bool integral) { buf[size++] = digit; if (remainder >= error) return digits::more; if (GRISU_VERSION != 3) { uint64_t d = integral ? diff : diff * data::powers_of_10_64[-exp]; round(d, divisor, remainder, error); return digits::done; } uint64_t unit = integral ? 1 : data::powers_of_10_64[-exp]; uint64_t up = (diff - 1) * unit; // wp_Wup round(up, divisor, remainder, error); uint64_t down = (diff + 1) * unit; // wp_Wdown if (remainder < down && error - remainder >= divisor && (remainder + divisor < down || down - remainder > remainder + divisor - down)) { return digits::error; } return 2 * unit <= remainder && remainder <= error - 4 * unit ? digits::done : digits::error; } }; template > FMT_API bool grisu_format(Double value, buffer& buf, int precision, unsigned options, int& exp) { FMT_ASSERT(value >= 0, "value is negative"); bool fixed = (options & grisu_options::fixed) != 0; if (value <= 0) { // <= instead of == to silence a warning. if (precision <= 0 || !fixed) { exp = 0; buf.push_back('0'); } else { exp = -precision; buf.resize(precision); std::uninitialized_fill_n(buf.data(), precision, '0'); } return true; } fp fp_value(value); const int min_exp = -60; // alpha in Grisu. int cached_exp10 = 0; // K in Grisu. if (precision != -1) { if (precision > 17) return false; fp_value.normalize(); auto cached_pow = get_cached_power( min_exp - (fp_value.e + fp::significand_size), cached_exp10); fp_value = fp_value * cached_pow; fixed_handler handler{buf.data(), 0, precision, -cached_exp10, fixed}; if (grisu_gen_digits(fp_value, 1, exp, handler) == digits::error) return false; buf.resize(to_unsigned(handler.size)); } else { fp lower, upper; // w^- and w^+ in the Grisu paper. fp_value.compute_boundaries(lower, upper); // Find a cached power of 10 such that multiplying upper by it will bring // the exponent in the range [min_exp, -32]. auto cached_pow = get_cached_power( // \tilde{c}_{-k} in Grisu. min_exp - (upper.e + fp::significand_size), cached_exp10); fp_value.normalize(); fp_value = fp_value * cached_pow; lower = lower * cached_pow; // \tilde{M}^- in Grisu. upper = upper * cached_pow; // \tilde{M}^+ in Grisu. assert(min_exp <= upper.e && upper.e <= -32); auto result = digits::result(); int size = 0; if ((options & grisu_options::grisu3) != 0) { --lower.f; // \tilde{M}^- - 1 ulp -> M^-_{\downarrow}. ++upper.f; // \tilde{M}^+ + 1 ulp -> M^+_{\uparrow}. // Numbers outside of (lower, upper) definitely do not round to value. grisu_shortest_handler<3> handler{buf.data(), 0, (upper - fp_value).f}; result = grisu_gen_digits(upper, upper.f - lower.f, exp, handler); size = handler.size; } else { ++lower.f; // \tilde{M}^- + 1 ulp -> M^-_{\uparrow}. --upper.f; // \tilde{M}^+ - 1 ulp -> M^+_{\downarrow}. grisu_shortest_handler<2> handler{buf.data(), 0, (upper - fp_value).f}; result = grisu_gen_digits(upper, upper.f - lower.f, exp, handler); size = handler.size; } if (result == digits::error) return false; buf.resize(to_unsigned(size)); } exp -= cached_exp10; return true; } template char* sprintf_format(Double value, internal::buffer& buf, sprintf_specs specs) { // Buffer capacity must be non-zero, otherwise MSVC's vsnprintf_s will fail. FMT_ASSERT(buf.capacity() != 0, "empty buffer"); // Build format string. enum { max_format_size = 10 }; // longest format: %#-*.*Lg char format[max_format_size]; char* format_ptr = format; *format_ptr++ = '%'; if (specs.alt || !specs.type) *format_ptr++ = '#'; if (specs.precision >= 0) { *format_ptr++ = '.'; *format_ptr++ = '*'; } if (std::is_same::value) *format_ptr++ = 'L'; char type = specs.type; if (type == '%') type = 'f'; else if (type == 0 || type == 'n') type = 'g'; #if FMT_MSC_VER if (type == 'F') { // MSVC's printf doesn't support 'F'. type = 'f'; } #endif *format_ptr++ = type; *format_ptr = '\0'; // Format using snprintf. char* start = nullptr; char* decimal_point_pos = nullptr; for (;;) { std::size_t buffer_size = buf.capacity(); start = &buf[0]; int result = format_float(start, buffer_size, format, specs.precision, value); if (result >= 0) { unsigned n = internal::to_unsigned(result); if (n < buf.capacity()) { // Find the decimal point. auto p = buf.data(), end = p + n; if (*p == '+' || *p == '-') ++p; if (specs.type != 'a' && specs.type != 'A') { while (p < end && *p >= '0' && *p <= '9') ++p; if (p < end && *p != 'e' && *p != 'E') { decimal_point_pos = p; if (!specs.type) { // Keep only one trailing zero after the decimal point. ++p; if (*p == '0') ++p; while (p != end && *p >= '1' && *p <= '9') ++p; char* where = p; while (p != end && *p == '0') ++p; if (p == end || *p < '0' || *p > '9') { if (p != end) std::memmove(where, p, to_unsigned(end - p)); n -= static_cast(p - where); } } } } buf.resize(n); break; // The buffer is large enough - continue with formatting. } buf.reserve(n + 1); } else { // If result is negative we ask to increase the capacity by at least 1, // but as std::vector, the buffer grows exponentially. buf.reserve(buf.capacity() + 1); } } return decimal_point_pos; } } // namespace internal #if FMT_USE_WINDOWS_H FMT_FUNC internal::utf8_to_utf16::utf8_to_utf16(string_view s) { static const char ERROR_MSG[] = "cannot convert string from UTF-8 to UTF-16"; if (s.size() > INT_MAX) FMT_THROW(windows_error(ERROR_INVALID_PARAMETER, ERROR_MSG)); int s_size = static_cast(s.size()); if (s_size == 0) { // MultiByteToWideChar does not support zero length, handle separately. buffer_.resize(1); buffer_[0] = 0; return; } int length = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, nullptr, 0); if (length == 0) FMT_THROW(windows_error(GetLastError(), ERROR_MSG)); buffer_.resize(length + 1); length = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, &buffer_[0], length); if (length == 0) FMT_THROW(windows_error(GetLastError(), ERROR_MSG)); buffer_[length] = 0; } FMT_FUNC internal::utf16_to_utf8::utf16_to_utf8(wstring_view s) { if (int error_code = convert(s)) { FMT_THROW(windows_error(error_code, "cannot convert string from UTF-16 to UTF-8")); } } FMT_FUNC int internal::utf16_to_utf8::convert(wstring_view s) { if (s.size() > INT_MAX) return ERROR_INVALID_PARAMETER; int s_size = static_cast(s.size()); if (s_size == 0) { // WideCharToMultiByte does not support zero length, handle separately. buffer_.resize(1); buffer_[0] = 0; return 0; } int length = WideCharToMultiByte(CP_UTF8, 0, s.data(), s_size, nullptr, 0, nullptr, nullptr); if (length == 0) return GetLastError(); buffer_.resize(length + 1); length = WideCharToMultiByte(CP_UTF8, 0, s.data(), s_size, &buffer_[0], length, nullptr, nullptr); if (length == 0) return GetLastError(); buffer_[length] = 0; return 0; } FMT_FUNC void windows_error::init(int err_code, string_view format_str, format_args args) { error_code_ = err_code; memory_buffer buffer; internal::format_windows_error(buffer, err_code, vformat(format_str, args)); std::runtime_error& base = *this; base = std::runtime_error(to_string(buffer)); } FMT_FUNC void internal::format_windows_error(internal::buffer& out, int error_code, string_view message) FMT_NOEXCEPT { FMT_TRY { wmemory_buffer buf; buf.resize(inline_buffer_size); for (;;) { wchar_t* system_message = &buf[0]; int result = FormatMessageW( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), system_message, static_cast(buf.size()), nullptr); if (result != 0) { utf16_to_utf8 utf8_message; if (utf8_message.convert(system_message) == ERROR_SUCCESS) { internal::writer w(out); w.write(message); w.write(": "); w.write(utf8_message); return; } break; } if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) break; // Can't get error message, report error code instead. buf.resize(buf.size() * 2); } } FMT_CATCH(...) {} format_error_code(out, error_code, message); } #endif // FMT_USE_WINDOWS_H FMT_FUNC void format_system_error(internal::buffer& out, int error_code, string_view message) FMT_NOEXCEPT { FMT_TRY { memory_buffer buf; buf.resize(inline_buffer_size); for (;;) { char* system_message = &buf[0]; int result = internal::safe_strerror(error_code, system_message, buf.size()); if (result == 0) { internal::writer w(out); w.write(message); w.write(": "); w.write(system_message); return; } if (result != ERANGE) break; // Can't get error message, report error code instead. buf.resize(buf.size() * 2); } } FMT_CATCH(...) {} format_error_code(out, error_code, message); } FMT_FUNC void internal::error_handler::on_error(const char* message) { FMT_THROW(format_error(message)); } FMT_FUNC void report_system_error(int error_code, fmt::string_view message) FMT_NOEXCEPT { report_error(format_system_error, error_code, message); } #if FMT_USE_WINDOWS_H FMT_FUNC void report_windows_error(int error_code, fmt::string_view message) FMT_NOEXCEPT { report_error(internal::format_windows_error, error_code, message); } #endif FMT_FUNC void vprint(std::FILE* f, string_view format_str, format_args args) { memory_buffer buffer; internal::vformat_to(buffer, format_str, basic_format_args>(args)); internal::fwrite_fully(buffer.data(), 1, buffer.size(), f); } FMT_FUNC void vprint(std::FILE* f, wstring_view format_str, wformat_args args) { wmemory_buffer buffer; internal::vformat_to(buffer, format_str, args); buffer.push_back(L'\0'); if (std::fputws(buffer.data(), f) == -1) { FMT_THROW(system_error(errno, "cannot write to file")); } } FMT_FUNC void vprint(string_view format_str, format_args args) { vprint(stdout, format_str, args); } FMT_FUNC void vprint(wstring_view format_str, wformat_args args) { vprint(stdout, format_str, args); } FMT_END_NAMESPACE #ifdef _MSC_VER # pragma warning(pop) #endif #endif // FMT_FORMAT_INL_H_ DarkRadiant-2.14.0/libs/libfmt/fmt/format.cc000066400000000000000000000042401413722237400205620ustar00rootroot00000000000000// Formatting library for C++ // // Copyright (c) 2012 - 2016, Victor Zverovich // All rights reserved. // // For the license information refer to format.h. #include "fmt/format-inl.h" FMT_BEGIN_NAMESPACE template struct FMT_API internal::basic_data; // Workaround a bug in MSVC2013 that prevents instantiation of grisu_format. bool (*instantiate_grisu_format)(double, internal::buffer&, int, unsigned, int&) = internal::grisu_format; #ifndef FMT_STATIC_THOUSANDS_SEPARATOR template FMT_API internal::locale_ref::locale_ref(const std::locale& loc); template FMT_API std::locale internal::locale_ref::get() const; #endif // Explicit instantiations for char. template FMT_API char internal::thousands_sep_impl(locale_ref); template FMT_API char internal::decimal_point_impl(locale_ref); template FMT_API void internal::buffer::append(const char*, const char*); template FMT_API void internal::arg_map::init( const basic_format_args& args); template FMT_API std::string internal::vformat( string_view, basic_format_args); template FMT_API format_context::iterator internal::vformat_to( internal::buffer&, string_view, basic_format_args); template FMT_API char* internal::sprintf_format(double, internal::buffer&, sprintf_specs); template FMT_API char* internal::sprintf_format(long double, internal::buffer&, sprintf_specs); // Explicit instantiations for wchar_t. template FMT_API wchar_t internal::thousands_sep_impl(locale_ref); template FMT_API wchar_t internal::decimal_point_impl(locale_ref); template FMT_API void internal::buffer::append(const wchar_t*, const wchar_t*); template FMT_API void internal::arg_map::init( const basic_format_args&); template FMT_API std::wstring internal::vformat( wstring_view, basic_format_args); FMT_END_NAMESPACE DarkRadiant-2.14.0/libs/libfmt/fmt/format.h000066400000000000000000003454771413722237400204500ustar00rootroot00000000000000/* Formatting library for C++ Copyright (c) 2012 - present, Victor Zverovich 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. --- Optional exception to the license --- As an exception, if, as a result of your compiling your source code, portions of this Software are embedded into a machine-executable object form of such source code, you may redistribute such embedded portions in such object form without including the above copyright and permission notices. */ #ifndef FMT_FORMAT_H_ #define FMT_FORMAT_H_ #include #include #include #include #include #include #include #include #include #include "core.h" #ifdef __clang__ # define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) #else # define FMT_CLANG_VERSION 0 #endif #ifdef __INTEL_COMPILER # define FMT_ICC_VERSION __INTEL_COMPILER #elif defined(__ICL) # define FMT_ICC_VERSION __ICL #else # define FMT_ICC_VERSION 0 #endif #ifdef __NVCC__ # define FMT_CUDA_VERSION (__CUDACC_VER_MAJOR__ * 100 + __CUDACC_VER_MINOR__) #else # define FMT_CUDA_VERSION 0 #endif #ifdef __has_builtin # define FMT_HAS_BUILTIN(x) __has_builtin(x) #else # define FMT_HAS_BUILTIN(x) 0 #endif #ifndef FMT_THROW # if FMT_EXCEPTIONS # if FMT_MSC_VER FMT_BEGIN_NAMESPACE namespace internal { template inline void do_throw(const Exception& x) { // Silence unreachable code warnings in MSVC because these are nearly // impossible to fix in a generic code. volatile bool b = true; if (b) throw x; } } // namespace internal FMT_END_NAMESPACE # define FMT_THROW(x) fmt::internal::do_throw(x) # else # define FMT_THROW(x) throw x # endif # else # define FMT_THROW(x) \ do { \ static_cast(sizeof(x)); \ assert(false); \ } while (false) # endif #endif #ifndef FMT_USE_USER_DEFINED_LITERALS // For Intel and NVIDIA compilers both they and the system gcc/msc support UDLs. # if (FMT_HAS_FEATURE(cxx_user_literals) || FMT_GCC_VERSION >= 407 || \ FMT_MSC_VER >= 1900) && \ (!(FMT_ICC_VERSION || FMT_CUDA_VERSION) || FMT_ICC_VERSION >= 1500 || \ FMT_CUDA_VERSION >= 700) # define FMT_USE_USER_DEFINED_LITERALS 1 # else # define FMT_USE_USER_DEFINED_LITERALS 0 # endif #endif #ifndef FMT_USE_UDL_TEMPLATE // EDG front end based compilers (icc, nvcc) do not support UDL templates yet // and GCC 9 warns about them. # if FMT_USE_USER_DEFINED_LITERALS && FMT_ICC_VERSION == 0 && \ FMT_CUDA_VERSION == 0 && \ ((FMT_GCC_VERSION >= 600 && FMT_GCC_VERSION <= 900 && \ __cplusplus >= 201402L) || \ FMT_CLANG_VERSION >= 304) # define FMT_USE_UDL_TEMPLATE 1 # else # define FMT_USE_UDL_TEMPLATE 0 # endif #endif #ifdef FMT_USE_INT128 // Do nothing. #elif defined(__SIZEOF_INT128__) # define FMT_USE_INT128 1 #else # define FMT_USE_INT128 0 #endif // __builtin_clz is broken in clang with Microsoft CodeGen: // https://github.com/fmtlib/fmt/issues/519 #if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clz)) && !FMT_MSC_VER # define FMT_BUILTIN_CLZ(n) __builtin_clz(n) #endif #if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clzll)) && !FMT_MSC_VER # define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n) #endif // Some compilers masquerade as both MSVC and GCC-likes or otherwise support // __builtin_clz and __builtin_clzll, so only define FMT_BUILTIN_CLZ using the // MSVC intrinsics if the clz and clzll builtins are not available. #if FMT_MSC_VER && !defined(FMT_BUILTIN_CLZLL) && !defined(_MANAGED) # include // _BitScanReverse, _BitScanReverse64 FMT_BEGIN_NAMESPACE namespace internal { // Avoid Clang with Microsoft CodeGen's -Wunknown-pragmas warning. # ifndef __clang__ # pragma intrinsic(_BitScanReverse) # endif inline uint32_t clz(uint32_t x) { unsigned long r = 0; _BitScanReverse(&r, x); assert(x != 0); // Static analysis complains about using uninitialized data // "r", but the only way that can happen is if "x" is 0, // which the callers guarantee to not happen. # pragma warning(suppress : 6102) return 31 - r; } # define FMT_BUILTIN_CLZ(n) fmt::internal::clz(n) # if defined(_WIN64) && !defined(__clang__) # pragma intrinsic(_BitScanReverse64) # endif inline uint32_t clzll(uint64_t x) { unsigned long r = 0; # ifdef _WIN64 _BitScanReverse64(&r, x); # else // Scan the high 32 bits. if (_BitScanReverse(&r, static_cast(x >> 32))) return 63 - (r + 32); // Scan the low 32 bits. _BitScanReverse(&r, static_cast(x)); # endif assert(x != 0); // Static analysis complains about using uninitialized data // "r", but the only way that can happen is if "x" is 0, // which the callers guarantee to not happen. # pragma warning(suppress : 6102) return 63 - r; } # define FMT_BUILTIN_CLZLL(n) fmt::internal::clzll(n) } // namespace internal FMT_END_NAMESPACE #endif FMT_BEGIN_NAMESPACE namespace internal { // A fallback implementation of uintptr_t for systems that lack it. struct fallback_uintptr { unsigned char value[sizeof(void*)]; }; #ifdef UINTPTR_MAX using uintptr_t = ::uintptr_t; #else using uintptr_t = fallback_uintptr; #endif // An equivalent of `*reinterpret_cast(&source)` that doesn't produce // undefined behavior (e.g. due to type aliasing). // Example: uint64_t d = bit_cast(2.718); template inline Dest bit_cast(const Source& source) { static_assert(sizeof(Dest) == sizeof(Source), "size mismatch"); Dest dest; std::memcpy(&dest, &source, sizeof(dest)); return dest; } // An approximation of iterator_t for pre-C++20 systems. template using iterator_t = decltype(std::begin(std::declval())); // Detect the iterator category of *any* given type in a SFINAE-friendly way. // Unfortunately, older implementations of std::iterator_traits are not safe // for use in a SFINAE-context. template struct iterator_category : std::false_type {}; template struct iterator_category { using type = std::random_access_iterator_tag; }; template struct iterator_category> { using type = typename It::iterator_category; }; // Detect if *any* given type models the OutputIterator concept. template class is_output_iterator { // Check for mutability because all iterator categories derived from // std::input_iterator_tag *may* also meet the requirements of an // OutputIterator, thereby falling into the category of 'mutable iterators' // [iterator.requirements.general] clause 4. The compiler reveals this // property only at the point of *actually dereferencing* the iterator! template static decltype(*(std::declval())) test(std::input_iterator_tag); template static char& test(std::output_iterator_tag); template static const char& test(...); using type = decltype(test(typename iterator_category::type{})); public: static const bool value = !std::is_const>::value; }; // A workaround for std::string not having mutable data() until C++17. template inline Char* get_data(std::basic_string& s) { return &s[0]; } template inline typename Container::value_type* get_data(Container& c) { return c.data(); } #ifdef _SECURE_SCL // Make a checked iterator to avoid MSVC warnings. template using checked_ptr = stdext::checked_array_iterator; template checked_ptr make_checked(T* p, std::size_t size) { return {p, size}; } #else template using checked_ptr = T*; template inline T* make_checked(T* p, std::size_t) { return p; } #endif template ::value)> inline checked_ptr reserve( std::back_insert_iterator& it, std::size_t n) { Container& c = get_container(it); std::size_t size = c.size(); c.resize(size + n); return make_checked(get_data(c) + size, n); } template inline Iterator& reserve(Iterator& it, std::size_t) { return it; } // An output iterator that counts the number of objects written to it and // discards them. template class counting_iterator { private: std::size_t count_; mutable T blackhole_; public: using iterator_category = std::output_iterator_tag; using value_type = T; using difference_type = std::ptrdiff_t; using pointer = T*; using reference = T&; using _Unchecked_type = counting_iterator; // Mark iterator as checked. counting_iterator() : count_(0) {} std::size_t count() const { return count_; } counting_iterator& operator++() { ++count_; return *this; } counting_iterator operator++(int) { auto it = *this; ++*this; return it; } T& operator*() const { return blackhole_; } }; template class truncating_iterator_base { protected: OutputIt out_; std::size_t limit_; std::size_t count_; truncating_iterator_base(OutputIt out, std::size_t limit) : out_(out), limit_(limit), count_(0) {} public: using iterator_category = std::output_iterator_tag; using difference_type = void; using pointer = void; using reference = void; using _Unchecked_type = truncating_iterator_base; // Mark iterator as checked. OutputIt base() const { return out_; } std::size_t count() const { return count_; } }; // An output iterator that truncates the output and counts the number of objects // written to it. template ::value_type>::type> class truncating_iterator; template class truncating_iterator : public truncating_iterator_base { using traits = std::iterator_traits; mutable typename traits::value_type blackhole_; public: using value_type = typename traits::value_type; truncating_iterator(OutputIt out, std::size_t limit) : truncating_iterator_base(out, limit) {} truncating_iterator& operator++() { if (this->count_++ < this->limit_) ++this->out_; return *this; } truncating_iterator operator++(int) { auto it = *this; ++*this; return it; } value_type& operator*() const { return this->count_ < this->limit_ ? *this->out_ : blackhole_; } }; template class truncating_iterator : public truncating_iterator_base { public: using value_type = typename OutputIt::container_type::value_type; truncating_iterator(OutputIt out, std::size_t limit) : truncating_iterator_base(out, limit) {} truncating_iterator& operator=(value_type val) { if (this->count_++ < this->limit_) this->out_ = val; return *this; } truncating_iterator& operator++() { return *this; } truncating_iterator& operator++(int) { return *this; } truncating_iterator& operator*() { return *this; } }; // A range with the specified output iterator and value type. template class output_range { private: OutputIt it_; public: using value_type = T; using iterator = OutputIt; struct sentinel {}; explicit output_range(OutputIt it) : it_(it) {} OutputIt begin() const { return it_; } sentinel end() const { return {}; } // Sentinel is not used yet. }; // A range with an iterator appending to a buffer. template class buffer_range : public output_range>, T> { public: using iterator = std::back_insert_iterator>; using output_range::output_range; buffer_range(buffer& buf) : output_range(std::back_inserter(buf)) {} }; template inline size_t count_code_points(basic_string_view s) { return s.size(); } // Counts the number of code points in a UTF-8 string. inline size_t count_code_points(basic_string_view s) { const char8_t* data = s.data(); size_t num_code_points = 0; for (size_t i = 0, size = s.size(); i != size; ++i) { if ((data[i] & 0xc0) != 0x80) ++num_code_points; } return num_code_points; } inline char8_t to_char8_t(char c) { return static_cast(c); } template using needs_conversion = bool_constant< std::is_same::value_type, char>::value && std::is_same::value>; template ::value)> OutputIt copy_str(InputIt begin, InputIt end, OutputIt it) { return std::copy(begin, end, it); } template ::value)> OutputIt copy_str(InputIt begin, InputIt end, OutputIt it) { return std::transform(begin, end, it, to_char8_t); } #ifndef FMT_USE_GRISU # define FMT_USE_GRISU 0 #endif template constexpr bool use_grisu() { return FMT_USE_GRISU && std::numeric_limits::is_iec559 && sizeof(T) <= sizeof(double); } template template void buffer::append(const U* begin, const U* end) { std::size_t new_size = size_ + to_unsigned(end - begin); reserve(new_size); std::uninitialized_copy(begin, end, make_checked(ptr_, capacity_) + size_); size_ = new_size; } } // namespace internal // A UTF-8 string view. class u8string_view : public basic_string_view { public: u8string_view(const char* s) : basic_string_view(reinterpret_cast(s)) {} u8string_view(const char* s, size_t count) FMT_NOEXCEPT : basic_string_view(reinterpret_cast(s), count) { } }; #if FMT_USE_USER_DEFINED_LITERALS inline namespace literals { inline u8string_view operator"" _u(const char* s, std::size_t n) { return {s, n}; } } // namespace literals #endif // The number of characters to store in the basic_memory_buffer object itself // to avoid dynamic memory allocation. enum { inline_buffer_size = 500 }; /** \rst A dynamically growing memory buffer for trivially copyable/constructible types with the first ``SIZE`` elements stored in the object itself. You can use one of the following type aliases for common character types: +----------------+------------------------------+ | Type | Definition | +================+==============================+ | memory_buffer | basic_memory_buffer | +----------------+------------------------------+ | wmemory_buffer | basic_memory_buffer | +----------------+------------------------------+ **Example**:: fmt::memory_buffer out; format_to(out, "The answer is {}.", 42); This will append the following output to the ``out`` object: .. code-block:: none The answer is 42. The output can be converted to an ``std::string`` with ``to_string(out)``. \endrst */ template > class basic_memory_buffer : private Allocator, public internal::buffer { private: T store_[SIZE]; // Deallocate memory allocated by the buffer. void deallocate() { T* data = this->data(); if (data != store_) Allocator::deallocate(data, this->capacity()); } protected: void grow(std::size_t size) FMT_OVERRIDE; public: using value_type = T; using const_reference = const T&; explicit basic_memory_buffer(const Allocator& alloc = Allocator()) : Allocator(alloc) { this->set(store_, SIZE); } ~basic_memory_buffer() { deallocate(); } private: // Move data from other to this buffer. void move(basic_memory_buffer& other) { Allocator &this_alloc = *this, &other_alloc = other; this_alloc = std::move(other_alloc); T* data = other.data(); std::size_t size = other.size(), capacity = other.capacity(); if (data == other.store_) { this->set(store_, capacity); std::uninitialized_copy(other.store_, other.store_ + size, internal::make_checked(store_, capacity)); } else { this->set(data, capacity); // Set pointer to the inline array so that delete is not called // when deallocating. other.set(other.store_, 0); } this->resize(size); } public: /** \rst Constructs a :class:`fmt::basic_memory_buffer` object moving the content of the other object to it. \endrst */ basic_memory_buffer(basic_memory_buffer&& other) { move(other); } /** \rst Moves the content of the other ``basic_memory_buffer`` object to this one. \endrst */ basic_memory_buffer& operator=(basic_memory_buffer&& other) { assert(this != &other); deallocate(); move(other); return *this; } // Returns a copy of the allocator associated with this buffer. Allocator get_allocator() const { return *this; } }; template void basic_memory_buffer::grow(std::size_t size) { #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION if (size > 1000) throw std::runtime_error("fuzz mode - won't grow that much"); #endif std::size_t old_capacity = this->capacity(); std::size_t new_capacity = old_capacity + old_capacity / 2; if (size > new_capacity) new_capacity = size; T* old_data = this->data(); T* new_data = std::allocator_traits::allocate(*this, new_capacity); // The following code doesn't throw, so the raw pointer above doesn't leak. std::uninitialized_copy(old_data, old_data + this->size(), internal::make_checked(new_data, new_capacity)); this->set(new_data, new_capacity); // deallocate must not throw according to the standard, but even if it does, // the buffer already uses the new storage and will deallocate it in // destructor. if (old_data != store_) Allocator::deallocate(old_data, old_capacity); } using memory_buffer = basic_memory_buffer; using wmemory_buffer = basic_memory_buffer; /** A formatting error such as invalid format string. */ class FMT_API format_error : public std::runtime_error { public: explicit format_error(const char* message) : std::runtime_error(message) {} explicit format_error(const std::string& message) : std::runtime_error(message) {} ~format_error() FMT_NOEXCEPT; }; namespace internal { // Returns true if value is negative, false otherwise. // Same as `value < 0` but doesn't produce warnings if T is an unsigned type. template ::is_signed)> FMT_CONSTEXPR bool is_negative(T value) { return value < 0; } template ::is_signed)> FMT_CONSTEXPR bool is_negative(T) { return false; } // Smallest of uint32_t and uint64_t that is large enough to represent all // values of T. template using uint32_or_64_t = conditional_t::digits <= 32, uint32_t, uint64_t>; // Static data is placed in this class template for the header-only config. template struct FMT_EXTERN_TEMPLATE_API basic_data { static const uint64_t powers_of_10_64[]; static const uint32_t zero_or_powers_of_10_32[]; static const uint64_t zero_or_powers_of_10_64[]; static const uint64_t pow10_significands[]; static const int16_t pow10_exponents[]; static const char digits[]; static const char hex_digits[]; static const char foreground_color[]; static const char background_color[]; static const char reset_color[5]; static const wchar_t wreset_color[5]; }; FMT_EXTERN template struct basic_data; // This is a struct rather than an alias to avoid shadowing warnings in gcc. struct data : basic_data<> {}; #ifdef FMT_BUILTIN_CLZLL // Returns the number of decimal digits in n. Leading zeros are not counted // except for n == 0 in which case count_digits returns 1. inline int count_digits(uint64_t n) { // Based on http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10 // and the benchmark https://github.com/localvoid/cxx-benchmark-count-digits. int t = (64 - FMT_BUILTIN_CLZLL(n | 1)) * 1233 >> 12; return t - (n < data::zero_or_powers_of_10_64[t]) + 1; } #else // Fallback version of count_digits used when __builtin_clz is not available. inline int count_digits(uint64_t n) { int count = 1; for (;;) { // Integer division is slow so do it for a group of four digits instead // of for every digit. The idea comes from the talk by Alexandrescu // "Three Optimization Tips for C++". See speed-test for a comparison. if (n < 10) return count; if (n < 100) return count + 1; if (n < 1000) return count + 2; if (n < 10000) return count + 3; n /= 10000u; count += 4; } } #endif // Counts the number of digits in n. BITS = log2(radix). template inline int count_digits(UInt n) { int num_digits = 0; do { ++num_digits; } while ((n >>= BITS) != 0); return num_digits; } template <> int count_digits<4>(internal::fallback_uintptr n); #if FMT_HAS_CPP_ATTRIBUTE(always_inline) # define FMT_ALWAYS_INLINE __attribute__((always_inline)) #else # define FMT_ALWAYS_INLINE #endif template inline char* lg(uint32_t n, Handler h) FMT_ALWAYS_INLINE; // Computes g = floor(log10(n)) and calls h.on(n); template inline char* lg(uint32_t n, Handler h) { return n < 100 ? n < 10 ? h.template on<0>(n) : h.template on<1>(n) : n < 1000000 ? n < 10000 ? n < 1000 ? h.template on<2>(n) : h.template on<3>(n) : n < 100000 ? h.template on<4>(n) : h.template on<5>(n) : n < 100000000 ? n < 10000000 ? h.template on<6>(n) : h.template on<7>(n) : n < 1000000000 ? h.template on<8>(n) : h.template on<9>(n); } // An lg handler that formats a decimal number. // Usage: lg(n, decimal_formatter(buffer)); class decimal_formatter { private: char* buffer_; void write_pair(unsigned N, uint32_t index) { std::memcpy(buffer_ + N, data::digits + index * 2, 2); } public: explicit decimal_formatter(char* buf) : buffer_(buf) {} template char* on(uint32_t u) { if (N == 0) { *buffer_ = static_cast(u) + '0'; } else if (N == 1) { write_pair(0, u); } else { // The idea of using 4.32 fixed-point numbers is based on // https://github.com/jeaiii/itoa unsigned n = N - 1; unsigned a = n / 5 * n * 53 / 16; uint64_t t = ((1ULL << (32 + a)) / data::zero_or_powers_of_10_32[n] + 1 - n / 9); t = ((t * u) >> a) + n / 5 * 4; write_pair(0, t >> 32); for (unsigned i = 2; i < N; i += 2) { t = 100ULL * static_cast(t); write_pair(i, t >> 32); } if (N % 2 == 0) { buffer_[N] = static_cast((10ULL * static_cast(t)) >> 32) + '0'; } } return buffer_ += N + 1; } }; #ifdef FMT_BUILTIN_CLZ // Optional version of count_digits for better performance on 32-bit platforms. inline int count_digits(uint32_t n) { int t = (32 - FMT_BUILTIN_CLZ(n | 1)) * 1233 >> 12; return t - (n < data::zero_or_powers_of_10_32[t]) + 1; } #endif template FMT_API Char thousands_sep_impl(locale_ref loc); template inline Char thousands_sep(locale_ref loc) { return Char(thousands_sep_impl(loc)); } template <> inline wchar_t thousands_sep(locale_ref loc) { return thousands_sep_impl(loc); } template FMT_API Char decimal_point_impl(locale_ref loc); template inline Char decimal_point(locale_ref loc) { return Char(decimal_point_impl(loc)); } template <> inline wchar_t decimal_point(locale_ref loc) { return decimal_point_impl(loc); } // Formats a decimal unsigned integer value writing into buffer. // add_thousands_sep is called after writing each char to add a thousands // separator if necessary. template inline Char* format_decimal(Char* buffer, UInt value, int num_digits, F add_thousands_sep) { FMT_ASSERT(num_digits >= 0, "invalid digit count"); buffer += num_digits; Char* end = buffer; while (value >= 100) { // Integer division is slow so do it for a group of two digits instead // of for every digit. The idea comes from the talk by Alexandrescu // "Three Optimization Tips for C++". See speed-test for a comparison. unsigned index = static_cast((value % 100) * 2); value /= 100; *--buffer = static_cast(data::digits[index + 1]); add_thousands_sep(buffer); *--buffer = static_cast(data::digits[index]); add_thousands_sep(buffer); } if (value < 10) { *--buffer = static_cast('0' + value); return end; } unsigned index = static_cast(value * 2); *--buffer = static_cast(data::digits[index + 1]); add_thousands_sep(buffer); *--buffer = static_cast(data::digits[index]); return end; } template inline Iterator format_decimal(Iterator out, UInt value, int num_digits, F add_thousands_sep) { FMT_ASSERT(num_digits >= 0, "invalid digit count"); // Buffer should be large enough to hold all digits (<= digits10 + 1). enum { max_size = std::numeric_limits::digits10 + 1 }; Char buffer[max_size + max_size / 3]; auto end = format_decimal(buffer, value, num_digits, add_thousands_sep); return internal::copy_str(buffer, end, out); } template inline It format_decimal(It out, UInt value, int num_digits) { return format_decimal(out, value, num_digits, [](Char*) {}); } template inline Char* format_uint(Char* buffer, UInt value, int num_digits, bool upper = false) { buffer += num_digits; Char* end = buffer; do { const char* digits = upper ? "0123456789ABCDEF" : data::hex_digits; unsigned digit = (value & ((1 << BASE_BITS) - 1)); *--buffer = static_cast(BASE_BITS < 4 ? static_cast('0' + digit) : digits[digit]); } while ((value >>= BASE_BITS) != 0); return end; } template Char* format_uint(Char* buffer, internal::fallback_uintptr n, int num_digits, bool = false) { auto char_digits = std::numeric_limits::digits / 4; int start = (num_digits + char_digits - 1) / char_digits - 1; if (int start_digits = num_digits % char_digits) { unsigned value = n.value[start--]; buffer = format_uint(buffer, value, start_digits); } for (; start >= 0; --start) { unsigned value = n.value[start]; buffer += char_digits; auto p = buffer; for (int i = 0; i < char_digits; ++i) { unsigned digit = (value & ((1 << BASE_BITS) - 1)); *--p = static_cast(data::hex_digits[digit]); value >>= BASE_BITS; } } return buffer; } template inline It format_uint(It out, UInt value, int num_digits, bool upper = false) { // Buffer should be large enough to hold all digits (digits / BASE_BITS + 1). char buffer[std::numeric_limits::digits / BASE_BITS + 1]; format_uint(buffer, value, num_digits, upper); return internal::copy_str(buffer, buffer + num_digits, out); } #ifndef _WIN32 # define FMT_USE_WINDOWS_H 0 #elif !defined(FMT_USE_WINDOWS_H) # define FMT_USE_WINDOWS_H 1 #endif // Define FMT_USE_WINDOWS_H to 0 to disable use of windows.h. // All the functionality that relies on it will be disabled too. #if FMT_USE_WINDOWS_H // A converter from UTF-8 to UTF-16. // It is only provided for Windows since other systems support UTF-8 natively. class utf8_to_utf16 { private: wmemory_buffer buffer_; public: FMT_API explicit utf8_to_utf16(string_view s); operator wstring_view() const { return wstring_view(&buffer_[0], size()); } size_t size() const { return buffer_.size() - 1; } const wchar_t* c_str() const { return &buffer_[0]; } std::wstring str() const { return std::wstring(&buffer_[0], size()); } }; // A converter from UTF-16 to UTF-8. // It is only provided for Windows since other systems support UTF-8 natively. class utf16_to_utf8 { private: memory_buffer buffer_; public: utf16_to_utf8() {} FMT_API explicit utf16_to_utf8(wstring_view s); operator string_view() const { return string_view(&buffer_[0], size()); } size_t size() const { return buffer_.size() - 1; } const char* c_str() const { return &buffer_[0]; } std::string str() const { return std::string(&buffer_[0], size()); } // Performs conversion returning a system error code instead of // throwing exception on conversion error. This method may still throw // in case of memory allocation error. FMT_API int convert(wstring_view s); }; FMT_API void format_windows_error(fmt::internal::buffer& out, int error_code, fmt::string_view message) FMT_NOEXCEPT; #endif template struct null {}; // Workaround an array initialization issue in gcc 4.8. template struct fill_t { private: Char data_[6]; public: FMT_CONSTEXPR Char& operator[](size_t index) { return data_[index]; } FMT_CONSTEXPR const Char& operator[](size_t index) const { return data_[index]; } static FMT_CONSTEXPR fill_t make() { auto fill = fill_t(); fill[0] = Char(' '); return fill; } }; } // namespace internal // We cannot use enum classes as bit fields because of a gcc bug // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414. namespace align { enum type { none, left, right, center, numeric }; } using align_t = align::type; namespace sign { enum type { none, minus, plus, space }; } using sign_t = sign::type; // Format specifiers for built-in and string types. template struct basic_format_specs { int width; int precision; char type; align_t align : 4; sign_t sign : 3; bool alt : 1; // Alternate form ('#'). internal::fill_t fill; constexpr basic_format_specs() : width(0), precision(-1), type(0), align(align::none), sign(sign::none), alt(false), fill(internal::fill_t::make()) {} }; using format_specs = basic_format_specs; namespace internal { // Writes the exponent exp in the form "[+-]d{2,3}" to buffer. template It write_exponent(int exp, It it) { FMT_ASSERT(-1000 < exp && exp < 1000, "exponent out of range"); if (exp < 0) { *it++ = static_cast('-'); exp = -exp; } else { *it++ = static_cast('+'); } if (exp >= 100) { *it++ = static_cast(static_cast('0' + exp / 100)); exp %= 100; } const char* d = data::digits + exp * 2; *it++ = static_cast(d[0]); *it++ = static_cast(d[1]); return it; } struct gen_digits_params { int num_digits; bool fixed; bool upper; bool trailing_zeros; }; // The number is given as v = digits * pow(10, exp). template It grisu_prettify(const char* digits, int size, int exp, It it, gen_digits_params params, Char decimal_point) { // pow(10, full_exp - 1) <= v <= pow(10, full_exp). int full_exp = size + exp; if (!params.fixed) { // Insert a decimal point after the first digit and add an exponent. *it++ = static_cast(*digits); if (size > 1) *it++ = decimal_point; exp += size - 1; it = copy_str(digits + 1, digits + size, it); if (size < params.num_digits) it = std::fill_n(it, params.num_digits - size, static_cast('0')); *it++ = static_cast(params.upper ? 'E' : 'e'); return write_exponent(exp, it); } if (size <= full_exp) { // 1234e7 -> 12340000000[.0+] it = copy_str(digits, digits + size, it); it = std::fill_n(it, full_exp - size, static_cast('0')); int num_zeros = (std::max)(params.num_digits - full_exp, 1); if (params.trailing_zeros) { *it++ = decimal_point; #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION if (num_zeros > 1000) throw std::runtime_error("fuzz mode - avoiding excessive cpu use"); #endif it = std::fill_n(it, num_zeros, static_cast('0')); } } else if (full_exp > 0) { // 1234e-2 -> 12.34[0+] it = copy_str(digits, digits + full_exp, it); if (!params.trailing_zeros) { // Remove trailing zeros. while (size > full_exp && digits[size - 1] == '0') --size; if (size != full_exp) *it++ = decimal_point; return copy_str(digits + full_exp, digits + size, it); } *it++ = decimal_point; it = copy_str(digits + full_exp, digits + size, it); if (params.num_digits > size) { // Add trailing zeros. int num_zeros = params.num_digits - size; it = std::fill_n(it, num_zeros, static_cast('0')); } } else { // 1234e-6 -> 0.001234 *it++ = static_cast('0'); int num_zeros = -full_exp; if (params.num_digits >= 0 && params.num_digits < num_zeros) num_zeros = params.num_digits; if (!params.trailing_zeros) while (size > 0 && digits[size - 1] == '0') --size; if (num_zeros != 0 || size != 0) { *it++ = decimal_point; it = std::fill_n(it, num_zeros, static_cast('0')); it = copy_str(digits, digits + size, it); } } return it; } namespace grisu_options { enum { fixed = 1, grisu3 = 2 }; } // Formats value using the Grisu algorithm: // https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf template FMT_API bool grisu_format(Double, buffer&, int, unsigned, int&); template inline bool grisu_format(Double, buffer&, int, unsigned, int&) { return false; } struct sprintf_specs { int precision; char type; bool alt : 1; template constexpr sprintf_specs(basic_format_specs specs) : precision(specs.precision), type(specs.type), alt(specs.alt) {} constexpr bool has_precision() const { return precision >= 0; } }; template char* sprintf_format(Double, internal::buffer&, sprintf_specs); template FMT_CONSTEXPR void handle_int_type_spec(char spec, Handler&& handler) { switch (spec) { case 0: case 'd': handler.on_dec(); break; case 'x': case 'X': handler.on_hex(); break; case 'b': case 'B': handler.on_bin(); break; case 'o': handler.on_oct(); break; case 'n': handler.on_num(); break; default: handler.on_error(); } } template FMT_CONSTEXPR void handle_float_type_spec(char spec, Handler&& handler) { switch (spec) { case 0: case 'g': case 'G': handler.on_general(); break; case 'e': case 'E': handler.on_exp(); break; case 'f': case 'F': handler.on_fixed(); break; case '%': handler.on_percent(); break; case 'a': case 'A': handler.on_hex(); break; case 'n': handler.on_num(); break; default: handler.on_error(); break; } } template FMT_CONSTEXPR void handle_char_specs(const basic_format_specs* specs, Handler&& handler) { if (!specs) return handler.on_char(); if (specs->type && specs->type != 'c') return handler.on_int(); if (specs->align == align::numeric || specs->sign != sign::none || specs->alt) handler.on_error("invalid format specifier for char"); handler.on_char(); } template FMT_CONSTEXPR void handle_cstring_type_spec(Char spec, Handler&& handler) { if (spec == 0 || spec == 's') handler.on_string(); else if (spec == 'p') handler.on_pointer(); else handler.on_error("invalid type specifier"); } template FMT_CONSTEXPR void check_string_type_spec(Char spec, ErrorHandler&& eh) { if (spec != 0 && spec != 's') eh.on_error("invalid type specifier"); } template FMT_CONSTEXPR void check_pointer_type_spec(Char spec, ErrorHandler&& eh) { if (spec != 0 && spec != 'p') eh.on_error("invalid type specifier"); } template class int_type_checker : private ErrorHandler { public: FMT_CONSTEXPR explicit int_type_checker(ErrorHandler eh) : ErrorHandler(eh) {} FMT_CONSTEXPR void on_dec() {} FMT_CONSTEXPR void on_hex() {} FMT_CONSTEXPR void on_bin() {} FMT_CONSTEXPR void on_oct() {} FMT_CONSTEXPR void on_num() {} FMT_CONSTEXPR void on_error() { ErrorHandler::on_error("invalid type specifier"); } }; template class float_type_checker : private ErrorHandler { public: FMT_CONSTEXPR explicit float_type_checker(ErrorHandler eh) : ErrorHandler(eh) {} FMT_CONSTEXPR void on_general() {} FMT_CONSTEXPR void on_exp() {} FMT_CONSTEXPR void on_fixed() {} FMT_CONSTEXPR void on_percent() {} FMT_CONSTEXPR void on_hex() {} FMT_CONSTEXPR void on_num() {} FMT_CONSTEXPR void on_error() { ErrorHandler::on_error("invalid type specifier"); } }; template class char_specs_checker : public ErrorHandler { private: char type_; public: FMT_CONSTEXPR char_specs_checker(char type, ErrorHandler eh) : ErrorHandler(eh), type_(type) {} FMT_CONSTEXPR void on_int() { handle_int_type_spec(type_, int_type_checker(*this)); } FMT_CONSTEXPR void on_char() {} }; template class cstring_type_checker : public ErrorHandler { public: FMT_CONSTEXPR explicit cstring_type_checker(ErrorHandler eh) : ErrorHandler(eh) {} FMT_CONSTEXPR void on_string() {} FMT_CONSTEXPR void on_pointer() {} }; template void arg_map::init(const basic_format_args& args) { if (map_) return; map_ = new entry[internal::to_unsigned(args.max_size())]; if (args.is_packed()) { for (int i = 0;; ++i) { internal::type arg_type = args.type(i); if (arg_type == internal::none_type) return; if (arg_type == internal::named_arg_type) push_back(args.values_[i]); } } for (int i = 0, n = args.max_size(); i < n; ++i) { auto type = args.args_[i].type_; if (type == internal::named_arg_type) push_back(args.args_[i].value_); } } // This template provides operations for formatting and writing data into a // character range. template class basic_writer { public: using char_type = typename Range::value_type; using iterator = typename Range::iterator; using format_specs = basic_format_specs; private: iterator out_; // Output iterator. internal::locale_ref locale_; // Attempts to reserve space for n extra characters in the output range. // Returns a pointer to the reserved range or a reference to out_. auto reserve(std::size_t n) -> decltype(internal::reserve(out_, n)) { return internal::reserve(out_, n); } template struct padded_int_writer { size_t size_; string_view prefix; char_type fill; std::size_t padding; F f; size_t size() const { return size_; } size_t width() const { return size_; } template void operator()(It&& it) const { if (prefix.size() != 0) it = internal::copy_str(prefix.begin(), prefix.end(), it); it = std::fill_n(it, padding, fill); f(it); } }; // Writes an integer in the format // // where are written by f(it). template void write_int(int num_digits, string_view prefix, format_specs specs, F f) { std::size_t size = prefix.size() + internal::to_unsigned(num_digits); char_type fill = specs.fill[0]; std::size_t padding = 0; if (specs.align == align::numeric) { auto unsiged_width = internal::to_unsigned(specs.width); if (unsiged_width > size) { padding = unsiged_width - size; size = unsiged_width; } } else if (specs.precision > num_digits) { size = prefix.size() + internal::to_unsigned(specs.precision); padding = internal::to_unsigned(specs.precision - num_digits); fill = static_cast('0'); } if (specs.align == align::none) specs.align = align::right; write_padded(specs, padded_int_writer{size, prefix, fill, padding, f}); } // Writes a decimal integer. template void write_decimal(Int value) { auto abs_value = static_cast>(value); bool is_negative = internal::is_negative(value); if (is_negative) abs_value = 0 - abs_value; int num_digits = internal::count_digits(abs_value); auto&& it = reserve((is_negative ? 1 : 0) + static_cast(num_digits)); if (is_negative) *it++ = static_cast('-'); it = internal::format_decimal(it, abs_value, num_digits); } // The handle_int_type_spec handler that writes an integer. template struct int_writer { using unsigned_type = uint32_or_64_t; basic_writer& writer; const Specs& specs; unsigned_type abs_value; char prefix[4]; unsigned prefix_size; string_view get_prefix() const { return string_view(prefix, prefix_size); } int_writer(basic_writer& w, Int value, const Specs& s) : writer(w), specs(s), abs_value(static_cast(value)), prefix_size(0) { if (internal::is_negative(value)) { prefix[0] = '-'; ++prefix_size; abs_value = 0 - abs_value; } else if (specs.sign != sign::none && specs.sign != sign::minus) { prefix[0] = specs.sign == sign::plus ? '+' : ' '; ++prefix_size; } } struct dec_writer { unsigned_type abs_value; int num_digits; template void operator()(It&& it) const { it = internal::format_decimal(it, abs_value, num_digits); } }; void on_dec() { int num_digits = internal::count_digits(abs_value); writer.write_int(num_digits, get_prefix(), specs, dec_writer{abs_value, num_digits}); } struct hex_writer { int_writer& self; int num_digits; template void operator()(It&& it) const { it = internal::format_uint<4, char_type>(it, self.abs_value, num_digits, self.specs.type != 'x'); } }; void on_hex() { if (specs.alt) { prefix[prefix_size++] = '0'; prefix[prefix_size++] = specs.type; } int num_digits = internal::count_digits<4>(abs_value); writer.write_int(num_digits, get_prefix(), specs, hex_writer{*this, num_digits}); } template struct bin_writer { unsigned_type abs_value; int num_digits; template void operator()(It&& it) const { it = internal::format_uint(it, abs_value, num_digits); } }; void on_bin() { if (specs.alt) { prefix[prefix_size++] = '0'; prefix[prefix_size++] = static_cast(specs.type); } int num_digits = internal::count_digits<1>(abs_value); writer.write_int(num_digits, get_prefix(), specs, bin_writer<1>{abs_value, num_digits}); } void on_oct() { int num_digits = internal::count_digits<3>(abs_value); if (specs.alt && specs.precision <= num_digits) { // Octal prefix '0' is counted as a digit, so only add it if precision // is not greater than the number of digits. prefix[prefix_size++] = '0'; } writer.write_int(num_digits, get_prefix(), specs, bin_writer<3>{abs_value, num_digits}); } enum { sep_size = 1 }; struct num_writer { unsigned_type abs_value; int size; char_type sep; template void operator()(It&& it) const { basic_string_view s(&sep, sep_size); // Index of a decimal digit with the least significant digit having // index 0. unsigned digit_index = 0; it = internal::format_decimal( it, abs_value, size, [s, &digit_index](char_type*& buffer) { if (++digit_index % 3 != 0) return; buffer -= s.size(); std::uninitialized_copy(s.data(), s.data() + s.size(), internal::make_checked(buffer, s.size())); }); } }; void on_num() { char_type sep = internal::thousands_sep(writer.locale_); if (!sep) return on_dec(); int num_digits = internal::count_digits(abs_value); int size = num_digits + sep_size * ((num_digits - 1) / 3); writer.write_int(size, get_prefix(), specs, num_writer{abs_value, size, sep}); } FMT_NORETURN void on_error() { FMT_THROW(format_error("invalid type specifier")); } }; enum { inf_size = 3 }; // This is an enum to workaround a bug in MSVC. struct inf_or_nan_writer { char sign; bool as_percentage; const char* str; size_t size() const { return static_cast(inf_size + (sign ? 1 : 0) + (as_percentage ? 1 : 0)); } size_t width() const { return size(); } template void operator()(It&& it) const { if (sign) *it++ = static_cast(sign); it = internal::copy_str( str, str + static_cast(inf_size), it); if (as_percentage) *it++ = static_cast('%'); } }; struct double_writer { char sign; internal::buffer& buffer; char* decimal_point_pos; char_type decimal_point; size_t size() const { return buffer.size() + (sign ? 1 : 0); } size_t width() const { return size(); } template void operator()(It&& it) { if (sign) *it++ = static_cast(sign); auto begin = buffer.begin(); if (decimal_point_pos) { it = internal::copy_str(begin, decimal_point_pos, it); *it++ = decimal_point; begin = decimal_point_pos + 1; } it = internal::copy_str(begin, buffer.end(), it); } }; class grisu_writer { private: internal::buffer& digits_; size_t size_; char sign_; int exp_; internal::gen_digits_params params_; char_type decimal_point_; public: grisu_writer(char sign, internal::buffer& digits, int exp, const internal::gen_digits_params& params, char_type decimal_point) : digits_(digits), sign_(sign), exp_(exp), params_(params), decimal_point_(decimal_point) { int num_digits = static_cast(digits.size()); int full_exp = num_digits + exp - 1; int precision = params.num_digits > 0 ? params.num_digits : 11; params_.fixed |= full_exp >= -4 && full_exp < precision; auto it = internal::grisu_prettify( digits.data(), num_digits, exp, internal::counting_iterator(), params_, '.'); size_ = it.count(); } size_t size() const { return size_ + (sign_ ? 1 : 0); } size_t width() const { return size(); } template void operator()(It&& it) { if (sign_) *it++ = static_cast(sign_); int num_digits = static_cast(digits_.size()); it = internal::grisu_prettify(digits_.data(), num_digits, exp_, it, params_, decimal_point_); } }; template struct str_writer { const Char* s; size_t size_; size_t size() const { return size_; } size_t width() const { return internal::count_code_points(basic_string_view(s, size_)); } template void operator()(It&& it) const { it = internal::copy_str(s, s + size_, it); } }; template struct pointer_writer { UIntPtr value; int num_digits; size_t size() const { return to_unsigned(num_digits) + 2; } size_t width() const { return size(); } template void operator()(It&& it) const { *it++ = static_cast('0'); *it++ = static_cast('x'); it = internal::format_uint<4, char_type>(it, value, num_digits); } }; public: /** Constructs a ``basic_writer`` object. */ explicit basic_writer(Range out, internal::locale_ref loc = internal::locale_ref()) : out_(out.begin()), locale_(loc) {} iterator out() const { return out_; } // Writes a value in the format // // where is written by f(it). template void write_padded(const format_specs& specs, F&& f) { // User-perceived width (in code points). unsigned width = to_unsigned(specs.width); size_t size = f.size(); // The number of code units. size_t num_code_points = width != 0 ? f.width() : size; if (width <= num_code_points) return f(reserve(size)); auto&& it = reserve(width + (size - num_code_points)); char_type fill = specs.fill[0]; std::size_t padding = width - num_code_points; if (specs.align == align::right) { it = std::fill_n(it, padding, fill); f(it); } else if (specs.align == align::center) { std::size_t left_padding = padding / 2; it = std::fill_n(it, left_padding, fill); f(it); it = std::fill_n(it, padding - left_padding, fill); } else { f(it); it = std::fill_n(it, padding, fill); } } void write(int value) { write_decimal(value); } void write(long value) { write_decimal(value); } void write(long long value) { write_decimal(value); } void write(unsigned value) { write_decimal(value); } void write(unsigned long value) { write_decimal(value); } void write(unsigned long long value) { write_decimal(value); } // Writes a formatted integer. template void write_int(T value, const Spec& spec) { internal::handle_int_type_spec(spec.type, int_writer(*this, value, spec)); } void write(double value, const format_specs& specs = format_specs()) { write_double(value, specs); } /** \rst Formats *value* using the general format for floating-point numbers (``'g'``) and writes it to the buffer. \endrst */ void write(long double value, const format_specs& specs = format_specs()) { write_double(value, specs); } // Formats a floating-point number (double or long double). template ()> void write_double(T value, const format_specs& specs); /** Writes a character to the buffer. */ void write(char value) { auto&& it = reserve(1); *it++ = value; } template ::value)> void write(Char value) { auto&& it = reserve(1); *it++ = value; } /** \rst Writes *value* to the buffer. \endrst */ void write(string_view value) { auto&& it = reserve(value.size()); it = internal::copy_str(value.begin(), value.end(), it); } void write(wstring_view value) { static_assert(std::is_same::value, ""); auto&& it = reserve(value.size()); it = std::copy(value.begin(), value.end(), it); } // Writes a formatted string. template void write(const Char* s, std::size_t size, const format_specs& specs) { write_padded(specs, str_writer{s, size}); } template void write(basic_string_view s, const format_specs& specs = format_specs()) { const Char* data = s.data(); std::size_t size = s.size(); if (specs.precision >= 0 && internal::to_unsigned(specs.precision) < size) size = internal::to_unsigned(specs.precision); write(data, size, specs); } template void write_pointer(UIntPtr value, const format_specs* specs) { int num_digits = internal::count_digits<4>(value); auto pw = pointer_writer{value, num_digits}; if (!specs) return pw(reserve(to_unsigned(num_digits) + 2)); format_specs specs_copy = *specs; if (specs_copy.align == align::none) specs_copy.align = align::right; write_padded(specs_copy, pw); } }; using writer = basic_writer>; template class arg_formatter_base { public: using char_type = typename Range::value_type; using iterator = typename Range::iterator; using format_specs = basic_format_specs; private: using writer_type = basic_writer; writer_type writer_; format_specs* specs_; struct char_writer { char_type value; size_t size() const { return 1; } size_t width() const { return 1; } template void operator()(It&& it) const { *it++ = value; } }; void write_char(char_type value) { if (specs_) writer_.write_padded(*specs_, char_writer{value}); else writer_.write(value); } void write_pointer(const void* p) { writer_.write_pointer(internal::bit_cast(p), specs_); } protected: writer_type& writer() { return writer_; } FMT_DEPRECATED format_specs* spec() { return specs_; } format_specs* specs() { return specs_; } iterator out() { return writer_.out(); } void write(bool value) { string_view sv(value ? "true" : "false"); specs_ ? writer_.write(sv, *specs_) : writer_.write(sv); } void write(const char_type* value) { if (!value) { FMT_THROW(format_error("string pointer is null")); } else { auto length = std::char_traits::length(value); basic_string_view sv(value, length); specs_ ? writer_.write(sv, *specs_) : writer_.write(sv); } } public: arg_formatter_base(Range r, format_specs* s, locale_ref loc) : writer_(r, loc), specs_(s) {} iterator operator()(monostate) { FMT_ASSERT(false, "invalid argument type"); return out(); } template ::value)> iterator operator()(T value) { if (specs_) writer_.write_int(value, *specs_); else writer_.write(value); return out(); } iterator operator()(char_type value) { internal::handle_char_specs( specs_, char_spec_handler(*this, static_cast(value))); return out(); } iterator operator()(bool value) { if (specs_ && specs_->type) return (*this)(value ? 1 : 0); write(value != 0); return out(); } template ::value)> iterator operator()(T value) { writer_.write_double(value, specs_ ? *specs_ : format_specs()); return out(); } struct char_spec_handler : ErrorHandler { arg_formatter_base& formatter; char_type value; char_spec_handler(arg_formatter_base& f, char_type val) : formatter(f), value(val) {} void on_int() { if (formatter.specs_) formatter.writer_.write_int(value, *formatter.specs_); else formatter.writer_.write(value); } void on_char() { formatter.write_char(value); } }; struct cstring_spec_handler : internal::error_handler { arg_formatter_base& formatter; const char_type* value; cstring_spec_handler(arg_formatter_base& f, const char_type* val) : formatter(f), value(val) {} void on_string() { formatter.write(value); } void on_pointer() { formatter.write_pointer(value); } }; iterator operator()(const char_type* value) { if (!specs_) return write(value), out(); internal::handle_cstring_type_spec(specs_->type, cstring_spec_handler(*this, value)); return out(); } iterator operator()(basic_string_view value) { if (specs_) { internal::check_string_type_spec(specs_->type, internal::error_handler()); writer_.write(value, *specs_); } else { writer_.write(value); } return out(); } iterator operator()(const void* value) { if (specs_) check_pointer_type_spec(specs_->type, internal::error_handler()); write_pointer(value); return out(); } }; template FMT_CONSTEXPR bool is_name_start(Char c) { return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c; } // Parses the range [begin, end) as an unsigned integer. This function assumes // that the range is non-empty and the first character is a digit. template FMT_CONSTEXPR int parse_nonnegative_int(const Char*& begin, const Char* end, ErrorHandler&& eh) { assert(begin != end && '0' <= *begin && *begin <= '9'); if (*begin == '0') { ++begin; return 0; } unsigned value = 0; // Convert to unsigned to prevent a warning. constexpr unsigned max_int = (std::numeric_limits::max)(); unsigned big = max_int / 10; do { // Check for overflow. if (value > big) { value = max_int + 1; break; } value = value * 10 + unsigned(*begin - '0'); ++begin; } while (begin != end && '0' <= *begin && *begin <= '9'); if (value > max_int) eh.on_error("number is too big"); return static_cast(value); } template class custom_formatter { private: using char_type = typename Context::char_type; basic_parse_context& parse_ctx_; Context& ctx_; public: explicit custom_formatter(basic_parse_context& parse_ctx, Context& ctx) : parse_ctx_(parse_ctx), ctx_(ctx) {} bool operator()(typename basic_format_arg::handle h) const { h.format(parse_ctx_, ctx_); return true; } template bool operator()(T) const { return false; } }; template using is_integer = bool_constant::value && !std::is_same::value && !std::is_same::value && !std::is_same::value>; template class width_checker { public: explicit FMT_CONSTEXPR width_checker(ErrorHandler& eh) : handler_(eh) {} template ::value)> FMT_CONSTEXPR unsigned long long operator()(T value) { if (is_negative(value)) handler_.on_error("negative width"); return static_cast(value); } template ::value)> FMT_CONSTEXPR unsigned long long operator()(T) { handler_.on_error("width is not integer"); return 0; } private: ErrorHandler& handler_; }; template class precision_checker { public: explicit FMT_CONSTEXPR precision_checker(ErrorHandler& eh) : handler_(eh) {} template ::value)> FMT_CONSTEXPR unsigned long long operator()(T value) { if (is_negative(value)) handler_.on_error("negative precision"); return static_cast(value); } template ::value)> FMT_CONSTEXPR unsigned long long operator()(T) { handler_.on_error("precision is not integer"); return 0; } private: ErrorHandler& handler_; }; // A format specifier handler that sets fields in basic_format_specs. template class specs_setter { public: explicit FMT_CONSTEXPR specs_setter(basic_format_specs& specs) : specs_(specs) {} FMT_CONSTEXPR specs_setter(const specs_setter& other) : specs_(other.specs_) {} FMT_CONSTEXPR void on_align(align_t align) { specs_.align = align; } FMT_CONSTEXPR void on_fill(Char fill) { specs_.fill[0] = fill; } FMT_CONSTEXPR void on_plus() { specs_.sign = sign::plus; } FMT_CONSTEXPR void on_minus() { specs_.sign = sign::minus; } FMT_CONSTEXPR void on_space() { specs_.sign = sign::space; } FMT_CONSTEXPR void on_hash() { specs_.alt = true; } FMT_CONSTEXPR void on_zero() { specs_.align = align::numeric; specs_.fill[0] = Char('0'); } FMT_CONSTEXPR void on_width(int width) { specs_.width = width; } FMT_CONSTEXPR void on_precision(int precision) { specs_.precision = precision; } FMT_CONSTEXPR void end_precision() {} FMT_CONSTEXPR void on_type(Char type) { specs_.type = static_cast(type); } protected: basic_format_specs& specs_; }; template class numeric_specs_checker { public: FMT_CONSTEXPR numeric_specs_checker(ErrorHandler& eh, internal::type arg_type) : error_handler_(eh), arg_type_(arg_type) {} FMT_CONSTEXPR void require_numeric_argument() { if (!is_arithmetic(arg_type_)) error_handler_.on_error("format specifier requires numeric argument"); } FMT_CONSTEXPR void check_sign() { require_numeric_argument(); if (is_integral(arg_type_) && arg_type_ != int_type && arg_type_ != long_long_type && arg_type_ != internal::char_type) { error_handler_.on_error("format specifier requires signed argument"); } } FMT_CONSTEXPR void check_precision() { if (is_integral(arg_type_) || arg_type_ == internal::pointer_type) error_handler_.on_error("precision not allowed for this argument type"); } private: ErrorHandler& error_handler_; internal::type arg_type_; }; // A format specifier handler that checks if specifiers are consistent with the // argument type. template class specs_checker : public Handler { public: FMT_CONSTEXPR specs_checker(const Handler& handler, internal::type arg_type) : Handler(handler), checker_(*this, arg_type) {} FMT_CONSTEXPR specs_checker(const specs_checker& other) : Handler(other), checker_(*this, other.arg_type_) {} FMT_CONSTEXPR void on_align(align_t align) { if (align == align::numeric) checker_.require_numeric_argument(); Handler::on_align(align); } FMT_CONSTEXPR void on_plus() { checker_.check_sign(); Handler::on_plus(); } FMT_CONSTEXPR void on_minus() { checker_.check_sign(); Handler::on_minus(); } FMT_CONSTEXPR void on_space() { checker_.check_sign(); Handler::on_space(); } FMT_CONSTEXPR void on_hash() { checker_.require_numeric_argument(); Handler::on_hash(); } FMT_CONSTEXPR void on_zero() { checker_.require_numeric_argument(); Handler::on_zero(); } FMT_CONSTEXPR void end_precision() { checker_.check_precision(); } private: numeric_specs_checker checker_; }; template