From 129df68a6a4dbc65a918476cd0d5b8f8c3b13fae Mon Sep 17 00:00:00 2001 From: glaszczkoldre Date: Thu, 4 Jun 2026 17:59:26 +0200 Subject: [PATCH 1/3] Resolve conflicts --- ImguiMapEditor/CMakeLists.txt | 1 - ImguiMapEditor/Domain/Tile.cpp | 1 - ImguiMapEditor/Presentation/MainWindow.h | 6 +++ .../Services/Map/MapLoadingService.cpp | 2 +- ImguiMapEditor/UI/Dialogs/EditTownsDialog.cpp | 1 + .../Properties/MapPropertiesDialog.cpp | 21 --------- ImguiMapEditor/UI/PreferencesDialog.cpp | 1 + .../UI/Widgets/TilesetGridWidget.cpp | 47 ++++--------------- 8 files changed, 17 insertions(+), 63 deletions(-) diff --git a/ImguiMapEditor/CMakeLists.txt b/ImguiMapEditor/CMakeLists.txt index b77556e..8d73d00 100644 --- a/ImguiMapEditor/CMakeLists.txt +++ b/ImguiMapEditor/CMakeLists.txt @@ -437,7 +437,6 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ext/stb ${Stb_INCLUDE_DIR} ) -) add_executable(BrushSmoke ${BRUSH_SMOKE_SOURCES} diff --git a/ImguiMapEditor/Domain/Tile.cpp b/ImguiMapEditor/Domain/Tile.cpp index 0dd7f6d..74a559f 100644 --- a/ImguiMapEditor/Domain/Tile.cpp +++ b/ImguiMapEditor/Domain/Tile.cpp @@ -54,7 +54,6 @@ Tile::~Tile() = default; void Tile::setOpaqueData(std::unique_ptr data) { opaque_data_ = std::move(data); } -} void Tile::setGround(std::unique_ptr item) { ground_ = std::move(item); diff --git a/ImguiMapEditor/Presentation/MainWindow.h b/ImguiMapEditor/Presentation/MainWindow.h index 4a97243..0ffbf1a 100644 --- a/ImguiMapEditor/Presentation/MainWindow.h +++ b/ImguiMapEditor/Presentation/MainWindow.h @@ -10,10 +10,12 @@ #include "UI/Dialogs/Properties/SpawnPropertiesDialog.h" #include "UI/Map/MapContextMenu.h" #include "UI/Map/MapPanel.h" +#include "UI/Panels/NewMapPanel.h" #include "UI/Windows/IngameBoxWindow.h" #include #include #include +#include namespace MapEditor::Rendering { class MapRenderer; @@ -153,6 +155,10 @@ class MainWindow { UI::ItemPropertiesDialog properties_dialog_; UI::SpawnPropertiesDialog spawn_properties_dialog_; UI::CreaturePropertiesDialog creature_properties_dialog_; + + // Editor-state modal dialog callbacks + std::function new_map_callback_; + std::function open_sec_callback_; }; } // namespace Presentation diff --git a/ImguiMapEditor/Services/Map/MapLoadingService.cpp b/ImguiMapEditor/Services/Map/MapLoadingService.cpp index 287f6f6..a961a48 100644 --- a/ImguiMapEditor/Services/Map/MapLoadingService.cpp +++ b/ImguiMapEditor/Services/Map/MapLoadingService.cpp @@ -15,7 +15,7 @@ namespace Services { MapLoadingService::MapLoadingService(ClientVersionRegistry &version_registry, ViewSettings &view_settings, - Brushes::BrushRegistry &brush_registry, + ::MapEditor::Brushes::BrushRegistry &brush_registry, TilesetService &tileset_service, const OtbmSettings &otbm_settings) : version_registry_(version_registry), view_settings_(view_settings), diff --git a/ImguiMapEditor/UI/Dialogs/EditTownsDialog.cpp b/ImguiMapEditor/UI/Dialogs/EditTownsDialog.cpp index 8f61a28..c3efdaa 100644 --- a/ImguiMapEditor/UI/Dialogs/EditTownsDialog.cpp +++ b/ImguiMapEditor/UI/Dialogs/EditTownsDialog.cpp @@ -1,4 +1,5 @@ #include "EditTownsDialog.h" +#include "../../Utils/StringCopy.h" #include "Application/MapTabManager.h" #include "Application/EditorSession.h" #include "Domain/MapInstance.h" diff --git a/ImguiMapEditor/UI/Dialogs/Properties/MapPropertiesDialog.cpp b/ImguiMapEditor/UI/Dialogs/Properties/MapPropertiesDialog.cpp index a422c2e..ff7096e 100644 --- a/ImguiMapEditor/UI/Dialogs/Properties/MapPropertiesDialog.cpp +++ b/ImguiMapEditor/UI/Dialogs/Properties/MapPropertiesDialog.cpp @@ -121,27 +121,6 @@ MapPropertiesDialog::Result MapPropertiesDialog::render() { return result; } -void MapPropertiesDialog::loadFromMap() { - if (!map_) - return; - - // Description - ::MapEditor::Utils::copyTruncate(description_buffer_, map_->getDescription()); - - // Dimensions - width_ = map_->getWidth(); - height_ = map_->getHeight(); - - // Version info - const auto &version = map_->getVersion(); - otbm_version_ = version.otbm_version; - client_version_ = version.client_version; - - // External files - ::MapEditor::Utils::copyTruncate(house_filename_, map_->getHouseFile()); - - ::MapEditor::Utils::copyTruncate(spawn_filename_, map_->getSpawnFile()); -} void MapPropertiesDialog::applyToMap() { if (!map_) diff --git a/ImguiMapEditor/UI/PreferencesDialog.cpp b/ImguiMapEditor/UI/PreferencesDialog.cpp index a7170b6..5527c3c 100644 --- a/ImguiMapEditor/UI/PreferencesDialog.cpp +++ b/ImguiMapEditor/UI/PreferencesDialog.cpp @@ -1,6 +1,7 @@ // Prevent GLFW from including OpenGL headers (glad provides them) #define GLFW_INCLUDE_NONE #include "PreferencesDialog.h" +#include "../Utils/StringCopy.h" #include "UI/Core/Theme.h" #include "../ext/imhotkey/imHotKey.h" #include "IO/HotkeyJsonReader.h" diff --git a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp index 5b78c5b..3050036 100644 --- a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp +++ b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp @@ -13,6 +13,10 @@ #include #include +namespace { +constexpr float PULSE_DURATION = 1.5f; +} // namespace + #include "../../Brushes/BrushController.h" #include "../../Brushes/Types/RawBrush.h" #include "../../Rendering/Core/Texture.h" @@ -97,45 +101,6 @@ void TilesetGridWidget::syncActiveBrushSelection() { } } -void TilesetGridWidget::renderBrushCard(ImVec2 cursorPos, ImVec2 size, - Rendering::Texture *tex, - bool isSelected, bool isHovered, - bool isPulsing, float pulseElapsed) { - ImDrawList *dl = ImGui::GetWindowDrawList(); - constexpr float ROUNDING = 4.0f; - constexpr float PADDING = 2.0f; - ImVec2 rectMax(cursorPos.x + size.x, cursorPos.y + size.y); - - ImU32 bgCol = ImGui::GetColorU32(ImGuiCol_FrameBg); - if (isSelected) { - bgCol = ImGui::GetColorU32(ImGuiCol_Header); - } else if (isHovered) { - bgCol = ImGui::GetColorU32(ImGuiCol_HeaderHovered); - } - dl->AddRectFilled(cursorPos, rectMax, bgCol, ROUNDING); - - if (tex) { - ImVec2 imgMin(cursorPos.x + PADDING, cursorPos.y + PADDING); - ImVec2 imgMax(rectMax.x - PADDING, rectMax.y - PADDING); - dl->AddImageRounded((void *)(intptr_t)tex->id(), imgMin, imgMax, - ImVec2(0, 0), ImVec2(1, 1), IM_COL32_WHITE, ROUNDING); - } - - if (isSelected) { - if (isPulsing && pulseElapsed < PULSE_DURATION) { - float pulse = 0.5f + 0.5f * std::sin(pulseElapsed * 8.0f); - ImU32 pulseCol = IM_COL32(static_cast(50 * (1 - pulse)), - static_cast(220 * pulse + 35), - static_cast(80 * pulse), 255); - float thickness = 2.0f + pulse * 2.0f; - dl->AddRect(cursorPos, rectMax, pulseCol, ROUNDING, 0, thickness); - } else { - dl->AddRect(cursorPos, rectMax, IM_COL32(100, 180, 255, 255), ROUNDING, - 0, 2.0f); - } - } -} - void TilesetGridWidget::render() { if (tilesetName_.empty()) { ImGui::TextDisabled(ICON_FA_BOX_OPEN " No tileset selected"); @@ -343,6 +308,9 @@ void TilesetGridWidget::renderBrushGrid() { ImGui::PushID(static_cast(i)); + ImVec2 tileSize(getIconSize(), getIconSize()); + ImVec2 cursorPos = ImGui::GetCursorScreenPos(); + const auto preview = getBrushPreview(brush); ImGui::InvisibleButton("##tile", tileSize); @@ -572,6 +540,7 @@ void TilesetGridWidget::renderBrushGrid() { ImVec2(cursorPos.x + tileSize.x, cursorPos.y + tileSize.y), IM_COL32(100, 180, 255, 255), 0, 0, 2.0f); } + } // Tooltip if (isHovered) { From fbda81744757d0d96f0fadb53f420a1cc57e132c Mon Sep 17 00:00:00 2001 From: glaszczkoldre Date: Thu, 4 Jun 2026 20:28:59 +0200 Subject: [PATCH 2/3] refactor(data): restructure asset loading and UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactored client data loading to support version-specific directories and added pulse animations to the UI. Removed obsolete sample data files. - `ImguiMapEditor/Brushes/BrushRegistry.h` — added `getBorderTemplateCount()` - `ImguiMapEditor/CMakeLists.txt` — updated copy command to use `../data` instead of `sample_data` - `ImguiMapEditor/Domain/ClientVersion.cpp` — updated `getItemMetadataPath()` to support versioned data directories - `ImguiMapEditor/Domain/ClientVersion.h` — added data directory normalization and auto-detection - `ImguiMapEditor/Services/ClientVersionRegistry.cpp` — added automatic data directory detection during registry loading - `ImguiMapEditor/Services/Map/MapLoadingService.cpp` — updated resource loading to use version-specific paths - `ImguiMapEditor/Services/Map/MapLoadingService.h` — updated `tryLoadCreatures` and `tryLoadItems` signatures - `ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp` — implemented `renderBrushCard` and added pulse animation for selected items - `ImguiMapEditor/UI/Widgets/TilesetGridWidget.h` — added `renderBrushCard` method declaration - `ImguiMapEditor/sample_data/background.jpg` — [deleted] - `ImguiMapEditor/sample_data/borders/borders.xml` — [deleted] - `ImguiMapEditor/sample_data/brushes/brushes.xml` — [deleted] - `ImguiMapEditor/sample_data/creatures/creatures.xml` — [deleted] - `ImguiMapEditor/sample_data/items/items.xml` — [deleted] - `ImguiMapEditor/sample_data/materials.xml` — [deleted] - `ImguiMapEditor/sample_data/palettes.xml` — [deleted] --- ImguiMapEditor/Brushes/BrushRegistry.h | 1 + ImguiMapEditor/CMakeLists.txt | 4 +- ImguiMapEditor/Domain/ClientVersion.cpp | 42 +- ImguiMapEditor/Domain/ClientVersion.h | 19 +- .../Services/ClientVersionRegistry.cpp | 12 + .../Services/Map/MapLoadingService.cpp | 101 +- .../Services/Map/MapLoadingService.h | 6 +- .../UI/Widgets/TilesetGridWidget.cpp | 160 +- ImguiMapEditor/UI/Widgets/TilesetGridWidget.h | 5 + ImguiMapEditor/sample_data/background.jpg | Bin 51700 -> 0 bytes .../sample_data/borders/borders.xml | 2053 - .../sample_data/brushes/brushes.xml | 9159 ---- .../sample_data/creatures/creatures.xml | 673 - ImguiMapEditor/sample_data/items/items.xml | 36295 ---------------- ImguiMapEditor/sample_data/materials.xml | 31 - ImguiMapEditor/sample_data/palettes.xml | 95 - 16 files changed, 244 insertions(+), 48412 deletions(-) delete mode 100644 ImguiMapEditor/sample_data/background.jpg delete mode 100644 ImguiMapEditor/sample_data/borders/borders.xml delete mode 100644 ImguiMapEditor/sample_data/brushes/brushes.xml delete mode 100644 ImguiMapEditor/sample_data/creatures/creatures.xml delete mode 100644 ImguiMapEditor/sample_data/items/items.xml delete mode 100644 ImguiMapEditor/sample_data/materials.xml delete mode 100644 ImguiMapEditor/sample_data/palettes.xml diff --git a/ImguiMapEditor/Brushes/BrushRegistry.h b/ImguiMapEditor/Brushes/BrushRegistry.h index b98c832..75bcf07 100644 --- a/ImguiMapEditor/Brushes/BrushRegistry.h +++ b/ImguiMapEditor/Brushes/BrushRegistry.h @@ -82,6 +82,7 @@ class BrushRegistry { void registerBorderTemplate(uint32_t id, BorderBlock border); const BorderBlock *getBorderTemplate(uint32_t id) const; const BorderItemMetadata *getBorderItemMetadata(uint16_t itemId) const; + size_t getBorderTemplateCount() const { return border_templates_.size(); } /** * Clear all brushes from the registry. diff --git a/ImguiMapEditor/CMakeLists.txt b/ImguiMapEditor/CMakeLists.txt index 8d73d00..936b3e4 100644 --- a/ImguiMapEditor/CMakeLists.txt +++ b/ImguiMapEditor/CMakeLists.txt @@ -536,9 +536,9 @@ add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/clients_templates.json" "$/data/clients_templates.json" - # Copy entire sample_data directory tree (includes tilesets/, creatures/, items/, etc.) + # Copy entire data directory tree (includes version folders, tilesets/, creatures/, items/, etc.) COMMAND ${CMAKE_COMMAND} -E copy_directory - "${CMAKE_CURRENT_SOURCE_DIR}/sample_data" + "${CMAKE_CURRENT_SOURCE_DIR}/../data" "$/data" # Copy shaders COMMAND ${CMAKE_COMMAND} -E copy_directory diff --git a/ImguiMapEditor/Domain/ClientVersion.cpp b/ImguiMapEditor/Domain/ClientVersion.cpp index 0d5dea4..5e6620f 100644 --- a/ImguiMapEditor/Domain/ClientVersion.cpp +++ b/ImguiMapEditor/Domain/ClientVersion.cpp @@ -12,21 +12,41 @@ ClientVersion::ClientVersion(uint32_t index, uint32_t version, const std::string } std::filesystem::path ClientVersion::getItemMetadataPath() const { + // 1. User-provided path from preferences (explicit override) if (!custom_items_db_path_.empty()) { return custom_items_db_path_; } - if (client_path_.empty()) { - return {}; - } - switch (data_source_) { - case ItemDataSource::SRV: - return client_path_ / "items.srv"; - case ItemDataSource::OTB: - return client_path_ / "items.otb"; - case ItemDataSource::DAT: - default: - return {}; + + // 2. Default: data/[dataDirectory]/items.otb (or items.srv) + if (!data_directory_.empty()) { + // Handle both "1098" and "data/1098" formats + auto data_dir = std::filesystem::current_path() / "data" / data_directory_; + if (!std::filesystem::exists(data_dir)) { + // Try stripping "data/" prefix if present + std::filesystem::path dir_path(data_directory_); + if (dir_path.has_parent_path() && dir_path.parent_path().filename() == "data") { + data_dir = std::filesystem::current_path() / "data" / dir_path.filename(); + } + } + switch (data_source_) { + case ItemDataSource::SRV: { + auto srv = data_dir / "items.srv"; + if (std::filesystem::exists(srv)) return srv; + break; + } + case ItemDataSource::OTB: { + auto otb = data_dir / "items.otb"; + if (std::filesystem::exists(otb)) return otb; + break; + } + case ItemDataSource::DAT: + default: + break; + } } + + // 3. No fallback — client_path_ is not used for items.otb + return {}; } bool ClientVersion::hasValidPaths() const { diff --git a/ImguiMapEditor/Domain/ClientVersion.h b/ImguiMapEditor/Domain/ClientVersion.h index 1ed4a00..e00e2c4 100644 --- a/ImguiMapEditor/Domain/ClientVersion.h +++ b/ImguiMapEditor/Domain/ClientVersion.h @@ -113,7 +113,24 @@ class ClientVersion { // Data directory and description const std::string &getDataDirectory() const { return data_directory_; } - void setDataDirectory(const std::string &dir) { data_directory_ = dir; } + void setDataDirectory(const std::string &dir) { + // Normalize: strip "data/" or "data\\" prefix if user typed it + std::filesystem::path p(dir); + if (p.has_parent_path() && p.parent_path().filename() == "data") { + data_directory_ = p.filename().string(); + } else { + data_directory_ = dir; + } + } + + // Auto-detect data directory: checks if data/[version]/ exists + void autoDetectDataDirectory() { + auto candidate = std::filesystem::current_path() / "data" / std::to_string(version_); + if (std::filesystem::exists(candidate)) { + data_directory_ = std::to_string(version_); + } + } + const std::string &getDescription() const { return description_; } void setDescription(const std::string &desc) { description_ = desc; } diff --git a/ImguiMapEditor/Services/ClientVersionRegistry.cpp b/ImguiMapEditor/Services/ClientVersionRegistry.cpp index 5c1fc7a..8775fde 100644 --- a/ImguiMapEditor/Services/ClientVersionRegistry.cpp +++ b/ImguiMapEditor/Services/ClientVersionRegistry.cpp @@ -35,6 +35,18 @@ bool ClientVersionRegistry::loadDefaults(const ConfigService &config) { setNextIndex(versions_.rbegin()->first); } spdlog::info("Loaded {} saved clients from: {}", versions_.size(), path.string()); + + // Auto-detect data directories for versions without one set + for (auto &[index, cv] : versions_) { + if (cv.getDataDirectory().empty()) { + cv.autoDetectDataDirectory(); + if (!cv.getDataDirectory().empty()) { + spdlog::info("Auto-detected data directory for '{}': {}", + cv.getName(), cv.getDataDirectory()); + } + } + } + return true; } } diff --git a/ImguiMapEditor/Services/Map/MapLoadingService.cpp b/ImguiMapEditor/Services/Map/MapLoadingService.cpp index a961a48..5445f0d 100644 --- a/ImguiMapEditor/Services/Map/MapLoadingService.cpp +++ b/ImguiMapEditor/Services/Map/MapLoadingService.cpp @@ -567,11 +567,21 @@ bool MapLoadingService::loadClientData( ? pending_path : pending_path.parent_path(); - if (!tryLoadCreatures(map_dir, client_path)) { + // Compute version data path for creatures.xml and items.xml lookup + std::string data_dir_for_resources = version_info->getDataDirectory(); + std::filesystem::path version_data_path; + if (!data_dir_for_resources.empty()) { + auto candidate = std::filesystem::current_path() / "data" / data_dir_for_resources; + if (std::filesystem::exists(candidate)) { + version_data_path = candidate; + } + } + + if (!tryLoadCreatures(map_dir, client_path, version_data_path)) { spdlog::warn("No creature data loaded. Spawns may look incorrect."); } - if (!tryLoadItems(map_dir, client_path)) { + if (!tryLoadItems(map_dir, client_path, version_data_path)) { spdlog::warn("No items.xml loaded. Item names may be missing."); } @@ -595,21 +605,46 @@ bool MapLoadingService::loadClientData( } } - // Use injected TilesetService instead of creating locally - // Always use the application's data folder for tilesets and palettes, - // NOT the map directory - these are app resources, not per-map resources - std::filesystem::path app_data_path = - std::filesystem::current_path() / "data"; + // Use version-specific data directory for tilesets, palettes, brushes, etc. + // dataDirectory should be just the folder name (e.g., "1098"), not a path. + // Handle both "1098" and "data/1098" gracefully. + std::string data_dir = version_info->getDataDirectory(); + std::filesystem::path app_data_path; - bool tilesets_loaded = tileset_service_.loadMaterials(app_data_path); - if (!tilesets_loaded) { - spdlog::warn("materials.xml could not be loaded. Falling back to direct tileset/palette loading."); - tilesets_loaded = tileset_service_.loadTilesets(app_data_path); - if (!tilesets_loaded) { - spdlog::warn("No tilesets found. The palette will be empty."); + if (!data_dir.empty()) { + auto candidate = std::filesystem::current_path() / "data" / data_dir; + if (std::filesystem::exists(candidate)) { + app_data_path = candidate; + } else { + // Maybe data_dir already contains "data/" prefix — try stripping it + std::filesystem::path dir_path(data_dir); + if (dir_path.has_parent_path() && dir_path.parent_path().filename() == "data") { + auto stripped = std::filesystem::current_path() / "data" / dir_path.filename(); + if (std::filesystem::exists(stripped)) { + app_data_path = stripped; + spdlog::warn("Data directory '{}' had 'data/' prefix, stripped to '{}'", + data_dir, dir_path.filename().string()); + } + } } - if (!tileset_service_.loadPalettes(app_data_path)) { - spdlog::warn("No palettes loaded. Ribbon palette buttons will be empty."); + } + + if (app_data_path.empty() || !std::filesystem::exists(app_data_path)) { + spdlog::warn("Data directory '{}' not found. Skipping materials/tilesets/palettes loading.", + data_dir); + } else { + spdlog::info("Loading materials from: {}", app_data_path.string()); + bool tilesets_loaded = tileset_service_.loadMaterials(app_data_path); + if (!tilesets_loaded) { + spdlog::warn("materials.xml not found in '{}'. Falling back to direct loading.", + app_data_path.string()); + tilesets_loaded = tileset_service_.loadTilesets(app_data_path); + if (!tilesets_loaded) { + spdlog::warn("No tilesets found in '{}'.", app_data_path.string()); + } + if (!tileset_service_.loadPalettes(app_data_path)) { + spdlog::warn("No palettes found in '{}'.", app_data_path.string()); + } } } @@ -676,7 +711,8 @@ Domain::Position MapLoadingService::findCameraCenter() const { bool MapLoadingService::tryLoadCreatures( const std::filesystem::path &map_dir, - const std::filesystem::path &client_path) { + const std::filesystem::path &client_path, + const std::filesystem::path &version_data_path) { const auto load = [this](const std::filesystem::path &path) { return client_data_service_->loadCreatureData(path); }; @@ -684,12 +720,24 @@ bool MapLoadingService::tryLoadCreatures( if (tryLoadResource("creatures.xml", map_dir, client_path, load)) { return true; } - return tryLoadResource(std::filesystem::path("creatures") / "creatures.xml", - map_dir, client_path, load); + if (tryLoadResource(std::filesystem::path("creatures") / "creatures.xml", + map_dir, client_path, load)) { + return true; + } + // Try version-specific data folder + if (!version_data_path.empty()) { + auto version_file = version_data_path / "creatures" / "creatures.xml"; + if (std::filesystem::exists(version_file) && load(version_file)) { + spdlog::info("Loaded creatures.xml from version data folder"); + return true; + } + } + return false; } bool MapLoadingService::tryLoadItems(const std::filesystem::path &map_dir, - const std::filesystem::path &client_path) { + const std::filesystem::path &client_path, + const std::filesystem::path &version_data_path) { const auto load = [this](const std::filesystem::path &path) { return client_data_service_->loadItemData(path); }; @@ -697,8 +745,19 @@ bool MapLoadingService::tryLoadItems(const std::filesystem::path &map_dir, if (tryLoadResource("items.xml", map_dir, client_path, load)) { return true; } - return tryLoadResource(std::filesystem::path("items") / "items.xml", map_dir, - client_path, load); + if (tryLoadResource(std::filesystem::path("items") / "items.xml", map_dir, + client_path, load)) { + return true; + } + // Try version-specific data folder + if (!version_data_path.empty()) { + auto version_file = version_data_path / "items" / "items.xml"; + if (std::filesystem::exists(version_file) && load(version_file)) { + spdlog::info("Loaded items.xml from version data folder"); + return true; + } + } + return false; } void MapLoadingService::loadWaypoints(const std::filesystem::path &otbm_path, diff --git a/ImguiMapEditor/Services/Map/MapLoadingService.h b/ImguiMapEditor/Services/Map/MapLoadingService.h index 87466ab..0360180 100644 --- a/ImguiMapEditor/Services/Map/MapLoadingService.h +++ b/ImguiMapEditor/Services/Map/MapLoadingService.h @@ -160,9 +160,11 @@ class MapLoadingService { Services::ClientDataService &client_data); bool tryLoadCreatures(const std::filesystem::path &map_dir, - const std::filesystem::path &client_path); + const std::filesystem::path &client_path, + const std::filesystem::path &version_data_path); bool tryLoadItems(const std::filesystem::path &map_dir, - const std::filesystem::path &client_path); + const std::filesystem::path &client_path, + const std::filesystem::path &version_data_path); void loadWaypoints(const std::filesystem::path &otbm_path, Domain::ChunkedMap &map); diff --git a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp index 3050036..4eebc6d 100644 --- a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp +++ b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp @@ -101,6 +101,66 @@ void TilesetGridWidget::syncActiveBrushSelection() { } } +void TilesetGridWidget::renderBrushCard(ImVec2 cursorPos, ImVec2 size, + const Utils::ResolvedBrushPreview &preview, + bool isSelected, bool isHovered, + bool isPulsing, float pulseElapsed) { + ImDrawList *dl = ImGui::GetWindowDrawList(); + constexpr float CARD_ROUNDING = 4.0f; + constexpr float IMG_ROUNDING = 3.0f; + constexpr float IMG_PADDING = 2.0f; + ImVec2 rectMax(cursorPos.x + size.x, cursorPos.y + size.y); + + // Rounded card background using ImGui theme colors + ImU32 bgCol = ImGui::GetColorU32(ImGuiCol_FrameBg); + if (isSelected) { + bgCol = ImGui::GetColorU32(ImGuiCol_Header); + } else if (isHovered) { + bgCol = ImGui::GetColorU32(ImGuiCol_HeaderHovered); + } + dl->AddRectFilled(cursorPos, rectMax, bgCol, CARD_ROUNDING); + dl->AddRect(cursorPos, rectMax, ImGui::GetColorU32(ImGuiCol_Border), CARD_ROUNDING); + + // Rounded image inside card with padding + if (preview.texture && preview.texture->isValid()) { + ImVec2 imgMin(cursorPos.x + IMG_PADDING, cursorPos.y + IMG_PADDING); + ImVec2 imgMax(rectMax.x - IMG_PADDING, rectMax.y - IMG_PADDING); + dl->AddImageRounded( + reinterpret_cast(static_cast(preview.texture->id())), + imgMin, imgMax, ImVec2(0, 0), ImVec2(1, 1), IM_COL32_WHITE, IMG_ROUNDING); + } else if (!preview.fallbackLabel.empty()) { + // Fallback text label — truncate to fit within card + std::string label = preview.fallbackLabel; + constexpr float MAX_TEXT_WIDTH = 28.0f; // 32 - 2*padding + ImVec2 textSize = ImGui::CalcTextSize(label.c_str()); + if (textSize.x > MAX_TEXT_WIDTH) { + while (label.size() > 1 && ImGui::CalcTextSize((label + "...").c_str()).x > MAX_TEXT_WIDTH) { + label.pop_back(); + } + label += "..."; + textSize = ImGui::CalcTextSize(label.c_str()); + } + ImVec2 textPos{cursorPos.x + (size.x - textSize.x) * 0.5f, + cursorPos.y + (size.y - textSize.y) * 0.5f}; + dl->AddText(textPos, IM_COL32(220, 220, 220, 255), label.c_str()); + } + + // Selection / pulse border + if (isSelected) { + if (isPulsing && pulseElapsed < PULSE_DURATION) { + float pulse = 0.5f + 0.5f * std::sin(pulseElapsed * 8.0f); + ImU32 pulseCol = IM_COL32(static_cast(50 * (1 - pulse)), + static_cast(220 * pulse + 35), + static_cast(80 * pulse), 255); + float thickness = 2.0f + pulse * 2.0f; + dl->AddRect(cursorPos, rectMax, pulseCol, CARD_ROUNDING, 0, thickness); + } else { + dl->AddRect(cursorPos, rectMax, IM_COL32(100, 180, 255, 255), CARD_ROUNDING, + 0, 2.0f); + } + } +} + void TilesetGridWidget::render() { if (tilesetName_.empty()) { ImGui::TextDisabled(ICON_FA_BOX_OPEN " No tileset selected"); @@ -323,24 +383,24 @@ void TilesetGridWidget::renderBrushGrid() { selectedBrush_ == brush || (brushController_ && brushController_->getCurrentBrush() == brush); - // Background - ImU32 bgColor = - isSelected ? IM_COL32(60, 100, 160, 255) - : (isHovered ? IM_COL32(80, 80, 80, 255) - : IM_COL32(40, 40, 40, 255)); - dl->AddRectFilled( - cursorPos, ImVec2(cursorPos.x + tileSize.x, cursorPos.y + tileSize.y), - bgColor); - - Utils::RenderBrushPreviewTile(dl, cursorPos, tileSize, preview); - - if (isSelected) { - dl->AddRect( - cursorPos, - ImVec2(cursorPos.x + tileSize.x, cursorPos.y + tileSize.y), - IM_COL32(100, 180, 255, 255), 0, 0, 2.0f); + bool isPulsing = isSelected && !pulseBrushName_.empty() && + brush->getName() == pulseBrushName_; + float pulseElapsed = 0.0f; + if (isPulsing) { + float currentTime = ImGui::GetTime(); + if (pulseStartTime_ < 0) + pulseStartTime_ = currentTime; + pulseElapsed = currentTime - pulseStartTime_; + if (pulseElapsed >= PULSE_DURATION) { + pulseBrushName_.clear(); + pulseStartTime_ = -1.0f; + isPulsing = false; + } } + renderBrushCard(cursorPos, tileSize, preview, isSelected, isHovered, + isPulsing, pulseElapsed); + // Tooltip if (isHovered) { ImGui::BeginTooltip(); @@ -486,61 +546,23 @@ void TilesetGridWidget::renderBrushGrid() { ImDrawList *dl = ImGui::GetWindowDrawList(); - // Background - ImU32 bgColor = IM_COL32(40, 40, 40, 255); - if (isSelected) { - bgColor = IM_COL32(60, 100, 160, 255); - } else if (isHovered) { - bgColor = IM_COL32(80, 80, 80, 255); - } - dl->AddRectFilled( - cursorPos, ImVec2(cursorPos.x + tileSize.x, cursorPos.y + tileSize.y), - bgColor); - - Utils::RenderBrushPreviewTile(dl, cursorPos, tileSize, preview); - - // Selection border (with optional pulse animation) - if (isSelected) { - bool isPulsing = - (pulseBrush_ && brush == pulseBrush_) || - (!pulseBrush_ && !pulseBrushName_.empty() && - brush->getName() == pulseBrushName_); - - if (isPulsing) { - float currentTime = ImGui::GetTime(); - if (pulseStartTime_ < 0) { - pulseStartTime_ = currentTime; - } - - float elapsed = currentTime - pulseStartTime_; - if (elapsed < PULSE_DURATION) { - // Pulsing green border - float pulse = 0.5f + 0.5f * std::sin(elapsed * 8.0f); - ImU32 pulseColor = IM_COL32(static_cast(50 * (1 - pulse)), - static_cast(220 * pulse + 35), - static_cast(80 * pulse), 255); - float thickness = 2.0f + pulse * 2.0f; - dl->AddRect( - cursorPos, - ImVec2(cursorPos.x + tileSize.x, cursorPos.y + tileSize.y), - pulseColor, 0, 0, thickness); - } else { - // Pulse ended - clear state and show normal border - pulseBrush_ = nullptr; - pulseBrushName_.clear(); - pulseStartTime_ = -1.0f; - dl->AddRect( - cursorPos, - ImVec2(cursorPos.x + tileSize.x, cursorPos.y + tileSize.y), - IM_COL32(100, 180, 255, 255), 0, 0, 2.0f); - } - } else { - dl->AddRect( - cursorPos, - ImVec2(cursorPos.x + tileSize.x, cursorPos.y + tileSize.y), - IM_COL32(100, 180, 255, 255), 0, 0, 2.0f); + // Render card with pulse animation support + bool isPulsing = isSelected && !pulseBrushName_.empty() && + brush->getName() == pulseBrushName_; + float pulseElapsed = 0.0f; + if (isPulsing) { + float currentTime = ImGui::GetTime(); + if (pulseStartTime_ < 0) + pulseStartTime_ = currentTime; + pulseElapsed = currentTime - pulseStartTime_; + if (pulseElapsed >= PULSE_DURATION) { + pulseBrushName_.clear(); + pulseStartTime_ = -1.0f; + isPulsing = false; } } + renderBrushCard(cursorPos, tileSize, preview, isSelected, isHovered, + isPulsing, pulseElapsed); // Tooltip if (isHovered) { diff --git a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.h b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.h index f384d3c..31979ba 100644 --- a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.h +++ b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.h @@ -201,6 +201,11 @@ class TilesetGridWidget { [[nodiscard]] Utils::ResolvedBrushPreview getBrushPreview(const Brushes::IBrush *brush) const; + + void renderBrushCard(ImVec2 cursorPos, ImVec2 size, + const Utils::ResolvedBrushPreview &preview, + bool isSelected, bool isHovered, + bool isPulsing = false, float pulseElapsed = 0.0f); // Services (non-owning) Services::ClientDataService *clientData_ = nullptr; Services::SpriteManager *spriteManager_ = nullptr; diff --git a/ImguiMapEditor/sample_data/background.jpg b/ImguiMapEditor/sample_data/background.jpg deleted file mode 100644 index 47bafe443d2e4196f1e5930e190f0eb41143f4c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51700 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 u)5>8;z{2oPe_AM@5QZ>G-P - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ImguiMapEditor/sample_data/brushes/brushes.xml b/ImguiMapEditor/sample_data/brushes/brushes.xml deleted file mode 100644 index 34eb7dd..0000000 --- a/ImguiMapEditor/sample_data/brushes/brushes.xml +++ /dev/null @@ -1,9159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- Handles for the 8 different specific cases which might occur with icy earth/stone earth borders -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- Handles for the 8 different specific cases which might occur with icy earth/stone earth borders -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
- - -
- - -
- - - - - - - -
- - -
- - -
-
- - - -
- - -
- - -
- - -
- - -
- - -
- - -
-
- - - -
- - - - - -
- - -
- - -
- - - - - -
- - -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
- - -
- - -
- - -
- - -
-
- - - -
- - -
- - -
- - -
- - -
- - -
- - -
-
- - - -
- - - -
- - - -
- - -
- - - -
- - - -
- - -
-
- - - -
- - -
- - -
- - -
- - -
- - -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/ImguiMapEditor/sample_data/creatures/creatures.xml b/ImguiMapEditor/sample_data/creatures/creatures.xml deleted file mode 100644 index 72b9409..0000000 --- a/ImguiMapEditor/sample_data/creatures/creatures.xml +++ /dev/null @@ -1,673 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ImguiMapEditor/sample_data/items/items.xml b/ImguiMapEditor/sample_data/items/items.xml deleted file mode 100644 index 2be9e66..0000000 --- a/ImguiMapEditor/sample_data/items/items.xml +++ /dev/null @@ -1,36295 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ImguiMapEditor/sample_data/materials.xml b/ImguiMapEditor/sample_data/materials.xml deleted file mode 100644 index e3303fe..0000000 --- a/ImguiMapEditor/sample_data/materials.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ImguiMapEditor/sample_data/palettes.xml b/ImguiMapEditor/sample_data/palettes.xml deleted file mode 100644 index cd1986a..0000000 --- a/ImguiMapEditor/sample_data/palettes.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 6dc106bef7742166db665dee4cab7d58978a3c9b Mon Sep 17 00:00:00 2001 From: glaszczkoldre Date: Thu, 4 Jun 2026 20:51:44 +0200 Subject: [PATCH 3/3] refactor(data/ui): consolidate data path resolution and optimize UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consolidated version-specific data path resolution logic into a central `resolveDataPath` helper and refactored TilesetGridWidget pulse animation logic for improved maintainability. Updated build system to conditionally handle data directory copying to prevent missing directory errors. - `ImguiMapEditor/CMakeLists.txt` — replaced absolute directory copy with a conditional `EXISTS` check for the data directory - `ImguiMapEditor/Domain/ClientVersion.cpp` — delegated path resolution to `resolveDataPath` - `ImguiMapEditor/Domain/ClientVersion.h` — added `resolveDataPath` helper method to encapsulate path resolution logic - `ImguiMapEditor/Services/Map/MapLoadingService.cpp` — utilized `resolveDataPath` to simplify resource loading paths - `ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp` — extracted pulse animation state to `computePulseState`, optimized label truncation - `ImguiMapEditor/UI/Widgets/TilesetGridWidget.h` — declared `computePulseState` helper --- ImguiMapEditor/CMakeLists.txt | 17 +++-- ImguiMapEditor/Domain/ClientVersion.cpp | 12 +--- ImguiMapEditor/Domain/ClientVersion.h | 22 ++++++- .../Services/Map/MapLoadingService.cpp | 54 ++++------------ .../UI/Widgets/TilesetGridWidget.cpp | 63 +++++++++---------- ImguiMapEditor/UI/Widgets/TilesetGridWidget.h | 3 + 6 files changed, 81 insertions(+), 90 deletions(-) diff --git a/ImguiMapEditor/CMakeLists.txt b/ImguiMapEditor/CMakeLists.txt index 936b3e4..ac89685 100644 --- a/ImguiMapEditor/CMakeLists.txt +++ b/ImguiMapEditor/CMakeLists.txt @@ -536,10 +536,6 @@ add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/clients_templates.json" "$/data/clients_templates.json" - # Copy entire data directory tree (includes version folders, tilesets/, creatures/, items/, etc.) - COMMAND ${CMAKE_COMMAND} -E copy_directory - "${CMAKE_CURRENT_SOURCE_DIR}/../data" - "$/data" # Copy shaders COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders" @@ -551,6 +547,19 @@ add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMENT "Copying data files..." ) +# Copy version-specific data directory (guarded — only if it exists) +set(TME_DATA_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../data") +if(EXISTS "${TME_DATA_SOURCE}") + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + "${TME_DATA_SOURCE}" + "$/data" + COMMENT "Copying version data folders..." + ) +else() + message(WARNING "Data directory not found at ${TME_DATA_SOURCE} — version-specific data will not be copied to build output") +endif() + # Installation install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin diff --git a/ImguiMapEditor/Domain/ClientVersion.cpp b/ImguiMapEditor/Domain/ClientVersion.cpp index 5e6620f..b8455f6 100644 --- a/ImguiMapEditor/Domain/ClientVersion.cpp +++ b/ImguiMapEditor/Domain/ClientVersion.cpp @@ -18,16 +18,8 @@ std::filesystem::path ClientVersion::getItemMetadataPath() const { } // 2. Default: data/[dataDirectory]/items.otb (or items.srv) - if (!data_directory_.empty()) { - // Handle both "1098" and "data/1098" formats - auto data_dir = std::filesystem::current_path() / "data" / data_directory_; - if (!std::filesystem::exists(data_dir)) { - // Try stripping "data/" prefix if present - std::filesystem::path dir_path(data_directory_); - if (dir_path.has_parent_path() && dir_path.parent_path().filename() == "data") { - data_dir = std::filesystem::current_path() / "data" / dir_path.filename(); - } - } + auto data_dir = resolveDataPath(); + if (!data_dir.empty()) { switch (data_source_) { case ItemDataSource::SRV: { auto srv = data_dir / "items.srv"; diff --git a/ImguiMapEditor/Domain/ClientVersion.h b/ImguiMapEditor/Domain/ClientVersion.h index e00e2c4..3ee5df3 100644 --- a/ImguiMapEditor/Domain/ClientVersion.h +++ b/ImguiMapEditor/Domain/ClientVersion.h @@ -112,9 +112,13 @@ class ClientVersion { void setDefault(bool is_default) { is_default_ = is_default; } // Data directory and description + // setDataDirectory normalizes paths like "data/1098" or absolute paths ending + // in "/data/" to just the final segment (e.g., "1098"). + // autoDetectDataDirectory() and MapLoadingService both depend on + // std::filesystem::current_path() to resolve data/[version]/ at runtime. const std::string &getDataDirectory() const { return data_directory_; } void setDataDirectory(const std::string &dir) { - // Normalize: strip "data/" or "data\\" prefix if user typed it + // Normalize: reduce .../data/ to just std::filesystem::path p(dir); if (p.has_parent_path() && p.parent_path().filename() == "data") { data_directory_ = p.filename().string(); @@ -123,6 +127,22 @@ class ClientVersion { } } + // Resolve the version-specific data directory to an absolute path. + // Returns empty path if data_directory_ is not set or doesn't exist. + // Handles both "1098" and "data/1098" formats. + std::filesystem::path resolveDataPath() const { + if (data_directory_.empty()) return {}; + auto candidate = std::filesystem::current_path() / "data" / data_directory_; + if (std::filesystem::exists(candidate)) return candidate; + // Try stripping "data/" prefix if present + std::filesystem::path dir_path(data_directory_); + if (dir_path.has_parent_path() && dir_path.parent_path().filename() == "data") { + auto stripped = std::filesystem::current_path() / "data" / dir_path.filename(); + if (std::filesystem::exists(stripped)) return stripped; + } + return {}; + } + // Auto-detect data directory: checks if data/[version]/ exists void autoDetectDataDirectory() { auto candidate = std::filesystem::current_path() / "data" / std::to_string(version_); diff --git a/ImguiMapEditor/Services/Map/MapLoadingService.cpp b/ImguiMapEditor/Services/Map/MapLoadingService.cpp index 5445f0d..82a92da 100644 --- a/ImguiMapEditor/Services/Map/MapLoadingService.cpp +++ b/ImguiMapEditor/Services/Map/MapLoadingService.cpp @@ -567,15 +567,8 @@ bool MapLoadingService::loadClientData( ? pending_path : pending_path.parent_path(); - // Compute version data path for creatures.xml and items.xml lookup - std::string data_dir_for_resources = version_info->getDataDirectory(); - std::filesystem::path version_data_path; - if (!data_dir_for_resources.empty()) { - auto candidate = std::filesystem::current_path() / "data" / data_dir_for_resources; - if (std::filesystem::exists(candidate)) { - version_data_path = candidate; - } - } + // Resolve version data path once — used for creatures, items, tilesets, palettes + const std::filesystem::path version_data_path = version_info->resolveDataPath(); if (!tryLoadCreatures(map_dir, client_path, version_data_path)) { spdlog::warn("No creature data loaded. Spawns may look incorrect."); @@ -605,45 +598,22 @@ bool MapLoadingService::loadClientData( } } - // Use version-specific data directory for tilesets, palettes, brushes, etc. - // dataDirectory should be just the folder name (e.g., "1098"), not a path. - // Handle both "1098" and "data/1098" gracefully. - std::string data_dir = version_info->getDataDirectory(); - std::filesystem::path app_data_path; - - if (!data_dir.empty()) { - auto candidate = std::filesystem::current_path() / "data" / data_dir; - if (std::filesystem::exists(candidate)) { - app_data_path = candidate; - } else { - // Maybe data_dir already contains "data/" prefix — try stripping it - std::filesystem::path dir_path(data_dir); - if (dir_path.has_parent_path() && dir_path.parent_path().filename() == "data") { - auto stripped = std::filesystem::current_path() / "data" / dir_path.filename(); - if (std::filesystem::exists(stripped)) { - app_data_path = stripped; - spdlog::warn("Data directory '{}' had 'data/' prefix, stripped to '{}'", - data_dir, dir_path.filename().string()); - } - } - } - } - - if (app_data_path.empty() || !std::filesystem::exists(app_data_path)) { + // Load tilesets, palettes, brushes from version data directory + if (version_data_path.empty()) { spdlog::warn("Data directory '{}' not found. Skipping materials/tilesets/palettes loading.", - data_dir); + version_info->getDataDirectory()); } else { - spdlog::info("Loading materials from: {}", app_data_path.string()); - bool tilesets_loaded = tileset_service_.loadMaterials(app_data_path); + spdlog::info("Loading materials from: {}", version_data_path.string()); + bool tilesets_loaded = tileset_service_.loadMaterials(version_data_path); if (!tilesets_loaded) { spdlog::warn("materials.xml not found in '{}'. Falling back to direct loading.", - app_data_path.string()); - tilesets_loaded = tileset_service_.loadTilesets(app_data_path); + version_data_path.string()); + tilesets_loaded = tileset_service_.loadTilesets(version_data_path); if (!tilesets_loaded) { - spdlog::warn("No tilesets found in '{}'.", app_data_path.string()); + spdlog::warn("No tilesets found in '{}'.", version_data_path.string()); } - if (!tileset_service_.loadPalettes(app_data_path)) { - spdlog::warn("No palettes found in '{}'.", app_data_path.string()); + if (!tileset_service_.loadPalettes(version_data_path)) { + spdlog::warn("No palettes found in '{}'.", version_data_path.string()); } } } diff --git a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp index 4eebc6d..ea505a7 100644 --- a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp +++ b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.cpp @@ -13,10 +13,6 @@ #include #include -namespace { -constexpr float PULSE_DURATION = 1.5f; -} // namespace - #include "../../Brushes/BrushController.h" #include "../../Brushes/Types/RawBrush.h" #include "../../Rendering/Core/Texture.h" @@ -70,6 +66,25 @@ TilesetGridWidget::getBrushPreview(const Brushes::IBrush *brush) const { return Utils::ResolveBrushPreview(brush, clientData_, spriteManager_); } +std::pair TilesetGridWidget::computePulseState(const Brushes::IBrush *brush) { + bool isPulsing = pulseBrush_ && brush == pulseBrush_; + if (!isPulsing && !pulseBrushName_.empty()) { + isPulsing = brush->getName() == pulseBrushName_; + } + if (!isPulsing) return {false, 0.0f}; + + float currentTime = ImGui::GetTime(); + if (pulseStartTime_ < 0) pulseStartTime_ = currentTime; + float elapsed = currentTime - pulseStartTime_; + if (elapsed >= PULSE_DURATION) { + pulseBrush_ = nullptr; + pulseBrushName_.clear(); + pulseStartTime_ = -1.0f; + return {false, 0.0f}; + } + return {true, elapsed}; +} + void TilesetGridWidget::syncActiveBrushSelection() { if (!brushController_) { return; @@ -133,7 +148,15 @@ void TilesetGridWidget::renderBrushCard(ImVec2 cursorPos, ImVec2 size, std::string label = preview.fallbackLabel; constexpr float MAX_TEXT_WIDTH = 28.0f; // 32 - 2*padding ImVec2 textSize = ImGui::CalcTextSize(label.c_str()); - if (textSize.x > MAX_TEXT_WIDTH) { + if (textSize.x > MAX_TEXT_WIDTH && !label.empty()) { + // Estimate truncation length to minimize CalcTextSize calls + float avgCharWidth = textSize.x / static_cast(label.size()); + size_t estimated = static_cast(MAX_TEXT_WIDTH / avgCharWidth); + if (estimated > 3) { + label = label.substr(0, estimated - 3); + } else { + label = label.substr(0, 1); + } while (label.size() > 1 && ImGui::CalcTextSize((label + "...").c_str()).x > MAX_TEXT_WIDTH) { label.pop_back(); } @@ -383,20 +406,7 @@ void TilesetGridWidget::renderBrushGrid() { selectedBrush_ == brush || (brushController_ && brushController_->getCurrentBrush() == brush); - bool isPulsing = isSelected && !pulseBrushName_.empty() && - brush->getName() == pulseBrushName_; - float pulseElapsed = 0.0f; - if (isPulsing) { - float currentTime = ImGui::GetTime(); - if (pulseStartTime_ < 0) - pulseStartTime_ = currentTime; - pulseElapsed = currentTime - pulseStartTime_; - if (pulseElapsed >= PULSE_DURATION) { - pulseBrushName_.clear(); - pulseStartTime_ = -1.0f; - isPulsing = false; - } - } + auto [isPulsing, pulseElapsed] = computePulseState(brush); renderBrushCard(cursorPos, tileSize, preview, isSelected, isHovered, isPulsing, pulseElapsed); @@ -547,20 +557,7 @@ void TilesetGridWidget::renderBrushGrid() { ImDrawList *dl = ImGui::GetWindowDrawList(); // Render card with pulse animation support - bool isPulsing = isSelected && !pulseBrushName_.empty() && - brush->getName() == pulseBrushName_; - float pulseElapsed = 0.0f; - if (isPulsing) { - float currentTime = ImGui::GetTime(); - if (pulseStartTime_ < 0) - pulseStartTime_ = currentTime; - pulseElapsed = currentTime - pulseStartTime_; - if (pulseElapsed >= PULSE_DURATION) { - pulseBrushName_.clear(); - pulseStartTime_ = -1.0f; - isPulsing = false; - } - } + auto [isPulsing, pulseElapsed] = computePulseState(brush); renderBrushCard(cursorPos, tileSize, preview, isSelected, isHovered, isPulsing, pulseElapsed); diff --git a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.h b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.h index 31979ba..f2b0a81 100644 --- a/ImguiMapEditor/UI/Widgets/TilesetGridWidget.h +++ b/ImguiMapEditor/UI/Widgets/TilesetGridWidget.h @@ -206,6 +206,9 @@ class TilesetGridWidget { const Utils::ResolvedBrushPreview &preview, bool isSelected, bool isHovered, bool isPulsing = false, float pulseElapsed = 0.0f); + + // Returns {isPulsing, pulseElapsed}. Clears stale pulse state when duration expires. + std::pair computePulseState(const Brushes::IBrush *brush); // Services (non-owning) Services::ClientDataService *clientData_ = nullptr; Services::SpriteManager *spriteManager_ = nullptr;