From 041477a7355fe92cdabe88e90c2da152bbb066ee Mon Sep 17 00:00:00 2001 From: blurskye Date: Thu, 22 Jan 2026 00:59:22 +0600 Subject: [PATCH] major rework, cross platform compat --- .../binary_fetch_v1/AsciiArt.cpp | 552 ++---------- .../binary_fetch_v1/AsciiArt.h | 7 +- .../binary_fetch_v1/CMakeLists.txt | 193 +++++ .../binary_fetch_v1/CompactOS.h | 16 +- .../binary_fetch_v1/CompactPerformance.h | 3 + .../binary_fetch_v1/CompactScreen.h | 15 +- .../Default_BinaryFetch_Config.json | 795 ++++++------------ .../binary_fetch_v1/DetailedScreen.h | 13 +- .../binary_fetch_v1/DistroDetector.cpp | 349 ++++++++ .../binary_fetch_v1/DistroDetector.h | 28 + .../binary_fetch_v1/PerformanceInfo.h | 6 +- .../binary_fetch_v1/TimeInfo.cpp | 69 +- .../binary_fetch_v1/TimeInfo.h | 14 +- .../binary_fetch_v1/build/binaryfetch | Bin 0 -> 2002176 bytes project_binary_fetch/binary_fetch_v1/main.cpp | 155 +++- .../binary_fetch_v1/platform/HttpClient.h | 221 +++++ .../binary_fetch_v1/platform/Platform.h | 8 + .../binary_fetch_v1/platform/PlatformConfig.h | 28 + .../binary_fetch_v1/platform/PlatformUtils.h | 161 ++++ .../platform/freebsd/AudioInfoFreeBSD.cpp | 95 +++ .../platform/freebsd/CPUInfoFreeBSD.cpp | 235 ++++++ .../platform/freebsd/DisplayInfoFreeBSD.cpp | 206 +++++ .../platform/freebsd/GPUInfoFreeBSD.cpp | 145 ++++ .../platform/freebsd/MemoryInfoFreeBSD.cpp | 99 +++ .../platform/freebsd/NetworkInfoFreeBSD.cpp | 154 ++++ .../platform/freebsd/OSInfoFreeBSD.cpp | 105 +++ .../freebsd/PerformanceInfoFreeBSD.cpp | 127 +++ .../platform/freebsd/StorageInfoFreeBSD.cpp | 175 ++++ .../platform/freebsd/SystemInfoFreeBSD.cpp | 58 ++ .../platform/linux/CPUInfoLinux.cpp | 239 ++++++ .../platform/linux/DisplayInfoLinux.cpp | 206 +++++ .../platform/linux/GPUInfoLinux.cpp | 159 ++++ .../platform/linux/MemoryInfoLinux.cpp | 106 +++ .../platform/linux/NetworkInfoLinux.cpp | 148 ++++ .../platform/linux/OSInfoLinux.cpp | 103 +++ .../platform/linux/PerformanceInfoLinux.cpp | 127 +++ .../platform/linux/StorageInfoLinux.cpp | 195 +++++ .../platform/linux/SystemInfoLinux.cpp | 41 + .../platform/posix/CompactAudioPosix.cpp | 243 ++++++ .../platform/posix/CompactCPUPosix.cpp | 151 ++++ .../platform/posix/CompactGPUPosix.cpp | 280 ++++++ .../platform/posix/CompactMemoryPosix.cpp | 131 +++ .../platform/posix/CompactNetworkPosix.cpp | 107 +++ .../platform/posix/CompactOSPosix.cpp | 112 +++ .../posix/CompactPerformancePosix.cpp | 171 ++++ .../platform/posix/CompactScreenPosix.cpp | 184 ++++ .../platform/posix/CompactSystemPosix.cpp | 91 ++ .../platform/posix/CompactUserPosix.cpp | 46 + .../platform/posix/ConsoleUtilsPosix.cpp | 1 + .../platform/posix/DetailedGPUInfoPosix.cpp | 188 +++++ .../platform/posix/DetailedScreenPosix.cpp | 270 ++++++ .../platform/posix/ExtraInfoPosix.cpp | 241 ++++++ .../platform/posix/UserInfoPosix.cpp | 78 ++ .../platform/posix/compact_disk_infoPosix.cpp | 188 +++++ 54 files changed, 6734 insertions(+), 1104 deletions(-) create mode 100644 project_binary_fetch/binary_fetch_v1/CMakeLists.txt create mode 100644 project_binary_fetch/binary_fetch_v1/DistroDetector.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/DistroDetector.h create mode 100755 project_binary_fetch/binary_fetch_v1/build/binaryfetch create mode 100644 project_binary_fetch/binary_fetch_v1/platform/HttpClient.h create mode 100644 project_binary_fetch/binary_fetch_v1/platform/Platform.h create mode 100644 project_binary_fetch/binary_fetch_v1/platform/PlatformConfig.h create mode 100644 project_binary_fetch/binary_fetch_v1/platform/PlatformUtils.h create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/AudioInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/CPUInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/DisplayInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/GPUInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/MemoryInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/NetworkInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/OSInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/PerformanceInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/StorageInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/freebsd/SystemInfoFreeBSD.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/linux/CPUInfoLinux.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/linux/DisplayInfoLinux.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/linux/GPUInfoLinux.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/linux/MemoryInfoLinux.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/linux/NetworkInfoLinux.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/linux/OSInfoLinux.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/linux/PerformanceInfoLinux.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/linux/StorageInfoLinux.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/linux/SystemInfoLinux.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactAudioPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactCPUPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactGPUPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactMemoryPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactNetworkPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactOSPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactPerformancePosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactScreenPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactSystemPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/CompactUserPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/ConsoleUtilsPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/DetailedGPUInfoPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/DetailedScreenPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/ExtraInfoPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/UserInfoPosix.cpp create mode 100644 project_binary_fetch/binary_fetch_v1/platform/posix/compact_disk_infoPosix.cpp diff --git a/project_binary_fetch/binary_fetch_v1/AsciiArt.cpp b/project_binary_fetch/binary_fetch_v1/AsciiArt.cpp index 69e87db..bc6f140 100644 --- a/project_binary_fetch/binary_fetch_v1/AsciiArt.cpp +++ b/project_binary_fetch/binary_fetch_v1/AsciiArt.cpp @@ -1,6 +1,7 @@ - + #include "AsciiArt.h" -#include "resource.h" // Essential for IDR_DEFAULT_ASCII +#include "DistroDetector.h" +#include "resource.h" #include #include #include @@ -103,7 +104,12 @@ std::string AsciiArt::getUserArtPath() const { #ifdef _WIN32 return "C:\\Users\\Public\\BinaryFetch\\BinaryArt.txt"; #else - return std::string(getenv("HOME")) + "/.config/BinaryFetch/BinaryArt.txt"; + const char* home = getenv("HOME"); + if (!home) { + struct passwd* pw = getpwuid(getuid()); + home = pw ? pw->pw_dir : "/tmp"; + } + return std::string(home) + "/.config/binaryfetch/BinaryArt.txt"; #endif } @@ -118,12 +124,11 @@ bool AsciiArt::ensureDirectoryExists(const std::string& path) const { #endif } -// ========== THE SELF-HEALING ENGINE (Win32 Resource) ========== +// ========== THE SELF-HEALING ENGINE ========== bool AsciiArt::copyDefaultArt(const std::string& destPath) const { if (!ensureDirectoryExists(destPath)) return false; #ifdef _WIN32 - // IDR_DEFAULT_ASCII is 102 in your resource.h 🚀 HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(102), RT_RCDATA); if (!hRes) return false; @@ -137,572 +142,153 @@ bool AsciiArt::copyDefaultArt(const std::string& destPath) const { dest.close(); return true; } -#endif - return false; -} - -bool AsciiArt::loadArtFromPath(const std::string& filepath) { - artLines.clear(); - artWidths.clear(); - std::ifstream file(filepath); - if (!file.is_open()) { - enabled = false; - return false; - } - - std::string line; - maxWidth = 0; - bool isFirstLine = true; - while (std::getline(file, line)) { - if (!line.empty() && line.back() == '\r') line.pop_back(); - if (isFirstLine) { sanitizeLeadingInvisible(line); isFirstLine = false; } - std::string processedLine = processColorCodes(line); - artLines.push_back(processedLine); - size_t vlen = visible_width(processedLine); - artWidths.push_back((int)vlen); - if ((int)vlen > maxWidth) maxWidth = (int)vlen; - } - height = static_cast(artLines.size()); - enabled = !artLines.empty(); - return enabled; -} - -bool AsciiArt::loadFromFile() { - std::string userArtPath = getUserArtPath(); - std::ifstream checkFile(userArtPath); - bool fileExists = checkFile.good(); - checkFile.close(); - - // Self-Heal if the file is missing 🧬 - if (!fileExists) { - if (!copyDefaultArt(userArtPath)) { - return loadArtFromPath("DefaultAsciiArt.txt"); // Final fallback - } - } - return loadArtFromPath(userArtPath); -} - -// ---------------- LivePrinter ---------------- - -LivePrinter::LivePrinter(const AsciiArt& artRef) : art(artRef), index(0) {} - -void LivePrinter::push(const std::string& infoLine) { - printArtAndPad(); - if (!infoLine.empty()) std::cout << infoLine; - std::cout << '\n'; - index++; -} - -void LivePrinter::printArtAndPad() { - int artH = art.getHeight(); - int maxW = art.getMaxWidth(); - int spacing = art.getSpacing(); - - if (index < artH) { - std::cout << art.getLine(index); - int curW = art.getLineWidth(index); - if (curW < maxW) std::cout << std::string(maxW - curW, ' '); - } - else if (maxW > 0) { - std::cout << std::string(maxW, ' '); - } - if (spacing > 0) std::cout << std::string(spacing, ' '); -} - -void LivePrinter::finish() { - while (index < art.getHeight()) { - printArtAndPad(); - std::cout << '\n'; - index++; - } -} -/* -Color Code Feature: -Use $n in BinaryArt.txt to set colors (n = 1-15): -$1 = red $8 = bright_red -$2 = green $9 = bright_green -$3 = yellow $10 = bright_yellow -$4 = blue $11 = bright_blue -$5 = magenta $12 = bright_magenta -$6 = cyan $13 = bright_cyan -$7 = white $14 = bright_white -$15 = reset - -Example: -$1⠀⣄⠀⠀⠏⣤⣤⣀⡀ // This line will be red -⠀⠀⣻⠃⠀⣰⡿⠛⠁ // This line will be white (default) -$2⠀⡠⠋$3⢀⠐⠁⠀ // This line will be green, then yellow - -Old path: C:\Users\{Username}\AppData\Roaming\BinaryFetch\BinaryArt.txt -New path: C:\Users\Default\AppData\Local\BinaryFetch\BinaryArt.txt -*/ - - - - - - -/* -AsciiArt.cpp v1----------------------------------------------------- -#include "AsciiArt.h" -#include -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#include // For SHGetFolderPath -#include // For _mkdir -#else -#include -#include -#include -#endif - -// ---------------- Helper functions for AsciiArt ---------------- - -// Remove ANSI color/format sequences (like "\x1b[31m") from a string -std::string stripAnsiSequences(const std::string& s) { - static const std::regex ansi_re("\x1B\\[[0-9;]*[A-Za-z]"); - return std::regex_replace(s, ansi_re, ""); -} - -// Convert UTF-8 string to wide string (wstring) -std::wstring utf8_to_wstring(const std::string& s) { - try { - std::wstring_convert> conv; - return conv.from_bytes(s); - } - catch (...) { - // fallback: naive conversion - std::wstring w; - w.reserve(s.size()); - for (unsigned char c : s) w.push_back(static_cast(c)); - return w; - } -} - -// Return visible width of a wide character (for printing aligned ASCII art) -int char_display_width(wchar_t wc) { -#if !defined(_WIN32) - int w = wcwidth(wc); - return (w < 0) ? 0 : w; -#else - // Basic width heuristics for CJK and fullwidth characters - if (wc == 0) return 0; - if (wc < 0x1100) return 1; - if ((wc >= 0x1100 && wc <= 0x115F) || - (wc >= 0x2E80 && wc <= 0xA4CF) || - (wc >= 0xAC00 && wc <= 0xD7A3) || - (wc >= 0xF900 && wc <= 0xFAFF) || - (wc >= 0xFE10 && wc <= 0xFE19) || - (wc >= 0xFE30 && wc <= 0xFE6F) || - (wc >= 0xFF00 && wc <= 0xFF60) || - (wc >= 0x20000 && wc <= 0x2FFFD) || - (wc >= 0x30000 && wc <= 0x3FFFD)) - return 2; - return 1; -#endif -} - -// Return visible width of UTF-8 string (ignoring ANSI sequences) -size_t visible_width(const std::string& s) { - const std::string cleaned = stripAnsiSequences(s); - const std::wstring w = utf8_to_wstring(cleaned); - size_t width = 0; - for (size_t i = 0; i < w.size(); ++i) width += static_cast(char_display_width(w[i])); - return width; -} - -// ---------------- Sanitize leading invisible characters ---------------- -void sanitizeLeadingInvisible(std::string& s) { - // Remove UTF-8 BOM (EF BB BF) - if (s.size() >= 3 && - (unsigned char)s[0] == 0xEF && - (unsigned char)s[1] == 0xBB && - (unsigned char)s[2] == 0xBF) { - s.erase(0, 3); - } - - // Remove leading zero-width spaces (U+200B -> E2 80 8B) - while (s.size() >= 3 && - (unsigned char)s[0] == 0xE2 && - (unsigned char)s[1] == 0x80 && - (unsigned char)s[2] == 0x8B) { - s.erase(0, 3); - } -} - -// ---------------- AsciiArt class implementation ---------------- - -AsciiArt::AsciiArt() : maxWidth(0), height(0), enabled(true), spacing(2) { -#ifdef _WIN32 - SetConsoleOutputCP(CP_UTF8); // enable UTF-8 output on Windows console -#endif -} - -// Get the path to user's ASCII art file in AppData -std::string AsciiArt::getUserArtPath() const { -#ifdef _WIN32 - char appDataPath[MAX_PATH]; - if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_APPDATA, NULL, 0, appDataPath))) { - std::string fullPath = std::string(appDataPath) + "\\BinaryFetch\\BinaryArt.txt"; - return fullPath; - } - // Fallback if SHGetFolderPath fails - return "BinaryArt.txt"; -#else - // Linux/Mac: use ~/.config/BinaryFetch/BinaryArt.txt - const char* home = getenv("HOME"); - if (!home) { - struct passwd* pw = getpwuid(getuid()); - home = pw->pw_dir; - } - return std::string(home) + "/.config/BinaryFetch/BinaryArt.txt"; -#endif -} - -// Ensure directory exists (create if needed) -bool AsciiArt::ensureDirectoryExists(const std::string& path) const { - // Extract directory from full file path - size_t lastSlash = path.find_last_of("/\\"); - if (lastSlash == std::string::npos) return true; // No directory in path - - std::string directory = path.substr(0, lastSlash); - -#ifdef _WIN32 - // Try to create directory (will fail silently if exists) - int result = _mkdir(directory.c_str()); - // 0 = success, -1 = error (but might already exist) - if (result == 0 || errno == EEXIST) return true; return false; #else - // Linux/Mac - int result = mkdir(directory.c_str(), 0755); - if (result == 0 || errno == EEXIST) return true; - return false; -#endif -} - -// Copy default art to user location -bool AsciiArt::copyDefaultArt(const std::string& destPath) const { - // Try multiple locations for default art file std::vector searchPaths = { - "Default_Ascii_Art.txt", // Current working directory - "DefaultAsciiArt.txt", // Alternative naming (no underscores) - "./Default_Ascii_Art.txt", // Explicit current dir - "./DefaultAsciiArt.txt", // Explicit current dir (no underscores) - "../Default_Ascii_Art.txt", // Parent directory - "../DefaultAsciiArt.txt", // Parent directory (no underscores) - "../../Default_Ascii_Art.txt", // Grandparent directory - "../../DefaultAsciiArt.txt", // Grandparent directory (no underscores) - FOR x64/Debug builds - "../../../Default_Ascii_Art.txt", // Great-grandparent - "../../../DefaultAsciiArt.txt" // Great-grandparent (no underscores) + "DefaultAsciiArt.txt", + "./DefaultAsciiArt.txt", + "../DefaultAsciiArt.txt", + "/usr/share/binaryfetch/BinaryArt.txt", + "/usr/local/share/binaryfetch/BinaryArt.txt", }; -#ifdef _WIN32 - // Get executable directory on Windows - char exePath[MAX_PATH]; - if (GetModuleFileNameA(NULL, exePath, MAX_PATH)) { + char exePath[4096]; + ssize_t len = readlink("/proc/self/exe", exePath, sizeof(exePath) - 1); + if (len != -1) { + exePath[len] = '\0'; std::string exeDir = exePath; - size_t lastSlash = exeDir.find_last_of("\\/"); + size_t lastSlash = exeDir.find_last_of('/'); if (lastSlash != std::string::npos) { exeDir = exeDir.substr(0, lastSlash); - searchPaths.push_back(exeDir + "\\Default_Ascii_Art.txt"); - searchPaths.push_back(exeDir + "\\DefaultAsciiArt.txt"); + searchPaths.push_back(exeDir + "/DefaultAsciiArt.txt"); + searchPaths.push_back(exeDir + "/BinaryArt.txt"); } } -#endif - // Try each path std::ifstream src; - std::string foundPath; - - //std::cout << "Searching for default ASCII art file..." << std::endl; for (const auto& path : searchPaths) { - // std::cout << " Trying: " << path << "... "; src.open(path, std::ios::binary); - if (src.is_open()) { - foundPath = path; - // std::cout << "FOUND!" << std::endl; - break; - } - // std::cout << "not found" << std::endl; - } - - if (!src.is_open()) { - // std::cerr << "\nError: Could not find Default_Ascii_Art.txt in any location." << std::endl; - //std::cerr << "Please ensure Default_Ascii_Art.txt is in the same folder as the executable." << std::endl; - return false; + if (src.is_open()) break; } - // std::cout << "Using default art from: " << foundPath << std::endl; - - // Ensure destination directory exists - if (!ensureDirectoryExists(destPath)) { - //std::cerr << "Warning: Could not create directory for " << destPath << std::endl; - return false; - } + if (!src.is_open()) return false; - // Open destination file std::ofstream dest(destPath, std::ios::binary); if (!dest.is_open()) { - //std::cerr << "Warning: Could not create " << destPath << std::endl; + src.close(); return false; } - // Copy content dest << src.rdbuf(); - src.close(); dest.close(); - - // std::cout << "Created ASCII art file at: " << destPath << std::endl; return true; +#endif } -// Internal helper: Load art from specific path bool AsciiArt::loadArtFromPath(const std::string& filepath) { artLines.clear(); artWidths.clear(); - std::ifstream file(filepath); if (!file.is_open()) { enabled = false; - maxWidth = 0; - height = 0; return false; } std::string line; maxWidth = 0; bool isFirstLine = true; - while (std::getline(file, line)) { if (!line.empty() && line.back() == '\r') line.pop_back(); - - // Sanitize only the first line for BOM / zero-width characters - if (isFirstLine) { - sanitizeLeadingInvisible(line); - isFirstLine = false; - } - - artLines.push_back(line); - size_t vlen = visible_width(line); + if (isFirstLine) { sanitizeLeadingInvisible(line); isFirstLine = false; } + std::string processedLine = processColorCodes(line); + artLines.push_back(processedLine); + size_t vlen = visible_width(processedLine); artWidths.push_back((int)vlen); - if (static_cast(vlen) > maxWidth) maxWidth = static_cast(vlen); + if ((int)vlen > maxWidth) maxWidth = (int)vlen; } - - file.close(); - height = static_cast(artLines.size()); enabled = !artLines.empty(); return enabled; } -// Main load function - automatically manages user's art file bool AsciiArt::loadFromFile() { std::string userArtPath = getUserArtPath(); - - // Check if file exists std::ifstream checkFile(userArtPath); bool fileExists = checkFile.good(); checkFile.close(); if (!fileExists) { - // File doesn't exist - copy from default - //std::cout << "ASCII art not found at: " << userArtPath << std::endl; - // std::cout << "Copying from Default_Ascii_Art.txt..." << std::endl; - +#ifndef _WIN32 + Distro distro = DistroDetector::detect(); + std::string distroArt = DistroDetector::getAsciiArt(distro); + if (!distroArt.empty()) { + return loadArtFromString(distroArt); + } +#endif if (!copyDefaultArt(userArtPath)) { - // std::cerr << "Failed to copy default art. Using fallback." << std::endl; - // Try to load from project folder as last resort - return loadArtFromPath("Default_Ascii_Art.txt"); + return loadArtFromPath("DefaultAsciiArt.txt"); } } - - // Now load from user's location - bool success = loadArtFromPath(userArtPath); - - if (success) { - // std::cout << "ASCII art loaded from: " << userArtPath << std::endl; - } - else { - // std::cerr << "Failed to load ASCII art from: " << userArtPath << std::endl; - } - - return success; -} - -// Advanced: Load from custom path (overrides default behavior) -bool AsciiArt::loadFromFile(const std::string& customPath) { - return loadArtFromPath(customPath); -} - -// Check if ASCII art is enabled -bool AsciiArt::isEnabled() const { - return enabled; -} - -// Enable/disable ASCII art display -void AsciiArt::setEnabled(bool enable) { - enabled = enable; + return loadArtFromPath(userArtPath); } -// Clear loaded ASCII art -void AsciiArt::clear() { +bool AsciiArt::loadArtFromString(const std::string& artContent) { artLines.clear(); artWidths.clear(); maxWidth = 0; - height = 0; + + std::istringstream stream(artContent); + std::string line; + bool isFirstLine = true; + + while (std::getline(stream, line)) { + if (!line.empty() && line.back() == '\r') line.pop_back(); + if (isFirstLine) { sanitizeLeadingInvisible(line); isFirstLine = false; } + std::string processedLine = processColorCodes(line); + artLines.push_back(processedLine); + size_t vlen = visible_width(processedLine); + artWidths.push_back((int)vlen); + if ((int)vlen > maxWidth) maxWidth = (int)vlen; + } + + height = static_cast(artLines.size()); + enabled = !artLines.empty(); + return enabled; } -// ---------------- LivePrinter implementation ---------------- +// ---------------- LivePrinter ---------------- LivePrinter::LivePrinter(const AsciiArt& artRef) : art(artRef), index(0) {} -// Print a line with ASCII art padding void LivePrinter::push(const std::string& infoLine) { printArtAndPad(); if (!infoLine.empty()) std::cout << infoLine; std::cout << '\n'; - std::cout.flush(); - ++index; -} - -// Push a blank line -void LivePrinter::pushBlank() { - printArtAndPad(); - std::cout << '\n'; - std::cout.flush(); - ++index; -} - -// Finish printing remaining ASCII art lines -void LivePrinter::finish() { - while (index < art.getHeight()) { - printArtAndPad(); - std::cout << '\n'; - ++index; - } + index++; } -// Print ASCII art line and pad to max width void LivePrinter::printArtAndPad() { int artH = art.getHeight(); int maxW = art.getMaxWidth(); int spacing = art.getSpacing(); if (index < artH) { - const std::string& a = art.getLine(index); - std::cout << a; + std::cout << art.getLine(index); int curW = art.getLineWidth(index); if (curW < maxW) std::cout << std::string(maxW - curW, ' '); } - else { - if (maxW > 0) std::cout << std::string(maxW, ' '); + else if (maxW > 0) { + std::cout << std::string(maxW, ' '); } - if (spacing > 0) std::cout << std::string(spacing, ' '); } -// Push multi-line formatted string to LivePrinter -void pushFormattedLines(LivePrinter& lp, const std::string& s) { - std::istringstream iss(s); - std::string line; - while (std::getline(iss, line)) { - if (!line.empty() && line.back() == '\r') line.pop_back(); - lp.push(line); +void LivePrinter::finish() { + while (index < art.getHeight()) { + printArtAndPad(); + std::cout << '\n'; + index++; } } - -*/ - - -/* ------------------------------------------------- -DOCUMENTATION ------------------------------------------------- -CLASS: AsciiArt -OBJECT: N/A (used in main.cpp as 'art') -DESCRIPTION: Handles ASCII art loading, alignment, and padding with automatic user file management. -FUNCTIONS: - bool loadFromFile() -> bool - Automatically load ASCII art from user's AppData folder. - If file doesn't exist, copies from Default_Ascii_Art.txt and creates it. - Returns true if successful. - - bool loadFromFile(const std::string& customPath) -> bool - Load ASCII art from custom file path (advanced usage). - Returns true if successful. - - bool isEnabled() const -> bool - Check if ASCII art display is enabled. - - void setEnabled(bool enable) -> void - Enable/disable ASCII art display. - - void clear() -> void - Clear loaded ASCII art lines. - - int getMaxWidth() const -> int - Returns max visible width of loaded ASCII art. - - int getHeight() const -> int - Returns number of ASCII art lines. - - const std::string& getLine(int index) const -> const std::string& - Returns ASCII art line at given index. - - int getLineWidth(int index) const -> int - Returns visible width of line at given index. - - int getSpacing() const -> int - Returns spacing between art and info lines. - -PRIVATE HELPERS: - std::string getUserArtPath() const -> std::string - Get the full path to user's ASCII art file in AppData. - - bool ensureDirectoryExists(const std::string& path) const -> bool - Create directory if it doesn't exist. - - bool copyDefaultArt(const std::string& destPath) const -> bool - Copy Default_Ascii_Art.txt to user location. - - bool loadArtFromPath(const std::string& filepath) -> bool - Load art from specific file path. ------------------------------------------------- -CLASS: LivePrinter -OBJECT: N/A (used in main.cpp as 'lp') -DESCRIPTION: Streams system info lines alongside ASCII art. -FUNCTIONS: - LivePrinter(const AsciiArt& artRef) -> constructor - Initialize LivePrinter with a reference to AsciiArt. - void push(const std::string& infoLine) -> void - Print a line with ASCII art padding. - void pushBlank() -> void - Print a blank line with ASCII art padding. - void finish() -> void - Print remaining ASCII art lines if any. ------------------------------------------------- -HELPER FUNCTIONS: - std::string stripAnsiSequences(const std::string& s) -> std::string - Remove ANSI escape sequences from string. - std::wstring utf8_to_wstring(const std::string& s) -> std::wstring - Convert UTF-8 string to wide string. - int char_display_width(wchar_t wc) -> int - Return display width of wide character. - size_t visible_width(const std::string& s) -> size_t - Return visible width of UTF-8 string (ignoring ANSI codes). - void sanitizeLeadingInvisible(std::string& s) -> void - Remove BOM and zero-width spaces from string start. - void pushFormattedLines(LivePrinter& lp, const std::string& s) -> void - Push multi-line formatted string to LivePrinter. ------------------------------------------------- -*/ \ No newline at end of file diff --git a/project_binary_fetch/binary_fetch_v1/AsciiArt.h b/project_binary_fetch/binary_fetch_v1/AsciiArt.h index 0068a8e..18d38e0 100644 --- a/project_binary_fetch/binary_fetch_v1/AsciiArt.h +++ b/project_binary_fetch/binary_fetch_v1/AsciiArt.h @@ -6,7 +6,7 @@ /* --------------------------------------------------------- - AsciiArt Utilities Helper Functions (Declarations) + AsciiArt Utilities � Helper Functions (Declarations) --------------------------------------------------------- These helpers deal with visual correctness when printing @@ -46,7 +46,7 @@ void sanitizeLeadingInvisible(std::string& s); - Reporting how tall and wide the art is - Providing safe access to art lines for real-time display - This class does NOT print anything itself LivePrinter + This class does NOT print anything itself � LivePrinter handles actual on-screen printing. */ class AsciiArt { @@ -94,6 +94,7 @@ class AsciiArt { // Internal helper: Load art from a specific file path bool loadArtFromPath(const std::string& filepath); + bool loadArtFromString(const std::string& artContent); }; @@ -121,7 +122,7 @@ class LivePrinter { // Each call prints the next art line (or blank padding). void push(const std::string& infoLine); - // Same as push("") convenient for spacing + // Same as push("") � convenient for spacing void pushBlank(); // After finishing all info lines, print any remaining diff --git a/project_binary_fetch/binary_fetch_v1/CMakeLists.txt b/project_binary_fetch/binary_fetch_v1/CMakeLists.txt new file mode 100644 index 0000000..cdd0b77 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/CMakeLists.txt @@ -0,0 +1,193 @@ +cmake_minimum_required(VERSION 3.16) +project(BinaryFetch VERSION 1.0.0 LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# Platform detection +if(WIN32) + set(PLATFORM_WINDOWS TRUE) + add_definitions(-DPLATFORM_WINDOWS=1) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(PLATFORM_LINUX TRUE) + add_definitions(-DPLATFORM_LINUX=1) +elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(PLATFORM_FREEBSD TRUE) + add_definitions(-DPLATFORM_FREEBSD=1) +else() + message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}") +endif() + +# Static linking options +option(BUILD_STATIC "Build statically linked binary" ON) + +if(BUILD_STATIC) + if(PLATFORM_LINUX OR PLATFORM_FREEBSD) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + elseif(PLATFORM_WINDOWS) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + endif() +endif() + +# Common source files (platform-agnostic logic) +set(COMMON_SOURCES + main.cpp + AsciiArt.cpp + ConfigReader.cpp + Helpers.cpp + TimeInfo.cpp + personalization_info.cpp + DistroDetector.cpp +) + +# Windows-specific sources +set(WINDOWS_SOURCES + OSInfo.cpp + CPUInfo.cpp + MemoryInfo.cpp + GPUInfo.cpp + StorageInfo.cpp + NetworkInfo.cpp + DisplayInfo.cpp + UserInfo.cpp + SystemInfo.cpp + PerformanceInfo.cpp + ExtraInfo.cpp + DtailedGPUInfo.cpp + DetailedScreen.cpp + ConsoleUtils.cpp + CompactOS.cpp + CompactCPU.cpp + CompactMemory.cpp + CompactGPU.cpp + CompactScreen.cpp + CompactSystem.cpp + CompactUser.cpp + CompactNetwork.cpp + CompactPerformance.cpp + CompactAudio.cpp + compact_disk_info.cpp +) + +# POSIX/Unix sources (Linux + FreeBSD shared) +set(POSIX_SOURCES + platform/posix/UserInfoPosix.cpp + platform/posix/CompactOSPosix.cpp + platform/posix/CompactCPUPosix.cpp + platform/posix/CompactMemoryPosix.cpp + platform/posix/CompactGPUPosix.cpp + platform/posix/CompactScreenPosix.cpp + platform/posix/CompactNetworkPosix.cpp + platform/posix/CompactUserPosix.cpp + platform/posix/CompactPerformancePosix.cpp + platform/posix/CompactSystemPosix.cpp + platform/posix/compact_disk_infoPosix.cpp + platform/posix/CompactAudioPosix.cpp +) + +# Linux-specific sources +set(LINUX_SOURCES + platform/linux/OSInfoLinux.cpp + platform/linux/CPUInfoLinux.cpp + platform/linux/MemoryInfoLinux.cpp + platform/linux/GPUInfoLinux.cpp + platform/linux/StorageInfoLinux.cpp + platform/linux/NetworkInfoLinux.cpp + platform/linux/DisplayInfoLinux.cpp + platform/linux/SystemInfoLinux.cpp + platform/linux/PerformanceInfoLinux.cpp +) + +# FreeBSD-specific sources +set(FREEBSD_SOURCES + platform/freebsd/OSInfoFreeBSD.cpp + platform/freebsd/CPUInfoFreeBSD.cpp + platform/freebsd/MemoryInfoFreeBSD.cpp + platform/freebsd/GPUInfoFreeBSD.cpp + platform/freebsd/StorageInfoFreeBSD.cpp + platform/freebsd/NetworkInfoFreeBSD.cpp + platform/freebsd/DisplayInfoFreeBSD.cpp + platform/freebsd/SystemInfoFreeBSD.cpp + platform/freebsd/PerformanceInfoFreeBSD.cpp + platform/freebsd/AudioInfoFreeBSD.cpp +) + +# POSIX-specific compact sources (replaces Windows versions) +set(POSIX_COMPACT_SOURCES + platform/posix/ExtraInfoPosix.cpp + platform/posix/DetailedGPUInfoPosix.cpp + platform/posix/DetailedScreenPosix.cpp + platform/posix/ConsoleUtilsPosix.cpp +) + +# Windows compact-related sources +set(WINDOWS_COMPACT_SOURCES + ExtraInfo.cpp + DtailedGPUInfo.cpp + DetailedScreen.cpp + ConsoleUtils.cpp +) + +# Select platform sources +if(PLATFORM_WINDOWS) + set(PLATFORM_SOURCES ${WINDOWS_SOURCES} ${WINDOWS_COMPACT_SOURCES}) + set(PLATFORM_LIBS + wbemuuid + pdh + iphlpapi + ws2_32 + wlanapi + winhttp + dxgi + d3d12 + netapi32 + setupapi + cfgmgr32 + Shcore + ole32 + oleaut32 + ) +elseif(PLATFORM_LINUX) + set(PLATFORM_SOURCES ${POSIX_SOURCES} ${LINUX_SOURCES} ${POSIX_COMPACT_SOURCES}) + set(PLATFORM_LIBS pthread) +elseif(PLATFORM_FREEBSD) + set(PLATFORM_SOURCES ${POSIX_SOURCES} ${FREEBSD_SOURCES} ${POSIX_COMPACT_SOURCES}) + set(PLATFORM_LIBS pthread) +endif() + +# Create executable +add_executable(binaryfetch ${COMMON_SOURCES} ${PLATFORM_SOURCES}) + +# Include directories +target_include_directories(binaryfetch PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/nlohmann + ${CMAKE_CURRENT_SOURCE_DIR}/platform +) + +# Link libraries +target_link_libraries(binaryfetch PRIVATE ${PLATFORM_LIBS}) + +# Compiler warnings +if(MSVC) + target_compile_options(binaryfetch PRIVATE /W4) +else() + target_compile_options(binaryfetch PRIVATE -Wall -Wextra -Wpedantic) +endif() + +# Install +install(TARGETS binaryfetch RUNTIME DESTINATION bin) + +# Platform-specific install paths for config +if(PLATFORM_LINUX) + install(FILES Default_BinaryFetch_Config.json DESTINATION share/binaryfetch RENAME BinaryFetch_Config.json) + install(FILES Default_Ascii_Art.txt DESTINATION share/binaryfetch RENAME BinaryArt.txt) +elseif(PLATFORM_FREEBSD) + install(FILES Default_BinaryFetch_Config.json DESTINATION share/binaryfetch RENAME BinaryFetch_Config.json) + install(FILES Default_Ascii_Art.txt DESTINATION share/binaryfetch RENAME BinaryArt.txt) +endif() + +message(STATUS "Building BinaryFetch for: ${CMAKE_SYSTEM_NAME}") +message(STATUS "Static linking: ${BUILD_STATIC}") diff --git a/project_binary_fetch/binary_fetch_v1/CompactOS.h b/project_binary_fetch/binary_fetch_v1/CompactOS.h index 6376da4..27383ad 100644 --- a/project_binary_fetch/binary_fetch_v1/CompactOS.h +++ b/project_binary_fetch/binary_fetch_v1/CompactOS.h @@ -1,8 +1,22 @@ #pragma once #include +#include + +#if defined(_WIN32) || defined(_WIN64) #include #include -using namespace std; +#endif + +#if defined(__linux__) +#include +#endif + +#if defined(__FreeBSD__) +#include +#include +#include +#endif + class CompactOS { public: std::string getOSName(); diff --git a/project_binary_fetch/binary_fetch_v1/CompactPerformance.h b/project_binary_fetch/binary_fetch_v1/CompactPerformance.h index 6b15f3b..f168a02 100644 --- a/project_binary_fetch/binary_fetch_v1/CompactPerformance.h +++ b/project_binary_fetch/binary_fetch_v1/CompactPerformance.h @@ -1,5 +1,8 @@ #pragma once + +#if defined(_WIN32) || defined(_WIN64) #include +#endif class CompactPerformance { public: diff --git a/project_binary_fetch/binary_fetch_v1/CompactScreen.h b/project_binary_fetch/binary_fetch_v1/CompactScreen.h index 645ba76..b90facb 100644 --- a/project_binary_fetch/binary_fetch_v1/CompactScreen.h +++ b/project_binary_fetch/binary_fetch_v1/CompactScreen.h @@ -1,8 +1,11 @@ -#pragma once +#pragma once #include #include + +#if defined(_WIN32) || defined(_WIN64) #include +#endif struct ScreenInfo { std::string name; // Friendly display name (e.g., "ASUS VG27AQ") @@ -41,13 +44,17 @@ class CompactScreen { private: std::vector screens; - // Population methods +#if defined(_WIN32) || defined(_WIN64) + // Windows-specific population methods bool populateFromDXGI(); bool enrichWithNVAPI(); bool enrichWithADL(); - - // Helper to get friendly name from EDID std::string getFriendlyNameFromEDID(const std::wstring& deviceName); +#else + // POSIX population methods + bool populateFromXrandr(); + bool populateFromDRM(); +#endif // Helper to parse EDID for native resolution and name struct EDIDInfo { diff --git a/project_binary_fetch/binary_fetch_v1/Default_BinaryFetch_Config.json b/project_binary_fetch/binary_fetch_v1/Default_BinaryFetch_Config.json index f3ea1fb..d8b8af8 100644 --- a/project_binary_fetch/binary_fetch_v1/Default_BinaryFetch_Config.json +++ b/project_binary_fetch/binary_fetch_v1/Default_BinaryFetch_Config.json @@ -1,72 +1,10 @@ { "header": { - "enabled": true, - "prefix_color": "bright_red", - "title_color": "bright_cyan", - "show_line": true, - "line_color": "green" + "enabled": false }, "compact_time": { - "enabled": true, - "show_emoji": true, - "emoji_color": "yellow", - "time_section": { - "enabled": true, - "show_label": true, - "show_hour": true, - "show_minute": true, - "show_second": true, - "colors": { - "bracket": "cyan", - "label": "red", - "hour": "cyan", - "minute": "cyan", - "second": "cyan", - "sep": "yellow" - } - }, - "date_section": { - "enabled": true, - "show_label": true, - "show_day": true, - "show_month_name": true, - "show_month_num": false, - "show_year": true, - "colors": { - "bracket": "cyan", - "label": "yellow", - "day": "red", - "month_name": "red", - "month_num": "red", - "year": "red", - "sep": "yellow" - } - }, - "week_section": { - "enabled": true, - "show_label": true, - "show_num": true, - "show_day_name": true, - "colors": { - "bracket": "red", - "label": "blue", - "num": "cyan", - "day_name": "cyan", - "sep": "yellow" - } - }, - "leap_section": { - "enabled": false, - "show_label": true, - "show_val": true, - "colors": { - "bracket": "red", - "label": "green", - "val": "bright_magenta" - } - } + "enabled": false }, - "compact_os": { "enabled": true, "show_name": true, @@ -75,16 +13,16 @@ "show_uptime": true, "show_emoji": true, "colors": { - "emoji_color": "yellow", - "OS": "red", - "(": "blue", - ")": "blue", - "OS_:": "blue", - "name_color": "red", + "emoji_color": "cyan", + "OS": "bright_cyan", + "(": "white", + ")": "white", + "OS_:": "white", + "name_color": "bright_white", "build_color": "cyan", - "arch_color": "blue", - "uptime_label_color": "red", - "uptime_value_color": "cyan" + "arch_color": "bright_cyan", + "uptime_label_color": "white", + "uptime_value_color": "bright_cyan" } }, "compact_cpu": { @@ -95,18 +33,18 @@ "show_clock": true, "show_emoji": true, "colors": { - "emoji_color": "yellow", - "CPU": "blue", - "(": "red", - ")": "red", - "CPU_:": "red", - "name_color": "red", - "core_color": "red", - "thread_color": "red", - "text_color": "red", - "separator_color": "red", - "at_symbol_color": "red", - "clock_color": "red" + "emoji_color": "cyan", + "CPU": "bright_cyan", + "(": "white", + ")": "white", + "CPU_:": "white", + "name_color": "bright_white", + "core_color": "bright_cyan", + "thread_color": "bright_cyan", + "text_color": "white", + "separator_color": "white", + "at_symbol_color": "white", + "clock_color": "bright_cyan" } }, "compact_gpu": { @@ -114,47 +52,46 @@ "show_name": true, "show_usage": true, "show_vram": true, - "show_freq": true, + "show_freq": false, "show_emoji": true, "colors": { - "emoji_color": "yellow", - "GPU": "blue", - "(": "yellow", - ")": "yellow", - "GPU_:": "magenta", - "name_color": "red", - "usage_color": "cyan", - "vram_color": "green", - "at_symbol_color": "blue", - "freq_color": "red" + "emoji_color": "cyan", + "GPU": "bright_cyan", + "(": "white", + ")": "white", + "GPU_:": "white", + "name_color": "bright_white", + "usage_color": "bright_cyan", + "vram_color": "bright_cyan", + "at_symbol_color": "white", + "freq_color": "bright_cyan" } }, - "compact_screen": { "enabled": true, "show_header": true, "show_name": true, "show_resolution": true, - "show_scale": true, + "show_scale": false, "show_upscale": false, "show_refresh": true, "show_emoji": true, "colors": { - "emoji_color": "yellow", - "Display": "red", - "Display_:": "red", - "header_text": "red", - "name_color": "blue", - "(": "cyan", - ")": "cyan", - "resolution_color": "red", - "x": "cyan", - "scale_label": "red", - "scale_value": "blue", - "upscale_label": "red", - "upscale_value": "red", - "@": "red", - "refresh_color": "blue" + "emoji_color": "cyan", + "Display": "bright_cyan", + "Display_:": "white", + "header_text": "bright_cyan", + "name_color": "bright_white", + "(": "white", + ")": "white", + "resolution_color": "bright_cyan", + "x": "white", + "scale_label": "white", + "scale_value": "bright_cyan", + "upscale_label": "white", + "upscale_value": "bright_cyan", + "@": "white", + "refresh_color": "bright_cyan" } }, "compact_memory": { @@ -164,73 +101,56 @@ "show_percent": true, "show_emoji": true, "colors": { - "emoji_color": "yellow", - "Memory": "cyan", - "(": "red", - ")": "red", - "Memory_:": "cyan", - "label_color": "cyan", - "total_color": "cyan", - "free_color": "cyan", - "percent_color": "cyan" + "emoji_color": "cyan", + "Memory": "bright_cyan", + "(": "white", + ")": "white", + "Memory_:": "white", + "label_color": "white", + "total_color": "bright_cyan", + "free_color": "bright_cyan", + "percent_color": "bright_cyan" } }, "compact_audio": { "enabled": true, - "show_input": true, + "show_input": false, "show_output": true, "show_audio_input_emoji": true, "show_audio_output_emoji": true, "colors": { - "audio_input_emoji_color": "yellow", - "audio_output_emoji_color": "yellow", - "Audio Input": "red", - "Audio_Input_:": "blue", - "Audio Output": "red", - "Audio_Output_:": "blue", - "(": "cyan", - ")": "cyan", - "->": "cyan", - "device_color": "blue", - "status_color": "blue" + "audio_input_emoji_color": "cyan", + "audio_output_emoji_color": "cyan", + "Audio Input": "bright_cyan", + "Audio_Input_:": "white", + "Audio Output": "bright_cyan", + "Audio_Output_:": "white", + "(": "white", + ")": "white", + "->": "white", + "device_color": "bright_white", + "status_color": "bright_cyan" } }, "compact_performance": { - "enabled": true, - "show_cpu": true, - "show_gpu": true, - "show_ram": true, - "show_disk": true, - "show_emoji": true, - "colors": { - "emoji_color": "yellow", - "Performance": "blue", - "(": "red", - ")": "red", - "Performance_:": "bright_cyan", - "label_color": "bright_cyan", - "cpu_color": "bright_cyan", - "gpu_color": "bright_cyan", - "ram_color": "bright_cyan", - "disk_color": "bright_cyan" - } + "enabled": false }, "compact_user": { "enabled": true, "show_username": true, "show_domain": true, - "show_type": true, + "show_type": false, "show_emoji": true, "colors": { - "emoji_color": "yellow", - "User": "cyan", - "(": "red", - ")": "red", - "User_:": "bright_magenta", - "username_color": "red", - "label_color": "blue", - "domain_color": "blue", - "type_color": "green" + "emoji_color": "cyan", + "User": "bright_cyan", + "(": "white", + ")": "white", + "User_:": "white", + "username_color": "bright_white", + "label_color": "white", + "domain_color": "bright_cyan", + "type_color": "bright_cyan" } }, "compact_network": { @@ -240,54 +160,39 @@ "show_ip": true, "show_emoji": true, "colors": { - "emoji_color": "yellow", - "Network": "cyan", - "(": "red", - ")": "red", - "Network_:": "bright_cyan", - "label_color": "bright_cyan", - "name_color": "bright_cyan", + "emoji_color": "cyan", + "Network": "bright_cyan", + "(": "white", + ")": "white", + "Network_:": "white", + "label_color": "white", + "name_color": "bright_white", "type_color": "bright_cyan", "ip_color": "bright_cyan" } }, "dummy_compact_network": { - "enabled": false, - "show_name": true, - "show_type": true, - "show_ip": true, - "show_emoji": true, - "colors": { - "emoji_color": "yellow", - "Network": "cyan", - "(": "red", - ")": "red", - "Network_:": "bright_cyan", - "label_color": "bright_cyan", - "name_color": "bright_cyan", - "type_color": "bright_cyan", - "ip_color": "bright_cyan" - } + "enabled": false }, "compact_disk": { "enabled": true, "show_usage": true, - "show_capacity": true, + "show_capacity": false, "show_disk_usage_emoji": true, "show_disk_capacity_emoji": true, "colors": { - "disk_usage_emoji_color": "yellow", - "disk_capacity_emoji_color": "yellow", - "Disk Usage": "green", - "Disk_Usage_:": "red", - "Disk Cap": "green", - "Disk_Cap_:": "red", - "(": "red", - ")": "red", - "->": "bright_cyan", - "letter_color": "bright_cyan", + "disk_usage_emoji_color": "cyan", + "disk_capacity_emoji_color": "cyan", + "Disk Usage": "bright_cyan", + "Disk_Usage_:": "white", + "Disk Cap": "bright_cyan", + "Disk_Cap_:": "white", + "(": "white", + ")": "white", + "->": "white", + "letter_color": "bright_white", "percent_color": "bright_cyan", - "separator_color": "bright_cyan", + "separator_color": "white", "capacity_color": "bright_cyan" } }, @@ -301,34 +206,34 @@ "modules": true }, "colors": { - ">>~": "blue", - "header_title": "bright_magenta", - "-------------------------*": "blue", - "label": "magenta", - "total_value": "bright_blue", + ">>~": "cyan", + "header_title": "bright_cyan", + "-------------------------*": "cyan", + "label": "white", + "total_value": "bright_cyan", "free_value": "bright_cyan", - "used_value": "bright_red", - "brackets": "red", + "used_value": "bright_cyan", + "brackets": "white", "~": "cyan", - "module_label": "bright_blue", - " : ": "red", + "module_label": "bright_cyan", + " : ": "white", "capacity": "bright_cyan", - "type": "magenta", - "speed": "bright_blue" + "type": "white", + "speed": "bright_cyan" } }, "detailed_storage": { "enabled": true, "sections": { "storage_summary": true, - "disk_performance": true, + "disk_performance": false, "disk_performance_predicted": false }, "storage_summary": { "header": { "show_header": true, - "line_color": "blue", - "title_color": "bright_yellow" + "line_color": "cyan", + "title_color": "bright_cyan" }, "show_storage_type": true, "show_drive_letter": true, @@ -337,76 +242,55 @@ "show_total_space": true, "show_used_percentage": true, "show_file_system": true, - "show_external_status": true, - "storage_type_color": "cyan", - "drive_letter_color": "bright_blue", - "used_label_color": "red", + "show_external_status": false, + "storage_type_color": "white", + "drive_letter_color": "bright_cyan", + "used_label_color": "white", "used_space_color": "bright_cyan", - "total_space_color": "cyan", - "used_percentage_color": "bright_yellow", - "file_system_color": "red", - "external_text_color": "blue", - "internal_text_color": "bright_cyan", - "[": "red", - "]": "red", - "(": "cyan", - ")": "cyan", - "/": "red", - "-": "cyan", - "used_GIB": "red", - "total_GIB": "blue" + "total_space_color": "bright_cyan", + "used_percentage_color": "bright_cyan", + "file_system_color": "white", + "external_text_color": "white", + "internal_text_color": "white", + "[": "white", + "]": "white", + "(": "white", + ")": "white", + "/": "white", + "-": "white", + "used_GIB": "white", + "total_GIB": "white" }, "disk_performance": { "header": { "show_header": true, - "line_color": "blue", - "title_color": "bright_yellow" + "line_color": "cyan", + "title_color": "bright_cyan" }, "show_drive_letter": true, - "drive_letter_color": "bright_blue", + "drive_letter_color": "bright_cyan", "show_read_speed": true, - "read_label_color": "cyan", - "read_speed_color": "red", + "read_label_color": "white", + "read_speed_color": "bright_cyan", "show_write_speed": true, - "write_label_color": "cyan", - "write_speed_color": "red", - "show_serial_number": true, - "serial_number_color": "cyan", - "show_external_status": true, - "speed_unit_color": "bright_cyan", - "]": "red", - "[": "red", - "(": "cyan", - ")": "cyan", - "/": "red", - "-": "green", - "|": "green" + "write_label_color": "white", + "write_speed_color": "bright_cyan", + "show_serial_number": false, + "serial_number_color": "white", + "show_external_status": false, + "speed_unit_color": "white", + "]": "white", + "[": "white", + "(": "white", + ")": "white", + "/": "white", + "-": "white", + "|": "white" }, "disk_performance_predicted": { "header": { - "show_header": true, - "line_color": "blue", - "title_color": "bright_yellow" - }, - "show_drive_letter": true, - "drive_letter_color": "bright_blue", - "show_read_speed": true, - "read_label_color": "cyan", - "read_speed_color": "red", - "show_write_speed": true, - "write_label_color": "cyan", - "write_speed_color": "red", - "show_serial_number": true, - "serial_number_color": "cyan", - "show_external_status": true, - "speed_unit_color": "bright_cyan", - "]": "red", - "[": "red", - "(": "green", - "/": "red", - "-": "green", - "GIB": "bright_yellow", - "|": "green" + "show_header": false + } } }, "network_info": { @@ -415,65 +299,27 @@ "show_name": true, "show_type": true, "show_local_ip": true, - "show_public_ip": true, - "show_locale": true, - "show_mac": true, - "show_upload": true, - "show_download": true, - "#-": "bright_blue", - "~": "cyan", - ":": "red", - "separator_line": "red", - "header_text_color": "bright_yellow", - "name_label_color": "blue", - "name_value_color": "blue", - "type_label_color": "blue", - "type_value_color": "cyan", - "local_ip_label_color": "blue", - "local_ip_color": "red", - "public_ip_label_color": "blue", - "public_ip_color": "red", - "locale_label_color": "blue", - "locale_value_color": "cyan", - "mac_label_color": "blue", - "mac_value_color": "blue", - "upload_label_color": "blue", - "upload_value_color": "bright_red", - "download_label_color": "blue", - "download_value_color": "blue" + "show_public_ip": false, + "show_locale": false, + "show_mac": false, + "show_upload": false, + "show_download": false, + "#-": "cyan", + "~": "white", + ":": "white", + "separator_line": "cyan", + "header_text_color": "bright_cyan", + "name_label_color": "white", + "name_value_color": "bright_cyan", + "type_label_color": "white", + "type_value_color": "bright_cyan", + "local_ip_label_color": "white", + "local_ip_color": "bright_cyan", + "public_ip_label_color": "white", + "public_ip_color": "bright_cyan" }, "dummy_network_info": { - "enabled": false, - "show_header": true, - "show_name": true, - "show_type": true, - "show_local_ip": true, - "show_public_ip": true, - "show_locale": true, - "show_mac": true, - "show_upload": true, - "show_download": true, - "#-": "bright_blue", - "~": "cyan", - ":": "red", - "separator_line": "red", - "header_text_color": "bright_yellow", - "name_label_color": "blue", - "name_value_color": "blue", - "type_label_color": "blue", - "type_value_color": "cyan", - "local_ip_label_color": "blue", - "local_ip_color": "red", - "public_ip_label_color": "blue", - "public_ip_color": "red", - "locale_label_color": "blue", - "locale_value_color": "cyan", - "mac_label_color": "blue", - "mac_value_color": "blue", - "upload_label_color": "blue", - "upload_value_color": "bright_red", - "download_label_color": "blue", - "download_value_color": "blue" + "enabled": false }, "os_info": { "enabled": true, @@ -483,27 +329,23 @@ "show_architecture": true, "show_kernel": true, "show_uptime": true, - "show_install_date": true, - "show_serial": true, - "#-": "bright_blue", - "~": "cyan", - ":": "red", - "separator_line": "red", - "header_text_color": "bright_yellow", - "name_label_color": "blue", - "name_value_color": "blue", - "build_label_color": "blue", - "build_value_color": "red", - "arch_label_color": "blue", - "arch_value_color": "cyan", - "kernel_label_color": "blue", - "kernel_value_color": "cyan", - "uptime_label_color": "blue", - "uptime_value_color": "red", - "install_date_label_color": "blue", - "install_date_value_color": "red", - "serial_label_color": "blue", - "serial_value_color": "blue" + "show_install_date": false, + "show_serial": false, + "#-": "cyan", + "~": "white", + ":": "white", + "separator_line": "cyan", + "header_text_color": "bright_cyan", + "name_label_color": "white", + "name_value_color": "bright_cyan", + "build_label_color": "white", + "build_value_color": "bright_cyan", + "arch_label_color": "white", + "arch_value_color": "bright_cyan", + "kernel_label_color": "white", + "kernel_value_color": "bright_cyan", + "uptime_label_color": "white", + "uptime_value_color": "bright_cyan" }, "cpu_info": { "enabled": true, @@ -511,42 +353,30 @@ "show_brand": true, "show_utilization": true, "show_speed": true, - "show_base_speed": true, + "show_base_speed": false, "show_cores": true, "show_logical_processors": true, - "show_sockets": true, - "show_virtualization": true, - "show_l1_cache": true, - "show_l2_cache": true, - "show_l3_cache": true, - "#-": "bright_blue", - "~": "cyan", - ":": "red", - "%": "red", - "separator_line": "red", - "header_text_color": "bright_yellow", - "brand_label_color": "blue", - "brand_value_color": "cyan", - "utilization_label_color": "blue", - "utilization_value_color": "red", - "speed_label_color": "blue", - "speed_value_color": "cyan", - "base_speed_label_color": "blue", - "base_speed_value_color": "blue", - "cores_label_color": "blue", - "cores_value_color": "cyan", - "logical_processors_label_color": "blue", - "logical_processors_value_color": "bright_cyan", - "sockets_label_color": "blue", - "sockets_value_color": "blue", - "virtualization_label_color": "blue", - "virtualization_value_color": "red", - "l1_cache_label_color": "blue", - "l1_cache_value_color": "red", - "l2_cache_label_color": "blue", - "l2_cache_value_color": "red", - "l3_cache_label_color": "blue", - "l3_cache_value_color": "cyan" + "show_sockets": false, + "show_virtualization": false, + "show_l1_cache": false, + "show_l2_cache": false, + "show_l3_cache": false, + "#-": "cyan", + "~": "white", + ":": "white", + "%": "white", + "separator_line": "cyan", + "header_text_color": "bright_cyan", + "brand_label_color": "white", + "brand_value_color": "bright_cyan", + "utilization_label_color": "white", + "utilization_value_color": "bright_cyan", + "speed_label_color": "white", + "speed_value_color": "bright_cyan", + "cores_label_color": "white", + "cores_value_color": "bright_cyan", + "logical_processors_label_color": "white", + "logical_processors_value_color": "bright_cyan" }, "gpu_info": { "enabled": true, @@ -558,178 +388,75 @@ "show_vendor": true, "show_driver": true, "show_temperature": true, - "show_cores": true, - "show_primary_details": true, - "#-": "bright_blue", - "|->": "cyan", - "#->": "bright_cyan", - ":": "red", - "%": "red", - "unit_color": "cyan", - "separator_line": "red", + "show_cores": false, + "show_primary_details": false, + "#-": "cyan", + "|->": "white", + "#->": "white", + ":": "white", + "%": "white", + "unit_color": "white", + "separator_line": "cyan", "header_text_color": "bright_cyan", - "primary_header_color": "bright_blue", - "gpu_index_label_color": "blue", - "name_label_color": "blue", - "name_value_color": "cyan", - "memory_label_color": "blue", - "memory_value_color": "bright_blue", - "usage_label_color": "blue", - "usage_value_color": "bright_red", - "vendor_label_color": "blue", - "vendor_value_color": "cyan", - "driver_label_color": "blue", + "primary_header_color": "bright_cyan", + "gpu_index_label_color": "white", + "name_label_color": "white", + "name_value_color": "bright_cyan", + "memory_label_color": "white", + "memory_value_color": "bright_cyan", + "usage_label_color": "white", + "usage_value_color": "bright_cyan", + "vendor_label_color": "white", + "vendor_value_color": "bright_cyan", + "driver_label_color": "white", "driver_value_color": "bright_cyan", - "temp_label_color": "blue", - "temp_value_color": "bright_red", - "cores_label_color": "blue", - "cores_value_color": "cyan", - "p_name_label_color": "blue", - "p_vram_label_color": "blue", - "p_freq_label_color": "blue", - "freq_value_color": "bright_blue", - "error_color": "bright_red" + "temp_label_color": "white", + "temp_value_color": "bright_cyan" }, "display_info": { "enabled": true, - "show_display_banner": true, "show_display_index": false, "show_name": true, "show_applied_resolution": true, "show_native_resolution": true, "show_aspect_ratio": true, - "show_scaling": true, - "show_upscale": true, - "show_dsr": true, - "display_banner_text": "blue", - "display_banner_line": "red", - + "show_scaling": false, + "show_upscale": false, + "show_dsr": false, + "display_banner_text": "cyan", + "display_banner_line": "cyan", "colors": { - "#-": "blue", - "|->": "cyan", - ":": "blue", - "x": "blue", - "@": "blue", - "%": "blue", - - "header_text_color": "cyan", - "separator_line": "red", - - "index_color": "cyan", - - "name_label_color": "blue", - "name_value_color": "cyan", - - "applied_res_label_color": "blue", - "applied_res_value_color": "cyan", - - "native_res_label_color": "blue", - "native_res_value_color": "cyan", - - "aspect_ratio_label_color": "blue", - "aspect_ratio_value_color": "cyan", - - "scaling_label_color": "blue", - "scaling_value_color": "cyan", - - "upscale_label_color": "blue", - "upscale_value_color": "cyan", - - "hz_color": "red", - - "dsr_label_color": "blue", - "dsr_enabled_color": "cyan", - "dsr_disabled_color": "red", - "dsr_brackets_color": "blue", - "dsr_type_color": "cyan" + "#-": "cyan", + "|->": "white", + ":": "white", + "x": "white", + "@": "white", + "%": "white", + "header_text_color": "bright_cyan", + "separator_line": "cyan", + "index_color": "bright_cyan", + "name_label_color": "white", + "name_value_color": "bright_cyan", + "applied_res_label_color": "white", + "applied_res_value_color": "bright_cyan", + "native_res_label_color": "white", + "native_res_value_color": "bright_cyan", + "aspect_ratio_label_color": "white", + "aspect_ratio_value_color": "bright_cyan", + "hz_color": "bright_cyan" } - }, "bios_mb_info": { - "enabled": true, - "show_header": true, - "show_bios_vendor": true, - "show_bios_version": true, - "show_bios_date": true, - "show_mb_model": true, - "show_mb_manufacturer": true, - "#-": "bright_blue", - "~": "cyan", - ":": "red", - "separator_line": "red", - "header_text_color": "bright_cyan", - "vendor_label_color": "blue", - "vendor_value_color": "cyan", - "version_label_color": "blue", - "version_value_color": "bright_cyan", - "date_label_color": "blue", - "date_value_color": "bright_red", - "model_label_color": "blue", - "model_value_color": "bright_blue", - "mfg_label_color": "blue", - "mfg_value_color": "cyan" + "enabled": false }, "user_info": { - "enabled": true, - "show_header": true, - "show_username": true, - "show_computer_name": true, - "show_domain": true, - "#-": "bright_blue", - "~": "cyan", - ":": "red", - "separator_line": "red", - "header_text_color": "bright_cyan", - "username_label_color": "blue", - "username_value_color": "cyan", - "computer_name_label_color": "blue", - "computer_name_value_color": "red", - "domain_label_color": "blue", - "domain_value_color": "bright_blue" + "enabled": false }, "performance_info": { - "enabled": true, - "show_header": true, - "show_uptime": true, - "show_cpu_usage": true, - "show_ram_usage": true, - "show_disk_usage": true, - "show_gpu_usage": true, - "#-": "bright_blue", - "~": "cyan", - ":": "red", - "%": "blue", - "separator_line": "red", - "header_text_color": "bright_cyan", - "uptime_label_color": "blue", - "uptime_value_color": "bright_blue", - "cpu_usage_label_color": "blue", - "ram_usage_label_color": "blue", - "disk_usage_label_color": "blue", - "gpu_usage_label_color": "blue", - "usage_value_color": "bright_red" + "enabled": false }, "audio_power_info": { - "enabled": true, - "show_output_header": true, - "show_input_header": true, - "show_active_status": true, - "show_power_info": true, - "show_power_header": true, - "#-": "bright_blue", - "~": "cyan", - "separator_line": "red", - "bracket_color": "blue", - "unit_color": "bright_cyan", - "header_text_color": "bright_cyan", - "battery_label_color": "blue", - "index_color": "red", - "device_name_color": "cyan", - "active_label_color": "red", - "wired_text_color": "bright_blue", - "battery_percent_color": "bright_blue", - "charging_status_color": "bright_cyan", - "not_charging_status_color": "bright_red" + "enabled": false } -} \ No newline at end of file +} diff --git a/project_binary_fetch/binary_fetch_v1/DetailedScreen.h b/project_binary_fetch/binary_fetch_v1/DetailedScreen.h index dd3d927..734c454 100644 --- a/project_binary_fetch/binary_fetch_v1/DetailedScreen.h +++ b/project_binary_fetch/binary_fetch_v1/DetailedScreen.h @@ -1,7 +1,10 @@ #pragma once #include #include + +#if defined(_WIN32) || defined(_WIN64) #include +#endif struct DetailedScreenInfo { // Basic Information @@ -80,14 +83,13 @@ class DetailedScreen { private: std::vector screens; - // Core population methods +#if defined(_WIN32) || defined(_WIN64) bool populateFromDXGI(); bool enrichWithEDID(); bool enrichWithRegistry(); bool enrichWithNVAPI(); bool enrichWithADL(); - // Enhanced EDID parsing struct ExtendedEDIDInfo { std::string friendlyName; int nativeWidth; @@ -101,7 +103,6 @@ class DetailedScreen { ExtendedEDIDInfo parseExtendedEDID(const unsigned char* edid, size_t size); - // Helper methods std::string getFriendlyNameFromEDID(const std::wstring& deviceName); std::string getConnectionType(const std::wstring& deviceName); bool detectHDRCapability(const std::wstring& deviceName); @@ -110,7 +111,9 @@ class DetailedScreen { int getBitDepth(const std::wstring& deviceName); std::string getColorFormat(const std::wstring& deviceName); std::string getPanelType(const std::string& modelName); - - // Manufacturer ID decoder std::string decodeManufacturerID(unsigned short id); +#else + bool populateFromXrandr(); + bool populateFromDRM(); +#endif }; \ No newline at end of file diff --git a/project_binary_fetch/binary_fetch_v1/DistroDetector.cpp b/project_binary_fetch/binary_fetch_v1/DistroDetector.cpp new file mode 100644 index 0000000..40a30f1 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/DistroDetector.cpp @@ -0,0 +1,349 @@ +#include "DistroDetector.h" +#include +#include +#include +#include + +#if defined(_WIN32) +#define PLATFORM_WINDOWS 1 +#else +#define PLATFORM_WINDOWS 0 +#endif + +#if defined(__linux__) +#define PLATFORM_LINUX 1 +#else +#define PLATFORM_LINUX 0 +#endif + +#if defined(__FreeBSD__) +#define PLATFORM_FREEBSD 1 +#else +#define PLATFORM_FREEBSD 0 +#endif + +#if defined(__APPLE__) +#define PLATFORM_MACOS 1 +#else +#define PLATFORM_MACOS 0 +#endif + +static std::string toLower(const std::string& s) { + std::string result = s; + std::transform(result.begin(), result.end(), result.begin(), + [](unsigned char c) { return std::tolower(c); }); + return result; +} + +std::string DistroDetector::readOsRelease() { + std::ifstream file("/etc/os-release"); + if (!file.is_open()) { + file.open("/usr/lib/os-release"); + } + if (!file.is_open()) return ""; + + std::stringstream buffer; + buffer << file.rdbuf(); + return buffer.str(); +} + +Distro DistroDetector::detectLinux() { + std::string osRelease = toLower(readOsRelease()); + + if (osRelease.find("nixos") != std::string::npos) return Distro::NixOS; + if (osRelease.find("endeavouros") != std::string::npos) return Distro::EndeavourOS; + if (osRelease.find("garuda") != std::string::npos) return Distro::Garuda; + if (osRelease.find("manjaro") != std::string::npos) return Distro::Manjaro; + if (osRelease.find("artix") != std::string::npos) return Distro::Artix; + if (osRelease.find("arch") != std::string::npos) return Distro::Arch; + if (osRelease.find("pop") != std::string::npos) return Distro::PopOS; + if (osRelease.find("elementary") != std::string::npos) return Distro::Elementary; + if (osRelease.find("zorin") != std::string::npos) return Distro::Zorin; + if (osRelease.find("mint") != std::string::npos) return Distro::Mint; + if (osRelease.find("kali") != std::string::npos) return Distro::Kali; + if (osRelease.find("parrot") != std::string::npos) return Distro::ParrotOS; + if (osRelease.find("ubuntu") != std::string::npos) return Distro::Ubuntu; + if (osRelease.find("debian") != std::string::npos) return Distro::Debian; + if (osRelease.find("fedora") != std::string::npos) return Distro::Fedora; + if (osRelease.find("centos") != std::string::npos) return Distro::CentOS; + if (osRelease.find("red hat") != std::string::npos || + osRelease.find("rhel") != std::string::npos) return Distro::RHEL; + if (osRelease.find("opensuse") != std::string::npos || + osRelease.find("suse") != std::string::npos) return Distro::OpenSUSE; + if (osRelease.find("gentoo") != std::string::npos) return Distro::Gentoo; + if (osRelease.find("slackware") != std::string::npos) return Distro::Slackware; + if (osRelease.find("alpine") != std::string::npos) return Distro::Alpine; + if (osRelease.find("void") != std::string::npos) return Distro::Void; + if (osRelease.find("mx") != std::string::npos) return Distro::MXLinux; + + return Distro::Unknown; +} + +Distro DistroDetector::detectBSD() { +#if PLATFORM_FREEBSD + return Distro::FreeBSD; +#endif + + std::ifstream file("/etc/rc.conf"); + if (file.is_open()) { + return Distro::FreeBSD; + } + + return Distro::Unknown; +} + +Distro DistroDetector::detect() { +#if PLATFORM_WINDOWS + return Distro::Windows; +#elif PLATFORM_MACOS + return Distro::macOS; +#elif PLATFORM_FREEBSD + return Distro::FreeBSD; +#elif PLATFORM_LINUX + return detectLinux(); +#else + return Distro::Unknown; +#endif +} + +std::string DistroDetector::getName(Distro d) { + switch (d) { + case Distro::Arch: return "Arch Linux"; + case Distro::Debian: return "Debian"; + case Distro::Ubuntu: return "Ubuntu"; + case Distro::Fedora: return "Fedora"; + case Distro::CentOS: return "CentOS"; + case Distro::RHEL: return "Red Hat"; + case Distro::OpenSUSE: return "openSUSE"; + case Distro::Manjaro: return "Manjaro"; + case Distro::Mint: return "Linux Mint"; + case Distro::PopOS: return "Pop!_OS"; + case Distro::Gentoo: return "Gentoo"; + case Distro::Slackware: return "Slackware"; + case Distro::Alpine: return "Alpine"; + case Distro::Void: return "Void Linux"; + case Distro::NixOS: return "NixOS"; + case Distro::EndeavourOS: return "EndeavourOS"; + case Distro::Garuda: return "Garuda Linux"; + case Distro::Kali: return "Kali Linux"; + case Distro::ParrotOS: return "Parrot OS"; + case Distro::Zorin: return "Zorin OS"; + case Distro::Elementary: return "elementary OS"; + case Distro::MXLinux: return "MX Linux"; + case Distro::Artix: return "Artix Linux"; + case Distro::FreeBSD: return "FreeBSD"; + case Distro::OpenBSD: return "OpenBSD"; + case Distro::NetBSD: return "NetBSD"; + case Distro::DragonFlyBSD: return "DragonFly BSD"; + case Distro::macOS: return "macOS"; + case Distro::Windows: return "Windows"; + default: return "Linux"; + } +} + +std::string DistroDetector::getAsciiArt(Distro d) { + switch (d) { + case Distro::NixOS: + return R"($6 \\ \\ // +$6 ==\\__\\/ // +$6 // \\// +$6==// //== +$6 //\\___// +$6// /\\ \\== +$6 // \\ \\)"; + + case Distro::Arch: + return R"($6 /\ +$6 / \ +$6 /\ \ +$6 / \ +$6 / ,, \ +$6 / | | -\ +$6/_-'' ''-_\)"; + + case Distro::Debian: + return R"($1 _____ +$1 / __ \ +$1| / | +$1| \___- +$1-_ +$1 --_)"; + + case Distro::Ubuntu: + return R"($3 _ +$3 ---(_) +$3 _/ --- \ +$3(_) | | +$3 \ --- _/ +$3 ---(_))"; + + case Distro::Fedora: + return R"($4 _____ +$4 / __)$7\ +$4 | / $7\ \ +$7 __$4_| |_$7_/ / +$7 / $4(_ _)$7_/ +$7 / / $4| | +$7 \ \$4__/ | +$7 \$4(_____/)"; + + case Distro::Manjaro: + return R"($2||||||||| |||| +$2||||||||| |||| +$2|||| |||| +$2|||| |||| |||| +$2|||| |||| |||| +$2|||| |||| |||| +$2|||| |||| ||||)"; + + case Distro::Mint: + return R"($2 _____________ +$2|_ \\ +$2 | $7| _____ $2| +$2 | $7| | | | $2| +$2 | $7| | | | $2| +$2 | $7\\__$7___/ $2| +$2 \\_________/)"; + + case Distro::PopOS: + return R"($6______ +$6\ _ \ __ +$6 \ \ \ \ / / +$6 \ \_\ \ / / +$6 \ ___\ /_/ +$6 \ \ _ +$6 __\_\__(_)_ +$6 (___________)"; + + case Distro::Gentoo: + return R"($5 _-----_ +$5( \\ +$5\ 0 \\ +$7 \ ) +$7 / _/ +$7( _- +$7\____-)"; + + case Distro::Alpine: + return R"($4 /\ /\ +$4 / \ \ +$4 / \ \ +$4/ \ \ +$4\ \ / +$4 \ / +$4 \ /)"; + + case Distro::Void: + return R"($2 _______ +$2 _ \______ - +$2| \ ___ \ | +$2| | / \ | | +$2| | \___/ | | +$2| \______ \_| +$2 -_______\)"; + + case Distro::EndeavourOS: + return R"($5 /$1\ +$5 /$1/ \$5\ +$5 /$1/ $5/$1\ \$5\ +$5 /$1/ $5/$6 \$1\ \$5\ +$5 /$1/ $5/$6 \$1\ \$5\ +$5/$1/ $6 \$1\ \$5\ +$5\$1\$6 /$1/ $5/ +$5 \$1\$6_________/$1/ $5/)"; + + case Distro::Garuda: + return R"($6 .. +$6 .;;,. +$6 ';;;;;;;. +$6 ':;;;;;;;;;;, +$6 .:;;;;;;;$1''$6;;;' +$6 ';;;;;;$1'$6 .$1';;$6 +$6.;;;$1'. .$6;;;$1'. +$6;;$1' .;;;;;$1'.)"; + + case Distro::Kali: + return R"($4.............. +$4 ..,;:ccc,. +$4 ......''';lxO. +$4.....''''..........,:ld; +$4 .';;;:::;,,.x, +$4 ..'''. 0Kx +$4 .... KKK)"; + + case Distro::Artix: + return R"($6 /\ +$6 / \ +$6 /`'.,\ +$6 / ', +$6 / ,`\ +$6 / ,.'`. \ +$6/.,'` `'.\)"; + + case Distro::FreeBSD: + return R"($1 /\,-'''''-,/\ +$1 \_) (_/ +$1 | \ / | +$1 | O O | +$1 ; ._, ; +$1 '-___-')"; + + case Distro::OpenBSD: + return R"($3 _____ +$3 \- -/ +$3 \_/ \ +$3 | O O | +$3 |_ < ) 3 ) +$3 / \ / +$3 /-_____-\)"; + + case Distro::macOS: + return R"($2 .:' +$2 __ :'__ +$3 .'` `-' ``. +$1: .-' +$1: : +$5 : `-; +$4 `.__.-.__.')"; + + case Distro::Windows: + return R"($6lllllllll lllllllll +$6lllllllll lllllllll +$6lllllllll lllllllll +$6lllllllll lllllllll + +$6lllllllll lllllllll +$6lllllllll lllllllll +$6lllllllll lllllllll +$6lllllllll lllllllll)"; + + case Distro::OpenSUSE: + return R"($2 _______ +$2__| __ \ +$2 / .\\ \\ +$2 \\__/ | +$2 _______| +$2 \_______ +$2__________/)"; + + case Distro::CentOS: + case Distro::RHEL: + return R"($2 .---. +$3 / \\ +$3 \\ / +$2 /`--.--'\\ +$4 / $2.'o'.$4 \\ +$4 / `-----' \\ +$4 \\ / +$4 `--.___,--')"; + + default: + return R"($7 ___ +$7 (.· | +$7 (<> | +$7 / __ \ +$7 ( / \ /| +$7_/\ __)/_) +$7\/-____\/)"; + } +} diff --git a/project_binary_fetch/binary_fetch_v1/DistroDetector.h b/project_binary_fetch/binary_fetch_v1/DistroDetector.h new file mode 100644 index 0000000..a657788 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/DistroDetector.h @@ -0,0 +1,28 @@ +#ifndef DISTRO_DETECTOR_H +#define DISTRO_DETECTOR_H + +#include + +enum class Distro { + Unknown, + Arch, Debian, Ubuntu, Fedora, CentOS, RHEL, OpenSUSE, Manjaro, + Mint, PopOS, Gentoo, Slackware, Alpine, Void, NixOS, EndeavourOS, + Garuda, Kali, ParrotOS, Zorin, Elementary, MXLinux, Artix, + FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, + macOS, + Windows +}; + +class DistroDetector { +public: + static Distro detect(); + static std::string getName(Distro d); + static std::string getAsciiArt(Distro d); + +private: + static Distro detectLinux(); + static Distro detectBSD(); + static std::string readOsRelease(); +}; + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/PerformanceInfo.h b/project_binary_fetch/binary_fetch_v1/PerformanceInfo.h index 8151ae7..5b01c5a 100644 --- a/project_binary_fetch/binary_fetch_v1/PerformanceInfo.h +++ b/project_binary_fetch/binary_fetch_v1/PerformanceInfo.h @@ -1,11 +1,13 @@ #pragma once #include + +#if defined(_WIN32) || defined(_WIN64) #include #include - #pragma comment(lib, "pdh.lib") -#pragma comment(lib, "nvapi64.lib") // make sure NVAPI SDK library is linked +#pragma comment(lib, "nvapi64.lib") +#endif class PerformanceInfo { private: diff --git a/project_binary_fetch/binary_fetch_v1/TimeInfo.cpp b/project_binary_fetch/binary_fetch_v1/TimeInfo.cpp index 8a80363..b00ddff 100644 --- a/project_binary_fetch/binary_fetch_v1/TimeInfo.cpp +++ b/project_binary_fetch/binary_fetch_v1/TimeInfo.cpp @@ -1,23 +1,24 @@ #include "TimeInfo.h" -// Constructor - gets current system time TimeInfo::TimeInfo() { updateTime(); } -// Private method to fetch current system time void TimeInfo::updateTime() { +#if defined(_WIN32) || defined(_WIN64) GetLocalTime(&systemTime); +#else + time_t now = time(nullptr); + localtime_r(&now, &timeInfo); +#endif } -// Check if a year is a leap year bool TimeInfo::isLeapYear(int year) const { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } -// Calculate ISO week number int TimeInfo::calculateWeekNumber() const { - // Get January 1st of current year +#if defined(_WIN32) || defined(_WIN64) SYSTEMTIME jan1; jan1.wYear = systemTime.wYear; jan1.wMonth = 1; @@ -37,72 +38,98 @@ int TimeInfo::calculateWeekNumber() const { uli2.LowPart = ft2.dwLowDateTime; uli2.HighPart = ft2.dwHighDateTime; - // Calculate day of year ULONGLONG diff = uli2.QuadPart - uli1.QuadPart; int dayOfYear = (int)(diff / 10000000ULL / 86400ULL) + 1; - - // Calculate week number (simple calculation) int weekNumber = (dayOfYear + 6) / 7; - return weekNumber; +#else + int dayOfYear = timeInfo.tm_yday + 1; + int weekNumber = (dayOfYear + 6) / 7; + return weekNumber; +#endif } -// Get second int TimeInfo::getSecond() const { +#if defined(_WIN32) || defined(_WIN64) return systemTime.wSecond; +#else + return timeInfo.tm_sec; +#endif } -// Get minute int TimeInfo::getMinute() const { +#if defined(_WIN32) || defined(_WIN64) return systemTime.wMinute; +#else + return timeInfo.tm_min; +#endif } -// Get hour int TimeInfo::getHour() const { +#if defined(_WIN32) || defined(_WIN64) return systemTime.wHour; +#else + return timeInfo.tm_hour; +#endif } -// Get day int TimeInfo::getDay() const { +#if defined(_WIN32) || defined(_WIN64) return systemTime.wDay; +#else + return timeInfo.tm_mday; +#endif } -// Get week number int TimeInfo::getWeekNumber() const { return calculateWeekNumber(); } -// Get day name std::string TimeInfo::getDayName() const { const char* days[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; +#if defined(_WIN32) || defined(_WIN64) return days[systemTime.wDayOfWeek]; +#else + return days[timeInfo.tm_wday]; +#endif } -// Get month number int TimeInfo::getMonthNumber() const { +#if defined(_WIN32) || defined(_WIN64) return systemTime.wMonth; +#else + return timeInfo.tm_mon + 1; +#endif } -// Get month name std::string TimeInfo::getMonthName() const { const char* months[] = { "", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; +#if defined(_WIN32) || defined(_WIN64) return months[systemTime.wMonth]; +#else + return months[timeInfo.tm_mon + 1]; +#endif } -// Get year number int TimeInfo::getYearNumber() const { +#if defined(_WIN32) || defined(_WIN64) return systemTime.wYear; +#else + return timeInfo.tm_year + 1900; +#endif } -// Get leap year status std::string TimeInfo::getLeapYear() const { +#if defined(_WIN32) || defined(_WIN64) return isLeapYear(systemTime.wYear) ? "Yes" : "No"; +#else + return isLeapYear(timeInfo.tm_year + 1900) ? "Yes" : "No"; +#endif } -// Refresh the system time void TimeInfo::refresh() { updateTime(); -} \ No newline at end of file +} diff --git a/project_binary_fetch/binary_fetch_v1/TimeInfo.h b/project_binary_fetch/binary_fetch_v1/TimeInfo.h index ae968d1..21985bf 100644 --- a/project_binary_fetch/binary_fetch_v1/TimeInfo.h +++ b/project_binary_fetch/binary_fetch_v1/TimeInfo.h @@ -2,35 +2,39 @@ #define TIMEINFO_H #include +#include + +#if defined(_WIN32) || defined(_WIN64) #include +#endif class TimeInfo { private: +#if defined(_WIN32) || defined(_WIN64) SYSTEMTIME systemTime; +#else + struct tm timeInfo; +#endif void updateTime(); bool isLeapYear(int year) const; int calculateWeekNumber() const; public: - // Constructor - automatically fetches current system time TimeInfo(); - // Time components int getSecond() const; int getMinute() const; int getHour() const; - // Date components int getDay() const; int getWeekNumber() const; std::string getDayName() const; int getMonthNumber() const; std::string getMonthName() const; int getYearNumber() const; - std::string getLeapYear() const; // Returns "Yes" or "No" + std::string getLeapYear() const; - // Refresh system time void refresh(); }; diff --git a/project_binary_fetch/binary_fetch_v1/build/binaryfetch b/project_binary_fetch/binary_fetch_v1/build/binaryfetch new file mode 100755 index 0000000000000000000000000000000000000000..a18b29961be74bd1af5875c83f6a7a34b260ccb3 GIT binary patch literal 2002176 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 RCK0Q9$R7d3zJ@1Gs*Zd!kH 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

F$)!ROH}fo<7aBg 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%0Dmfadt)%$MA7-Qgzf%U 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 >vG9%X(mcoS0?+wG`uPo2uNv^S@P}WC zcZ5HO&wf|=Y3I|>f8}#6Mmz$2%4g!~x!$)tSp>gbJAS*2crN`>_u&}tXXW1lKgILP zEcpKl-^2Z`D)1NFTNYkE6uzLiS%2*8xHm6~-Y;%(8wyW%N^wh`L`IA88P0WgH2!N6 z$tU(b_4g_8BaVB=jbuHBKzq-i_c&1HkG8Gh<}$P@~=2f%5re`MZaKun=V!P zYr_Lc#g~u|7Ki@uKYo<|B=o1?ZQWPpyx(+q?PT&vd0laP6W#^B<}a1ME<8nY=|}qR z3q`;;?NmIoq3;1-9;xzAg~vK>V-YC$Cu<7%$G)XLJC`g8E%lNGo8@CWdLKWKbd1J9U7{_~HhJeId}9QXQN)3xFsGH!o|{@G3e)1QP_ zucUT~!2bnz!`6#W(sGLb|BWYb|MTvMbke8VuJT)d$&y}tW-gWIHvUcE_3G-l7N1G* zpJphYMbIBLJ<*{+E)=TpF^1j-oH|N0v@QLWH-J4`l{uH~Z_^?biFu`%JUZZ}J zPg=^eIjHCV`JX?({|B$|vV8K)QN65vo55?3S9~l#d&47mZf<$#K3|vMxbZ?(`A_9O z$w0>WXn1DYvAV?*emYe3Dh_`DPtJW;8>7C;CjW8V_b{I~vWxFdqWFj7lPgD}z*4uL zUaW7Q(teJ6@qG59;xGz*ft=#$9;?5{!rz0B|5@!~`F|fC;l35>{cPN>|B8G*;XT2< z_-uh!`$PT9^6d|JR=(uc6#cv~`9zdbdAh@^o?+?=@e2PowYeKE>+& zYT@$_yka}Gdl-`R0%BT(?qF!aa2Rr@yQAK%X_pGM!P zJl0(`$F5`)tN7~ z#V1*Wd^WhRLVG{U+k)_{Pt?8^&sy+(T}5K>xd-pbdQt0lsfwyyivOkatd+AYyxs}< z*!ifr<6eB0aNS`sUj@&dFaCJ=PBG~R*HoTVr99PN6Zfx+=mP(Y`$d)y-@&sm->!pC zzexE!IIB3=dF^v}nXeT8Y3M(AUHbF92WRuQ48_GWuT*_)-dGAg=U2tY?#G^mx9P9? z=Epy+6L|5t@UQA?*I$`Rif7?{YMVb)hc{rpWc~Vccr@$W*5dy!JeGRdJaAem`R~r7 z9%19sHh8+yDt`fd(v+5dHTQMX!^=2sZ3+th8H@hM-;{^e?*_afpS*u6{#O3e@L4}A z{t=iBEF=Ay;fh-nyj@xGat)-<0lx?zJ~#fjce|YQbvvrP+M%CUUi@v}dc_ai0~D`a zvS*au?tfl{zvsT*?EP$f%i$Kfd-@&p-?8|2gr5piJguC|;Rkr%a2@)*73DLqwaRb( zu^GHVW5sO(`t9(?c@<%c+rRMH@2Q;DMq?|a3Gie~q-G^-B`+me^^n(T{4ys)s z@E!c(FtvLvd}>vdf19cr|4ly)ewF*NHZM(6P5QX;DyNNOrQuml$Ui^+7vV|0jl11% zNFx2i+$j0+nA*3G>oZ$&+=fl1fBgsPKZbt;U*>xr^nNqxpYfc+{7=J=O%zE@ zc^)~Q-i=EE-}erZHZK=;5%ALY4JJdxaB<3;Ggie^4al{>g68q27goFalZ9S zU$&FJPK5kp&{t?LevJ3^tltfTS9qd$TK><4hn>}UZu8H_@V)q3|LV~}{>u)^$Id(R zI>LE>-{Su>Jl{Ii%jWHEJ4ru-{$=Ca2zYo*{OgP5@X#Cb38%hAJ5yhtkJ$BE{Vw8n z+1JJ5@D03o9rgFe_~h*>{hltWm*vA`xc@pXQ;gS+sRL_fsb3FZ{I441nEub7#*Taa zJtU3%Z5?23f%{q(=ST1~3*yH=q`Q2k^;OB!(XYcC_sV&L{dSg6 z&N}G39n^8nzh)2lZ07!nT^E;qPrNJV7t7(F;JaB@R*>?~>M4D3t_Lmt8GDJR@{P}( z;77R6>>dvVe>vPl!i(FUdun&;=6XK zAC-WA0k6!u7n{##=qLSS=Kt1Tx;bt!!6Nu)CVKyT^;dX+^OxmwoBr~@!1}SxoR6{& z5YK)`{leYO3jQj<@B7wYO@S}>J>Pt7pnM*(Uft#c_2Ji8uV}m%ya_j+yHmL-@T|NS zV|h|=ko?oIZmK-`Ch*K$FGRyT50>8lzVl4@248;8bQ8ja;=DY_QwRDdReaoOCHRZ` z5B*cey}T-ZMtaMuT0_PAGai0Ke_0G4$#YW6=gGsQ-yN#_v~lmn;o>1#lONx=`-9=|5dLK1d@#sUshQ4vRDm)`}YUf3h&ZJ z{$(iVE%*`k8!`VHqvgM;uIgocH@q0nJEHOV3x4Qt&BrWmy~oJsMnm~nKRp3oGF$Pf zj8BcR()VS4SQI`I?qA=Sb)58tvnoE;Pj|zsAD4d}e7cO6elO>p8t{eiW4ym<&++q3 zkpB2>#m(CNCOpF`)%P?$btX!Gb%yG@g8Y1OlCB5sd(w8lx{l*seunZMhxNx!@C}u8 z+&A&R124vVXEvT>o-Ch;Xyxa>=&!;T5uZZvoKvLlT1zck7Ty=$rm)Iy`Wf)~8RO^S zIruqW{^Xe||M9#RY5A}ZUWfIxmJe;;m;M~Q4s$Y)5V_-RDC~$C!3M5&ufl*KI=;BxOP1lHdEZbyIugFj_`iWmx{n| z!DnPtd)YiNdX{{`B2^yC=MnJRykBqeJPgm=HhvtEec+YfJ*Qwl=X{|$aAC*2@@G$} ze$kfloPt;VF22vk+0s`Sqxp~J=LL8q^DZ05s(dK@{KTqPOZ*?hZ_ib|?EY=nInvK& z9Z?winjeYB^;S7;{9Fr9cR>Aa9{T!orGNfVJU9FRJPY@k2f)|QlfG{X<@0-t|2gI> zZk@RAItzUz$Gy1S=l#Tt^y}5|+B>zlQw>pX<0+o;9q`w0xVgM7+}{ zs+X0s(Ngi;Q97=**EjGT0~G%XR5;}_=}T}w*8EGrlctV8?yZ4m<~@QK>bvn1`7~nO zE)4&Cxp-uLl_x!XAABOuuWkNW_fzQ`voBvd^i$v&nke5Uz;DB2eCOGm?gZq;Eh+D- zhM^w{Pg7Gqr-(!Kl?k^?N5?&%g1+}P+OHDN;GcYJwO4)) zvKc-wi}L3NyxLmnZ>*NjWcXJ2HuiL?_8IF3?*KpIdmsM;$36eif6KW=68#6;&{t+0wm5w9h5Q!`m)_2g(d)(c zTv0jeaNPayRJ>>19A4>5>EGwRggx(D1kcJk_9*lnH%Q-{^(S^d-RgKk?fxhF+Ff*> zviVrUjqNBiATzo4{Ldk^eEqVLR^( zg*Ut{pBVJHw@Tk;j>bKkf5ySr*VTAy{i5L4(l241gO#%xyc79gc{LwCH?!(hnDOV; zZSt8mOa9F$PsBIkEqvF%X}f$@F<-Uvtb{M&zMr-4WB8)^ zibE0R3D>@r&j8j{S{zdD5RbWfNqcx~d6#qUS2p;+ZoeJJ6Y5{f9k+89(%_$? zL7)F6`oI6c|7p0&ucNp%^1BoEZ}}g*r{i9~n96+8;t=`0_%+@eZBG%tf6-eHpE@wS zw~m-Y%@AmV{>vF^$K&YF!f#!Wz6d=19{Hc&qWl>PZvlV!isD%dz7oEM^%yokU;Bf6 zmN%7;oyX6>8&a<~@Oc7n$vAKI?YUPz6+hH*El(CYo=|(8K!1Vf^)HhTWB17?G?~g{ zd3zBa{*$=HA$6?uQNBE^1fSDb?Q8S%Y4F>ePghW{qWcprXJyB|_Py)dH()3{_6yb5 z;&30nd616V1^=1{U>7_>DX2ch;}>!2SFD--KsmpL{!iWxgVR|9$&JzljG%DL#*>Z-4lB z-ea;n+2**{AKUyQ{SNeJ(HB3Ua=Odm;4k%6`DZ;ZZvC+tyzm=}Lq~kB!=ruAmskES zpFg=@WIjK_Z~5NKehNQuMS1uL|6SMQQ~Pa|-}-6by14(o+!pwm3Kl zd4A}Id}4ji%U-xCUhB`r~DiF=3Oh{6HBOlEe^@=NWX&fqaF7b_|87$19_YG zFX`9#_N9CTzcobdo)-PSyV8fVPUCaxb?KgX6yH;@^5ncP-iiBHZkiGN<@{SbRcE#1 zdVG4q{p;wq!z(vad?uiO<$-*TZC0GC!dt>Cb6>^QU#0&?`ii{oZ1*A0!F!ZaeC)i_ z_o4Jr^ou$8?}BH&sJylIdH|osK2COho%WG@LfMzY#<#WbQtUHd9{+rgHU8|pC~#m+ zlHmUl9^{Dr=T9%kz45tnO2y|#{;kjx@gt|zkLD%#~cMSEa zJ9fbGB2Lzk}95dzFP=C#5!%u|6GZrf57@Hd(QF`-2Z)uK9W@WYs^qzkM&Aj( z`UjQA?r$80U%a3=TfI)Emd|zHdmly9h`;z$`bhj+!Ebz_e6#C|-tdEmRsIep_2+NHi)E0{8_bifoP*%AS#M*{0Y|t8 z+1_!R-%>&Be6bClllL8LKGq^ar|CDt*Ha zJ7~5}<1{>k_u3-RpM6>Sh1@5!@$<#3;>mbl*y3LU?th>96ZqKb%3JFfsj|r@ihV6? zUCK}JHW%XOTZ-(`f5h`;JMI{GZQgse>yeB(q(92~%xcu@b;rGNCiw%6OSa#BbM#AC zpKtX|lv6&1hiiN*h|dgo)>!3<)obP}@}JmLC3KfF!QWQLz4rC*tA7%{oBbb>qmK-e zKL4*82byx+w(vAx>$rA5q+2fXs+97|%D>ccufAp2ui!0wwmR;W=i`Pdr^WLx_-NME zSieY_Tly!g=P~^qc-2a3uUR}tD3wRYJ;3+!?EY{=$GzjO+$Mb<>N^_VuD$BDj&gR& zE4_ccbdr2teP0SBPnt2Pw00@yxaaTx-bW93bM6Ng#y_#!xY*NY;yVR(;fvvS-c{ay z0nb@L`r)kCwf?>ozRLF;=LozE{#``Fm?sWgSe{rgM5 z=eV8Iu?YT|jedpiy`GoDLjp_Pdo&~MJ(^JcS92WqjvJ_^c8SI85PZ`i<-c8DqFxYG6JD>Q_$7RD6_)>B4aM#J7z4k>_akgvoep2del?b# z`yEfHJonJgWxZB7$DQgPgn4mT%lGN(z}Lc)vwv?-___$`GceD$@7yRyc`Fu!!>HnJaRVyn$Z5%iSU&41kGvhNlQu#LW1?8Ka zFSa@E)%VgN^}Ds`^S>^>_o&+4<_W#v(-?p3{z<>$(s$%OPbGXVIPQ%rv=hIB36V8*j z9rxnX{AKAMa@-B@YZoi ze`oZq%1WPv_tWjVax1(qdH5>&w&kSH&vQ2$CwIUP@Ez@N^k?8_dC$@2QCG|3!*^XR z9~xE=_pkSu2cO(hakJ~VtMJ&vI{(`Ir{SCOSyWFgW$_#d&%}G;b{;$kFY~$b#`t=KLHt z2L31Sa}|Lvf#*D;au$Mbcih`o;ST#M=wID4>L~di@|_3Ez@yHpJmL8Cgty^7e;#v{vUwvWIeEzvrSFu8~v@w*f`m~7UlG=qOa;55sA1|lly33s4uVA!%#=M~Myf8j}9rt|v-+fpHugpGacAhFxSNhGo zcb1#uz6*bPQ2pAji~oh+s1UzAx9Z8K@=WE!%lHK9i}z<;u8nV*;N@60hz+3&U^OyD0hj9OQ zF3vWhzSR|f%ZF}nhXm4xWD9h$`55IHNEAYp2q#p~f*GxWZSPyUI&(&Ofc^buk4CU+s-{xC)u@wIBl*%8C|Ezc9 zlR34HYwz!0fTv?Ul9m6H7Rsw->D3?I@{HhbpW|M8y~+BDNc@wv6o0_`N7gR6;pH2s zJlW7!h0oyqZfo~~t>klcnvPo%{c`xJ*($%yAAW?#4pPZ&ym}5Fy+Q3&mHy~PDXqRG;L}*AYU9HI$G!Ps#14%cnKc{)7NJkW zzFXf@p4#o?KYWPtvpf70e0Edi^8|SL_R<$_D{lGL9Ui_#2P}mCHheJO@v-u^>>!`d zuPWbqpuY+q-#`91aId5EOW5!I|N2)a@zLz#ZSijbuk%Rx&>sJ{I!j*{z2((-c$RaD zLw)kFQ5Wfx-<3}@eA0Fm&-GAocn{tmzJvFXFL7Q-79)Ltbu!lOzrx?-eyR0~r|<{9 zb%s^nmCt?ltumjUaR2^_L%K=d`iAnn0Oi~QpEFN!PDXvlb(j7Q*Hbnw9fL1tUmY8_ z+x3usC;J^){NH^~d^G#3*f`dyr}!oIP3=W_&cl;(pG~v+K%jds>CeZhrnXLX0o=b| zeWBhQ*ViBWIc|NQLk9m$K;NRN+Sjf_>-Le))60rmEdSALcq86(w|w3WKfv=xi%^SKlL#*X;o=L5&BY*Z=ur}9ww+~hjl z#<$6iC#1iIe&81>XECeo=6Q_}<2fo3+;x_%`+vu<_wv zco+6zw(+gZNcl7_DxYo~w*lP0kJ(VT|NB0d;kAA1I`)r}zyCW01xAZ!Vcu@%qlxeq z^kBo-2XkJs~<_9 z@>|vSE%GPhT=6TzR9|bavyOYuBd+<@W4t&|`gOkjx0}HCjZ`~YyX2ZLeGKm*+I*uv z{O-v3?YJAB%C~Oex#J1tTjq~d&WGFww)1IA$Gv#oJ*o4Q^`q_ZU59jBoo_ze7#_`c zX02a*4bQ=QUOKw_ZXkRS>k_+D-zh8Pe|n1Yq&a*ie9tdB-_jeKVF+@}NlH@N@%>D4}y-v51y_VB3I%AbMwBwH)Je_!aa@B@tJ;piVbZn*&p z{;Bf0^5I%e#o78@JIB3zXgo-9C`cZbSSLP_@7_jWHVp2c4;+B6t*E#yMnC%t`HW+| z`cn8l_>mOS+w=XV>s8J&dDS27e&$HWy>f=UrF=-jKr{BsgzLM(aZjJQuzHZ4e?vBi z`}ZLq2j9TH5Nj#tG5D$8^07P#*(jf8tXHvkc7u1yq@Hl)l<5fZQ zuWy$B+5?Ke)Y6UW!s6Fx7FdzE6v*Ke}bK!QWQ&{_i0^floc4JhXn-cdPun zF#mC{*#>{7;hW1TKCcP~GJY-n*m3d4;WCbUFT-^l08LB;tke3rtG78ehP=h`m)x})Nq;FsX{ zFNm*zkNH;m2kZ|S34d{i_&N6PEe4Nr+?$7-^qt>lpl{9ntBUATd?%k%sZ`Oj@PY8b zr`29|-XFhH`bVq---PNak9@559fMD<@5QI^-q{fNHh3u4 ziPle#I&OUmY4A_BJ@VY#r{rf@PgioHW@_&v#Nt}ER&XteNm*&C! z&#x>0DE*!HrMG!t>OTDo8d8B|4zUs^I`d~nX2Q4!`H)i z*H%7QyIh9nA|G<2uXRK|)mg7@?a~kacYC#CJM>{cNng33{O!I(1$c4a_w1U$Gy9%j zZ-Zasxr62HQTTf171pn79ZfiH3mo^(vlZy?b{^aYU&3{b`M>hB^yjLm{C59s0^I*x z?_xfamBwVjWjtA!(Rn@-f zIPdg0F7AK-tNID?)xPy|W8e$#%O^kO{~liPu*zQp9&u7WgMZd})9%lI4{sAHeKh); z@V>r%V7~fQKK}chH{nOwAG-wg8g)wgZQ~Rli)Vw=;&*sovIZx%eQ^KxQ@%VS{Zr0s z9Vus{v*NXQuh81%G(5{Q)ywiN)j8=K^4$l!u4xM2#(qAgFL7Ra|91>uy&&Fz=aQz6 zz9{}+kLqjX83iBCy0ul5KMr1z_x|kuz@kg?DZuwNY#y8MvUoWAY}kCPAN(rUaq8WH zz*Tsr9-3cSd9q)TPlXeTkLAx6_y*s;PsM(deh~X&*?F+O;|Yy>9ns%ep^{kt9Ra_= z^LqPlU$`p&iUpO=iOHW9@Jp1(^5+mdQ+L(N=HZurPq;iG*W^Ee`_)B=|6q6w&xI{+ z%ixPRUl&5Z;ktYleU~&yY)Up2r;b?K{$U>n3jTd=CF?vV3}>Z}yjW+|+?oTQy!;yTmx|9d~O-af{m_ z_|s(Z^St6+=^ODKSi9fS1Ad$5iI)Gf;dA&NiuK2&_vCYw=dIC{v%hiHJ(_=+`_fnD zd6u8I_M)BKyE<9C0@z2kAUgweY{{2zA!~NfJ*ah$T zzWi;TU;eRtGPBOp@}~nlvXRD(T9or^_z=zuHqJypk^EZb!$pC_!FKQeSpC<^xetDv?@5j2 zIexlC(pULZ?P&dLDBQol_da-U-bbrW`D=v8$G={*Gra0amB;G40q%bek|S~AKrXl5 zX&~#J^k2E}V>s^R^HkQCuH(2n;Io=5ZmLBfP&HKge|^toZo#{*m(ud#tt8TKXJ0!T z4^t!+KgD+j?YU$_xc_^C10DCSuP6H6bKH%7cOM<`Amu*?ugH7fHXptX_kYJ^N-~wF zK~L2;Gd_D9_r~EY=T)yZ@GIz7UDf>x8z=K8mrvcrI_o+-aD=eZ|=BPuiHCR!o|!tCZV6m zI(!??x4@@XQ5>|I-R-}WO8!IlE2AvWTf(m-*Empy<6eM|_N_zc<31?h<>4aVedDj; z4Y>ZYesL6@YOLD55dI-)C^JP zE$er4;kPTs&(A;LadqT#1fQB2<&&3nzjNUq!y_oC#o@zD(r4wqjUD%A_`9roxBCno zUR3{`kwTecc{|>5FK+&Q$bW_>XT5Y*%2O`0^p!3vK9%9~;Qn>#PvP(Q)jys9^o^;&nzde_!eY11kN#y^OkGkiOzkk2|yg9`qeDjBe@MC*bejAsTzasqw-+ohj;r{)r&%@(be`P+ugvn?7 zyYc74Z{$k2zWp5c;uC&P<86BC^(%bdGR5EWHYT_9cN-`l!qNZixEKFhyk|EH{wT=# zfBxrBR375pz#Ij!IIhA-iL2OC$X!lP$tytR36l6>+h zo<#N9$~gZ6{PAq*?fSH5{=^CH%eT~VFK)*=DGqN^x4ZCkN#tYSNq7odL+n1}aCkK1kKG?g@oK{P(A06SUe!md zUEH=m!CxY`P(Pvm67IOC59Ry0g(>F`@RHo$3xlUEBK-lbD=Wcg!6SX&k-6r$msg{C zZ!`*hk_d17OdGh6PcL@cnCh4`|zFdX;NH1x&HUsB zd^ziOtUt~yC7&hC_pDvMf#2Gv`mW=+o81HMgz_PIY5Dk{N6&+IroZIEXBT`$PsOc2 z{c-dgl;=?V_8nD5ywN6&KQ=FFT~<6T`=5`+|0~B6DrZPJ>HX_q-+>oo9&4?33hv*x zwq$wvESs-!%;pIj;cM70w-Dty1g|wp<+u6sJ$R>2HU4KtU$%n$5A&U98-KdNOZ(P4 zop3y%`u_1BJn@_IU&Fc=J3n@WXQ-+O*t}u_{7i@V=ii&~Vyt^K{Z|zeF3(ZNz5Ks9 zPkCkM-%gdp{r87UR~Db``z~;?D&pJNf63xM7oPlY`CC38fIt69akla8?W*$Gd`0{v z^6)%--HYmXH)xk0)ud1Uo7&y_(ImM4eYB}j(vN1GvHD(xp9ztFH2zKBl72@EmEW%8 zK6TtXU#y#_d0-^{`Uv{ww^g3^@X23YKHFJuY2*APcq8^bw!GQ~ufY1W-1uazA)kWG z|Lwe79q#{LPt%&x4`m)0hRSK%|^Q8iRA>(|d5_u>$F zTye`ud*!JupA)+^ZuG+EI{Zlu#m)M4!8+2Px}-R-K)>H{&;L{w>D^}ng1>v{&s9=+ zY~DULI^jJ3*>SI48GQFq!|ICfE-4@DFENgL_dVA8_A6M5-v6AmY(4qR>!CPU|Lp*8 z!*zEq>U9qulUM!M^0sh&`NUOFc`QH2!3Pgi#9kl{-@z;LU8h3$H*X*x|GrY^;H`L$ zoCkf1hSHB`|JD5PT<~2jRWEC=U2uQ-AH%nC|D+&3X&cGk{~UHA-2Xkh8}RNCI-(sn z!`t%7dP3v&3HDT2IkA}YiA2VJ4HZST3 z&(3?1mC%oYf68-1(-&+mbA zpRqjb-(2~;%C~>WYRA2PQ8`5AvG3fieMdYs-!HTHKZa-hO!=87R0SHijO^q zO4(BUIP0rBQ2yKS+ZW_B6yC6v^cT3_V#oau-k_?=nG^kE__wUDFn#aV^7)tj1Z@1d z?6}1Wi{PJBZKRK0tMXeuRDvJ*RO6EQkA(kOO?o?jg|wB=DenKGfjK>gs`u#sRZjCM-U%PRdt&3v7t7q6bNyH?sfQS z){V!&GsVa!JI}4^z(>G04^%v@oL|7_a39<9_A0z8`$#vyCwDjb`=6t&fuGu-dfB)X z)m{3*><1E#&rgn9PJ)7eGW3vsAkQ%^&XMp%q)DrOz6rcI<!oQ!Z3V@-k05;CMpyJ&WG| z9n4mJ z#&+-n+>f>6?t@>V-x-e>E+7AU?rY!y&UaO*SIH65N90t$usHt;-^70JVdyK4lzu4d zD($@a>L~H~tdp_l{=4DR*oWEju$tS^ohi~HjSsM@Y zkC)F~-#VOb@cvw1nE%J{db~$a2>&>EEbnE!3J;wi|6{a^oqxN*E7n%rK1V-(qV%D> zPt*jSZ&JejZiwSv9xj}$JhcA)JG|=zWw_193Qv}P8tcUDx~Vz*4f@>>j(ZQDh4=5G z;OD2vryTFM+W9eJs`#oHo!8c)9}X|mLG4uw{=)mx-{L#JHg10lKg<3+Hddd9H|Mu=V$>)1{AKe<5qH_V7&=)!)nDzY|`b_k$Y3E6AF4*VV?Q zp75GH_wRwvJor`moqA0m@Q3;E+}z?&bGH1`Tv0!LjL#f+mOtXhKj(+iS7JX0i+>b6 zw7T?d@yRhq*D1+;>kT?M?&W#ZKJ^!iPlu1hv-3S`D`)Dt; zSU#O-U+dQs;H{SFJY~-f_rj0T?xr8MKt9J<$7sj>6Mm8XEwd7bdkdw%7A2*PlUWyu zf57?F`fo}2z(Hz9YnOI#|2mdy@KxO3v+|T$EdOqo)bC~xw-#{!e%+%S_vTTX_DFBv zxwwQr>_+@}&Rin@E63F?)=yI|72m;r5tjeo!Y^^XWA_c-Stk9HP>r_*iQ6jp=241+ z&7&vQXYy%@ zJ`P@w^O5CkhLzH<=Xt1&|DVD0v%k0b=UgRyk)k5jk6OY%{!RU^8^>J=&&>JP;&2%L zjQ6IkT@tUBe@tun*m0xaN%>x07yLWIhul^^Sa~)$Zs!i9!9V-ZAM;&r7F?s_7UTO+ z)-V2srkBZX8>d*5Ujy#FPQGj?8n4F7zoj{5`t zZ?9K>yzsH&?>^rU{0(v38@HeH-jn&1{ZhOq``%j{t%u)=kbiyr>ur$!b|&!^@W0@R z*ypM*JY?iqmV*SIqujJE-_0N_M8#aq4n;Snr_iqv3 zmR02}N*r=;75|6#A}t?o!2RnzwtOvp&U7lj`J~t;K8O1N=5rVxw?O&nmc<5t-+Uu| z7Op$mQQr>R#f!5qoJt!AjE4Ky!>ogEe_eTE^NP~n%4c+(@?;40y$xUDJMWj@A$^8w z%Jbfo=XZEF-}kNF`cC=>Z|S(T(O2Ioe$;m!90UJgj`We}H^2`ZQ#tKC-e8w}ZnNKe zdi0;coANv&9A0vF!sAJG$GtrNhxcEsKW6@3-2XkVXYdq!r_9>1{~qaA@VzbTFALy} zJ1XCnQJ$aRxgN!@SCt>+vw-*gt-aoN+*^;@)3+Y=Q}mnJ|Io^lZLfT;RZ@nO<+vT; zi=HaZv*D%pN$=lh>}z;+p3gQz-!@kI8DFbjHXfGQFCNoOJPdu<0r5!RzFU{zQ(1>; z{q)8`>Eq6*U)cKaMRDRuIX_x`GyW)E;E?p?IBrdNU7pvN{~z#C?Ne z#zTAGs;uK)p7_5D-z});VE^-HB>D}k>)6P@&4I6C-M-Dc3LKXI9rl;lfc_u&)@`cS zMR?>-(m&+=Xggo5gO6ROdR0RI$Z>DpRq<_&OJ6JP0(p+g=Lq)`!q9&RPuD;Z?gc*t zUr}1)Kwrj2kHZ-4}Z880GYRPhkaoE%SC8&(FdmORN0WkNW%~pL!?cZ~Gs9 z0$;RM@v-y!xZ~2N=e^^4lz$2Q#)tB^b%wvg{rl8?bwWP=?=RFjDIQ?`x%Ja^@PEP- zXB{OFI1bP6TgUkJukwlOD5b@1DLftfz*zqZJtchy_J6bS@FqMzd1XGIot8dLnBr#R z@YplrH+a9s`bG5FgvZH6j(hq43fJQ{KBqY+o`Lm#g^2SccvKG^_aFG1=cRwnzKa&O z7`T6*x3A&;@A#aCcOI|&v~eKi1^HKH-$lF5nhVc8KymIudD32#KIWpv!;$bI@HXvK zemlSHg?IA3m!0jBd@k_)sYdvea6AM5_y7K>j{XMk^;`MJI_^Ec9_YJ{K7@Y0@A*sA zWy;TUidr1xb9hCbui1T%{qUabZ~Pnj7q7^t=6LlZD^DA^|9g2kf0KR@-<41c zD}RG88lalmbzjEo($7ev8ritI37*%tzudMP(x>EnXZ>i^P4PQ#E3di{=YQavcrV-H z-0YV0J>sN)AALW^6N=j(=2q{YIV++se^-1H_hBqg8pErPRD2@PpM(3qXLQ%}f62cs`Zw>%-~XM&&hV|*)sL)S zynLVX_`W9?>MmHkakb0^%{Oe^t^iMUP{*}6Ooq4Mew580p2G)o-D>xv!XC)qe}ASL z+<)J!2mB7}uEVJBE%^F2Do-u=zwo);biOM9um6vZ`*A}>pe{V*q4<;T(p%n^gICNa zUK0IOcv|1SPaEM!`>DUYhd%S8g!@Z-$GteOV81&%?jd*x>-T!#Q}40#&Dh6g2>d$y zInVnh!qYyHJ`>MRE5e_{!x`sG!}C6s{=ppOiM9J-_~OB;mzA^9ztU%BJ*SOVkp8NSWpNxQCVqH@) z^wk~r&aa-gwejZ~{P2PJ`QIc|`rfZ9 z{&pVO2;W&#`C#*|s3g)KnIUfZa|oWKm@>!mCsk7E*YbYlXOzDheDkgNdH5H6_%-qI z=!YkhPhsW>Hva5~cjG*6&!^fZm;Ma>wxEXr>z+{jtzI!1<AP|o4-qHn05TD$)U-_H4> zGWsGf%ID4$mB*fMe(ZQc<++Bw8{dnu`A@dY^0`zaCpH;O}#P((-)a zOY)h|_q&@nh{Z{@6OzEATkhU07WzXO(_xAJx~!pK0(1>|b;c z|21&`{)BC^$tU|pjbj#v`|vZ#)$TJa4%wyux@-J)-w$t`Tl&4sKVQos{oo_2ul}n* zU@^R}Z~xw{@D6+8>o3C_`PMh)$|?UHHFaJnNI5UTLs?H~?b7rW>Gv`|grT1cf57*D z?R>Ed-k9;zu7l3PPkyPmDO&=8*Tdw$j`OndY4GINmFJf^ZkAlqXYuXpvJ3v(K*hn% zI|Xt}f9_!X`1gk|@?95v0U!RI;$!ock!}I1cYYilE+4xtTW8$2E^%XC>3gxhu^r`q zC!hE$JTJEM{!j3foEPkRCo;eE{&j9G;q6#&W9Q#D3rO$(zCikd3HR$Rxcii*e!}W#vguW_%@}Tme6#hBji+S#2 z`Op@A%eSxcdbs~P2xs8qxxTY;Afm92yYRm1W&V%g{&C>NBGTvZ?Ss(=z9~%kV9!nB z;5*olbcE$?gnX`YKV$-Y2)rrx1FgR|EGqrobINBM_fi(ahyMFLKKWl0AMX3UNvcTk zRKKcSY(6<0?tkxl;Oo-Y_N~K@EH2(^llr60mj*lTwR=w9%g97|=A&QBd&idlvG6e7 z6SVn%jS}*|#6AEv?`j9{%Xd8M;J*c)^@+w$i`yx9Zk~HuyC*9tfB$!pvcZqAp0hLl zRp6`nzP9B_Ke+#T9=M*+iXkSXl9l?I)oALh_zR~wR>u#l`uU1?&vT-%d8{#?V zs=wI%ie>PE9hE0T@PD_A^s(QGFNO~ZpqzwSC$Md{OANF7w#d2kr~*i;?20Y0x+l0JJw`Md4%g1=Sp?K>3D zpV8;9EPaV}1cE!In?H*o3K65{h-(MEO8|;?;Jo-cM6%=V#Sa`J4Ls*BQsX z{`HLaeL4__Z)%BGWqpy24~=SzFRC6t&OgHMR?_*=-k1NPj`SmWucRCP&*0e}?-Zh2Uo#5AG-6+y68F+tM%ceP^mCd@TEa zT0CE9EPaKdDt~VLKZEM&`CQ^Y zo3&TFX5y82{%G+(10T=#tztQDlIGIi`AK=w8D0dQf%Wa#;K$&td9Gppncwm9`TzgD z=eU>8WsW8d{$m)D8}NrK)sDZw-)JFycHVEb_WBlnb(Y3AYxmRe9sL!5i%-jz@~Kc> z+{*bg{AvktyN>AEO8VvO({B1raR2ujQni-;G53+|I;fN53B_R(`URZFO`oide2Vj4 zo*nlecy``5vG$E>t8rtMi>db;MxOL^+>5h+|L2wP_iC%Y<%x5RcGCObgI?=+LgoJl zeM_Fp^uT9Kd-*hHKQ2439f#lIKEoaK8#+jzGlkBx7Kb7o#gDN+Z7uXW;Qd)AToL{U z{2KcM+jVrIPV#9pN%ggI&V|pvsC={Y;}*vgs_!H8&v^gW?uXRsEdLA7mCvtIo(b?g zi{)>5m92~Po$%>|elUDd55-|C{2qMv8I2E?4}-hPr#8z9)Sq z?yuT?>1pu4bIHMS;|}~*5%s(39Ct=f`IIiD`T2VIW%z^7ln)mFCcUID`J?o9opKpI zVW#q7A3j@pOaBGu-*)hJeZ+6DkCWxqGx&7wGuv_7_tm&@s<4h*Oz9h#>9{v;WMrR{ zf%sp8UmK{1^?>*4C%u0k^5u?u^Ts2|6la?szT98>9rF}V>+fCR2iTv%&M#BpT|U)u zZ9d<7fP5Np-`lPi#=-xnC4EE6`NBZy{nu+f9QV%qOV~#!68&=YNA@W`5%A1|9dYf|FwEmaNKeU>)@Y8=;yGW*2d?*;Y)n$>#7ft|0eqBtC)>| z@8&wLGkh;RJL?bazC>WCeEj>RcY*I^-EV$;&cOSYQoZc{L&jn9NzQXj%eSHM=j@AU z>o>*?mwxt($_I<*Ie4RY)n6`g+#VyOpU(3Ui{Y-CNnJeM`aLe(t(?=**IcP`+WnSq z;Dc@|PfXu$r2JQ~KF!L18}46El6{o){_oH=g&+7p^|EznYv5(rpU3JOGWtLA!EvuY z9_PL0WyIkF_&ToRbd*5gBK#ijyWL_O?lVR{xA?AZb9_FAci=nDHQ>L%yZN3U6&agw zIino+%2_-@-Y>s-+7m6YU6y^c=`Ch z!ql#lmyWEf2PRi80*Y!{_rNe`cw4_ zYp=oZbHAwkUt{(${CJ%7HlEL)D*usOH<|wxcmdv%UyHx&g-Xo}ses*i+r=9mtz(*fap4fcyF?=oa zXPw;wfrc}5+`GIdV&m#=_-tR^4x1_cvJhojgw+@RaFvc54lg@P`k_Nr-^cK$@S0bo zxACO?2htZys(3a^q)9@pG z)Q%SC?enF78mIQM=MHbX&g+73i9@E^c#7OY4hg_AIqm?6~!%%@}yWGzMXac z=3fFnmiISpo>pR^^n1t2$KF2*EE4zc%U2z~o$L3q9Cr}>4$lR0!;ipIu^(V}c>l!- zk5^M1_u4mXisDlQ{kH$mpLg7w*HtW@HmHn3UucPZI^>hjF?gP(;w9Nn!^W#W;UUZe z>!Gi^O!~#X`9q3N#A~ls+!mT1ewcmQt-s%cSLeAv4Elo0xkegxleSNUvl zd$uy+b{w%vJ}s82ztrHk+u#+Mm)bn}Dm*vwwEpt?YWWmQuX0-dZR2=C=ey15lakL? z&X#NBbA$Eab{}9byg$!*U!|NgKa+k>Jw>2A{46{b^V^>Arfa1S`9S#)!#I}ubMYdt zYW%b^zX@MjME=e3>F2mmzJ~GH@D|ggx9gFr8>PR{LG_BDJfj>>D4xgA7h~N*6#68aO!jPdEXe)9}%}zh?O}^eg$N;(4WcCfY3i@*VOApOx@S>=PRXe**XK z2U~rMd`hx@uO#~8@YwQ-kLAfNco+81vHUNvRX)>LFPa~pLSKtd^o{3-;mcRXKc5!b zCjGjP#O?ZM0(?F5bDMYl2EX-{+P4nJ?edL$vTu;jSoj0uT(^e7$81lyy?%Dw%eM-5 z6=!RgUf+s0KBt7W`R!bI&v5Cp;lBrd_d|_`HV(hFLq1J^7q@=>48D!`^lRgj<2&hF zwUyrdBjK^Wbzd*;l)lS!>8sc~)jgEWq znZHwd_qs~(S9Q1e?oe@C-*p(CcazFvKC8Z$e%q}0?fwIN&6mRZ9k)IO3jQguFJWHwKlsxB;9DH`;`5O2f7$uym!Lj% zU_1L1*?9Fg`s}>VsAvQN*<$5$qmt@n_l@tur?GFF-CwP=U;3OYq__Eb@dM&frFDM4 zPNn<8mvcYLuJ76$lzzip#jP3o$#DPuic5}rd9p3N`eP&X_t4*eCLcQwZjY1yg;V0z zFRsILk5KtPrG0n(DE%FtBintvB8S8$a$RHbd=EaB`;#_qeBiiuA2J=^A z^MXR~OYlElS3cW(VB%pNx7TNCDQlNEj)?oOJGR1m^BoGCZ-o3Ly?K0G0R z>!)qe`@b(X1U~n;;x>x%*FGwL|92Mtaon2^k1VC0ZgI%?v-GE!?^!%+z#p)lBrE>w z;nlg{ZsTy{V=8~TbjpVU=zBQs^^3jhRIgb0N%*S$(&q}%Kcx9Z`sO?*3P=AZJaZlC ztzG&am%hsu#i20zv?mho*CibH$}@Ve^fsTF4NsX$JU>3QPD;Nbleo3xJa{GESGBku zblhvl@cKHRu1O-J+d+=$|NKe(tNi`ngGhNwJg`CIq3w_NBRoI%@vJ;~PD|g0d7zc& zE5ZOw7d!TsL@ z%5_mbEtqFkMc)E`mwjFAx;ytJ>D%z$qQ$2cd_323VH1HZ(+Z5E%8ugU)n)-l%NxLe^p>dN2pw(RwU$CHVUd*g|Jp40Y*xc@!$ zRq#W5)E^b?K;Q~|=sk@y_Px|CH|5jUw=Or)Eph)khcWQN+|RN2kNHFTitI;W>*ojF z7WePho#IdNSl)xS`-D;O`LQa$#dA9RKq>JW#52bo`7E8KcCq@t0l(ne2WBBW|1HJe z=7Hzoz0=Cyu5&Z~CI5%5pLzn7oo>4(!@6W_!JZ%W_tUNCTPu)LCfRy-G=zX6_cWa@FwG5F|6)r3&&?@1>e z|2~42@D5+7T&%omq?i5iKGL`EmE3{*#~V5Ck-h&tV-NVW-fGv@?pDM7-`)7mamzcd z2Y+s2|1kT(ZTzz|gVIgUe1hFCTHY&OIJ44CK+|_DLTozgw_Rmr1-& zJ;le`SFX(B(|!9;ZorQ}E&Gz_Y`jnQ1^8~P#d&rX@i8Yfp0W0x`F`=YeETnk!f)~3 zArbvnS!JJraw+I2Y9NTOzx7bSBj|E0?}-|98g@!^g4T+;pluAf0vW_qY63 z${}9!2i-61zSA3?#QGLHH?_-yvj2+rW!CPNz^~Ho!pZN%oU-q6Rr-11m2!#S&v_;m z&z!l%NAkT_^M4pTiuX#@&^ZR*<2yh6{yfr&;Qn48`%Cb%->BSs!pr8B{m?C`>(3GR zZN5iu{lF9XWZ#!{HCEpS!KY_cKVW`-51+P3`h!R}(?ilJH%j%n5&TJbI@T#!J=_WJ z@{a7w(+{sHkal~_^RV=zK9N5*4*v)~n)5KrkZ!huvY*{k?J+&~$Cuzy%xl?m!PoG~ z)LV;B#X{0~)_1PmXK??y)_DrcezWg+@D#iO-{UBbpSg<2KDvV1MH6@(ccza zqOxDZ`2VkQEWAQq#nakp?qafE#Jq~t!>RCSzSm>pr3;P+*ER9IW~=`tic4pAdg=Eg zo)_SsvOd=O!|{*Eem?7C?Y@713GoT6>#+PL!+RW5`zlI)PdT2`TcbS@z|T4CS3a${ zS$k~wsPw~l4^k5Qf$*MNbzipe%sF`J?^K@;VZXejbdHykzU6B#{1WF49>M+!yd3)w zZ9Qa-QqsvkU-hsk_I=@NHYlD}-@1m#el_#Y)*kOE?X?Sc&irHQx7(wW&v9>j6~X%& zs}GNq5l>{lw)MBe;e+@N%k$`LhG%Ae&+ds$%Sy+8&gUR_r}fI0)#pX2Qx20ZLzi|*A9jkU)8-MN#yVtE3%@;Vq_gU=uw7cV8c{SsFvyRvg zf*0Z3Y?}veSwZ$E@YBX2+u@72Ut2u?aNNoc>EKVEaOo`MTu|!=$~*4WtE{YV8Nwem z!~VSQ{$8b`>@TcPJ96Dx@apEcm#>Yx#jT(JIcSgQzx))hB>Ngy6gTrf7T$vMnoQ>i zJUiojt8eWqd;L|uz%<`Jqe+f?{=CnA_UfeFD?&W!Rkb6_?*#ZJ-+47B;g@@;o>)DM zsv@03oL66)`j)Ax_X~_#)r=jg_lOXDH`#TYTPv zr%RNdJ;?8M$J440IjT#iV3OL4_2=I^{-8Tga`eNtLP-n(Tj>1?l{IJZM*EZjdX9aUTQle?&0G{$~6d==}! zt>5lZNA_z!RJ*YEYd7Ep0!r8VtD1FXpL2t_wTn6Mxtz;n@!0|o|5N3-27emYlg{+# z#jU(H!?&~VJ`($fBGnJ!ZUw)Sy|u^Jqr_XXjwlNKU*P?Cp0YS+ zYAXBvtcO{O{nL(n{e02=ii5qsNW%Uy?*Z+;7S~KV_c4Aj{h9Derxc%V^m{AeclhqA zwcj)FzKnmYUuxD|`rX^2gP)7xO?hsr3NP3~_JilDeh!1zgRjo1xLH3x!*Po_roo>x z*e5WrYwrj9JSF{;HKcFlz8QYyDfww}_ys;>p5i&3MB29`Zoc(76CL;B-y&K4fYp=r z*q>(}Qfh8K8$NrM(mjNJSgW-2HPUgf{(QiAtTXnT;8!0?U2jjoSJK|C{ztTyj(=Tl z9kah{CD;Wv2FNO^8CZ`fA${_loNgAd=O{>}Q~jqrE7NXOpOB|M#We&72CzR7Vf z4wH^Z|7GGZshxQCc=cD+;Ai0nIZw>m^?lFC{?=6aGaUOD9QXDC?cqEql};eA6Z><_ zPujWhe?&`XEB6r_2X1Yz`mnpUBAK0b^o!%3|94oQIh%Cvb`W0#w|Y|LS@C+Dqhk5W z(Gi{NdY-C}&hPLktk3xf9vLJ1)<;zTt$YW-r_D%R|0i^k|4E!DX8tU6-1C2Or0knz zPy%1Xrd^J?;-nL3r*dIiLZG7Ko=(f|D#w%f`8oUp-tXJ|_CuXzU(~lhVgx*FkK$nU zp=uY|A7K342>s6R{mjqU{d71yntjUFe=ddl*BRb~pYrW5J{PZaCvbj_rQ5ix;?Uu` z;t*~AIPS$^w{Ks-t8o8!UcQG{;60S}=k2;lCu5@e0W06h@Rj4#FIhjc2ku`-^b`De zMwPgYLmG9Let_re^7y|B9>M-=yN{oN&*Z&NDE31Vq?09`%H85{Uk~x;&Zmw~Q~2UI z`D6Lo2A}Y$bZp#G=sD?>V?TQV(hcb;K9_ZvrZW}pKX}fjDa6#9fIlH zg-7w7tfJUAOO(zfzKdb=ljGr47)M#ZRIaz|6SpY8wb7Xd-^96F?la=S>u2~$=A|va z&H6}ZN_n;SI_UI<`}ftJgLhpk`+C@?JTILyc@^hx;orjdk5)er3J)a9z8dSnY#whG zyc6%KJLCU0_^M;lw>X@F&t+ZBd*~NT(ep@-YfOM`mRZVV0e%r%` zu@9&vd>niQ=e1gWD>+a)TYS&^ufQiVuD1LZ86^A1o63Ld$ELw+w3Pq$9GY*i?CWQc z<8k=24!*ICbgaG9d{Oo%I;Ym(?6?<)6*JWz-oyL5Q`lb~t@28=avvg{B_mSztMlOL zecvNn3HR?WJ_di-H*U=NlJx!GcdO;NH}5g$KGpLO{CO7p%Y0YJ%J*CNNanYdi$I{m zQ0aH!Tr8Uxt@EhQfGtIs8diMM4w-0H(l$E~c9 z2>$$l{r-aT(Dsicy&|1~@2MZK`^yjTj!RUImhL^nWxt>OIF@ctc-N;?f4Y)*`Vq39 z%y-hQ-!1|l&ij#S*!P1EKCX1j!i$ZRP8Ze-nV%iuIp`0&U|)HZ?2q$30vlI!h5OHS zKMwD@NB-OWG=4NXoF97&{X_7ToIhU)-msG{bWaY6yq+-*N2X$RgRmn z?{ib-Wq$qu@5H%VJ@9ArSo~*ShNZg+?msVg?5nc(j{{G@{q?`yIN8r(z4r{#y#`;# zec#&4)$y{QHc4@|Jia<1?ff2b+^hdLK2v?La-8uRI==VOXW$VZs^92?Kfg?recttI zcQ!xy+$8anRn#u5ex7pNd_yAm6E<1)TZb$DPx6mD;Y+xWH-z_nUG_(p%b#c91*V9v z8lX6IhxdV>XJ1%U2K~c3@GQRd606`p?v?)q(aHLT^y_o(oYkw|@YRvBw|Riy;b%CX zGX$ONQ>Eko{!uyj;VIIw{Q_;^W4}^`(!CxleS4m2 z0q@WG%%#!a1uw$+=S|=Zr%C4|=jT}YzUa95fNAh&5BC0fm^1JXIZwlM;@*;e7rt+0 z{o(lO;{J1wyUY+jFjVoed9!9S#ltG9K8(YuMet3hGX{y(+xlH#J>_-@cKgqMDlRLZow|;w%k8k`xe6Ayui$GKpV<4y3Ga~Zbk&Fa__+t(Aw_X(jGwvZ%HF^4pfCKx z&C)S{X2NUw);|oIC!IB|WZ4n@@$l`D>QAg5u7;m_P~~Fd_J`(6r^I6U*#Mo9@GRW# z?7d;!yRvV~y3Kspe+6Ia+n<|pf$TqIom)8eUpVfS?}9t>^Ktra|`}rlJu)%e_)Z)^?%=_!ea3? z*guH<9r%{o^2f@t!V=m0pQk>7Z$F^%RU>pBeNXmNXQ_ReKMmjq*oSU$*bNW!twR{F zR63hKk&g9;^WYtxRDFmg-GT2bp2fda{4HOT9rx~c137QX(p~z2?6b4J!urWQj(hfZ zdEOa?e&r9vqxgPGGkA?<;u$h2UAr&81ushdFO2<|<+5KkTye8<{|G+jHO1fJ)_jHR zckNX9-b5$YN8c81P zwpr;8<~z0)|2y#OoMUFs%L_l3eKhC2HzD0M@I|~YvwEI=i|jYCj@0VsP`LlO=@9(V zB9+&(=$HCJI{TRSC<9;Ucv|sUi~U%}Io96q-71~dJrpY>%E9ow;Iy`sh8HheJW zk6FEH{H5$OuurWQ`j;FxpFzQ&xE->u*<0y;%0Cv`DL$R`0}J4vz;F51JMD*uQ4e3i zKKm}|Z2Cs=wEMz9`2GXxPwH5@U#0D5g5zGC0|l9{BhW87?)4}B^M0?whx_(<9o;Sa zldR9Qa)0XUw9}pCxTk-^w@&FcJOlN_%ImE?vY*5Iwd~~UCwToMsmu4by|Q1IQ*p5I zRjYmC7dYR>+R*@bBJI@lOMfH#tn6DXLAqVxx%pm?y(b#5U-oNwZnbgX7x3bl<>!fe zCA9rp*|+{o_5VZk^BoW$&AGu=$Kv2Oib>~LWiL?WpzLokuV`^w2A{yZhvn<6!eAw@#bXNQzd%OR3|4}?W-!rxP`6|36>pHAI*#NJ@`4Z;OL#L#(Af4iD{=W~O z6)iprKXd#f`%&psKdqmi0S{$;U=i%!gYVd@a%l!nJ}sStythq&{{X+tJh{cE@z1i) z!u`wA{SvGXI+YMjQ2AQ>y8nWw^Y`nSf8Yxo_u{$qTI%|f_oDbE z=Kbt`It5;GyzF<7RP{@;UzebIZsnN&H}M5g%9qvif$&nSA2$BfW!aZ`QTes{|290# zw;pvLywZ2-PwYEExvqHS^*~?_`^O){&-#vg`EAd8;im9)@V7Xh+4ybv@F;m`em;Ix zIvZ&h@-`4S50B#9q)7BfUX%T>*LA-e37-Q`K1^mVrvbXlq=y&OCV4Z-a`x88{S~)6(e$gAUUv^XFYyEAmo8m?Lsr{NxcX-ZB z;ug2naDRO(bxS(a@2Fn&CEdpG_b;k^Tf*1C_l=i7G2Azo{2`tGA1PgH3!%5gvvUrN zwf9%yyLj%i_Vp|LxjfPtNxB37l#c&=kC}JGoADf43j6i&mA-XQUGB=h1@mk%*iVJ$ ze@StOhKB?)2J7wdd1^;Cu5Jj=JVoU@8vEYxC47(D=0k45BYgYKlhaB6fmVvA-8bjL zXR<#cFZ%V<%RZX(Cr!UEJV1T3a$g3|`>yI$d327#kMxcLb$ z#dAszc%O_)*Z=*g+V0>%uU}fwO@1!LeiD3anD~>_^E>d-ynna;c|d0Ar0kHNHV$cj zpLj=}vmQZzB;0>)*i%_#{}|zNmH>a{0rU^5-F?J;IU$F*|9!;g@VT$cPm52D2W9^b&!-lL^YA(|WpDGM_vMuR z1-?I68-K>bhes+t_Fm(~T(ZB-dYc8<7tSr-nsvygGYOvKO~pS1`$h0RoNHwF@t5;R zXA$dcE&iXwhm=)3TcC3V{`(^J+iqGcctz!v&L!V-Ym0p14H&;!eM_HT{CK3|Z}n;* zJeubetLF>gk*o`~ekSun(&-SRxIK)Y<>AxjDh{>|p)0%u=ha)fZ3;*yz72}F%bY6v5 z^_`Qp*Kr$5U>f{6h5ba|{+e7Rq`&2`{IT*X3*SM%T>-I;@O69Cj_kdBo=2s#)OW7+ z2>8$?Y8OwV^Beqg){*9bN0&_7|0Rxl_npkFAGY`J@ukFX@O^NL+h(|bAA0u?*@v?q z-^zU~eA#@pJF6$Zz>Bj!q$hr6D=nR2zp5Wjf^UU~aDJ4<^9T5wyjLoV{qOKPtT$Fv z1A#ncr2p|7Di`aYC&2yR1v>{H`?cb1{X?6w((!)>=X<#SoW1+Y$^Os?rE76G3O~ww ze2a6P^0JTnLG8urc?!HH?^zm>-*lm}-_locGyUdp|93HZ!B^dtera?T!|(j0c5U_W zN5|8u|Dlg5-J7o~KHbro3?Ilj+xEA8!(`v5o9@eY-#-jbVI5IZbh=iMedr|BpZ(m& zi-wD5XrYp|cC^ZI@4o+GcKH*FeW0Rv$JUBWxqFmAsN-J!?@K#vM!L_!hqP9@R^OJw z>-o+}_#M7tj{LFv&NG#yf0BOB+Qne_Ebb$wzZiai`2m|Bn^##nxw|P})$sEd_&C;O zg~Izr$o_bQ?5DyH!TskMUW3OSQhv{3zp{#S3i$e&$Eu1iU|oT&mm2^t&{=V?`ush7 zGW%z(US)q=I{x!vGF20Adqnj)0)H03H+(7mZSWuASsRF3d&ym0I-7}u-S<1f{oj$v zT0{1mXm{<zFadK12>w|HL0vA@G-cUQlZ7yH7sq|=vmv(_%! z!?&22RXZJ6K>g2r{2b%B*G|I^ z$=>`aS5Lec=j~X0V&P9OP<^oHqw8@0_e~y(l+LVZwHIrTbKtvqpBqPhC)St!)mLS| z0$#g;_@Rc1!(e#6hT;Y4$=>Q=GJI9*)a_*&eCAe_i>*T&*ho5E4~SPmze{8B_wJLv zwXaVc&k=Yy&?%oiDd-QjV_)Dm=~#bt9q#|$Q=2BzzsUFFEY6GJfoZCTHqW*dUW{?3 zwUN)Fr1R`am9ObM*i^jrN%_B>d{u)F4;Qz2>6aZhO-zG7OR!($TOTr`ne<=GA{|=? zcp2`W7i!*I_UmrSz7UCwho@(qUKjWiEo9$=akz~uN<1Zg0DsIrb4&3g=3T8n9}4f( zPxZ&vhkOXXOnX#q2?VaeRc z?P=L3a_)!Scjm%Zvd+i&f_AcR#yXkO__-I}mGgh>IVJ2F+2`iGf%ov0%L#ZC z=dfA6=0r=Un(zA>CEJVF_RSkChMyRvmU4)6FT&T?ReXxUvv=^?d%?gZz83}#imHV%b zr`3KVVx*tfx8LDic-*5>w)%M!UhkUvAM01Ucaly`&ZD#O;T?Erb>-LEb>~>whi#IM z=`V*za6U;Qad<4sE`|Sa5*;V@K_bOlJ=V170-dkCG3U`yezh9c_cv|K4E%vud z=)PQ%bbp0U7%qS8Z}WDS{yN61Q?cI$|FxH%3zWM+AYFp&3pSOG-N#>oA0S`We!qif zrF@H{U%Q8N8b7RZxdERAFS%6y?}QJ2PWH{l${*984_`S`{#ZRJ-Bb1zUQ;)id{@Zg&=dYT^M}T>_Llt}_NQC@e-ysb_r7C><6iw4ep&e% z&U4TP?EUMt#`TeY&Mm4xL-4co^WxdR5I281!}nBB`?B%LMEKw>ihm?Jr{Sx@6;IR2 zpCmtXj@Er@GxnX}H+sm@-R^_eD9642Z7$<{8z)?X`{#2al4XCnvHa|Yexl=Ee8yc; zd=|mqb=-TO*eP5ycy?bqk4{JGr?sPDDbg>+d$jK8EQb&A%}1?zLH3OYsUF(7;(hyy zC$i4O;c)5PEPv27YusZ41fw!9={Yvm5j=$sb)rap0r-xVVFP+em(r*HP z1)lPvxQ!oj4M@9xDCxLYE@xOTGzgsx1I2f+AEzaJC;a?a>G$G(G<1;c!y786*6zNB z_h+4h^*@CN%RVR1LDnvs!)I~sL~YWo^rGySus$alUTcVWe&#tl!xP~@v%kQ`ds$zS zeMjD3+qw7c;d>b8TO0yIWj}qNDzf!6rQt)q6Sw?61s~0KZ9?(qE%;d0SEx0)@1Mfw zRa89femDMQ^7WqTiH&oXzSFYh{*Q+qcy?QllS!(+s|6o4}`}QBnJ_r6}7$Kdj%x~K` zEgbHjhbcEw_J^1cvHCLuewqCa7SC<)#M0_#Z2WT!{?%x;M~i32QPTH+hh?MVb`Qn% z;LqM5&lbqbyjBDL@hmz~-PMmBfj1p3{UOy~ z#XIp{uMztF;KNob&I{>K=EK(?lD@4&*aR<=P4%+@_Ss*Re%B64cP9Fy;6s0ueH=V& zoa$T0EXwa&=se|ku>a|yI9q#pdc1gM=5?)Id2G+y9vtgQyG-8tdo@Povw=WBJ$fC9`=sPw=8@fyd&!_tREOSSvmt_m0zpF zH{s_dt6Z$zZFpVw9eB@cIvb{lPhdU2au*0RenUK*^<&m=WSuHrkaJ@!ZhIUzA8Zj=^Pm_*+9aM|A6#tnERR42O?!z7T>gUqq(zkx& zLwJ_rihmQFy#+7s^6gzV?^klVbf)lKiO;eB5#HMOKI?%QvcLA5bedy-0A8=8%IiV+ z75LY@C$e(6JySZ@cc-?m^0xTckL7<}bjHIQ))Zd>e|DDaCv#qbl~KFddaruoUd>;H zU_ZfeFK$z+OQ$Bh@*MFK+}}+nr>n1?{rY*zZ++}r!XLOr5a`ZaBFyxj;dE`^?|^P@bvAZGm-Y5GG97d z7(cv>eyMlGYjS_La%=)0dPw?-*r&jkvi{TB<9qP!J(RA+v-|?-=ioh~jT1hFw;m#U zTQAXQq3n}*Uo)EezY;!_c_h0p6k8;F|M%AW!Q%!iZrkzy2z&thC9S-=E|$)6&L^>W zo^agqf<*A=H|$%nF53E&u}h@m-~aLsJpVW9#~!#xYKP#N*`H$Z&-I>k`tM0yzD?mD ze4~8XeP=j)G~?dMl=~O((EY0aHlNdesr0*_R6V!+&VUb|D|=gqQ1X4*?{oFkyKHIdN!3MYulp*B$rT`0etvc>HL-;KP{fO;9qV|-QJftKP2Wr_TBi$mp&2i%Y3iJ=S%pwW702!eT((7FTi?HYuCNtgTIu0N$l6b{qKtl zZjjC)&ey$!{aJV)-Zxo(LpI8O+<3*`cs$(yJ*KbV$5*PJTmS#^r_$N{ko>ggj^Ufc zGcZ1}`u3UQ-uSlu^GdNQ_m}Unula}cd*J`{&!n^SiPY^Y^JeCGDyMG0EgkpD*Agtz0|MbrNiew}@Yv8JX7a| zU&}uFsPwDBhr)MXQyfe`-5%K&d` zhwb=t9qvD$zqK15dvVVBt@@=9>=(k%FH;4KKk0@@C(PmoA2?9l;(r$YL59@4>bKI#!T2@-ogd&O-T1}3ti9iW59IuCd%lP| zAf1k!zi0VPf!8aoIDd`)26%DKpEp16!r%TygoRWTb#v3KknGav)>aTY-fM15! z$Rj`h+JF6%bkfJGpRszf7VbZvZQ^OQmk`>Ez5o5faW9_ZzLuXBhnw&mE+5`yywlIJ ze~5i3#$SXdwv(ThuU+uAy;F}94xN$C>`Bt!6ig)$xC5W?q4HH49(^|L`oHiW_!`H( zeEHA8&T>w?F#E7GRB9r`ILp_iBMfO|kruHWV-oke-`fYehxZ?RB_2>F|>D-}y zb|GKi{wnVO9zpyC@!RbCZiD??_{Sg#^>Pv_m%VD9a$%4 z{lPs<8~>*DA$Gn5$p+dw?!~`ean%s3&%NNg{*X>1{$LtBjPn7ker|&| z?yPcIgngOI(yuyS;+-u{yy4Pj@cxmZd`+XOFoBh}3Pp#i&U-&uMTYoam zaj!r3pI^Nkd;j;jvfhx6|2y?7;1l>xhxwE5rtDAq=FcC$C7!;{eZdGM5{FOV#a+MU zT_fR*{*e99wdx0~--x&^{^1toYdH3=!A~?&xpach{!{kn`0hh_c)mO0S6L@!<#irD zj`!47-?H45{U+8IS$@L;nS$k5hjFa&Y4FX9<)_U9Jd#fKNzCV%{mbwjpJ+T2g`Z2{ z{&Rr0!8^=W+-w|m7rvkK8Qw>yz&%QLi+jHDE~_Uk;5S%LX#RW$Uv*36WpPM!=gfNb z_Gi{tTe+Np&*FOxHr{J;uk06aE|%5vQSc9bmws0I&)?u%?y4M{;Qy1ZoqOq4;(eK- z8VF2=uV?*IZR|gU@4=r?criE6>*@T+IwkY}Q}~4GijTFsL-6TesveroDfgb+)49@1 zo|sPfed0NIez9^{4i9kdy7iM2v&eoh^Enp(tMEg&)c@G?`-At(-ak%jZu}R;ts41# z6TX>!H0I}EcaDbV{~x~nO3%A<9%ms zOP>AIw^WXqsBeYcbH2xyvtREJ_TR!wxN)L)S$(?#zv0`jamsz~+|wz?ehTYvA9mvg zj}PEnrl#l*cRa1}`84bcUzGn=?%V#s{vr3>J5PW27bH(>Ao zPSYp(q*Ib}5jS9;(VcVQ>9=OyJ_OzwzPqf_wf^A^crxcgl)=8J+kfuqq_7X&o?Cx{ z`}e10cJoJ`{awbZR)0Q%pWr=ydG!B;``@Rxd009no>UyHT_?exdRuX}`m+>X(D&WO zf(511y^rdTwbQrY!#_|Qti7Cq=PWFH>-S!D=dXGB%DhwD#&tPdL3`yjo%P{o$=3+? z_nv)m`jgi1{6)myb?^PWYYn^~+`mp>F1)52UwfC8W1XVXS;_ZRL(yqoOneddsnYOy z@D($qQx3ibK4qxlc?&+GxO5)jK4Nh`3!nUp;$ZqaACdjA6{+LA%&qVA;?Tl3PJ7@{ zasPVn?eL78muThnWl7ol_j$D`C4Qu5wxH+c=K%PsC)5v5B415HWPhFef|X;j(&Cl& zs2{Wb?G5;fX^PJ#pl==3Nj z`vQ^Dc>><4ym)TbzuEozy5n9w9L~D^_vrYFh04C7Z$Cw$$HXfzPh#cR7G9k5^sN35 zg%{u)X0!hjeu4MG);AUnlm2wye144Mo}WY5_iFY-%-;9CgU{d%Yu^`)fYtM>@WVw@ zmsiCKO1IDs#m(wZvvBc0+`NT%S)3Qa>lIb}?R)V#D#||dI@RZ*!M}3%lS<+|@d;R3E5hF|zf{ttkM)lWO!;f{O$``1xV{|Eb}*bgT@*1pCy$P}FSKEd}g zs*>&^$36XmB~&g=;8)-U;#0Sm@P@Ka%}ulr_GbZ)>WxN*04m4+8?B%OD7 zZfXgi4*!7r{u}Vsjn&U54pRR-CWHRrnB$)R`IuKJj{Tx0;)U<3Tt}+`KVd&EpMg1k1TH{odQkNBU$}C z1oyAI4m6kjf+f;Fg8!Z2{(V6GTgX0&_leeTSAI%7JLi>Ix`~c^_tWe}R6l#6{|WZP zefy!xw3JTtD=HVezqf$<&nI~c-hy)r3!}fVm2@sdNT)IUS9k{Ze%rgOUmeq0_P_D` z9*uoi8}Y68$bWn8z5_41PVu*Mr$1{e`ym6x?Y=PjY4HP{R3B_!Xea!I#MJfqwRW-( z*&sjdyr$gGh-cg(o$~lu%W*Hx0nQb-_fXN;7yVlHv#?(aFUj{|&7VKuSq>_{=KsoQ zrF;3H{IqpVG3~`~50?E;=wE;@R8o6THTE;&y*28Y}y6==Ut$d*j6Gp;H>2{_w-}pY|QVDxEV0_qi-8^XDhH ze>^!nLH7Cgs9o6mi=W`D*oUHA2LgF}$iDp~#mDaHh2cG3Rr#9#&%vkpzJL8Ge8F<* zl*0d9&q=>^w$%N=argqBcdWhV?U{C*Cp+%N*}s1H@m}Itd49C`%!MCj|5{i4x!3ha zmPb(Vr=8=T{+CA-XUlI2e9>LSvm}2s4?d1|lmI^mpHM&%E(;IuE&U$8b0Ma~7cNq| z_Iz{)-jnx+cK?02k94Y>R6lI>Jl*r+IaiBYzqb#*V9BQitJYpR@^L}r{P^t8|&n)pWg=0Jyw2NJWu?C zez5`4AN!H)ZJhQ!JO|%%j3(W@17#onk|J;Q_6c|`&S$oM`xW@{r&aD&KN}5_&Y}!T z*Wy16-iLiFR)1E&XHt$K_>*C1zrXzO5b?Y0N3;C) zhu7rXHuJN|OI~?p3vAx6I9R{h$8oQ`a+h^u0(U)&KVQR>7s}q|XC5Cad;dPl7vLp$ zpJnOphsQEs*8=^E@Q%$Dhb!Th;SX@L_QO`2R3`Jo}YGu}>T(oq?>wsRwWW ziulM%inE=o)_Ayhg6kK(%i^;M?*A^v10!VrXm`cO@;efKbb<0!jdb_HyY~@44zE2D ze|T?O8~(QAY4xisuwUhS4q7ovI$yU{zRaI=qs7B~^TUnd?UPj?VLa;o~hIQ$Q|_UzTGdYpS>aX141^L;6YW1s(3(&c$1PieS9hUm*8<<%75!uPfU@08PNn+q71CQlU)E2DhXM}Izi ze>ZW{$@FI0<@m7UUYu(kmHr`gUWNP5`9BLUa6s+d>ebuRq|;@a+G$aAro1Iy-;Mjc zD;gd-T|6`A9@ukGmKoxci_0Gy&(wuaoTBzP37sDB5#0C9pQ-QyoX>ClPsf?kKl!r! zXE+;p;%)IW&&f|4S7e(dzGJ`Aweor&?*G0|y4kY#pZE1Fe59{GTniuV*57%T)we8j zq!ZCo^?w8T?cjJ??Xe&BjXzSkm&889JJN~1pnO?>xCb7Rpg14FzS7*Z^tE(8-SayYpB~u%2yd}Z@fi=#@viK5v%kQ~#rw{O7YG0Mr@n`G+4NG?`{MO5gzxi2gY1;Lzx8q)% zPd8LOv3~VWc#Tu3%WL8LswX*1sGgLf9CthJor7`XG1UZ{7rN=Vr$4-<>dAKOt9>9o zpuYUH=d9)M%OllZY+v?u_&VZa`Rf0nbmG`o+Z_FemWju_t@>c||8pHrt6gt)+?&T} zmoZmRAq1U2(V0WPYH?0pF8$H0KhKB#4fqPuwfo@w6|$e(Kyir0{zZ3R^y0IF^$B*r zy9r;wIpH0!e`clZ&wZ0pZ62-NZ#X^KQF+~hpN6kg-)LJvVYQdKK7IFee923iv30SyGK+%O~2s==?r0i zL?!Ge!B0P?bi2bVY?OVJ%b#~yy{h!7cpaCHcfCMAR(_NCwA(6o>;IpIpX9mK{22<@`YFf7ZZPmQ%a7Hj?o(rTb9^>6rcs_{awp2lJ=+X4z+*r+R4Vc7S&c zQ5-D4Z^Ngs9yM<;*MUIo&!w~fQ{~s@y)$eP_pe(x46l<#etw0{~EMojbs0SPh&l88N{Z1Bb~?A%M**wF2~bKx4?egr?&g%+q*dK`E!o% zfSCS=@aJDnT@NqAH~p;o(+z(<{8l={-M%#MvU$sc@L_QpCs;gN9+3S+)(u+RUW2Fb z{W!BvIGA?6COYo>4f;!UFSL`euwqF zRu7Zlt7eN>+?K#sP+k`27miCOiFGNjknYFu1Dro;^{UbLvcIpf`gzkC3tvQk)ft@; zCuDz``C-#J2KRr*xyTQ)-|c(vkPJ_nt9{^2>tz52P-_nm^*;VoiQ z_rssSqX#O#c3;T!lXR9(5dWBThrsLk<|R6vmVI8GkE3hsmt*$eB(6fhoPVN zvve}L{e|9T_v?-DL!8rVaSJ&k`{T?%Kab8l$J6SUik_AI0$)9^bxu5_uG;D4^b)G` zi}(_rD{Wq46a2u3vM)=zv(L-^>AlLA?Pt6W-~7CIckIjkD*KaD)L(6fw}B6wDf?>h zlkohRW&a?&_66x|Nf5XBv}fV|^Z(y++^aul3aS1qBfsAF`MmlwlyfSq-e$ZgzVoo` zqe-_Hyx@72uk}ld;OBk!>mHY+Gtu40yekx)O246BMmmk)!{GjNgSW%|^BZk0r(Ny~ z9QX3omiNvUpJG?U^Rn+xUb*)J@aKrX)wezH8)IZ?;|%f8?Z++Jn@HqA_ zw8XyR@6y@idv7}mKH7~Rz01mR@(tNP&$)S)uM#)K^RgegA^HjM8_au@g;%~M`;2aX zl6Tp7`#5|E;}g5@4E!VQa^LKDus*x{uy@T2{x=Y)c3XT7=V$hYw}%g{t$xz_kT!qH z-v2$m8IF7Hs7njAi=!DNv>N-3tTVCplIKp^el~O5^K*x9JhlLS&h3NrE_)syeOLBz zym#)VWCP3KA@RzujVlHOG6(gKF)p=!@;H3I+i&e%_FcuC>15xbk?NJz=b?^!`91fD z>Srm^U5I_bH<&xnZ*{@*!*5dyte91QX(+{1A@YYGv zDGh%-gLKwJs~j!A@56`jJ=WUTpMeh_qkL_H-+|YyrF193Q|^_19OJhp@a^#WC)E#I z{lDY5yg6}NA&zy6-|ZT!C~t907Ac^dChsRaTPvWbspeXr@i2k+1M1~&fL4!`r2 z{3(wA7vQ&^lJcXB&!5gtzSt*j`Re?D_^b)4R}Im*1nDxH7Eqq@g)f0OUTOeQB^(`#OvjsX$S3h6J%H46#pY+#NPi)=PT6px{)bV*R zzwA5k{?YQ=2)>T~7R_(l`rdhtd-*-Xd$$|JzfKWx|GDVx;ZgmSuI1|@Jja(x*Wy#9 zsC3qGPL$QRsg8U1yZ(z*?r-4dM(hhuQoXW1YGEks}P}$E-k&d+6(OBFy%nE@=PpmF`|2lzvj(hP8y{Y^b<$iPt`+?Md>u0h&A)R#W1GRY8fN%d& z^~das)RcXnI`Y$=N2bBg^;f+rj-T7$Nvx+D0zU)4URN!`>f3`)O8-tlrTZ-Qjo@W6 zseN6Azv;M_-&M1f-?h}|jo5d*BY&(ul&>ZIB9r95@g4BzVx@2Gv|eqMd)2JE59T1< z366XHe9mpD+wb@~;?wDeOJo0Z-L&r)3;uy`aNN@my(a(bqH__x>b!Uy{Ed3D_rEu+ z94TIq=Xa}Dzr(Y09+#C@zxuLo*HZbahW-Y)|NM~24P@_cU)$kzIN#pxN9W;(C#H^D z_D0ev$2l-_NcSc9ZT2k|g|CJ0S*dyw0x#cKI>(tmvHs*$cqi7GTfXu(k$ouV2-)~~ zFuVi%%^RV=8vX(M1@x9G5QvPDj(;EYTKKLm%CEJf^YG&RRNuOz-?^!D_OSod>fr_W zR?hcpi2cN7vcK_x^v(ayZoJ~vpCsmE%V0kZ9!`H)3jPZ`dk5(hh5y__I%jzgXzjGz zQ{w*bK@5Z+cticO^@mg74c}C~wR~lD_002g=ATN}p0BUM+j7oi3jWM!CHwTX)PGt$ zkHO2ZKE%e!kG7Wm3HlSO|25zP52)X0ivD5v)SmLE4t!A?>Ab?Y-QpS6R=keu54_9r zo9}7yLyP36jYFP*H{&_i`iFM#LQkqbSh_#JYhF~`7U0iI?Z}t!{E#2vXPU@9GQIxb zgJ)#Ft32ii_cx2y5H*w-!WSKq}B6#+RMHr>x%Q@PYw9DB^1wR;Ge)Zz9oID zpZB|Z=9Rnue4CE&LnBl}th_#g*DI{{URTvCko>H45_ieZ@ud5j<5m`+;Ll0yw^xuq z_FPk-qjWA6Q@U2q8^YJP_tM^FQTt53%R>cj5l?^S8tO=liXUmCp5^^55b)HBP)Q>k|}>Kwu?&@Nw0XvcX&j z0v$WczRx7_LX6*%T)*a(V}>up?Y%?ic=6?|7yS&K)$r=9hqV0m?kfA9`xMVm>}SAt z3{*VL{ww&DcH*P359=nKDpgevt=`Uu`_JXB(Ovcv=gI%==v;;G=bQoSPku^}{b}}( zTe=NG;2I zGTCvj{)9iQa$iM!KEi(7F2%D3Iy3r8=ge(!yI+s(Cmx-XIAgyJKA82x)_-1u|5!|s zx4g9LFP&wtN#C9?4#LmRSG|ft|DFM|-&kAemV+NK-a+=ZALo&QvakP@^lf}tX^{Ao z)3Wb?&N0W$H&F2BBKE}}Rl2r*Z|-2}Ecj6TG5%=Wi{cITC|!GAz7F3TP`Z}imxjo` z1n&jxei3*{Je++2)-GbgXSXw_|?QbYe$IXJ!MDX4ubw zr)Ruv@jT?X*Y4_tWD8o>#m^hq`_DPgHCp<8DyzJ#KPd;_+(~|#KM9UM=uUC2RY=dR z%5@+x8v6wmq*EF{SHh3B5HAVe1^0gkA@3OZpYt*KZ}*)tj(h!iPtFmw_B9DUHmll& z@v38Gf0prZIO%qS&u2g2v+&R0mw2B(3SQz>>3qri$9}}~s^eaq$8MCL*8db9C;Nh5 zsGmQA&O-Qpw|>*R9)aJ4uQ@9nt8WqGrE{J4#SO7Pg|Jl3oA!jw|02zViLjaWDRx?^QXLL1+0yasN3;x!riqv;XmJ z)esvejCb7gf8`r$*C)6ytjB(WJ0H}$LeL*FSvql*<)^*JSqc9EJ;Fnp~Wc~98 z@S(Hhk3GjNds8|k?p1t>qH_m++VwZy)fIkon(WuVpmu8Yq3K&*od15!aNH{w|GD=E z;Tf|lp4Q$UnlAfAyTz*^*#dr@{iS0NP<{&Cf} z-st}Vzcg4n_2J8BN~Z(!jpqMF_)PY3Sh?46_0o&OFunt5&o7hUGutc9rjx^!lV`tz z{f5tzZgY4(&V{i1`we(W)?HZtUuw2=GS*aiZAWJy{IKsnUSf{y%TTQ8t_{^r zEj}xpos}u3!JmDOdpgma^U#EU{1M*CH;%gWuIvlGFMVs*V-|?7=`H{5{axdQ;(NZA zpYza>-_7v2MT)cK_lo0b`Cof++I+p^UcRQXU$PnLwpb#bpZ(w^;j`h* z&d8tp)%^v2a6GMauLXIwK(jk4-)HDQ3%@7*l7A>ZHZGd(xYyrS>n-~Rq`MsZ`&ic+ z0pA3l3b%6n9e!@4B4#{%snR|9h2lROo%-*K@4BS;TRn{XKzzxZ)aB^SGY0E}Z@pQ$ zW#azz6>H%s2b8YePve)%ek1*frTY`S(ox-KL-DiH3fcE)khyX06vXaonr7``fDCmL=U|*q0kAKMRp= z$PVd5?p3-y;XUC)s;Yc#{Bse0=b-fMe)Pyr>4dCQ{X9>))8YQ_6D@~VZ7==mq#M0U zI=9`p&%2tz>$v;6*Uv|}`-XQtPd}5-jmte=n0>6)-h05SFhAK6os4c=;@Q`zs<_$s z^L6+f)=##u6pmHjE~FTzjJ zzLvu4?vwpvZv5_Dhv19h{^!K-Z)6{tN#$$t90z}Uto$+m_rT|kmVFuY8}FA+4Cl{> z!=Hn1|5O7F(~tO8_Ej10*?sfb1LC*JseG;8_JwawmM1&Wp9~)vD}T(-E(fI({jB`& zhJB7h;sba;ZvEIN@SgXnd`+k1ci#NN->ETmt_<`8FFPLG zN6EQ@b%XyJ2yDmxr2F+Q>z9hS_o-dLAinRSxb=H^Pm1qmzeXhKJ^^3Jeh{YKT9XfoloFhWrF_=1ah4b-_O1wdtPYc zxYw^v%ccILWd{Ah5_n>DDLRb!U}sk^QRV^{IQS3c)h}6pSo#;)_u@H7{~8E%f@kBsXK{2MJumw%d_SnR`Qv!7y+kNS=4Xaq zWuLvNl&ySUgijx?d^JVq7kHgoikta!-v!09??cM(C$!TFj(hbj1O1-$hmEj5zeV<4 z(4UKa6zkY4z>mStXH?v*UJY>VDy@3*n&V!&fk@RitLLjPiQoUS@>L7{dB2HAeJA~7 z_|uog6WLE~aUKZ|u#VdD^)r0d3({|fPN^%3&%XO~zh2CEqp{i}B=T)k)<*~p2rgZ%0Z&ZT&&#S!mmh3aLAIIX*3x55W z>W|fjcO5TETL1duK9~lIHc9ZfO zLgIVj1?X?BKBxOrI>X%jnRi*byWr_Mr0yRI-$}dOB|7fa=XN|7G$Y;j;TP*l$NIO7 zE}x!#)W>QscD~0P`1vp7kFC2H6SyyE@89p)#H}m!bPDjiVE(`Bcv}6#ZS0pGQ9K{P z&jxP4qNlTCvG@`AV)%*I<&X8N<=pwyp8cwqRql4bz5*}VQ2Bipoo4Pkte$MZf7rd}@a(IyPv7coGTi^2m!WQ5pl2V(xuyfqnGL^nSp7^id>cGxUitqm zJjCsb^K>F!RJpuMe|{8RZJTt=pC{eA0ndJNDe(|=TEix`$-v7OckKrxcJhXQ`8T@Y`Fzf;8uVY@w>hpT|{MIU$QP>yBA^QtQ)h^1w>%bR$ zFMAtbjfEfKTu18<%RMNaX1w3A_VO}3jPG+<``rwmHZ65LFS_r`diBA7K65EIp7Z!h z-@d14c%Iqv)AaYjm-2ktn0)2SEuAxN{O(;P;n(29!&NT!zN|(b+55jce+hn_ea&al z3Ck<{S2^d({CO81aaVp?x}U*ol#t~{bh77@PEFTOdzab&3it05*_vPW*Eo;D##hxI z63@s!ajXAx9ry011%2n>?Z7@g^C4z`5x!%s{IT-gR6zPe)~DvLKP-L!xt&WL_sY>f zFLw@s6j}9uH%`P_8 zmakI9WZ#VU5$6AX_+j67rqUOe{cr5AF`Y^9uYOFe|2}*x>on~C81{&C#_pDVY5Z>j z@4~#U-DlUr7aW_xx*%w$Q zf2{wBgss1APK6C%E^qVDg;KOL3!cZy%e{z5JJY3<^G z!M$%wDj+A9!MW}XZWJwDyc^Bd2oNbODQ9r>s95awf8Kp-w);s|E=6# zfe&L|q6zwY;h~(r_XPYIHy`Kel;gZ^yFV_2@Ay7r(6S8nCEd9Up8XBR^WpF=@F}tC zAM8HzCfvVXVri&!KH92$nV+}d>)(@(wWFUNlYJuVtZdx=SeSSn#`9JOhQRZ4E|9%X zpX#_*->Uwhay(9b+k*X>DjL6)B47F4I;3EJnTIs}LGUEb0eBGm^YHE^)c@Oe$6CAl zjhAlETuS!?(oJ^U)6eM6hx0Bg$GR28&!i|m_CET8DyQSp5tl7^AGIr@cbK!Kh^6=r;_hI z-~@Q(aq2fLZXY}D?Z+JIJAd^T?2GPJeB#j07AbxIK8TC(6|6J2aY&o`vR|@84P?JMPTbOcw4wM|_Q_g)FF2l7e5y2({dc2PpNrxD7`Xqr<2?K{>m{r| zZ`)WpQ(0g10Xn5{%EtbuRdpC-oxzEH@`1A0s~Y<=o-9|7;_`gQNJ@!MSZ$W4lm?aRIhk7J#il~?1I z(x0(cI!*9rx8s&~Q1Is$?Dx>_Y<{mmE9pF1PxqJV{83+cV3yj2&3|TSE&IgIN_PeJ zDexhj3t|03=QgsRctbiTu-^wi&3bi3DG;dJR`&kyx;A&?T`!*H*jHuqIj=hI-8ZAI zN+E*#=7-pqpx^FJx(~FI&Mel?Sh)vUbxumD5ZXHs6B8Sk5R($yE#N?0e7A(eR*rUw zPjde=IVCeDkmCB92& zSlSjbT@w-$Vq%k$Vh6;;C#EC~2y{(~?G+!><%M3o2Dm@@m;WoqS*D~i?G>Al7}~i{ zpFm7>v#NrAkap=l=aGRHzUh7n_{WIVL$JDIu|2 zqt2~TDpcs)J=Vo4DK;S`xl!lHRB@GBkRQ~Deu2k{wtNh=l6dj%yCw+ z;{F?Ie-+n%Ma+uGFIFKu+4V)S-CTzfn-Z%GRPX}q8f?|BFC=zON$8!}sD9s;O?;M- zbt^QYCAR6=D%_P+-^j@3t^ap_8vbwov_hqr`lK7iM>-|;(PT;84&ZA|E(&;L`KH7Y!Y>hf>3TwYqbAXJD* zitp9CZ+uKrd{@`4Cw7i+5G*zj^^zIX%6zkO`68sNB=4GdIQhaQRO5*RaatT*SNKA?EmgH`= zoqH!Hr^F_vG>VIg3ybth%q!D`WEb?ly*tOo^>ig0)3;IImVX89@Aay&SHJbA;g#H< zx*FC!sdvBslZ02L{)5cBzik@REj}ftPj4@aNxl+Q_QGOX+AV{!?F5*(5-(jZbRsiqn;wE6)EyX#duOxz_LXxBt|K{U^2GE53Ep z6xFjrr2GG2cDbI)WyHnt-`oE$%uF%N)A#IaCwERrsGXF;vsF~p&b@o~PHGzKJ!nN& zsOml0^r`Kl(<=V?7rY@u^8f7tD6&ed6LBLCC)=Ry|1ZLIL#tM<->9?9H2 zy0hzH5>gUkdnWup?7eAw+uE@#ynj(1L9@PH*@C@k*%Bjq=k9yH;Gsy$V$A7~lw{}E zzg4|fuK@r-02=MQImyY61`1e157pJx{}GR!A3w-O@XV!a;uY4`-VU8KCT6{68;=i(&GzRm6=MMkDP z!`BeKjN#(@c!f@Pfa}#bgNCm@iJlamI+d45;Q`&{o>AF^QY zflTxV>&sr@OYggX`LE&QPZrD3eKtlk%4JD*;A<2@0;;*way0p3IF%j`-sa{ z?@H=rv=90PVfyl?e=z&ykGY3UlEq-$8GfB#07a4K+e0|@uhDEcU-C=s&W3!@2|fsa zj-T>jIiL1^u5MP00zN0X?|fe28A>kEMY7|cI@$3b_wGQDlk^^!Lv{uD(`Ym+yzIqj z{V-pCFMOT5TlivkwB*U_!#?@%@oD!5i#xzhZqxK{{sf{m^*=f=kCF|?tM4!wC1>aK zZa5B36hHfT&>!56hL?Bi#ohXBbUz-LO*k@N@66&a?+xWgR`2DvWG#3n4$4oZxbdkr(#)lG$8d$nVo-kGJXbcy?!R zQ}?g<3tWsnWHCc|wchwYqwyc+2tD)#z?G|Im{i+Q-3tH<=H%@ z{&v$JjPCz{zgkTC_)2(W%ofLA!>Kvqp*j1~Y4>!01h+o_(Ku)axo__#TonM$+1-jD z5j^eyDD=~uxbz3yA0NWo6ujT=?gH^8{?y%MH8PiLHJ*JpmUMT&_|5qpp2-^8WAp9) zWYxD<(thJ8_{Nw<246>f0MvVA&Ufx9k^{c@?0!5P_p@({JNq#_+S!EWJNV+!Xto>= zZUM#5r`d{DA7IGgy~G}!Bix=dKx@FXdpkrC^sg38_-r+wjQ(1WCo8`oC@a76F6-n)~2`Qbw^Me2U~?sKY%UKxON zJxIgYJxK^Wed)u>ASQ^y4wN-UKRiyKe!fP?4Om5>l{BpcgpR8Lq226XvS5Pwb&@2o z#=3L}W6ZQIq&jaKQ}wYb2iXZ@-zk@=(|bo;gkMZ{ z%ho7O4w1MT#17&70^k*X`p*nYE$f_3=fhFT@F?7flZ*}rCv?j$q{P{>(GSF3s}&%& z40dJO(Y+z?d4YtSIO?)L_&!?q5ak03yy#^>AMMw4yL)@t-+kpR(wWm!0zoie776sNQITdy%Zx z9fFYhNAOMj38Ip~S+nn>pJ~@DNBkG?19qhjhD=2}6a3mFO%DVg_iJGjeO%E23WPXs zgY;}yzRd%vrmU)jnCzIPV`&j7`QEg@=w*@ZsJXP)lj*S6zre*#_WQ$0hR9V?Q9zx& ztaFR!zfIwOYv#6TtPJ5zk#Pp@Bh!o&z*Pg|NcAM z1Gs~8T=3U;NgnWU*Sc?R+u*~>w+%b9Vc$~j+XwEOTnfcNmmS)+z@8NBS#$)8rrGRN zntnpP89&+#21hP!%0QRMvI&Eq>cMi33cDIvn80V$@lHGNCpGU47EbQOdn_SN0bJu* zc4?0KtUt{k9Dk_?xKVid10gRMi-65B2dm;UOz{OLXX>HQTl8TlBP zDmskLRnzmQe>~c{nyXM{J@y0hu`kum^b&ugq`(KOp&Q$=TY8*5%3r8ehs|%h9Qajz zyOR>z_&#_$oP?a~_|vqkId^ZG zB6NU50J0&3h;92nc9YyPpY9%I=Yy(35pG{tls+7wL^+!$d&4_Zcm)85AOb<(v3{j9 z%wy*?A}r>YVd;7MxLPuRWIbvHGLrcl9o(Gs;J!b(8>NIA%>yx0O|lLVN3I~38Y_JO zkaP6l*AP(yJ}ru0+E@T^MT`%`FYCe7ZLDK*+kmWNXL-jz(y2X441qcm26Pe@nuty9 z0HQlYhltw{KTj9t_~8Awl*aH%K6GyD>S_ceLD>=yb>uchgZfr6v#>+xtxF89KPz(V zamNtSA)rH^lFhIGjQ}|7camKLcYT=;?ZB4GVa?RJ_yVU^u?9w2#bULh$vy_wsknLtO3%HsJ&E3AdLx-*>a| z|7MHzQaE+37Oj%DS7uZ7B?E79RAMMk14DVJWQv1~4uE+}iWQ}?$Ljty>GDfi3fyS| zG|s;u61zKa7tPCkp6;Zdx@|7(Q@rAF$t%9w^opkmEouCYq%`2Y!D+g}KXMtm8MBPb z-g(x$G`n5l-7J9;a48`mp;z9_1`}*KBDj*wNO!5tdT9`VPc9@#hrv6iS4f4=z78fQ z?xAiLAnG~S&E36O@B$%P{EA>vV;wb{r63Go7fGSvESoyJBdHiH0X>i)5Qe12-(4j8 zF*s(k8DIuA)_#ZgGaD_JaL3lgxS&nK8^b1p*#KzsV?4c^BFu5ooy~x2LoR1_8N8FZ zNRj}?O?C{vM|e}b1FemErf6a9OX4W#y1$&eg5~R>o@?^rr8m(v*!#7Tfq;qO;>6R^Jn?_K7Xy98~UWW@*)@C!lS zjVv7&Pe_sYo6J`KEkTE~i_z_@inwv5!-%^W(Kd!&^a?%3FO&giVd{%RuroAx8DZcq zU=@a}$=>~VH6|VMVLV*lwyZ8mXum!3Rh!3*E3_eP-uo%yhbIb=$RyD7ox4tI(~%FT znGaqzIG%ORKT_YOu#hCe445VHCn9c>*O5tBB+hrdYsW2qY-xxnC>c|mImnj-V-I{{ zb7)|tucXFIg!~e$R9St+)}Ks4XwUj4XJ2ZrRKK?|EICH~Pk7ikwwD?*=q@(CuF|>PS^bd>f7@q&8~sOnSe3!idqxB%LaGs#CPKJ1aVgHv z7|Rm78@z@;`>m7u3XChqTQ&8iVDW125c5DE_vQ@T7~6$L9sgC9-ZbEab;&^+{&Q@- ztL+0ZWjlrIJs(`1q84_N8H0oMVEXC~d01T5M=e-EJSIqxEEA%TH@~S&JIVrCJ-uz- zMbo;n8y>rF}wLLZ1*3#VEq1OHJ}7>imw3?skQi~2Q%SW3q)X8 zj)U^3v!+#gzq{20o)3`B!a}8>TJ+x0HW(LF!#3=pcn*wkyzLK9}KRU25tfyGvi*t%6$=m^=|oa@GHV zCiH10TsV@7-YQCgrqup&ZJ~dcpyWab(tP?sV<@hh52TuM*gRdMd5aMe9CH^P-q;zt zTRU!J1q$_B)Y8-}7-Nesm~L0%ITxT4X+EdLNQb~MDb2{}9?TKexb*b77SkkSmJk^C zIUx`&Hia?qEN#}bt9q=xHfo7|j?iXhX;5iIku0)#(d^snWfa0;G<+n+G=|I83BhAN zFfsaLfYzBKSIAla4H*fzwnF40L5}%+??Sfdd|Ohd*NugGw~Q!cbM?rQONS#p`TmkN zC)){?koSqtCm$%W7Q5nX*3c;f%~?*vW8km_l~wd1R$1=n@^IVo3kQ&&3P3JkDIPzl z2I5N@E>CA;%W5aUMQM{Qz|d(7mFP~kx#;!tDPjvBxjCdIC~S0sEoB?u>>Hw6Hhy&n zQ`0K3BXB8x6!5~+17=D{+Xk4yS~zESl3jc_mFgDxrs6u~Y=$hrrbq4BQL2sH&C)2` z7aen{O|WGJXt0!^R#CLTnnt1A@ymyD-gsGFo>04Q#uKyxYEvc<+batqDZ?%}3`I(J z)e>3uzCg6w$#BxldLHI0KizDT@SFMYLQ>dGr+U%g3BPaVz9D3$DfiV zq}tKh3c#$S|IZ$@^dRv?VYIp90X<+i}1O`%GKDz!1 zY8K!tbWovR05!w)EqlSq!RR101)~~4R~$E>@>D-=z(zR#wom_tY}GmEf~5!UY*Z*@ z=ivcS*hJNr8Z`Jv@|%s>Dc2u?-9HiX$e3h}^vWuZ6d)g|oh#%6QuQcjdJfj)Lv=ud zsz5GwtC!B54+}Y@DZDshwh|K2-jn<2127(3{AXxT%-N!SMAF1N4$F9je}qZ=ry}mX z&jI9a`%S`a1aFSJ0ZoK0dnu?Fle81`-Q6Ov8GL7L?!W}l@aj)W|7W-P6Vm@-B%wC} zv*Xyop)>7tWqoI zalnTIJnD2+oH1#d{$GYVu|R@zl`gSQAsp^Q|{ zO~Quf%0--I$vL1X>e9H9dKZC$@PP5#JK3LT*fsrWWJ$h#!n}YtEFjiu6}QLc|fV30@QpfxiK_HV<%7IBppo6PlK zcvDK!F;*?#yUP0a0ec`t0XGOF5KMK?%P_}s&qfi<%8rLrdmH@kduM4ae9$Y1Eh^@( z(j6YRfzvZ!)3B=qWu;96MYQax;r?(*^A6L>(3P`e+{mvfG7?=oz~t%V~&8jge9 zouYo7f?|xw5t;(RW6_1!Xixo#Y-#{sh+r;#w+2cs9#@;sd9Uj=EDWgR4<=5`e6fOL zM2AiWefy9z$$&p}0AWZ`#L2cs8#hRICu_t!gF>kR%ov-R664!&5K7w4aS+HY!M`f# zW!Ol^g67`EsgFRHGsu@s2fXKE0>D#I*$%%P8iX`{I<=-IXfL&oP0!0yILxy4)QF~! zYtRArnveg1ez1mV?n)f%@4*zm3?aqX9wYm7y>orkTv}|n&FJW(OrnX@9RQx+wdX7z zYci*h4%$*w8W|x&X${$cJ6n><-RwPtD^=$tT9#a6yH#%>DDE@L$UaBET@&rae%Hb< z;ZVPT(+8PC#GH2sIZBm1us8B`hpYM)C#;e{C9iSnxAA8TM_b6V@c&jHK>U74&}_B5 zxJNu3-lEXJ!gArmlA?w;LP=w_E^WZWpUQe@kYkey(m}CDpMyvXAN&~w3J5R5#r;fo zeLI)GkTxbU>H@aWMFC$theI^W5-j*aHl~>xKlV_G>`#KEiT;p7(}e2%38#c7ysW7| zd{#K=`f^aFd}%rV6;1;nqH`Km=Ty_}#4;tp6q(29Va?ljb-GKA@TV>VkI!R*e)j-+ z3qr{7y^7)tOtIt)M`bLsib>D__FzKpb zkN4WgdsR8;P#6HGyewYtb|-Mn8lkIJ6W&b^Z?5;+CIXD#oU=iOg6Ll0$txSP`;exT zia+(AZ#|hrP%7$Gk>%>K*u9&5N5K%iY^pkPajZ(FM#1e46@l#Aa(=gn3xy|^&Ux9B zpF3R+ZjsUt)({)aq53747NG`yPn>bZLq1n3zRkuS2J}9=P~`<#+<^J{+#O2E9hihPVA0YH#1oTGt0GKm`nNsArzUHV4vES|-pi{qFnvfcRl@Or`D)xC= zu3S)|M@^xE(DWiGEC}MZRd4fTWtkQ+9NqNMco>z}pC_IWo8u5_S+vmU*(>1FAl$Aq zigp=SWR<(@x6P6VDAcyqsxq?Abx`-Vb*RH(caSeJ1eQkJl-+5_5d|w zssP4-tf|Moc#{n2!~V*!17`PqNVlQmmp0xT1@UD$>T^ekd{~|I#!+iy8)mY=G ziHX%c=fe=hHpqf(W2IoUtoD}M#Uu)XS{3i2R4b&dZHPNIbT`tsH5%V6dwp>O09TuQGRPc4vk>H?bu$V4I%o5S*>lqFSeWCAgvNhy-F=|+dYbEk!KQK78z;6>1Nm|vkSk7Z`($c*>Gii8q4$- z(VlR1_IXUSWQ?TSgR)tI3@OkDLMqAM+L#$N2BrWBu=`)+y0Qsm|DfK^_;TWk{|Dg6 z4ZcT?y8%6GZ80gvzj$!Lk@gmIbMtXiD&mhOV3I+CEtrG|-iIKXD+bOqlppZ%S1Inm z%n@g(X4J{3TP_xrRb!|;im%zFV?%|Zc2N+3Nb6_v+U zKmCo5MZ|MQ;<4c_?FvBR9Gnl&qbkc=wqE}}LVS0~eZmzQ3z!0u{4Zd&8=C~Wl@#UH z2*ofpjz4X-WaKTjKgO2#;RC|`H?>*vfOw!wbLVk$A=ny-`9Dg_KL{q@dNW(xpg`z_ zI!L6K1dVN$pnkrwvF$vlT3{)U<5D-5bvws*gRR8onp4pufY!j zjVZPN1&p{HBNrSv4K773>;y-RGK*eeGl>0EFn24yW**BVvpgCqO6Og1;KksKa5(!HfBs|u4SoZ z#M&A9+Oe%s_(~$D{9X1qkuEGD242#``t2G9v1k=Fbr9ZtP2Gn*8VR*o76OkNi6Qo~ zxP30vd!rc-d?9&N{$T?_GOUSsYw!?BOqFID<)vbs^e#1ivuD3d0`BCh?x0#Dr~A{2 zf^8X)(#8QlafcKZ_(?b|09eo%rf0GMxOXS%u~IpR=574JxWUN+z4dIwdL8ft zji6Z25p_zvV6EDy+SX-pGu38op9Yee_EbDRdglxylU4fb>2=J>tS+nO;ON>?*(}yz ztxWqwaJzKf+88EN#Akw7KxAT^P5%gmL5v&-;{$W!fnMzg1cWWoF{pqhvlHS6i&QSG zt-TZ*2DNFOt^J@jk*K&AEK|>U4ADfSbDDIbjn<@x1-GW>@!2h&gb$_lK90~R>ywCQ zd==~hZo$)x8F6)NUv_R@P!zVO?N}F48J4Wv2YON`YP)5{EHmH@_x8lwCDZ=Sq20^T zb$`P7zSo;Rm0dQG62D$@E!~av0-cZB+|w#uX=Z^~Miafyv1lL-Wd%B{?TYN!wn9(##FPV-rteUoM*- zbRI!`C3R)ntZNvUDHw_sDjasq@iWI%td*F48vbh$)J@Q8W`kG)gac{bAEbw~K87ef zqyxz;w&7Au4Tc6+ZQfcvUSn>(IYhXc#jR~TZ_zh`_0~8Y8~Y}tM`#nrL(Ylh zs-SUirE6<#GnjFqMJ^EhUp5_zW{j9@2sdFY7u7Uh;~>T-T?KdDSEcvG<`Y#UCP!af zU}W-G#%*iZm938{#W?ylwnB{g;UUQ`(lHF*HKX0bjEn|Dx{=$Q!TRSNG)kLDV1xDO zmMP6+kf;-wguzq|A~AaQbh6SWSZ-8?2?CHeH}n=s1JFKEd;qudW=;cMF7$_=bSp*e z5YdoPwo92&Lu4P=yu5%pJ`Of(XhhB1^}isl03;&{t8lHY;l)ur(hTNWO^`D zwg(Jj-HMZ!DCMMddgdw7AFXV(oT+(@HLp+0DD731fF0Hgss+nACho`>>|~E)-Y-{I zrive$udh8E$`@@&Fy|n@(!QKl(Bna#SsV@Oe?Kt)_z;-s2}Fc8J5n}+@0mUit`P>> zV9p>8LP~Xq&6kCM>VX+KSZrOzuOaH(K0I2h8)49}`A=?)1!&gITxUE|+cO%tk?lD@ z-Y+60qqr5j78bx-QIbi+fXV*qDajWe$HkvLjs}1WdmXFTopQ_$WZcXUKQkQYW`xl{ zW}e@QUomKolUGZ2{#>sY?9CQ>_xZxP6_X+<< z;J}*nVkvoB8$#Qr4Ls!r={Xiqm}cRy0|>R9g)lXdCTl>pV$B!vsxfK5Y7}??=yBz$ z47hV;uq0$yt>OMn>!moo*vz1SPw@~bm6}Xmvyn$$7Y#)vakQdVZ;%%R4!txqAuFOg z707iwlj+2g$ZPm!a$#P8um8fyNldX(#DO9=nQ({*T!w4Xb=ihTOzO1PTG_UsW0AV5 zRfVjuVUd2?rHw+oRZsd{rpEV&`9Ev}7UZ~Q?vF3zwd${L&6*7&fF~PyN+Cat+~UMj zJ30r|0y{g$Z~u0Wd1Mtb>zoNuX$T6VahGe=*+5p}i<};t;-Fs$UuXt}Skg*YREphH zkN4%}i1V5x{nUEv+Bj=X>b4~qiUlF!4Ru)Q-eUtP3@2O0FjH;idcA`)$(%IWzAFsi znICC8&2*+63Mrp5XDJ`g^ouVu?hb?L(zW(7dc7+fbZ9;u*By&lwf6{XVBtLg|U6zE~7Y%e317eY5-gPosc{upKcLF9||F)JmmPc$*9Wbh4D~W zt1YeRA{8i|{K&Mev|I{;L)aVnrUP8glUc!v3~to`_)V1a5Vh6Vx}X1%0C&QMx_A~D z`k+69j5XA*fQYc??4DIq^Eb9N1y!1!GW)DSN}DsK5kb8QSkPKOv~Lrz$t1_dYF@v} zE^dqK;OUaiHE3)$Fb`*1`Wohol<0#bSmP44je%nhs#Dt&hTY?6C>gBaM5YS_@+Hr8 zeYVm(g{i!0hWf6ZXD$g(hg?=&3h*qzIRr;jBoBOgQrd>5ztqMKAW2m-LU9SYG)hd^ z&|YT)>Q0q9ianJx4f3$iDz@V4lPXx{%HR@x`i9GSkQs>+jRQNAs|m_`2EQ>VT`3xT zd^K7vFu`NwLqUDnXgPDrZl!ezJ=#xTdGOqq2wyDh)4ZFoh4Q=k*1h(k+F(*||EVkG?^+(5n=CD~v0-uW-0d+Uc=We;fO>;B7w9z5O zUm6eWw5iQiuvC42^AfMo)G?>B^)LN-R=Old#cKv=P)v=?Lae0DRW8y1sROfZ>VCInV)$H z)(h$|dOl!{^vsr_m8UgmFMyg!dFK$6G;=W5XG(alKhN^DZOfn?Y!ltqlnP?ki1pYHDAf++)?d{NM9Y~J6F zpDA8(fqi!YN}q6bVm&>TibwTPzp4?<%zG>*ZQ za*CUiE`=o>Y2u2f(dRT5f$HM;vim!pJniufz2bUnCcP|tt%lyIZ9_K0bqe0O5F9J} z2=wj=yi%EcM!nzD5_xhyu~3wL;t(592WW!9%uxjPY+*FWJ{gt(VOojOI6 z|6UpXK#C*R`NaQ4cC-Yc+w;W}3CqNjy)@@FY5`1D;%NILzxB~3O5ww`hh$K;g3c18 zj~Or+Sw-Fr2glTsx2;sRWo=&S^FxD11(_!~UR2CMAUwXYB(D-SRb_GsTOTEtbv_RR zA?K9o2}|E5P=L6DPA?FiWn5(R~Wv zyUikO^}VzexZEV@C3|xJGX!Q+P`NrB;Rp`tN-5yB_Zj7VbWAqC@ zR>kX&2FOtc_v_BX00DP4y@u`>28XU$!i_Xsc@nq#)8r(AjNd#`oZxjaC>Q-y{hwyG zT=UH}T)(t#-SniaZn}MC-%M~Nr|pA6s4?}cFp0`yQZI04KrZr^=H2#7<3VK;*dyoB z+#|T)FO+Zihv6l3@=qfE#CQxQph`}gm?%V@$KPhz96Wu7BrZ5=pc+V~?tK>{q2O@E z@wgSS(&u=%aGb!D4cohDM$sS7VZIi9#DP&UemF4%Ykp9JK)96=DJu;YFKcRa*%yTI z;}|@UvDbEfKUzL4k)m{P8nY9KmB1R0XW!Ck`qu>Gj~ENxPnD9IdzH6YePo(S360?R zaJmyE>5(FIs_gZzM7e<{#HkEu#1gn_YJ@X&lzq6H4c3^3keSNgvhx9BYr|{M3g44r z8A}_W`Om+Pm|FxAT9;PX2T`#5^E}W10N>%iP=TNIzk#z5Jw`iuZ#+F8BAB#PUP$7t zWvUok<vykYv>ONPN5=mYW0b!<5d}(XF(DPyv1(}6q?3c5G zjo-zV?@Z~*6bzH(^Z0($h0OqXo$RCIb+$fTu1{yfE~fA*sQ)`&K%9HlEz52pP$#4* zz$w8_#*f*I<#AY|$2Uz?Vo%0Ib-t*c?E$>VC+p) z1Rgz13x5ywmOa#4@K3mwpq_YHw8BWOcuzLJ(8e_o-Y*%O8m!@pS~*+XPpc(m=i{U~ zRob!{Izo~3)7s%l7bzxSabUZH-cSx|*JD@@@q#OX!BfQReJ&nud~Tne^3CY=7z*E_ z->1$<6B>8ln%E7~U zIGUM31&ESzT@5%=2ib@TovKV$^t> zsF@fS9-BTHtyV&%<_3~}CKt=$P*Q)BF-Jm8yC=rzeXpt6;X8_Y#~ajbv@$YUFf%qTRu{EDHVapp}7#(z1=5cx1(!z9g9y z+EcD}>nb%TWh@D6Sf9>G!wA^1c06BZAiD!u{Na-mT_xA$e^hR}|A@GAXzFwYk%Z;Q zq+$nMLxX71^f2{33PExVQF!GmSiCN+UhvWJ@>t|4_k?m{6svM9g!r%Ft?N+z^rpWt z&Kc?Y^gAL{XG3n61J@Qo+++WMmAvC*pZveOrVTz@OLGE;n^wsC_558L(b1cod`s};BcNf$1#|r@NW=Hb3_zv`C=}BV-9>akK(RI zpY;b#EHxy)I7| zb{+hh+tJ`V&gd+i0uJIe+SVDY56=ck|3*fITzId;Vi3~U()vo08}f;J;!_jJvtGq; zm1WrwC~8DJZLk8$i%<EUY!z%y-L-}q9|xO@kY900+WM0g58^rj8waZ7&2OP*@E~D*=xWcb zhHe>3BTOC}OVr_6=g$#;H5xj3oSt>g2yJV+BXw8{-b4xwG{&?R(taJm-rEdvPI1TE zWE387huE`_@@0%!cC{eLKK+6j7v3ez&~36+i;j(6I$xZU<{+F>c&1!in7@Ke5C3ar zp}94o^l=`wz>6Xaa6?4q*Z+ndFQ%n{XJnum*h?UFws>U4xE0I7K99dmsoT=Ab~tUDnGP0gCwuQH>n%#hD9~f| z0kk$j+izej~3s~{pmoif9K1X~0bSo2LYd@Iml)eC+!u|q`q&Ig~iFgltr z5}OKJ*bXs7vkgdzCD(6$WzS`Pb|OL`b52}D{7QI~FFtrf`XX9BFz;UkY?;niYq^ay z7MgN5_2tjbJ=r(`N;C(zOn@p?kJ(@F#oO_Fa5eDnv6V5z%rFK;pw5mV)cqgeiNZ1! zkd=9j`JVaW)|{s4%IlV4^W0gkn>Q+kb&w_d{ow?vYD@D5OLlCBNjm-)r;{S&fuJ-4 zDEV*0h5cs+UZ!z3iXVCD1lcu)%mNY^b4X8$AtrL+@h|`@Kgs^NX!u zMw^lY|D_4m0P&yTz!2sM#lU{{e2ofd#G=Eu57A>aZ+M(q91Cv-$iBj!lb6Lkcl2if z&8|DAi63aRI*y7(WXP%;m2WupFYNC}lO5^lEPno_-(&jtbr)=I=giZ*Y`Q^|^fN83VvNU6O~_J;F^ z*;7rAz>x!_4wDbo!o#w^sL^k!mKr#l)ul!f#e09m!3A8J5bfX~%F(yckFU^ITurFp z{tlQ#Oe85<6bl3k2X8zx+KkzFKr~}uM!Cs@TW*fP!jD@15}FS?u^d&iu+uIs_YL&| zT@nhHkR+-+J$e3u)BM={Wgr7K*_Xq4u*lV3V1C4_>M60LfJ7~5`oeT5CUj>rd!M84 z{r2mDk{sj-*pAX8U%_?rHF1PZXhdXI6vNrlNP862U+(H|Of$mVEctc&#W6<%h0&kKk zabZ|kGL*4lpU1PiALd6Qve0j9rc~96Gc3NC8>tMUOUEEe_TJB@3$P4(h$Kg|P)5K>1;3gYbR^XwBN7tpfhHGeIt_V~8POx^a(w_a4_ssLxv+!BrS53ACUi&lZgm zcJ`%VG~nYS;aBYQmIsFrXYgeA$F+9q5_eY;4w&RYT9jzADyFYb2m zes`yA#<4$bb`{2L_L@|(@zv=eNLSW9dL?=IBOmVIe$;4BfT$1r>2k#4R|ydU2Pn?{ zO4h~yge31w9NlHz@iKJGdEH&DL*QZKP6wX!p6#318B=VNqIWGO4?H#XkSHP|*{Dk5 zt^40Fb2K#~5yrL`>)~y-rc(8&jKHlvCkU<^$)vKSgos|Gc!4ivDZAAp8Cc^_#LM?* z>s9}vx}s8X#`73+=lVW9g2ktr6ZRN9mS^eoLNEfG8i3hX*HAP0I+zY7pGg7Q$@C%8 z^aipq6UR1Vj(f9U9x=GT$Nz^@zf?*sPUKT%R@@7*={>Qu$!aZ)l(;a(-pW8%0LZi) z@2!;3OWAD9bL)^p%GRdTjcUcccicKMG3(Fd!*4D}iwOdO?XIECoxq}7Z8Aj7xQpdO zJwwwFAWA&h-j>9MC``RH+>R}gg-&U8l>G#SK>90#FZDA%*ZH|xkETfiqSU+2Wsk(Fh$`j1))*@RvWb2| z!FnqrUB_dq{`+%+1tlu-2DLcuXBW0-7eT62(|$Il0bug z%c)^H;XTc~(Q(RV`Q&gplDY9t1C(Ca(0eZ(4~a@#aS`@rJeg!O=_2I8(Yl%aGSs+C z)oqVS25gMG+pl5Ra|NRi9|*=4tGSBx-t#V~{ zx4t>NP4@Ah^mF*lDda8D?Dv4}d0>uhJc3w7e-U8Di@iimaS@IC+N_fn`|Gt5 z1-h~dIC8I_D&}eX;;<6>9#7PGgJTP_8z*TKSg6Lf(5h(iZ`hh(K1_GYDxP!ydLQdj z%3Ep(rhtXBub}3c`Oa#3z4I5Kvy4&gqaB4p^pP8ykhU!fRJQhXN0Z`LBo2<*CZq^# z)^fg7J%h8E5gmdb7`Nl{X#Gafhv06#%yJwWSCF-@raO-xGxX^pPwkpDgas z-zgB14-)j8*S(r}w%p`W7$E$+_%h+s)W#F(^&ve!8!5`=Ug#vd_;4z_0#}RAu1733 z#_3Rnock*sxe%P`y04C4&6kfvo(EqrM06epWMn>D)sD(Gf2Or3@NdjiH8xLu|l zwuYtILkxiSS2p^6Ti><{OFlswjml^&h@`yR#9AbkH8=JVfM)9@^Uiadu)j3qTf|gO z!d8?4fjnMRPzL-XK@+@ZOlfIcIkPli28k&G_}SfrYxfovC5~}m)_v5=(ARoGgmp~y zhijLJs?oAFBB?er=Gdy}JwRN6WmR1Oj!*Z}#+=bHo>>qkFo(53QW(nnv|1M#pgq)k z_^^ULsFl)}(R{ScwP)5&Q%xKr0{ZDk8jDlIZkpd=&>l+zA;*-o6A>Crx8Te88OPm{ z2&fxZ*h7R!N>M6g|LTEL5q^>Ib@hNc4ci=n?Flba3^dAfOn}k06wVKM-k4^}9#kxK z>XK?8=@qi#Vj~JLR4L>Icq%`-+6D!Wv@*6nA6prmZ6g(I1ioZCh|~AllGUAu2gtu1 zZZc22G#KjiAZ}DZtg5o?TUs_XHB_Km#^r&US%Rrct5VZY$n~3+b#xzq4y6$}ZZ?sg zZd6;qZO;h(Az^$!N4NL08zk`&;It0h~r2hV3`Ts&+P%grS%t z&F8YBA+z(T?6Ws}woZpoN*SK&3o0zA9(q{zP}!f?VW0o@y@c+=0$66Z4xu3i#QgJ$ zb@xr1xP1&vG?%Cd1k0|C-mo_APC<)p&DubzuBKBHJ-FZ@G7-NM-xTLax{PC6VTO3J zXo1G>{1nf@j~~R~%%LDxgv{uz6(}~#Ho-g1kLOOF)OoblQD+=L8$c8_4z>o`nhE@Q zP}Y!Zhg*(-%#>6>R^kGnU(nHw}oU zq1}b;^fZtM9J_=%joEtHAFo#i=zegq`vyQn;o_I;Xr$Hf%9MURWsF+%Nj@+@pHihHqxKZ5B;z9h z7-W*R=C68KfJZr{P-rra2#CT-clvK@ny+zdWS-;h!68n7t7R%~j|OQHnc?73u9WU&jd{0m&9Pjzr7`bMefPF$Z*0 z(2q2dy{Y`RCu18u^{ms1d0LfxR;?0DiH5glC5^-%L+%yXM~Mo2dj26^;#e+_Msx=H z*88JVsbPeyM{#$o6*lYVQRh;Hwo4EMCAIN&U9+-$x}cCoiPXSS#Ed5Vb!RL~Dj_&z z*66yQ!W6b2qrqL>(77==lz~+rTXT>F-o%7f{9@5|n_hWjgfba&45AW|ymCVXWHkt6 z&ImS<@tMl(4y*-EiJO)6q@%i=39TO06>pA<#ihPy`aB<9Nw2A=DL9(=B#s1?xJWpI zq)348U1B=$9UaBMhjjF}iu67%EEeZoRLTxEO%zh_>)r^cMd%vqc!X>XJozCETi3F@ zh-2M@Ge2LNx+<;$D5tb=_N#y|$_EsIkju2_k4Z3akX^P*%LBfl>jE zKjOCvfk_QzpDSkd&F$W7b15|f2{WxkqL8!E{dh29rbFB(XsQZTewCv3_r^{r#AL#8l`B(1#h%R0%|`cZ=0Oer0+sVBPyZM%`dUKcOZ9~<)E=ah$RZx>Wq1 z0qqvEPI*ak*K-pDIIPjA@u3#eyR=(f(QBx@gK?Yp5^IKsV7yR>Dv6AkD7@I=@!x{L z5{JwIu#HmGHa+ex#IkxXEwfZ?Dk{9hf^J6>V5A)|HxW8iAePT%_O?a$dTWqG@kRiZ z$(PRXB^K1K$Wq38MFAGI^*$l)0ONvXMRQ_Zl;7CPTbux1KIp{C<5!3(Li{SmG(&uN zBbc~RXPAJs#j9~A&r!NJZ*(|-qnyo;hj#|;?r`Ft{A1_y1P?t)cJyCZK70yhzDlz- ze_fCSd%-&|0z~e!FIEy=Z$e^$$5^c(J@%p}-E+;=0%uM_@h&r6zqL&+mqES^1cZh0 zb*0$Bm5=Z(aY7cvix#$x1=e_x{S1WEaJnN}8Ei0qBqDbcuqGcR5?8WFY4h_&UX2Cv zM9lqb?@87eyN*}EB`FHX>MOTeE>dQ^AXiRzHhl8hfElRAT49E?JN?x}3!LX{DlV)vuNM1YNN#ekQ{~fCzUXG&E-N@(-Z+6HB`6$<)6$$u&F>n7DI& zb;^FtYeN=*|EF4@vF%t*a=*5g#e)kQrZhlUOf9wPLb^gH3t&jP8RuhJ@n0mLci3g6 z0GJjLHatR&!c)tv%2!+IPG2-G!0li}P1gQTQ=}||;7sNb8nm*X($ptdzuJes%1~6r z!EinbTA!8x{b%`XezVzvpr$ulFa}A0f#CMhK2*XWM#qW2m}SEAr&7h%<6frKGC@t) zX^{YScOn(IWD?Bc#3Cxk^}0f%B5hYi5}{W1ge~pa3N(P>e3}W!!rCQHYzZ4rFHM`B z)a@wC%|YJvQ&xzY?(Rqxj(vQX_5l@_{sM0cU~<oc1**PI|m77oAFSRy| zj&PM-*#f7j1=0Kds?=YL*lgwhR=uy*!=GOqM2vDl`#Lh6mW_E2VAw`4TZ~g!e2>Da zC#9$%XTnm8Dh8~fk7U}JMr-(x4_EC=mHWc4syEu+kA=G%W%`J^5wl9BfA7L@O3^^< zLWMHzG{3-*Iw)O@()-3IP}N6hW%|P-6IR^2uydVRsXf)T8n- z9|!pX11`%^@gQ7up=CG-r&g0rb$?D!c#2>_qMe^ABbBP1Y;%Hi>ubZEX!^ujqjVqd zyN0#qd+^T$MJd0YvnTixzKBo}-~JcFva*8Sa9C4wVq-n8Bugo97oymOaRnQW;w%F} zKUt)2kafYD?rsWZ2L282s_zTCLRJN@0@xbSRTxOs24|!gp_g8Qig39g2sM2rL8vLn zHIEjAidgzpR`fUV=0K#;c>+8c^#|O-e;TZwqh`AwaFmY6XzFJF1xxQ?*_xIyIksHE z?q~_z4s7?qNMwpYv;J$<|28s=r9hdJvkx#_3mFna( z66pb{+K<<=g${Va4P@`XPE_DH5!V5UB^-Qz=r4zM08;`-S=CUNf_xJGcBeZLgVcqa zLz@Nh<61QP^Ge#zb1hjJNgxWw@bDcNAevbz9-Anr!?PD6CIFK+G%QzP!x5NTCMb%H zx}-iq=MqWu5c>LetI?3>xx&cVSoY**2`J#1rS57(v%oaiiVi&aV|H>qpJVDU27GC) zI|gN6`gaqsNN5 zCY<&FAQfTnjaUGn8wn1XA-O25W;+4S!KN{Iq$xal44zKG!@BtN4FwSI)$(Z)aui)d z5M*EjnY3sU0Gp@bTU=h|50d_t?@QWpkjo69{}TZ1__<^q1k+M$7{Y_e=!bN2yj3*x zh_sR6XfU2a1AH-u_PL8G3e~Nu_iY^JxxQ4ELQg2}1DF2YQzr) zp2qLSR$PvkJ^Ll>aIl|Bw7^Y^MwnvPYX>uVPZ;i*S<&G`)UQqx0k9hMeTeeg;&e6| zO#341XDJPQSdg-?Z{Ydt$eiBaeb|B2gZBiB&d?(}1%b0eGEfLmvoG9F@crAwNXS;- zmkrzufvPQrfn8q>i*L;0SqzLc#+`qUSrjT7|$IJfW`zAWNgoPc*M;p>fh&xW2p;m;C84-t#jTB&-wqDJd{?@b}wug z7!Z`Pq|k>_4nuj^&nAV9rbK#E+`zru<^0Xre4ULrbtZFcFDXlbWN&2Y0;g^dc|c;v zv+4~fG$FgY(Da3xR%+Y}VcE>o5b>EPEMi-Oa*Z5d1P#f#;!orOW41M1fR@t%4s7ROuts6M`Nu!peu@Nwyq+yIog|R;uKCDw4|{ zb<5d!O-fhF;iDh3&oThr1&mt)2(`AYeEvoS8538CIP6o_VezqIY`6Qv6Tc@2!(I_t zVl|a5Y^6RdTJ&558b@yk*cdlfVKdLT(de^PJ3)ychL7yKNT*}r+T%5zHAQm0n8KGG zW5%+{j-c};hO}(f2hO#0!EVD8szT7`DrzAsC@_qofkb$#sHlbI-_$tp3Hw08N{04G zOyM<2)p1K*wNZ5T~EGdi-}1Bd3t1qKPBo5uof8g zOZ?8$7)U9|ntb*xE>!}>C(^%x&aPY$A-;iL9z^qs`1^L<)fM`?bOLfDN(AHCHTnPkEA%?W-8G;@$TeEMc6$95Hz zW{tAze+AA7D`bZk|4Y@80N=B;X)j8l^b~b#s*$8?{x3_RFog~r1}LfD|AFg(M&Ue~ za%cvhCC9Amfs^!|ILrifrFa+`Y&6!``xgadGlDCTpZP~(T}|GZZnSyg%UDgQ2hp2p|BvNcd}~4e!Lv_6JNp|L1o{h9hP|JBG&d6uVGP(kIABz zc(jxpIAvo$dw7hOXBR%EhoEe=Mjl9jp%51{WJ39R^lgbswqVwn;MuvBwKK=VL1MK> zmT=9XhiS;mlBCE?h7jow^owFemZr55Rc!RITZNOiLC9OD7oZG)pkPBV@EY-6Exr|R zBO2OGedntki%aEY^CE~nJcA{;f3*V$f=Q?qb%uzP#_OLQ{BH!!aqB-T3;SMHw~)(h zK!{y96?UfKmkSQnmC$k>%LrE4v#c5BRrkYn)Q5z7F9f6#Rc2@{&?6W7wh`-_(#54t zJak18Ry^Ic#8WoY>2gRlfOM&y7XLPrs<3X7^I|q21uu(8uM?)gxI|+zo>>O~tGPvx zN6S_k<+eI+L4FxZ&th%(mLcyL(esQ9Wkd|BHXe@CsDH$rgMzW9>!8UFAQg?$;|e0m zm1WgRn-jBI?S8Lju#WA9+wc^SEjSVeb4uw@I=Im$0AxbPOX+%Kn2ViW9A+QyKvOQ_ z0F8Ny?67J2R+ZB!g6vfyFWq|;Skas3AP#p(sE~b$ zP}Eqy$0I^lr$=PFp27f}Xqx9laOnU|rDS}wwUxaUVb-S@Yy-f-A-qO*f@^>W5Xs_( zPzqNW@EnW$0&o12{}!rkRr>)}>T8cKFC0@P9T?S}Y-WYkv@7W0xK@vhF2b6XL>4%- z!T36y-F&b?yj!jmlSZ#6?^iGy@ni3xXPG+({x(~_gnMM0{`(W`_zXiN?lFuETg z0TUD{2nx43?g%s~e-1wlA&U4AmUv#lB}$#!BRd(9gS(KMH5OjohLBv-1l8GBEFJH= z=&^i-?PT|5hqqZ^W;k^`W3h;U$zj{-DdEf1W+Wll$HOq5r_zMc{=&1s$cP%!6~0SK z6*qe$q+$V4w?~_Qvd&fs^)F(LR-E}V9Dq0*shmS>J`j+ccm`NKFW5^ppp;p|B^?2R#9-8y-)DH}9bw*@#Vvr%aJ1+CTA@6L9}*7CyYhgku|p zx*OUSrDJ~~-1y{YN_IjyRBy$Mh>C@UJ%5**-i#MYopFKEOa&%!r-~y%Q6tXM!Tq(K zw1d?et?oo2+``tbN+5r;IRV2-4KArra7={)IcOEGw=AMl3(_WtQIoTcO93Bn4zqrR zSPkS*94ptwCRLWkL0ftS|0{_}X=|9VzjSM?MJfPY;@#fda2VVI;R;MKVmljxSi%go zBwgKhje={_JR}zP%dDk54yTH-GrwXY{DdnGv-}K+LQc6-&a<_CjRW%-zeSjd^NrLA zJiQIrET6^FC?;$#7MUf}KditA1n-DR$PJ5m5#!M zUCK|G%vBd2@Fr0k-~%n~0|*Wx?aIcc^r4VTXXDj;fMVooHR#W79O-B8*jfzKcaatb z0*n4_ewC0(l99q`l(@-e$$mOA+?fiXH!is8Hn+K=8tRl`SkV-_Dtm%g3Mqvkm@mht=f}%Z_!SjDEs4 zbhqh6d5VMd4maU=p)ypCVdBI(80xUbsepOYQZSPsiQ{f4K#>@n@RthV^)Xb&tL+O z{mEuq>61o5sJY-qf;gO*qW-WX1`eFnC4youxOb=J@Z7`Zo4(N}hWNNMU~jX^C~17VgDr(D!%V=-F*t1>}0Lpd}gk5&;lLgL*+#KcH185e5@t89x4 zI7){QN2%pw*=X>zR7g}d{2nK1Z@xSmdwq~G7CD6+I(05-G_q);!5G@1nzX8e0lP8M zm?*xRYh~>D=`=lv5C?G9tATB(&TBy+Ul~fRNT3}&uJHUBk`figfUJWRP(n72^ zcsz~rp1B4NFi=R^Qsz*CwzHg#p<5gJ$>1dDjUv^XOi-Os5hfH6WS&9IQzL#kL`vF3 zq9`BQ*)fE9cUAR%TNtB#np{tYr@*p?Wok>ohCi4Bi>(+lVb*H1tr@bMzymkLIU zH}fb5Yf-ojI0FTCZxU^2&f$u-QVUoZ%NKFwN+l@qBc~W9FGM-6gVF3u;jgKi3LQ<2 z`pKj-qR{V5P7=Q|9Je|Mi;cB;DMg%GqlaxgvEm@xNxO>2PT2QrC=1Ot%LH@-BVXb9q!c8uK6g$)ZQC@~4lBbKt^Rq6Xt^ z_*1L2&-RuYH%P=7k$|FZ8?19>q1+o3xVQOYh36GYGmBm%G$WIc5)E|3$#j-4vys8D z4Uf-cP{U~0Lu1`&MmLH)%ZeF!<5VVkL^DjdeN%Ce-?Q8d6YJ#RiX?_B+BhPi63MZY z1kDYGH#Z6eyBe%jg)?K0Z6qg%bbJNM2bB1qW2lKNxM<1XQmH$zNpG&FyvdDgAKSI- zvBWtx`>d}}m8q9i3}1v&3WONd6(!=t&B8l!S~N||6>T=>*n*modckryEToO>VeJ>$ z=z8uZa*t8K?RV})UJYq%j}Q;25ZW_>d!$hV?qturK*M$y z^1H^zi*}YL3x@pCwCjoM_4I(OZ*=^-Q`%!xJPH3JOxA^q7TSl{19eQK&wu32`CtoE1Hs00xWeBJr=zej_$h^r8xv0}o05Cq*Ri8o4kdMEZkCN-wK4&frYhOvSLE0hKNYB#l!FT{&P z4WgPDNyQ7S#1*U-0^hi(OojJPc>S}5F!<=_kgPd__D0JWiVSnM+VWz`9gh$sm$L7*JL}RIBPJvXSZpJfAn)**c zmKVDLLh1rz2!ONN02r;$sC{PZu|8H)e}*Uq&%IxGa1;{|a5!4a?mrH&+gK)1xx>Lw zYojYSA=nbc6%A4Krjx$mgn3GZ5{Uy_C$aeAZ!IKyfG@xn^r5|m2Zu3)F*QV`Jv!?v zOH|tKWgb=BLe&Rw1U3-+S}1TarLR4OW3i9}&|9O^absvK8snQtz0%|;*BYw-PZYuG z9fFa-TjuysRR*$YRFJ}|fdN!9-FolI)0hJ=x*dvk2o!Czylx%{hAKH5M}4o_nA9qj0YJ;@s*v*^k6x}YsW=PbM(}_R2`DC?SAsz4w#x^ zY#1d#@(VSNdnfp<539B?FoU(TR-$N($=DJvsf8dAxHsTf`eA(iT_GQf(JG`Cyk)Ul zQ-UWkaTa5W$~pLzokw9QMxsFHm*Z(a+|35-F~-lcf`+=_JNy@1)(k@xIfFhps!j6> zSL#6M`9(hx;aJcZjk8A{IwxnDzX%A9xjUZc4@_;u$ghG&^DKf>JU!UA6?Y-z9dEjT zZE!Qe94r2A{tiZ3hT)nvXjrjnteWWUo^E$%^g~+pt(MpFZa_@rGcE6tN^kBVX9&by zUU`Z@N-R)E1GXyB`tWn`?lgLD# z68GK+gJ|{F(VWQ$BjXfIp1S>=m zr^!twC+k?IaoEvi4!&%2-O{Zr!hsZk4C^E(DxMA)w|o!;?4w*o1ZfemlH+c8MljjD zL*HF%P^|XUWd7BX3Ndd_HU)QNdN&2ot1vRc*xBg83ll&_R!ykC zDrh$W`seP#6gPpLu{9({eCVyVV63mwQqKTyx5*AbXB}6RQZt~c z3)M8P)3tmC1es{6%w?F)R}@B^ejkntBCc4KCZSEEDBQxj^dD{F8X?nY20YOXojju>BL#1CjPY(-Pi52F z{vuf%-lIg#22czPwb8RNJKE^tH_2(ty*EsbM!X8xXkA&SX=SfFt{>DDZ%2dg44))! zGH>B-kf!7&?#2Jdkk_*09CsZdEqz-N)5MMRh(pT=##2U@{n@usI?z^IPb-w*3eRy3 zi*ua4yGJ=>ZYJMk!~VLjrY$5~CMRTzfHLxp^J{;Sad9`2a%poLVyb)cuIh~2m?CFG zU^*KF<_4I3AIUoBXZQ`~(hylX$q)Cl2)VVeq^((OfvaxR18e)(V_qe^j$v<|qmv58 z=RzBYu_JmHEJs61!bti7JM=N#60PLjG425Az50{7C2h9T1Wkl#N)3q7G|cN^aVXCb z^{@grDZq#u6TdI+9}#DN^&MZ-S#tOr_Ux57r8bW*!TNOSf`S4hi4S#myFQ%2iHnp{ zvzqAUHIKWXrgPp}vh(M9y?8$vLtgp#YP4EF{&l2bGY)E#(5k7q@zK@R`Jj09Mvu}s z$}`-uMx6BR`SM#=9Nz;~A>|E}0edlbD?DsQ(mguU`E)W(t5rP1adx>tRIhwc;qyNs zQS7Ebxe!w0P8Q-<`^#JN(snI(!;#)sD3Pf>K)WT7;VH+vkeDQ@8e@%8m27e{`Y{+` z)Zu(){E4QqZS*X#UKz+o<8QNU&J1?~>H$I}80s!cXMfzyCga)n9KIUWhfz%K0n4_$ zJzTa%NL#9_fbb`YVPUQgB zQTCZD6Dlis&d2MDLU#nxW4YCoNd!i|y43|-+qfhx3UejAJFD7OO5-zA1uV!IK)S_za}%bkuCIKV zEIf+WQ(-PhwO5c#P=<|&Ua+@1eaSRhvHHVWNe`NSkZ4?+JPysa7_&MMfj#GJYUT3y zJapfL_2u2{^BlKty?^RT+}F)V zB&T=7@%(IbKOT%W{H_BBTx~QYyVhrUX#)|gDbX^C)M`uu3HqA@V^HvjgPcCL%*=Yq z{#_f4hI>{X0ywvUtWOFFsb#1Jze)_Dtm9f}suePSsW}Tciw59^yn_jahGC|00;a&8@oI*%X}$-%#XA4_O@~7(+*N6; z3*|_gh#VM}(v5Bl$(ja8>h#+fMYcS;q{|n?0-nb8p`1FK?i_;YCReFqN zwU=!SqxVvJj6btYmn(Tx!Lm$oE{PUOSBNL-lg)cvc)o8i5YO`2b{HDQ=Nq)oUp_6~RLzOZ)B*%2TQ5;Q-?QcO zin!Mo(F5=8;(`WF+*z47*qQ?r1R)B1JN_LulwjZmYJEIa2Zdt=c@=W}Y91?pp|4?N zSVd;(McC9xoxjaSLptD6Wo9tN^5V?2vwF^2ol#cD1iBFUTztfq4*a%Uf>1Ef!}<{j9cyq4=pnTbvV2siWx6ugjN9G1U+lhe?Z!C*w+LDWlqo=tUl zKb>2wnad$+d(LsBxbPh2V{M1j=+Hd`wk28-AVqV`af}QHn?5$erLzH&IZnF75|&Gn zz{37P^(~2l_Q8ahl+|F^L6PhsW<{lDZuvkqH$9Bn0?kXjYyt=!2R2x#Adrj{F2oea ztDk7;{efN&X*^*&FV-gos_P)zZFV7-LTgMA(b$Ln_|-`urR{WL8VwztBmTt__Eu0? z_L<&>)A4|fD-|y1eJHTDq_}%{A)+NX6kIHfBv0fb_e+ncO*i)vV6IP!;@ip#uYg8xHET0dD zi)Pi3;%g&w*?Q>s#h1N_$d$yoDA;-gpOw?=-60M?$~c9s<@>OFCTptdN!z1O=&><4 z%~iFd_o?|1aAQd^hQ((W_Elf?Rciz}qz?50LrExsGqI#_fjp*wE&wtWClRubof5*~ zJ*$0f$apqa218nziuviM0{32BBX1pvZpO-oT&{-IvMq(V-zMUMy^yi5tYg~TZ-j*b zMh}KM+$rluI2cVAYmt|86Ft_;HB@z-VGBok#JxXylG>bCSoMNQ!RJBzVTjE{We`{o zvQTIdoEwA@f8=FjFVCBB>sN-9%Zze6S%O~Oo|o7t)x5;IpuYf)bJ7IH2{|}QQ!Z;i z5LYijYkF~*eZ1>0hZ=|A82^rIE2}V{8{!*|c%zKBDLU-A!0kJ&a`h)Yv9Ib(=-{Q` zTwuCcx8hA;8&jq61Hu|Bc@}<3)X%vAEEb@KWYzIx1hYRNOiR~nVil?C_h;)>QkKcl z8-#{iA`A)In1IAXDPMpQ!F*dO5r>t-UBf9~02&QL_g_7!tG?G*5E0BLQ%UO^L)p!$e;&I%_ zU=aHQdSf6+Q=v!m=zs+r323`?hTz4I*FPnPRWr(bR^3u)3_|sHYh*VSKTvb#OTvlx z+__$un(Q%3&u+#`Bt-KYI<#p4Zi}Vy8ddp&#!x$g6wl~LJV8EFg~gZYuDlfQv4Umv zDP|ezd90D$g%Z&EYnJaF%)YuhH+l4atfZYBFXoFoPD=T(oKOEo%jwWmAfBLRKz1*c zF*ncq^TE91ZnA=5vQk4A!C_{BvH%+6!tG@5(J!~A-cFoURb6|c=Gvaagu;?kf@4%l zBCpuFSp0|+RVyk%zlnews7TxZ4)TO-8`Z|q@q)EXW$5a~wyMId3l%l?a7|49JL)?p zy~hYBLRh7)!xfwq83U!v#E7!0j@U;*&FFR4zfVYwy+jb57kHJp+9uf>yc;^*fSjYx z2|JHVWgz1)rFYZ}x+Gy9mL>Q2`}|(MsYMg~pd!-9TNuidRXrzCC_+nLdx#KRi3QO_ z16e@&AA}oL(IOW_2Z6^kL-|-snVco?=NTHl9iCrD{i!uJU_yxd`FH9DgbhHKR-r(h z&x@~wAZ?8np$R3x?7C6{+5;p8^bZ!Nwqar$AP@$n$3%AbcX2ia`vYx1Vc|g6fT}7N z6nwbc3ihL=2ng{`hOlFwHYq^ugIMvpiYf+M6!N{zwzWj_k%Nz~PC2Nt(7zd7p^ZIs zO>e8^d15uGHbc(^+nof;$WiI779G7U&wv3!Afbtae=?f&uP2asz3Kc7RBH)C43biR zx$OV!KtcP!h?0=>YBnHs0UEOrXI_%zY`g-u{-@~@^CMxzX|tB=LgHZ0g-+rPe^U$K z7PcZ1gkqRKIe221KfP9`*b3UYzEeyW(B`;|{1Id8n32QFo~-B5$I<$-ce)(hf<-h~ z-z`TWZiZS5gjeHAn~~#Xtt~Ka&+7xH@PKrJxaLAM$6-&*UAKZ$;p)E<5g4uQFj;1d z8y+XJ+P(jd@G*d8^LgjNcy)0<9*+B6iU!*Tf1ICORAm!c9}DUs4vt!FKdQh;lokUq zu}EPIisqP4Hh}fDKi1Eg|1kT>SXV{m_xH&O3hr3a0g__Rdoa~$uZOtvf-Cp6$4v{# zPTQnmx!lQ~)q613+Y&>N@);d{1$S%A#WM1#-aS}KbFfiyZy;t=|H2z3=?s%7GjikH z>;W!=-ivrFLxa4FyKg$NGxU z5Kv7K*qE8F3n)$iMoAe@#Jrv7-_2oBfU>B8GWvlgZb-(Ucmm4rRKQ{rAzp*Zxt|dQ z10DGLXf0f(6kp6>aO~H{z?E;M8qeO_pzw+riDaqxOdOEA**EeS*e!~&M(EYU zVOWgs=g&||Lzsj@mn)`uYY}+S=MC6shzMGENA8c4)FAcP1Ugib^cwSCjGxrrRh{uy zg!<#U^+%b8K{&B&EV7G|z>BPaj`hYKLV_D@Izz|uw|JDUhz*(I34(EKql+DEfBhgT z7|5Vb7TaSd)9#LkBI7oU$<5+iLNn3oFFSTXqb6Yv8==}EZDOvhl{3!C@nk;#e#bU$ z86MB!+~k~@VaIi0WL!3M@q@1ue$2|QfNs(TH(lP*z70+Lx2E`h>ELn*Fw58yx3JbSiGs~=h=X6Tka}@npbQp4bVrT3EcJ<@^v{k0v(8p_T zMPvfqqm^mF#Fbzcg5~sG8913|+RG2^n&|1ve0T>w4{Kk-{|ixwQ*afV4AY>Z&iZya zf3ULuM)?AVGAyjh$qw*_nnx8TxJi%CfF2M3;(MXP745>d_UbHAhOt||rspdsvGuV; zKXnB)Ox}qoSFF&=GMrE8E-_{XK-S9+(TIAqWp3UMBpwhwncg7uvG*73-$Jo6&?v!U zQrkcH3RduXir5L1VnB4*y66lAcj0+GvTUObM_lz2f8AY%2Gp1eOe`GHf+MquroD|l z)T$TEUvk!<5rK$gl}OI=9}P_Wk%Jf_m^fcpb}LfHf~IZZQtCxUc&GcbZ?MM{G$&J% zkH!ZEe#)}Cz*3>`1BQF`Clq>OW8z?fJ5efQQL1_&a~Q6r@lJebg}Eq;_cSpM?p5tj zM;ldPXZHKUNd~K91T~f^tiP77@1bXe9AG$J4J4em$rn-sxDzi4BT;U(s*Biyk~X2O zmm{Qs28SNL3WpwuDE`&uf14AJ&T=CfgruMeuz}fbf|3EA&eFL^)}TuGA%wy?iJxT$svp_|IR>a ziOcLBI1LQjCp&yMrNc0fbqUA=F4bB)S}4b3#Bc{pSS)S(K3rYjO&5b=0vo(gZM094 z7MoD9#owqOBYGu}D`0MVulyqLXaswbVge^eV}(oq4(je?W%1lU?U{G>t%c0=&w z*ag)!XI1Lydhyu6TEctxj*e1gC>r<@ynj4A5?vk3@pT4#y|-03XR+SqInksQh?jd( zYR{8a{uLPd3RK$p@*TS>YHTVFp5)+b`6u&y@l*t;7kuQ7ouIy=PU2r9cV>^$OGM_^i(H2fNJ0e`|+Rh=?p;0RXjvVMg zd#*@naBT2#&AEptltLKAU{81eLr#KcD;b9poj>RJpgU3K^>9@w-kDxQiiwW>y1-Y$ zA8~Iaxs29mdCOUV!lQ+TsQQQTz=5KNj4hIzz?zNxFRZ&(b}a*|&HHd~S+qXIhjXSl z_6Y%|kT`)^SoSwQ7@@P7KrL^EFSyHH9|hq$P))$rva2qnhPC;Lo^4+76mi!;lH^!= z6`%Fkg@XuzaM!L*aa&5(jYjasjy0Asqp5AnAYCh1!8bRG0?t$zcV-NdwW=rC>FlSR zJRa0Cwu@5mh}_U0aw~15Yjnq80#pTAOH1;4l(9brb|prQOaoeZeos{#?5+x z!%8z7xLu`Lf3QaH708v+R>cCS)zZ+9f8Dl~{nhwCs6g4v7W?8F@8w;+a6SJ2$kP+9 zOz6oCAD}EZn;#GFmVJ^pIzz}2$v<{JPjCqFA8FbBZ#x!zMqwfa_Pt?e`WHKTCnG>lXZn>Y)Yo;2Kfz|0^_WUjZ#xxKOGpa{DhsJY!Aa+mZVmhFS8q>+Q5!K;K=`kC` z$KP(NM}sS=UbG43tLzR+jME&U9wB6DAM5iT>rYq0$BL_tH3ExYtQ5a{3!)$Rd;*(e zl-fINT^F$}vOnD8&cDy?N9ME zJj0TtxnY*Jk3NKC6_3Dz#c`nR12RV4FnJ}Ocq(gJwGmaNdhDZC-k(TtewXqAtTA5T z=;-v8xe+?JI7xp1e>J^NQil{$&rqhGtTYHYj$57>kZe`FIWK8*PrJ9a3XfW@0~UX= z%1_;BqBM|*aNMrRAp;H_jD*2- z6QdQ5h>MA{3{;h4X&ASQpO%eJtOC70GGx$76ztoHav^OXpL+n9`T|%>L~XPFVgcr` zC~ZrNMQ(h#4MF*F?#$M%3~%TIvFHT`WIa_M2%b*w3;xlaoSGa_uO?KsFm$kd**2(=)aP~M#3&exKvo~6>C(QCY!!At z&|pL_OU|zoGQb|-ba8qm&djAk))>m8Wp9#^DKg!-Fm(~AIs5J~y!-&7XGK?iATT1tIhq=`s z(PesLQw1ooCPK2&SV(v>>#3ci5pj3hM2D>g0KnmAj-ZZfBfXxUu3G91&*Pe_+Sq8s zRp=16Z~yMj=m*+pX6Sixk^ys2zKNSTvi?43D(<`3zL#xgJdRuh>H+Mx_>`So&*umu zph}TzDv#I5GX8KGLzQH_0@6kNTe~P^OERkgCWUaUL9iQzvDP_TR;%9*Wr_RNO?T-P z0VE_7?9?)tk9}PBnZPlo;ca^ar{`rneL@D}*(^^OLWY^Wgh+efh8_!p86ppf<85KE zO%V+arLQP6DgX-m8XF6a?PNOa^)JvtQH)j3;`^CeS0|8B2!|?s83LgmO>g7>QqBM5 zTByl|+6rvh6m871UUpz3V@n&+1#m`dQg;1Ig8Qm=8va@rvMd&U%3%||F9zrU`w#z! zknF1iIxYjCqyFGdkc-Kt96>96%=5b4wH!=FKi+chI}XGpI5Jja!N*U^tM-9nMPw=Q z7e%`9X@rdx^V$4y&&!oy(6jkytmq9ZeQ&Y(wK( zo;9lg-FRy~d4pSfuiCGA!l-OIR@IWB9!lECVNW!_5)OTn-{ z2-(yAtp806M9X3YQ$q6}td7*pDUT(y;4+tZ3Wo$5@B$R#VL}FzdQ;#Fq?57#D<&D~ z4?M|aC~SJ&LKfb~)eD>sRS=D~L(0S?0H?bd%+`K1o~L(~91unGs?2@aC3z`?x-fn( zq-)nB4?|Ywb~N}-%^K-SvB6ke8?^irZ`H#jJBTG472EXuI<}(0PyuE~0<3MWVr#1w zz;#C@v0fOWxaQgeX|9#>YHXwMr7RuXUrXTiYZm612V11XrNg+Kx#~Kce;1$^dh(65 zJGM}7jyEB%IU2%G$mBNoV{Brb?JCv&H+b+BP<{jK4rqORL1ZJWZO9XXBCJvVhN@ee z+r*aZE8Glg8lrjK10Zhz0i|KyYF|ivyv16_Aca3IK_{{Sa?DgtoToYzet;4~6vREw zq^D4GFC|9Cvcg^(6XU?ZxSqU0LK6Fr>k*Rhlfm_~gd_lNhE}(lPoVimvK#`zQRyUZ z0=J>M0ehBzVI5xF_@E|^xrAlmvdtHL-|~6y|H^qkK3xsQ4GM426e*2U~r+&dFvHNlA~aZ8l&&c zqtyHxbK3b9^N6>A?pBj<86iIFF>nAzx5OyoelP?AME#<}@*QoUkJWoIg{UXhdx3Gm z9Y8wzJE`#iPk+3O)S}m7zV$=xkxKc_WMiVSQ@In1kA z#5JWHUgH}r-**xmk_{pls0O%>O!`p6C)+w8?7S+?@QyuD(}LXXY9wKbgksv6jQV1y z8xvd*e5%JbdT2rmy>d0RSkH80jj^CNr2$+q6!f>W_U+>nGWd^UM1;gxLO%y6`x7)= zGbiuu!!Egbpt+;m6&6|0WhS$Jo8zyuKp$4Go1-smltHzl*GAIxGV@&GN$a zudxJ?WrlnNYDjCyXg+H}60J3`?YR@Ks6m?pfGguzAwh3F?vJNnyvXPSf?*TraSMA1 zQmXI=Y)38QFX8K!mS0g7M+T_*wE1STe@{Hx_uy4Uf^hTn-(wX+wAw2`NtAzQ5O+ z@ih(pO=E00DdHcyi8X{zsCWl+W7PBLMqn0g(n2=5aO$wv7;?lR;drezpgoZ7gbrxF z4114ho>02PE;%1tpZix$DTHZco#7oA-bVDi;_$pyEaZxQ@F0j>+3#z$DeoodRDPQI z9_~;PZN{eJcg*lSMi+Wg0xtE`aj7ry14&WO8Ih3cCQDhyeISs3nE*3tFpke{Bm>sQ zt&+It2J4XOZEp>o+26fb&?P{Zf$#`-6qTxbUFI_B+00yAx3F)po`j-1r`t*4&{=`F z=&woGldwOKjyHj`X?_SQ$faT+fuJm}LMl<+xnvyJhm)}x?gFiF&pIFA8@Y0&oYtPy zD8q~}xQMkM6bM4CmNIW=HIROJQ0l!#0r?FY>74#Pt|>-<&{SignXck?hG|_@s~(PBeT@O{PJihPCnFD_OuAjdW6&!B1s8Dl9+V;IZKc0Q^l;wY^W85eT~kqeve zN!#M~T3T?lgZkJ74+YDGh~DbnExdPBTu2=BApfqS zQ<}pZ%PT}ISNu94pN_-#3*FC3VPOD9{W(wxZb*g4> zn)-x96tb>H9}pA=&ScKa!d<{vFe>4kWylE)N2%2i_P3{LtYa?_^s`N@gOO-sh!V

#|{U$y;gtG4F);Rc6%^Ec^-n4r^h=b7)8aESUP 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 O$V>iV=77wv8~-1K!%dt3 literal 0 HcmV?d00001 diff --git a/project_binary_fetch/binary_fetch_v1/main.cpp b/project_binary_fetch/binary_fetch_v1/main.cpp index 9a6837c..d0b79cd 100644 --- a/project_binary_fetch/binary_fetch_v1/main.cpp +++ b/project_binary_fetch/binary_fetch_v1/main.cpp @@ -1,35 +1,44 @@ -// main.cpp (AsciiArt separated into header and implementation files) +// main.cpp (AsciiArt separated into header and implementation files) #include -#include // Formatting utilities (setw, precision) +#include #include #include -#include // For string stream operations +#include #include #include -#include #include -#include -#include -#include -#include -#include -// ASCII Art functionality -#include "AsciiArt.h" // main.cpp (AsciiArt separated into header and implementation files) +#include + +// Platform-specific includes +#if defined(_WIN32) || defined(_WIN64) + #define PLATFORM_WINDOWS 1 + #include + #include + #include + #include + #include +#else + #define PLATFORM_WINDOWS 0 + #include + #include + #include +#endif + +#if defined(__linux__) + #define PLATFORM_LINUX 1 +#else + #define PLATFORM_LINUX 0 +#endif + +#if defined(__FreeBSD__) + #define PLATFORM_FREEBSD 1 +#else + #define PLATFORM_FREEBSD 0 +#endif + +#define PLATFORM_POSIX (PLATFORM_LINUX || PLATFORM_FREEBSD) -#include -#include // Formatting utilities (setw, precision) -#include -#include -#include // For string stream operations -#include -#include -#include -#include -#include -#include -#include -// ASCII Art functionality #include "AsciiArt.h" // ------------------ Full System Info Modules ------------------ @@ -92,60 +101,82 @@ it is a sign that the logic should be moved into a new module. */ -int main(){ +int main(int argc, char* argv[]){ + + bool fullMode = false; + for (int i = 1; i < argc; ++i) { + std::string arg = argv[i]; + if (arg == "--full" || arg == "-f") { + fullMode = true; + } else if (arg == "--help" || arg == "-h") { + std::cout << "BinaryFetch - System Information Tool\n\n" + << "Usage: binaryfetch [OPTIONS]\n\n" + << "Options:\n" + << " -f, --full Show detailed system information (expanded mode)\n" + << " -h, --help Show this help message\n\n" + << "Config files:\n" +#if PLATFORM_WINDOWS + << " C:\\Users\\Public\\BinaryFetch\\BinaryFetch_Config.json\n" + << " C:\\Users\\Public\\BinaryFetch\\BinaryArt.txt\n" +#else + << " ~/.config/binaryfetch/BinaryFetch_Config.json\n" + << " ~/.config/binaryfetch/BinaryArt.txt\n" +#endif + << std::endl; + return 0; + } + } - // Initialize COM +#if PLATFORM_WINDOWS HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED); if (FAILED(hr)) { std::cout << "Failed to initialize COM library. Error: 0x" << std::hex << hr << std::endl; return 1; } + SetConsoleOutputCP(CP_UTF8); +#endif - - - - // ========== SIMPLIFIED ASCII ART LOADING ========== - // Just call loadFromFile() - it handles everything automatically! - // - Checks C:\Users\\AppData\BinaryFetch\BinaryArt.txt - // - If missing, copies from Default_Ascii_Art.txt and creates it - // - User can modify their art anytime in AppData folder - - SetConsoleOutputCP(CP_UTF8); // UTF-8 output on Windows console (for emoji printing) AsciiArt art; if (!art.loadFromFile()) { std::cout << "Warning: ASCII art could not be loaded. Continuing without art.\n"; - // Program continues even if art fails to load } - // ========== AUTO CONFIG FILE SETUP ========== - // true = dev mode (loads local file), false = production mode (extracts from EXE) bool LOAD_DEFAULT_CONFIG = false; +#if PLATFORM_WINDOWS std::string configDir = "C:\\Users\\Public\\BinaryFetch"; std::string userConfigPath = configDir + "\\BinaryFetch_Config.json"; +#else + std::string homeDir; + const char* home = getenv("HOME"); + if (home) { + homeDir = home; + } else { + struct passwd* pw = getpwuid(getuid()); + if (pw) homeDir = pw->pw_dir; + } + std::string configDir = homeDir + "/.config/binaryfetch"; + std::string userConfigPath = configDir + "/BinaryFetch_Config.json"; +#endif std::string configPath; if (LOAD_DEFAULT_CONFIG) { - // DEV MODE: Load directly from project folder for fast iteration 🧪 configPath = "Default_BinaryFetch_Config.json"; } else { - // PRODUCTION MODE: Use constant public folder 🛰️ configPath = userConfigPath; - // 1. Create directory if it doesn't exist +#if PLATFORM_WINDOWS if (GetFileAttributesA(configDir.c_str()) == INVALID_FILE_ATTRIBUTES) { _mkdir(configDir.c_str()); } - // 2. Self-Healing: Check if user config exists, if not, extract from EXE memory std::ifstream checkConfig(userConfigPath); bool userConfigExists = checkConfig.good(); checkConfig.close(); if (!userConfigExists) { - // IDR_DEFAULT_CONFIG is 101 in your resource.h HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(101), RT_RCDATA); if (hRes) { HGLOBAL hData = LoadResource(NULL, hRes); @@ -162,6 +193,36 @@ int main(){ std::cout << "Warning: Internal resource IDR_DEFAULT_CONFIG not found." << std::endl; } } +#else + struct stat st; + if (stat(configDir.c_str(), &st) != 0) { + std::string parentDir = homeDir + "/.config"; + mkdir(parentDir.c_str(), 0755); + mkdir(configDir.c_str(), 0755); + } + + std::ifstream checkConfig(userConfigPath); + bool userConfigExists = checkConfig.good(); + checkConfig.close(); + + if (!userConfigExists) { + std::ifstream defaultConfig("Default_BinaryFetch_Config.json"); + if (defaultConfig.is_open()) { + std::ofstream userConfig(userConfigPath); + userConfig << defaultConfig.rdbuf(); + userConfig.close(); + defaultConfig.close(); + } else { + std::ifstream shareConfig("/usr/share/binaryfetch/BinaryFetch_Config.json"); + if (shareConfig.is_open()) { + std::ofstream userConfig(userConfigPath); + userConfig << shareConfig.rdbuf(); + userConfig.close(); + shareConfig.close(); + } + } + } +#endif } // ========== CONFIG LOADING ========== @@ -248,7 +309,6 @@ int main(){ UserInfo user; PerformanceInfo perf; DisplayInfo di; - ExtraInfo extra; SystemInfo sys; CompactAudio c_audio; @@ -256,7 +316,6 @@ int main(){ CompactCPU c_cpu; // CompactScreen c_screen; CompactMemory c_memory; - CompactSystem c_system; CompactGPU c_gpu; CompactPerformance c_perf; CompactUser c_user; @@ -832,6 +891,7 @@ int main(){ } //-----------------------------start of detailed modules----------------------// + if (fullMode) { // ----------------- DETAILED MEMORY SECTION ----------------- // if (isEnabled("detailed_memory")) { @@ -2276,6 +2336,7 @@ int main(){ //----------------- END OF JSON-CONTROLLED COMPACT SECTIONS -----------------// + } // end fullMode @@ -2287,7 +2348,9 @@ int main(){ std::cout << std::endl; +#if PLATFORM_WINDOWS CoUninitialize(); +#endif return 0; } diff --git a/project_binary_fetch/binary_fetch_v1/platform/HttpClient.h b/project_binary_fetch/binary_fetch_v1/platform/HttpClient.h new file mode 100644 index 0000000..68a626b --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/HttpClient.h @@ -0,0 +1,221 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Platform { + +class HttpClient { +public: + struct Response { + int status_code = 0; + std::string body; + bool success = false; + }; + + static Response get(const std::string& host, const std::string& path, int port = 80, int timeout_ms = 5000) { + Response resp; + int sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock < 0) return resp; + + struct hostent* server = gethostbyname(host.c_str()); + if (!server) { + close(sock); + return resp; + } + + struct sockaddr_in serv_addr; + memset(&serv_addr, 0, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + memcpy(&serv_addr.sin_addr.s_addr, server->h_addr, server->h_length); + serv_addr.sin_port = htons(port); + + int flags = fcntl(sock, F_GETFL, 0); + fcntl(sock, F_SETFL, flags | O_NONBLOCK); + + connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); + + struct pollfd pfd; + pfd.fd = sock; + pfd.events = POLLOUT; + if (poll(&pfd, 1, timeout_ms) <= 0) { + close(sock); + return resp; + } + + fcntl(sock, F_SETFL, flags); + + std::string request = "GET " + path + " HTTP/1.1\r\n"; + request += "Host: " + host + "\r\n"; + request += "Connection: close\r\n"; + request += "User-Agent: BinaryFetch/1.0\r\n"; + request += "\r\n"; + + if (send(sock, request.c_str(), request.length(), 0) < 0) { + close(sock); + return resp; + } + + std::string response; + char buffer[4096]; + + pfd.events = POLLIN; + while (poll(&pfd, 1, timeout_ms) > 0) { + ssize_t n = recv(sock, buffer, sizeof(buffer) - 1, 0); + if (n <= 0) break; + buffer[n] = '\0'; + response += buffer; + } + + close(sock); + + size_t header_end = response.find("\r\n\r\n"); + if (header_end != std::string::npos) { + std::string headers = response.substr(0, header_end); + resp.body = response.substr(header_end + 4); + + size_t status_pos = headers.find(' '); + if (status_pos != std::string::npos) { + resp.status_code = std::stoi(headers.substr(status_pos + 1, 3)); + resp.success = (resp.status_code >= 200 && resp.status_code < 300); + } + } + + return resp; + } + + static Response post(const std::string& host, const std::string& path, const std::string& data, + int port = 80, int timeout_ms = 5000) { + Response resp; + int sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock < 0) return resp; + + struct hostent* server = gethostbyname(host.c_str()); + if (!server) { + close(sock); + return resp; + } + + struct sockaddr_in serv_addr; + memset(&serv_addr, 0, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + memcpy(&serv_addr.sin_addr.s_addr, server->h_addr, server->h_length); + serv_addr.sin_port = htons(port); + + int flags = fcntl(sock, F_GETFL, 0); + fcntl(sock, F_SETFL, flags | O_NONBLOCK); + + connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); + + struct pollfd pfd; + pfd.fd = sock; + pfd.events = POLLOUT; + if (poll(&pfd, 1, timeout_ms) <= 0) { + close(sock); + return resp; + } + + fcntl(sock, F_SETFL, flags); + + std::string request = "POST " + path + " HTTP/1.1\r\n"; + request += "Host: " + host + "\r\n"; + request += "Connection: close\r\n"; + request += "Content-Type: application/octet-stream\r\n"; + request += "Content-Length: " + std::to_string(data.length()) + "\r\n"; + request += "User-Agent: BinaryFetch/1.0\r\n"; + request += "\r\n"; + request += data; + + if (send(sock, request.c_str(), request.length(), 0) < 0) { + close(sock); + return resp; + } + + std::string response; + char buffer[4096]; + + pfd.events = POLLIN; + while (poll(&pfd, 1, timeout_ms) > 0) { + ssize_t n = recv(sock, buffer, sizeof(buffer) - 1, 0); + if (n <= 0) break; + buffer[n] = '\0'; + response += buffer; + } + + close(sock); + + size_t header_end = response.find("\r\n\r\n"); + if (header_end != std::string::npos) { + std::string headers = response.substr(0, header_end); + resp.body = response.substr(header_end + 4); + + size_t status_pos = headers.find(' '); + if (status_pos != std::string::npos) { + resp.status_code = std::stoi(headers.substr(status_pos + 1, 3)); + resp.success = (resp.status_code >= 200 && resp.status_code < 300); + } + } + + return resp; + } + + static std::string downloadSpeed(const std::string& host, const std::string& path, + size_t bytes, int timeout_ms = 5000) { + auto start = std::chrono::high_resolution_clock::now(); + Response resp = get(host, path + "?bytes=" + std::to_string(bytes), 80, timeout_ms); + auto end = std::chrono::high_resolution_clock::now(); + + if (!resp.success || resp.body.empty()) return "Unknown"; + + double seconds = std::chrono::duration(end - start).count(); + if (seconds < 0.001) seconds = 0.001; + + double megabits = (resp.body.length() * 8.0) / 1000000.0; + double mbps = megabits / seconds; + + return formatSpeed(mbps); + } + + static std::string uploadSpeed(const std::string& host, const std::string& path, + size_t bytes, int timeout_ms = 5000) { + std::string data(bytes, 'X'); + + auto start = std::chrono::high_resolution_clock::now(); + Response resp = post(host, path, data, 80, timeout_ms); + auto end = std::chrono::high_resolution_clock::now(); + + if (!resp.success) return "Unknown"; + + double seconds = std::chrono::duration(end - start).count(); + if (seconds < 0.001) seconds = 0.001; + + double megabits = (bytes * 8.0) / 1000000.0; + double mbps = megabits / seconds; + + return formatSpeed(mbps); + } + +private: + static std::string formatSpeed(double mbps) { + char buf[32]; + if (mbps >= 1000.0) { + snprintf(buf, sizeof(buf), "%.1f Gbps", mbps / 1000.0); + } else if (mbps >= 1.0) { + snprintf(buf, sizeof(buf), "%.1f Mbps", mbps); + } else { + snprintf(buf, sizeof(buf), "%.0f Kbps", mbps * 1000.0); + } + return std::string(buf); + } +}; + +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/Platform.h b/project_binary_fetch/binary_fetch_v1/platform/Platform.h new file mode 100644 index 0000000..a4d91bf --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/Platform.h @@ -0,0 +1,8 @@ +#pragma once + +#include "PlatformConfig.h" +#include "PlatformUtils.h" + +#if PLATFORM_POSIX +#include "HttpClient.h" +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/PlatformConfig.h b/project_binary_fetch/binary_fetch_v1/platform/PlatformConfig.h new file mode 100644 index 0000000..67139d8 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/PlatformConfig.h @@ -0,0 +1,28 @@ +#pragma once + +#if defined(_WIN32) || defined(_WIN64) + #define PLATFORM_WINDOWS 1 + #define PLATFORM_LINUX 0 + #define PLATFORM_FREEBSD 0 + #define PLATFORM_POSIX 0 +#elif defined(__linux__) + #define PLATFORM_WINDOWS 0 + #define PLATFORM_LINUX 1 + #define PLATFORM_FREEBSD 0 + #define PLATFORM_POSIX 1 +#elif defined(__FreeBSD__) + #define PLATFORM_WINDOWS 0 + #define PLATFORM_LINUX 0 + #define PLATFORM_FREEBSD 1 + #define PLATFORM_POSIX 1 +#else + #error "Unsupported platform" +#endif + +#if PLATFORM_WINDOWS + #define PLATFORM_NAME "Windows" +#elif PLATFORM_LINUX + #define PLATFORM_NAME "Linux" +#elif PLATFORM_FREEBSD + #define PLATFORM_NAME "FreeBSD" +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/PlatformUtils.h b/project_binary_fetch/binary_fetch_v1/platform/PlatformUtils.h new file mode 100644 index 0000000..9e07935 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/PlatformUtils.h @@ -0,0 +1,161 @@ +#pragma once + +#include "PlatformConfig.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#if PLATFORM_POSIX +#include +#include +#include +#endif + +#if PLATFORM_FREEBSD +#include +#include +#endif + +namespace Platform { + +inline std::string exec(const std::string& cmd) { + std::string result; + FILE* pipe = popen(cmd.c_str(), "r"); + if (!pipe) return result; + char buffer[256]; + while (fgets(buffer, sizeof(buffer), pipe)) { + result += buffer; + } + pclose(pipe); + return result; +} + +inline std::string readFile(const std::string& path) { + std::ifstream file(path); + if (!file.is_open()) return ""; + std::stringstream buffer; + buffer << file.rdbuf(); + return buffer.str(); +} + +inline std::string readFileLine(const std::string& path) { + std::ifstream file(path); + if (!file.is_open()) return ""; + std::string line; + std::getline(file, line); + return line; +} + +inline bool fileExists(const std::string& path) { +#if PLATFORM_WINDOWS + return false; +#else + struct stat st; + return stat(path.c_str(), &st) == 0; +#endif +} + +inline bool commandExists(const std::string& cmd) { +#if PLATFORM_WINDOWS + return false; +#else + std::string check = "command -v " + cmd + " >/dev/null 2>&1"; + return system(check.c_str()) == 0; +#endif +} + +inline std::string trim(const std::string& str) { + size_t start = str.find_first_not_of(" \t\n\r"); + if (start == std::string::npos) return ""; + size_t end = str.find_last_not_of(" \t\n\r"); + return str.substr(start, end - start + 1); +} + +inline std::vector split(const std::string& str, char delim) { + std::vector tokens; + std::istringstream iss(str); + std::string token; + while (std::getline(iss, token, delim)) { + tokens.push_back(token); + } + return tokens; +} + +inline std::string parseValue(const std::string& content, const std::string& key, char delim = ':') { + std::istringstream iss(content); + std::string line; + while (std::getline(iss, line)) { + size_t pos = line.find(key); + if (pos == 0 || (pos != std::string::npos && (pos == 0 || !std::isalnum(line[pos-1])))) { + size_t delimPos = line.find(delim, pos); + if (delimPos != std::string::npos) { + std::string value = line.substr(delimPos + 1); + value.erase(0, value.find_first_not_of(" \t\"")); + value.erase(value.find_last_not_of(" \t\n\r\"") + 1); + return value; + } + } + } + return ""; +} + +inline std::string getEnv(const std::string& name) { + const char* val = std::getenv(name.c_str()); + return val ? std::string(val) : ""; +} + +inline std::string getHomeDir() { +#if PLATFORM_POSIX + const char* home = std::getenv("HOME"); + if (home) return std::string(home); + struct passwd* pw = getpwuid(getuid()); + if (pw) return std::string(pw->pw_dir); +#endif + return ""; +} + +inline std::string getConfigDir() { +#if PLATFORM_WINDOWS + return "C:\\Users\\Public\\BinaryFetch"; +#else + std::string xdg = getEnv("XDG_CONFIG_HOME"); + if (!xdg.empty()) return xdg + "/binaryfetch"; + return getHomeDir() + "/.config/binaryfetch"; +#endif +} + +#if PLATFORM_FREEBSD +inline std::string sysctlString(const std::string& name) { + char buf[256] = {0}; + size_t len = sizeof(buf); + if (sysctlbyname(name.c_str(), buf, &len, nullptr, 0) == 0) { + return std::string(buf); + } + return ""; +} + +inline long sysctlLong(const std::string& name) { + long val = 0; + size_t len = sizeof(val); + if (sysctlbyname(name.c_str(), &val, &len, nullptr, 0) == 0) { + return val; + } + return 0; +} + +inline unsigned long sysctlULong(const std::string& name) { + unsigned long val = 0; + size_t len = sizeof(val); + if (sysctlbyname(name.c_str(), &val, &len, nullptr, 0) == 0) { + return val; + } + return 0; +} +#endif + +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/AudioInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/AudioInfoFreeBSD.cpp new file mode 100644 index 0000000..9388687 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/AudioInfoFreeBSD.cpp @@ -0,0 +1,95 @@ +#include "../Platform.h" +#include "../../CompactAudio.h" +#include +#include + +static std::string cachedOutputDevice; +static std::string cachedInputDevice; +static bool devicesCached = false; + +static void cacheAudioDevices() { + if (devicesCached) return; + + std::string mixerOutput = Platform::exec("mixer -s 2>/dev/null"); + + if (!mixerOutput.empty()) { + std::istringstream iss(mixerOutput); + std::string line; + bool foundOutput = false; + bool foundInput = false; + + while (std::getline(iss, line)) { + if (line.find("vol") != std::string::npos && !foundOutput) { + cachedOutputDevice = "OSS Audio Output"; + foundOutput = true; + } + if (line.find("mic") != std::string::npos && !foundInput) { + cachedInputDevice = "OSS Microphone"; + foundInput = true; + } + if (line.find("rec") != std::string::npos && !foundInput) { + cachedInputDevice = "OSS Recording Input"; + foundInput = true; + } + } + } + + if (cachedOutputDevice.empty()) { + std::string sndstat = Platform::readFile("/dev/sndstat"); + if (!sndstat.empty()) { + std::istringstream iss(sndstat); + std::string line; + while (std::getline(iss, line)) { + if (line.find("pcm") != std::string::npos && line.find("play") != std::string::npos) { + size_t bracket = line.find('<'); + size_t bracket2 = line.find('>'); + if (bracket != std::string::npos && bracket2 != std::string::npos) { + cachedOutputDevice = line.substr(bracket + 1, bracket2 - bracket - 1); + break; + } + } + } + } + } + + if (cachedInputDevice.empty()) { + std::string sndstat = Platform::readFile("/dev/sndstat"); + if (!sndstat.empty()) { + std::istringstream iss(sndstat); + std::string line; + while (std::getline(iss, line)) { + if (line.find("pcm") != std::string::npos && line.find("rec") != std::string::npos) { + size_t bracket = line.find('<'); + size_t bracket2 = line.find('>'); + if (bracket != std::string::npos && bracket2 != std::string::npos) { + cachedInputDevice = line.substr(bracket + 1, bracket2 - bracket - 1); + break; + } + } + } + } + } + + if (cachedOutputDevice.empty()) cachedOutputDevice = "Unknown Audio Output"; + if (cachedInputDevice.empty()) cachedInputDevice = "Unknown Audio Input"; + + devicesCached = true; +} + +std::string CompactAudio::active_audio_output() { + cacheAudioDevices(); + return cachedOutputDevice; +} + +std::string CompactAudio::active_audio_output_status() { + return "Active"; +} + +std::string CompactAudio::active_audio_input() { + cacheAudioDevices(); + return cachedInputDevice; +} + +std::string CompactAudio::active_audio_input_status() { + return "Active"; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/CPUInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/CPUInfoFreeBSD.cpp new file mode 100644 index 0000000..0584bf4 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/CPUInfoFreeBSD.cpp @@ -0,0 +1,235 @@ +#include "../Platform.h" +#include "../../CPUInfo.h" +#include +#include +#include +#include +#include +#include +#include +#include + +static long prev_cp_time[5] = {0}; +static bool first_call = true; + +std::string CPUInfo::get_cpu_info() { + std::string model = Platform::sysctlString("hw.model"); + return model.empty() ? "Unknown CPU" : model; +} + +float CPUInfo::get_cpu_utilization() { + long cp_time[5]; + size_t len = sizeof(cp_time); + + if (sysctlbyname("kern.cp_time", cp_time, &len, nullptr, 0) != 0) { + return 0.0f; + } + + if (first_call) { + memcpy(prev_cp_time, cp_time, sizeof(cp_time)); + first_call = false; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + return get_cpu_utilization(); + } + + long total_delta = 0; + long idle_delta = 0; + + for (int i = 0; i < 5; i++) { + total_delta += cp_time[i] - prev_cp_time[i]; + } + idle_delta = cp_time[4] - prev_cp_time[4]; + + memcpy(prev_cp_time, cp_time, sizeof(cp_time)); + + if (total_delta == 0) return 0.0f; + + return (1.0f - (float)idle_delta / (float)total_delta) * 100.0f; +} + +std::string CPUInfo::get_cpu_base_speed() { + std::string freq = Platform::exec("sysctl -n dev.cpu.0.freq 2>/dev/null"); + freq = Platform::trim(freq); + + if (!freq.empty()) { + try { + float mhz = std::stof(freq); + std::ostringstream ss; + ss << std::fixed << std::setprecision(2) << (mhz / 1000.0f) << " GHz"; + return ss.str(); + } catch (...) {} + } + + std::string result = Platform::exec("sysctl -n hw.clockrate 2>/dev/null"); + result = Platform::trim(result); + if (!result.empty()) { + try { + float mhz = std::stof(result); + std::ostringstream ss; + ss << std::fixed << std::setprecision(2) << (mhz / 1000.0f) << " GHz"; + return ss.str(); + } catch (...) {} + } + + return "N/A"; +} + +std::string CPUInfo::get_cpu_speed() { + std::string freq = Platform::exec("sysctl -n dev.cpu.0.freq 2>/dev/null"); + freq = Platform::trim(freq); + + if (!freq.empty()) { + try { + float mhz = std::stof(freq); + std::ostringstream ss; + ss << std::fixed << std::setprecision(2) << (mhz / 1000.0f) << " GHz"; + return ss.str(); + } catch (...) {} + } + + return get_cpu_base_speed(); +} + +int CPUInfo::get_cpu_sockets() { + long packages = Platform::sysctlLong("hw.packages"); + return packages > 0 ? static_cast(packages) : 1; +} + +int CPUInfo::get_cpu_cores() { + int ncpu = static_cast(Platform::sysctlLong("hw.ncpu")); + + std::string result = Platform::exec("sysctl -n kern.smp.cpus 2>/dev/null"); + if (!result.empty()) { + try { + int cores = std::stoi(Platform::trim(result)); + if (cores > 0) return cores; + } catch (...) {} + } + + return ncpu > 0 ? ncpu : 1; +} + +int CPUInfo::get_cpu_logical_processors() { + int ncpu = static_cast(Platform::sysctlLong("hw.ncpu")); + return ncpu > 0 ? ncpu : 1; +} + +std::string CPUInfo::get_cpu_virtualization() { + std::string features = Platform::exec("sysctl -n hw.vmm.vmx.cap.guest 2>/dev/null"); + if (!features.empty() && Platform::trim(features) != "0") { + return "VT-x Enabled"; + } + + features = Platform::exec("sysctl -n hw.vmm.svm.features 2>/dev/null"); + if (!features.empty() && Platform::trim(features) != "0") { + return "AMD-V Enabled"; + } + + return "Disabled"; +} + +std::string CPUInfo::get_cpu_l1_cache() { + std::string result = Platform::exec("sysctl -n hw.cacheconfig 2>/dev/null | awk '{print $2}'"); + result = Platform::trim(result); + if (!result.empty()) { + try { + int kb = std::stoi(result) / 1024; + return std::to_string(kb) + " KB"; + } catch (...) {} + } + + result = Platform::exec("dmesg | grep -i 'L1 cache' | head -1"); + if (!result.empty()) { + return Platform::trim(result); + } + + return "N/A"; +} + +std::string CPUInfo::get_cpu_l2_cache() { + std::string result = Platform::exec("sysctl -n hw.cacheconfig 2>/dev/null | awk '{print $3}'"); + result = Platform::trim(result); + if (!result.empty()) { + try { + int size = std::stoi(result); + if (size >= 1024 * 1024) { + return std::to_string(size / (1024 * 1024)) + " MB"; + } + return std::to_string(size / 1024) + " KB"; + } catch (...) {} + } + return "N/A"; +} + +std::string CPUInfo::get_cpu_l3_cache() { + std::string result = Platform::exec("sysctl -n hw.cacheconfig 2>/dev/null | awk '{print $4}'"); + result = Platform::trim(result); + if (!result.empty()) { + try { + int size = std::stoi(result); + if (size >= 1024 * 1024) { + return std::to_string(size / (1024 * 1024)) + " MB"; + } + return std::to_string(size / 1024) + " KB"; + } catch (...) {} + } + return "N/A"; +} + +std::string CPUInfo::get_system_uptime() { + struct timeval boottime; + size_t len = sizeof(boottime); + int mib[2] = {CTL_KERN, KERN_BOOTTIME}; + + if (sysctl(mib, 2, &boottime, &len, nullptr, 0) == 0) { + time_t now = time(nullptr); + time_t uptime_seconds = now - boottime.tv_sec; + + int days = static_cast(uptime_seconds / 86400); + int hours = static_cast((uptime_seconds % 86400) / 3600); + int minutes = static_cast((uptime_seconds % 3600) / 60); + int seconds = static_cast(uptime_seconds % 60); + + std::ostringstream ss; + ss << days << ":" + << std::setw(2) << std::setfill('0') << hours << ":" + << std::setw(2) << std::setfill('0') << minutes << ":" + << std::setw(2) << std::setfill('0') << seconds; + return ss.str(); + } + return "Unknown"; +} + +int CPUInfo::get_process_count() { + std::string result = Platform::exec("ps ax 2>/dev/null | wc -l"); + result = Platform::trim(result); + if (!result.empty()) { + try { + int count = std::stoi(result); + return count > 0 ? count - 1 : 0; + } catch (...) {} + } + return 0; +} + +int CPUInfo::get_thread_count() { + std::string result = Platform::exec("ps -axH 2>/dev/null | wc -l"); + result = Platform::trim(result); + if (!result.empty()) { + try { + int count = std::stoi(result); + return count > 0 ? count - 1 : 0; + } catch (...) {} + } + return 0; +} + +int CPUInfo::get_handle_count() { + std::string result = Platform::exec("sysctl -n kern.openfiles 2>/dev/null"); + result = Platform::trim(result); + if (!result.empty()) { + try { return std::stoi(result); } + catch (...) {} + } + return 0; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/DisplayInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/DisplayInfoFreeBSD.cpp new file mode 100644 index 0000000..9d13928 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/DisplayInfoFreeBSD.cpp @@ -0,0 +1,206 @@ +#include "../Platform.h" +#include "../../DisplayInfo.h" +#include +#include +#include +#include +#include + +std::string DisplayInfo::WideToUtf8(const wchar_t*) { + return ""; +} + +std::string DisplayInfo::scaleMultiplier(int scalePercent) { + float mul = scalePercent / 100.0f; + char buf[32]; + if (fabsf(mul - roundf(mul)) < 0.001f) { + snprintf(buf, sizeof(buf), "%.0fx", mul); + } else { + snprintf(buf, sizeof(buf), "%.2fx", mul); + } + return std::string(buf); +} + +int DisplayInfo::computeUpscaleFactor(int currentWidth, int nativeWidth) { + if (nativeWidth <= 0 || currentWidth <= 0) return 1; + float ratio = static_cast(currentWidth) / static_cast(nativeWidth); + if (ratio < 1.25f) return 1; + return static_cast(std::round(ratio)); +} + +std::string DisplayInfo::computeAspectRatio(int w, int h) { + if (w <= 0 || h <= 0) return "Unknown"; + int a = w, b = h; + while (b != 0) { int t = b; b = a % b; a = t; } + return std::to_string(w/a) + ":" + std::to_string(h/a); +} + +bool DisplayInfo::isNvidiaPresent() { + return Platform::fileExists("/dev/nvidia0"); +} + +bool DisplayInfo::isAMDPresent() { + return Platform::fileExists("/dev/dri/card0"); +} + +DisplayInfo::EDIDInfo DisplayInfo::parseEDID(const unsigned char* edid, size_t size) { + EDIDInfo info = {"", 0, 0, false}; + if (!edid || size < 128) return info; + if (edid[0] != 0x00 || edid[1] != 0xFF || edid[7] != 0x00) return info; + + if (size >= 72) { + unsigned short hActive = ((edid[58] >> 4) << 8) | edid[56]; + unsigned short vActive = ((edid[61] >> 4) << 8) | edid[59]; + if (hActive > 0 && vActive > 0) { + info.nativeWidth = hActive; + info.nativeHeight = vActive; + info.valid = true; + } + } + + for (int i = 54; i < 126; i += 18) { + if (i + 17 >= static_cast(size)) break; + if (edid[i] == 0x00 && edid[i + 1] == 0x00 && edid[i + 3] == 0xFC) { + std::string name; + for (int j = 5; j < 18; ++j) { + if (edid[i + j] == 0x0A || edid[i + j] == 0x00) break; + if (edid[i + j] >= 0x20 && edid[i + j] <= 0x7E) { + name += static_cast(edid[i + j]); + } + } + while (!name.empty() && name.back() == ' ') name.pop_back(); + if (!name.empty()) info.friendlyName = name; + break; + } + } + return info; +} + +std::string DisplayInfo::getFriendlyNameFromEDID(const std::wstring&) { + DIR* dir = opendir("/sys/class/drm"); + if (!dir) return "Generic Monitor"; + + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + std::string name = entry->d_name; + if (name.find("card") == 0 && name.find("-") != std::string::npos) { + std::string edidPath = "/sys/class/drm/" + name + "/edid"; + std::ifstream file(edidPath, std::ios::binary); + if (file.is_open()) { + std::vector data((std::istreambuf_iterator(file)), + std::istreambuf_iterator()); + file.close(); + + if (data.size() >= 128) { + EDIDInfo info = parseEDID(data.data(), data.size()); + if (!info.friendlyName.empty()) { + closedir(dir); + return info.friendlyName; + } + } + } + } + } + closedir(dir); + return "Generic Monitor"; +} + +DisplayInfo::DisplayInfo() { + refresh(); +} + +bool DisplayInfo::refresh() { + screens.clear(); + return populateFromDXGI(); +} + +const std::vector& DisplayInfo::getScreens() const { + return screens; +} + +bool DisplayInfo::populateFromDXGI() { + std::string displayEnv = Platform::getEnv("DISPLAY"); + std::string waylandEnv = Platform::getEnv("WAYLAND_DISPLAY"); + + if (displayEnv.empty() && waylandEnv.empty()) { + return true; + } + + std::string xrandr = Platform::exec("xrandr --current 2>/dev/null"); + if (xrandr.empty()) return true; + + std::istringstream iss(xrandr); + std::string line; + ScreenInfo current; + bool inMonitor = false; + + while (std::getline(iss, line)) { + if (line.find(" connected") != std::string::npos) { + if (inMonitor && current.current_width > 0) { + screens.push_back(current); + } + + current = ScreenInfo(); + inMonitor = true; + + size_t spacePos = line.find(' '); + if (spacePos != std::string::npos) { + current.name = line.substr(0, spacePos); + } + + size_t resStart = line.find_first_of("0123456789"); + if (resStart != std::string::npos) { + int w = 0, h = 0, offX = 0, offY = 0; + if (sscanf(line.c_str() + resStart, "%dx%d+%d+%d", &w, &h, &offX, &offY) >= 2) { + current.current_width = w; + current.current_height = h; + current.native_width = w; + current.native_height = h; + current.native_resolution = std::to_string(w) + "x" + std::to_string(h); + current.aspect_ratio = computeAspectRatio(w, h); + } + } + } + else if (inMonitor && line.find("*") != std::string::npos) { + size_t hzStart = line.find_last_of("0123456789."); + if (hzStart != std::string::npos) { + size_t hzEnd = line.find("*"); + if (hzEnd != std::string::npos) { + while (hzStart > 0 && (std::isdigit(line[hzStart-1]) || line[hzStart-1] == '.')) { + hzStart--; + } + std::string hzStr = line.substr(hzStart, hzEnd - hzStart); + try { + current.refresh_rate = static_cast(std::stof(Platform::trim(hzStr))); + } catch (...) { + current.refresh_rate = 60; + } + } + } + } + } + + if (inMonitor && current.current_width > 0) { + screens.push_back(current); + } + + std::string dpiStr = Platform::exec("xrdb -query 2>/dev/null | grep -i dpi | head -1 | awk '{print $2}'"); + int dpi = 96; + if (!dpiStr.empty()) { + try { dpi = std::stoi(Platform::trim(dpiStr)); } + catch (...) { dpi = 96; } + } + + for (auto& screen : screens) { + screen.scale_percent = static_cast(std::round((dpi / 96.0f) * 100.0f)); + screen.scale_mul = scaleMultiplier(screen.scale_percent); + screen.upscale = "1x"; + screen.dsr_enabled = false; + screen.dsr_type = "None"; + } + + return !screens.empty(); +} + +bool DisplayInfo::enrichWithNVAPI() { return true; } +bool DisplayInfo::enrichWithADL() { return true; } diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/GPUInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/GPUInfoFreeBSD.cpp new file mode 100644 index 0000000..0f4a55f --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/GPUInfoFreeBSD.cpp @@ -0,0 +1,145 @@ +#include "../Platform.h" +#include "../../GPUInfo.h" +#include +#include +#include + +static std::string getVendorFromPciConf(const std::string& line) { + if (line.find("NVIDIA") != std::string::npos || line.find("nvidia") != std::string::npos) return "NVIDIA"; + if (line.find("AMD") != std::string::npos || line.find("ATI") != std::string::npos || + line.find("Radeon") != std::string::npos) return "AMD"; + if (line.find("Intel") != std::string::npos) return "Intel"; + return "Unknown"; +} + +float GPUInfo::get_gpu_usage() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits 2>/dev/null"); + if (!result.empty()) { + try { return std::stof(Platform::trim(result)); } + catch (...) {} + } + } + + std::string result = Platform::exec("sysctl -n dev.drm.0.hwmon.temp 2>/dev/null"); + if (!result.empty()) { + return -1.0f; + } + + return -1.0f; +} + +float GPUInfo::get_gpu_temperature() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits 2>/dev/null"); + if (!result.empty()) { + try { return std::stof(Platform::trim(result)); } + catch (...) {} + } + } + + std::string result = Platform::exec("sysctl -n hw.acpi.thermal.tz0.temperature 2>/dev/null"); + if (!result.empty()) { + try { + std::string temp = Platform::trim(result); + size_t cPos = temp.find('C'); + if (cPos != std::string::npos) { + temp = temp.substr(0, cPos); + } + return std::stof(temp); + } catch (...) {} + } + + return -1.0f; +} + +int GPUInfo::get_gpu_core_count() { + return 0; +} + +std::vector GPUInfo::get_all_gpu_info() { + std::vector list; + + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=name,memory.total,driver_version,utilization.gpu,temperature.gpu,clocks.gr --format=csv,noheader,nounits 2>/dev/null"); + + std::istringstream iss(result); + std::string line; + while (std::getline(iss, line)) { + if (line.empty()) continue; + + auto parts = Platform::split(line, ','); + if (parts.size() >= 6) { + gpu_data d; + d.gpu_name = Platform::trim(parts[0]); + + float memMB = std::stof(Platform::trim(parts[1])); + std::ostringstream memStream; + memStream << std::fixed << std::setprecision(1) << (memMB / 1024.0f) << " GB"; + d.gpu_memory = memStream.str(); + + d.gpu_driver_version = Platform::trim(parts[2]); + d.gpu_vendor = "NVIDIA"; + d.gpu_usage = std::stof(Platform::trim(parts[3])); + d.gpu_temperature = std::stof(Platform::trim(parts[4])); + d.gpu_frequency = std::stof(Platform::trim(parts[5])); + d.gpu_core_count = 0; + + list.push_back(d); + } + } + } + + if (list.empty()) { + std::string pciconf = Platform::exec("pciconf -lv 2>/dev/null | grep -B4 -E 'display|VGA|3D'"); + + std::istringstream iss(pciconf); + std::string line; + gpu_data current; + bool inGPU = false; + + while (std::getline(iss, line)) { + if (line.find("display") != std::string::npos || + line.find("VGA") != std::string::npos || + line.find("3D") != std::string::npos) { + if (inGPU && !current.gpu_name.empty()) { + list.push_back(current); + } + current = gpu_data(); + inGPU = true; + } + + if (inGPU) { + if (line.find("device") != std::string::npos && line.find("=") != std::string::npos) { + size_t eq = line.find("="); + if (eq != std::string::npos) { + std::string name = line.substr(eq + 1); + name.erase(std::remove(name.begin(), name.end(), '\''), name.end()); + current.gpu_name = Platform::trim(name); + current.gpu_vendor = getVendorFromPciConf(name); + } + } + if (line.find("vendor") != std::string::npos && line.find("=") != std::string::npos) { + size_t eq = line.find("="); + if (eq != std::string::npos) { + std::string vendor = line.substr(eq + 1); + vendor.erase(std::remove(vendor.begin(), vendor.end(), '\''), vendor.end()); + current.gpu_vendor = getVendorFromPciConf(vendor); + } + } + } + } + + if (inGPU && !current.gpu_name.empty()) { + current.gpu_memory = "Unknown"; + current.gpu_driver_version = "Unknown"; + current.gpu_usage = get_gpu_usage(); + current.gpu_temperature = get_gpu_temperature(); + current.gpu_frequency = -1.0f; + current.gpu_core_count = 0; + list.push_back(current); + } + } + + return list; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/MemoryInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/MemoryInfoFreeBSD.cpp new file mode 100644 index 0000000..6dffe6a --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/MemoryInfoFreeBSD.cpp @@ -0,0 +1,99 @@ +#include "../Platform.h" +#include "../../MemoryInfo.h" +#include +#include +#include + +MemoryInfo::MemoryInfo() { + fetchSystemMemory(); + fetchModulesInfo(); +} + +void MemoryInfo::fetchSystemMemory() { + unsigned long physmem = Platform::sysctlULong("hw.physmem"); + + unsigned long pagesize = Platform::sysctlULong("hw.pagesize"); + if (pagesize == 0) pagesize = 4096; + + unsigned long free_count = Platform::sysctlULong("vm.stats.vm.v_free_count"); + unsigned long inactive = Platform::sysctlULong("vm.stats.vm.v_inactive_count"); + unsigned long cache = Platform::sysctlULong("vm.stats.vm.v_cache_count"); + + unsigned long available = (free_count + inactive + cache) * pagesize; + + totalGB = static_cast((physmem + 1024UL * 1024UL * 1024UL - 1) / (1024UL * 1024UL * 1024UL)); + freeGB = static_cast(available / (1024UL * 1024UL * 1024UL)); +} + +void MemoryInfo::fetchModulesInfo() { + modules.clear(); + + std::string output = Platform::exec("dmidecode -t memory 2>/dev/null | grep -E 'Size:|Speed:|Type:' | head -20"); + + if (output.empty()) { + MemoryModule mod; + mod.capacity = std::to_string(totalGB) + "GB"; + mod.type = "Unknown"; + mod.speed = "Unknown"; + modules.push_back(mod); + return; + } + + std::istringstream iss(output); + std::string line; + MemoryModule current; + + while (std::getline(iss, line)) { + line = Platform::trim(line); + + if (line.find("Size:") == 0) { + if (!current.capacity.empty() && current.capacity.find("No Module") == std::string::npos) { + modules.push_back(current); + } + current = MemoryModule(); + + std::string size = line.substr(5); + size = Platform::trim(size); + if (size.find("No Module") == std::string::npos) { + current.capacity = size; + } + } + else if (line.find("Type:") == 0 && current.type.empty()) { + std::string type = Platform::trim(line.substr(5)); + if (type != "Unknown" && type != "Other") { + current.type = type; + } + } + else if (line.find("Speed:") == 0 && current.speed.empty()) { + std::string speed = Platform::trim(line.substr(6)); + if (speed != "Unknown") { + current.speed = speed; + } + } + } + + if (!current.capacity.empty() && current.capacity.find("No Module") == std::string::npos) { + modules.push_back(current); + } + + if (modules.empty()) { + MemoryModule mod; + mod.capacity = std::to_string(totalGB) + "GB"; + mod.type = "Unknown"; + mod.speed = "Unknown"; + modules.push_back(mod); + } +} + +int MemoryInfo::getTotal() const { return totalGB; } +int MemoryInfo::getFree() const { return freeGB; } + +int MemoryInfo::getUsedPercentage() const { + if (totalGB == 0) return 0; + double percentage = (static_cast(totalGB - freeGB) / totalGB) * 100; + if (percentage > 100.0) percentage = 100.0; + if (percentage < 0.0) percentage = 0.0; + return static_cast(percentage); +} + +const std::vector& MemoryInfo::getModules() const { return modules; } diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/NetworkInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/NetworkInfoFreeBSD.cpp new file mode 100644 index 0000000..c27c923 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/NetworkInfoFreeBSD.cpp @@ -0,0 +1,154 @@ +#include "../Platform.h" +#include "../HttpClient.h" +#include "../../NetworkInfo.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static std::string getPrimaryInterface() { + struct ifaddrs* ifaddr; + if (getifaddrs(&ifaddr) == -1) return ""; + + std::string primary; + for (struct ifaddrs* ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) continue; + if (ifa->ifa_addr->sa_family != AF_INET) continue; + + std::string name = ifa->ifa_name; + if (name == "lo0") continue; + if (name.find("bridge") == 0) continue; + if (name.find("tap") == 0) continue; + if (name.find("tun") == 0) continue; + + if (ifa->ifa_flags & IFF_UP) { + primary = name; + break; + } + } + + freeifaddrs(ifaddr); + return primary; +} + +std::string NetworkInfo::get_local_ip() { + struct ifaddrs* ifaddr; + if (getifaddrs(&ifaddr) == -1) return "Unknown"; + + std::string result = "Unknown"; + + for (struct ifaddrs* ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) continue; + if (ifa->ifa_addr->sa_family != AF_INET) continue; + + std::string name = ifa->ifa_name; + if (name == "lo0") continue; + + if (!(ifa->ifa_flags & IFF_UP)) continue; + + char ip[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &((struct sockaddr_in*)ifa->ifa_addr)->sin_addr, ip, sizeof(ip)); + + int prefix = 24; + if (ifa->ifa_netmask) { + uint32_t mask = ntohl(((struct sockaddr_in*)ifa->ifa_netmask)->sin_addr.s_addr); + prefix = 0; + while (mask) { + prefix += (mask & 1); + mask >>= 1; + } + } + + std::ostringstream oss; + oss << ip << "/" << prefix; + result = oss.str(); + break; + } + + freeifaddrs(ifaddr); + return result; +} + +std::string NetworkInfo::get_mac_address() { + struct ifaddrs* ifaddr; + if (getifaddrs(&ifaddr) == -1) return "Unknown"; + + std::string primary = getPrimaryInterface(); + std::string result = "Unknown"; + + for (struct ifaddrs* ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) continue; + if (ifa->ifa_addr->sa_family != AF_LINK) continue; + + std::string name = ifa->ifa_name; + if (!primary.empty() && name != primary) continue; + if (name == "lo0") continue; + + struct sockaddr_dl* sdl = (struct sockaddr_dl*)ifa->ifa_addr; + if (sdl->sdl_alen == 6) { + unsigned char* mac = (unsigned char*)LLADDR(sdl); + char buf[18]; + snprintf(buf, sizeof(buf), "%02X:%02X:%02X:%02X:%02X:%02X", + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + result = buf; + break; + } + } + + freeifaddrs(ifaddr); + return result; +} + +std::string NetworkInfo::get_locale() { + std::string locale = Platform::getEnv("LANG"); + if (!locale.empty()) { + size_t dot = locale.find('.'); + if (dot != std::string::npos) { + locale = locale.substr(0, dot); + } + std::replace(locale.begin(), locale.end(), '_', '-'); + return locale; + } + + return "en-US"; +} + +std::string NetworkInfo::get_network_name() { + if (Platform::commandExists("ifconfig")) { + std::string result = Platform::exec("ifconfig wlan0 2>/dev/null | grep 'ssid' | awk '{print $2}'"); + result = Platform::trim(result); + if (!result.empty()) return result; + } + + std::string iface = getPrimaryInterface(); + return iface.empty() ? "Unknown" : iface; +} + +std::string NetworkInfo::get_public_ip() { + Platform::HttpClient::Response resp = Platform::HttpClient::get("api.ipify.org", "/", 80, 5000); + if (resp.success) { + return Platform::trim(resp.body); + } + + resp = Platform::HttpClient::get("ifconfig.me", "/ip", 80, 5000); + if (resp.success) { + return Platform::trim(resp.body); + } + + return "Unknown"; +} + +std::string NetworkInfo::get_network_download_speed() { + return Platform::HttpClient::downloadSpeed("speed.cloudflare.com", "/__down", 1000000, 5000); +} + +std::string NetworkInfo::get_network_upload_speed() { + return Platform::HttpClient::uploadSpeed("speed.cloudflare.com", "/__up", 500000, 5000); +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/OSInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/OSInfoFreeBSD.cpp new file mode 100644 index 0000000..070979d --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/OSInfoFreeBSD.cpp @@ -0,0 +1,105 @@ +#include "../Platform.h" +#include "../../OSInfo.h" +#include +#include +#include +#include +#include +#include +#include + +std::string OSInfo::GetOSVersion() { + std::string release = Platform::sysctlString("kern.osrelease"); + if (!release.empty()) { + size_t dash = release.find('-'); + if (dash != std::string::npos) { + return release.substr(0, dash); + } + return release; + } + return "Unknown"; +} + +std::string OSInfo::GetOSArchitecture() { + std::string arch = Platform::sysctlString("hw.machine_arch"); + if (!arch.empty()) { + if (arch == "amd64" || arch == "x86_64") return "64-bit"; + if (arch == "i386" || arch == "i686") return "32-bit"; + if (arch == "aarch64" || arch == "arm64") return "ARM64"; + if (arch == "armv7" || arch == "armv6") return "ARM32"; + return arch; + } + return "Unknown"; +} + +std::string OSInfo::GetOSName() { + std::string ostype = Platform::sysctlString("kern.ostype"); + std::string version = GetOSVersion(); + + if (!ostype.empty()) { + if (!version.empty() && version != "Unknown") { + return ostype + " " + version; + } + return ostype; + } + return "FreeBSD"; +} + +std::string OSInfo::get_os_install_date() { + struct stat st; + if (stat("/", &st) == 0) { + char buf[64]; + struct tm* tm_info = localtime(&st.st_ctime); + strftime(buf, sizeof(buf), "%Y-%m-%d", tm_info); + return std::string(buf); + } + return "N/A"; +} + +std::string OSInfo::get_os_serial_number() { + std::string result = Platform::exec("kenv smbios.system.serial 2>/dev/null"); + result = Platform::trim(result); + if (!result.empty() && result != "To Be Filled By O.E.M." && result != "None") { + return result; + } + + result = Platform::exec("kenv smbios.planar.serial 2>/dev/null"); + result = Platform::trim(result); + if (!result.empty() && result != "To Be Filled By O.E.M." && result != "None") { + return result; + } + + return "N/A (requires root)"; +} + +std::string OSInfo::get_os_uptime() { + struct timeval boottime; + size_t len = sizeof(boottime); + int mib[2] = {CTL_KERN, KERN_BOOTTIME}; + + if (sysctl(mib, 2, &boottime, &len, nullptr, 0) == 0) { + time_t now = time(nullptr); + time_t uptime_seconds = now - boottime.tv_sec; + + int days = static_cast(uptime_seconds / 86400); + int hours = static_cast((uptime_seconds % 86400) / 3600); + int minutes = static_cast((uptime_seconds % 3600) / 60); + int seconds = static_cast(uptime_seconds % 60); + + std::ostringstream ss; + ss << days << ":" + << std::setw(2) << std::setfill('0') << hours << ":" + << std::setw(2) << std::setfill('0') << minutes << ":" + << std::setw(2) << std::setfill('0') << seconds; + return ss.str(); + } + return "Unknown"; +} + +std::string OSInfo::get_os_kernel_info() { + struct utsname buf; + if (uname(&buf) == 0) { + return std::string(buf.sysname) + " " + buf.release; + } + return "FreeBSD"; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/PerformanceInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/PerformanceInfoFreeBSD.cpp new file mode 100644 index 0000000..c94e4cf --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/PerformanceInfoFreeBSD.cpp @@ -0,0 +1,127 @@ +#include "../Platform.h" +#include "../../PerformanceInfo.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct PerformanceInfo::Impl { + long prev_cp_time[5] = {0}; + bool first_call = true; +}; + +PerformanceInfo::PerformanceInfo() { + pImpl = new Impl(); +} + +PerformanceInfo::~PerformanceInfo() { + delete pImpl; + pImpl = nullptr; +} + +std::string PerformanceInfo::format_uptime(unsigned long long totalMilliseconds) { + unsigned long long totalSeconds = totalMilliseconds / 1000ULL; + int hours = static_cast(totalSeconds / 3600ULL); + int minutes = static_cast((totalSeconds % 3600ULL) / 60ULL); + int seconds = static_cast(totalSeconds % 60ULL); + return std::to_string(hours) + "h " + std::to_string(minutes) + "m " + std::to_string(seconds) + "s"; +} + +std::string PerformanceInfo::get_system_uptime() { + struct timeval boottime; + size_t len = sizeof(boottime); + int mib[2] = {CTL_KERN, KERN_BOOTTIME}; + + if (sysctl(mib, 2, &boottime, &len, nullptr, 0) == 0) { + time_t now = time(nullptr); + time_t uptime_seconds = now - boottime.tv_sec; + unsigned long long ms = static_cast(uptime_seconds * 1000); + return format_uptime(ms); + } + return "Unknown"; +} + +float PerformanceInfo::get_cpu_usage_percent() { + long cp_time[5]; + size_t len = sizeof(cp_time); + + if (sysctlbyname("kern.cp_time", cp_time, &len, nullptr, 0) != 0) { + return 0.0f; + } + + if (pImpl->first_call) { + memcpy(pImpl->prev_cp_time, cp_time, sizeof(cp_time)); + pImpl->first_call = false; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + return get_cpu_usage_percent(); + } + + long total_delta = 0; + long idle_delta = 0; + + for (int i = 0; i < 5; i++) { + total_delta += cp_time[i] - pImpl->prev_cp_time[i]; + } + idle_delta = cp_time[4] - pImpl->prev_cp_time[4]; + + memcpy(pImpl->prev_cp_time, cp_time, sizeof(cp_time)); + + if (total_delta == 0) return 0.0f; + + return (1.0f - (float)idle_delta / (float)total_delta) * 100.0f; +} + +float PerformanceInfo::get_ram_usage_percent() { + unsigned long physmem = Platform::sysctlULong("hw.physmem"); + unsigned long pagesize = Platform::sysctlULong("hw.pagesize"); + if (pagesize == 0) pagesize = 4096; + + unsigned long free_count = Platform::sysctlULong("vm.stats.vm.v_free_count"); + unsigned long inactive = Platform::sysctlULong("vm.stats.vm.v_inactive_count"); + unsigned long cache = Platform::sysctlULong("vm.stats.vm.v_cache_count"); + + unsigned long available = (free_count + inactive + cache) * pagesize; + + if (physmem == 0) return 0.0f; + + unsigned long used = physmem - available; + return static_cast((used * 100.0) / physmem); +} + +float PerformanceInfo::get_disk_usage_percent() { + struct statfs* mntbuf; + int mntsize = getmntinfo(&mntbuf, MNT_NOWAIT); + + if (mntsize <= 0) return 0.0f; + + for (int i = 0; i < mntsize; i++) { + if (std::string(mntbuf[i].f_mntonname) == "/") { + unsigned long long total = (unsigned long long)mntbuf[i].f_blocks * mntbuf[i].f_bsize; + unsigned long long free = (unsigned long long)mntbuf[i].f_bfree * mntbuf[i].f_bsize; + + if (total == 0) return 0.0f; + + unsigned long long used = total - free; + return static_cast((used * 100.0) / total); + } + } + + return 0.0f; +} + +float PerformanceInfo::get_gpu_usage_percent() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits 2>/dev/null"); + if (!result.empty()) { + try { return std::stof(Platform::trim(result)); } + catch (...) {} + } + } + + return 0.0f; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/StorageInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/StorageInfoFreeBSD.cpp new file mode 100644 index 0000000..d2beb2e --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/StorageInfoFreeBSD.cpp @@ -0,0 +1,175 @@ +#include "../Platform.h" +#include "../../StorageInfo.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static std::set pseudoFS = {"devfs", "fdescfs", "procfs", "linprocfs", + "linsysfs", "tmpfs", "nullfs", "mqueuefs"}; + +std::string StorageInfo::get_storage_type(const std::string&, const std::string& root_path, bool) { + std::string geom = Platform::exec("geom disk list 2>/dev/null"); + + if (geom.find("rotationrate: 0") != std::string::npos) { + return "SSD"; + } + + std::string camctl = Platform::exec("camcontrol identify da0 2>/dev/null | grep -i 'rotation rate'"); + if (!camctl.empty()) { + if (camctl.find("non-rotating") != std::string::npos || + camctl.find("Solid State") != std::string::npos) { + return "SSD"; + } + return "HDD"; + } + + if (root_path.find("nvme") != std::string::npos || + root_path.find("nvd") != std::string::npos) { + return "SSD"; + } + + if (root_path.find("da") != std::string::npos) { + std::string usbconf = Platform::exec("usbconfig list 2>/dev/null"); + if (!usbconf.empty() && usbconf.find("DISK") != std::string::npos) { + return "USB"; + } + } + + return "Unknown"; +} + +static double measureSpeed(const std::string& path, bool write) { + const size_t BUF_SIZE = 16 * 1024 * 1024; + std::vector buffer(BUF_SIZE, 'X'); + + std::string testFile = path + "/.binaryfetch_speed_test"; + + if (write) { + auto start = std::chrono::high_resolution_clock::now(); + int fd = open(testFile.c_str(), O_WRONLY | O_CREAT | O_TRUNC | O_SYNC, 0644); + if (fd < 0) return 0.0; + + ssize_t written = ::write(fd, buffer.data(), BUF_SIZE); + fsync(fd); + close(fd); + + auto end = std::chrono::high_resolution_clock::now(); + + if (written <= 0) { + unlink(testFile.c_str()); + return 0.0; + } + + double seconds = std::chrono::duration(end - start).count(); + if (seconds < 0.001) seconds = 0.001; + + return (written / (1024.0 * 1024.0)) / seconds; + } else { + int fd = open(testFile.c_str(), O_RDONLY); + if (fd < 0) return 0.0; + + auto start = std::chrono::high_resolution_clock::now(); + ssize_t bytesRead = read(fd, buffer.data(), BUF_SIZE); + close(fd); + unlink(testFile.c_str()); + + auto end = std::chrono::high_resolution_clock::now(); + + if (bytesRead <= 0) return 0.0; + + double seconds = std::chrono::duration(end - start).count(); + if (seconds < 0.001) seconds = 0.001; + + return (bytesRead / (1024.0 * 1024.0)) / seconds; + } +} + +std::vector StorageInfo::get_all_storage_info() { + std::vector all_disks; + + struct statfs* mntbuf; + int mntsize = getmntinfo(&mntbuf, MNT_NOWAIT); + + if (mntsize <= 0) return all_disks; + + std::set seen; + + for (int i = 0; i < mntsize; i++) { + std::string fstype = mntbuf[i].f_fstypename; + std::string device = mntbuf[i].f_mntfromname; + std::string mountpoint = mntbuf[i].f_mntonname; + + if (pseudoFS.count(fstype) || device.find("/dev/") != 0) continue; + if (seen.count(device)) continue; + seen.insert(device); + + unsigned long long total = (unsigned long long)mntbuf[i].f_blocks * mntbuf[i].f_bsize; + unsigned long long free = (unsigned long long)mntbuf[i].f_bfree * mntbuf[i].f_bsize; + unsigned long long used = total - free; + + if (total < 100 * 1024 * 1024) continue; + + double totalGiB = total / (1024.0 * 1024.0 * 1024.0); + double usedGiB = used / (1024.0 * 1024.0 * 1024.0); + double usedPercent = (total > 0) ? (used * 100.0 / total) : 0.0; + + storage_data disk; + disk.drive_letter = "Disk (" + mountpoint + ")"; + + std::ostringstream usedStr, totalStr, percentStr; + usedStr << std::fixed << std::setprecision(2) << usedGiB; + totalStr << std::fixed << std::setprecision(2) << totalGiB; + percentStr << "(" << static_cast(usedPercent) << "%)"; + + disk.used_space = usedStr.str(); + disk.total_space = totalStr.str(); + disk.used_percentage = percentStr.str(); + disk.file_system = fstype; + disk.storage_type = get_storage_type("", mountpoint, false); + disk.is_external = (disk.storage_type == "USB"); + + double w = measureSpeed(mountpoint, true); + usleep(100000); + double r = measureSpeed(mountpoint, false); + + std::ostringstream readStr, writeStr; + readStr << std::fixed << std::setprecision(2) << r; + writeStr << std::fixed << std::setprecision(2) << w; + disk.read_speed = readStr.str(); + disk.write_speed = writeStr.str(); + + if (disk.storage_type == "USB") { + disk.predicted_read_speed = "100"; + disk.predicted_write_speed = "80"; + } else if (disk.storage_type == "SSD") { + disk.predicted_read_speed = "500"; + disk.predicted_write_speed = "450"; + } else if (disk.storage_type == "HDD") { + disk.predicted_read_speed = "140"; + disk.predicted_write_speed = "120"; + } else { + disk.predicted_read_speed = "---"; + disk.predicted_write_speed = "---"; + } + + disk.serial_number = "N/A"; + + all_disks.push_back(disk); + } + + return all_disks; +} + +void StorageInfo::process_storage_info(std::function callback) { + auto disks = get_all_storage_info(); + for (const auto& disk : disks) { + callback(disk); + } +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/freebsd/SystemInfoFreeBSD.cpp b/project_binary_fetch/binary_fetch_v1/platform/freebsd/SystemInfoFreeBSD.cpp new file mode 100644 index 0000000..d5cab86 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/freebsd/SystemInfoFreeBSD.cpp @@ -0,0 +1,58 @@ +#include "../Platform.h" +#include "../../SystemInfo.h" +#include + +static std::string readKenv(const std::string& key) { + std::string cmd = "kenv " + key + " 2>/dev/null"; + std::string value = Platform::exec(cmd); + value = Platform::trim(value); + + if (value.empty() || value == "To Be Filled By O.E.M." || + value == "Default string" || value == "Not Specified" || + value == "None" || value.find("unknown") != std::string::npos) { + return "N/A"; + } + return value; +} + +std::string SystemInfo::get_bios_vendor() { + return readKenv("smbios.bios.vendor"); +} + +std::string SystemInfo::get_bios_version() { + return readKenv("smbios.bios.version"); +} + +std::string SystemInfo::get_bios_release_date() { + return readKenv("smbios.bios.reldate"); +} + +std::string SystemInfo::get_motherboard_manufacturer() { + return readKenv("smbios.planar.maker"); +} + +std::string SystemInfo::get_motherboard_model() { + return readKenv("smbios.planar.product"); +} + +std::vector>> SystemInfo::get_bios_info() { + std::vector>> info; + + info.push_back({"BIOS Vendor", {"", get_bios_vendor()}}); + info.push_back({"BIOS Version", {"", get_bios_version()}}); + info.push_back({"BIOS Date", {"", get_bios_release_date()}}); + info.push_back({"Board Manufacturer", {"", get_motherboard_manufacturer()}}); + info.push_back({"Board Model", {"", get_motherboard_model()}}); + + std::string product = readKenv("smbios.system.product"); + if (product != "N/A") { + info.push_back({"System Product", {"", product}}); + } + + std::string sys_vendor = readKenv("smbios.system.maker"); + if (sys_vendor != "N/A") { + info.push_back({"System Vendor", {"", sys_vendor}}); + } + + return info; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/linux/CPUInfoLinux.cpp b/project_binary_fetch/binary_fetch_v1/platform/linux/CPUInfoLinux.cpp new file mode 100644 index 0000000..1970920 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/linux/CPUInfoLinux.cpp @@ -0,0 +1,239 @@ +#include "../Platform.h" +#include "../../CPUInfo.h" +#include +#include +#include +#include +#include +#include +#include +#include + +static long prev_idle = 0; +static long prev_total = 0; +static bool first_call = true; + +std::string CPUInfo::get_cpu_info() { + std::string content = Platform::readFile("/proc/cpuinfo"); + std::string model = Platform::parseValue(content, "model name"); + return model.empty() ? "Unknown CPU" : model; +} + +float CPUInfo::get_cpu_utilization() { + std::string stat = Platform::readFileLine("/proc/stat"); + if (stat.empty()) return 0.0f; + + long user, nice, system, idle, iowait, irq, softirq, steal; + sscanf(stat.c_str(), "cpu %ld %ld %ld %ld %ld %ld %ld %ld", + &user, &nice, &system, &idle, &iowait, &irq, &softirq, &steal); + + long idle_time = idle + iowait; + long total_time = user + nice + system + idle + iowait + irq + softirq + steal; + + if (first_call) { + prev_idle = idle_time; + prev_total = total_time; + first_call = false; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + return get_cpu_utilization(); + } + + long idle_delta = idle_time - prev_idle; + long total_delta = total_time - prev_total; + + prev_idle = idle_time; + prev_total = total_time; + + if (total_delta == 0) return 0.0f; + + return (1.0f - (float)idle_delta / (float)total_delta) * 100.0f; +} + +std::string CPUInfo::get_cpu_base_speed() { + std::string freq = Platform::readFileLine("/sys/devices/system/cpu/cpu0/cpufreq/base_frequency"); + if (freq.empty()) { + freq = Platform::readFileLine("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq"); + } + + if (!freq.empty()) { + float ghz = std::stof(freq) / 1000000.0f; + std::ostringstream ss; + ss << std::fixed << std::setprecision(2) << ghz << " GHz"; + return ss.str(); + } + + std::string content = Platform::readFile("/proc/cpuinfo"); + std::string mhz = Platform::parseValue(content, "cpu MHz"); + if (!mhz.empty()) { + float ghz = std::stof(mhz) / 1000.0f; + std::ostringstream ss; + ss << std::fixed << std::setprecision(2) << ghz << " GHz"; + return ss.str(); + } + + return "N/A"; +} + +std::string CPUInfo::get_cpu_speed() { + std::string freq = Platform::readFileLine("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"); + + if (!freq.empty()) { + float ghz = std::stof(freq) / 1000000.0f; + std::ostringstream ss; + ss << std::fixed << std::setprecision(2) << ghz << " GHz"; + return ss.str(); + } + + return get_cpu_base_speed(); +} + +int CPUInfo::get_cpu_sockets() { + std::string content = Platform::readFile("/proc/cpuinfo"); + std::set physical_ids; + + std::istringstream iss(content); + std::string line; + while (std::getline(iss, line)) { + if (line.find("physical id") == 0) { + size_t pos = line.find(':'); + if (pos != std::string::npos) { + physical_ids.insert(Platform::trim(line.substr(pos + 1))); + } + } + } + + return physical_ids.empty() ? 1 : static_cast(physical_ids.size()); +} + +int CPUInfo::get_cpu_cores() { + std::string content = Platform::readFile("/proc/cpuinfo"); + std::string cores = Platform::parseValue(content, "cpu cores"); + + if (!cores.empty()) { + return std::stoi(cores) * get_cpu_sockets(); + } + + std::string siblings = Platform::parseValue(content, "siblings"); + if (!siblings.empty()) { + return std::stoi(siblings) / 2; + } + + return get_cpu_logical_processors() / 2; +} + +int CPUInfo::get_cpu_logical_processors() { + int count = 0; + std::string content = Platform::readFile("/proc/cpuinfo"); + std::istringstream iss(content); + std::string line; + while (std::getline(iss, line)) { + if (line.find("processor") == 0) count++; + } + return count > 0 ? count : 1; +} + +std::string CPUInfo::get_cpu_virtualization() { + std::string content = Platform::readFile("/proc/cpuinfo"); + std::string flags = Platform::parseValue(content, "flags"); + + if (flags.find("vmx") != std::string::npos) return "VT-x Enabled"; + if (flags.find("svm") != std::string::npos) return "AMD-V Enabled"; + + return "Disabled"; +} + +static std::string readCacheSize(int level) { + for (int i = 0; i < 4; i++) { + std::string path = "/sys/devices/system/cpu/cpu0/cache/index" + std::to_string(i) + "/"; + std::string levelStr = Platform::readFileLine(path + "level"); + if (levelStr.empty()) continue; + + if (std::stoi(levelStr) == level) { + std::string size = Platform::readFileLine(path + "size"); + if (!size.empty()) return Platform::trim(size); + } + } + return "N/A"; +} + +std::string CPUInfo::get_cpu_l1_cache() { + int total = 0; + for (int i = 0; i < 2; i++) { + std::string path = "/sys/devices/system/cpu/cpu0/cache/index" + std::to_string(i) + "/"; + std::string levelStr = Platform::readFileLine(path + "level"); + if (levelStr.empty() || std::stoi(levelStr) != 1) continue; + + std::string size = Platform::readFileLine(path + "size"); + if (!size.empty()) { + int val = std::stoi(size); + if (size.find('K') != std::string::npos) total += val; + else if (size.find('M') != std::string::npos) total += val * 1024; + } + } + + if (total > 0) { + std::ostringstream ss; + ss << total << " KB"; + return ss.str(); + } + return "N/A"; +} + +std::string CPUInfo::get_cpu_l2_cache() { return readCacheSize(2); } +std::string CPUInfo::get_cpu_l3_cache() { return readCacheSize(3); } + +std::string CPUInfo::get_system_uptime() { + std::string uptimeStr = Platform::readFileLine("/proc/uptime"); + if (uptimeStr.empty()) return "Unknown"; + + double uptime_seconds = std::stod(uptimeStr); + + int days = static_cast(uptime_seconds / 86400); + int hours = static_cast((uptime_seconds - days * 86400) / 3600); + int minutes = static_cast((uptime_seconds - days * 86400 - hours * 3600) / 60); + int seconds = static_cast(uptime_seconds) % 60; + + std::ostringstream ss; + ss << days << ":" + << std::setw(2) << std::setfill('0') << hours << ":" + << std::setw(2) << std::setfill('0') << minutes << ":" + << std::setw(2) << std::setfill('0') << seconds; + return ss.str(); +} + +int CPUInfo::get_process_count() { + DIR* dir = opendir("/proc"); + if (!dir) return 0; + + int count = 0; + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + if (entry->d_type == DT_DIR) { + bool is_pid = true; + for (const char* p = entry->d_name; *p; p++) { + if (*p < '0' || *p > '9') { is_pid = false; break; } + } + if (is_pid) count++; + } + } + closedir(dir); + return count; +} + +int CPUInfo::get_thread_count() { + std::string result = Platform::exec("ps -eo nlwp --no-headers 2>/dev/null | awk '{sum+=$1} END {print sum}'"); + if (!result.empty()) { + try { return std::stoi(Platform::trim(result)); } + catch (...) {} + } + return 0; +} + +int CPUInfo::get_handle_count() { + std::string result = Platform::exec("cat /proc/sys/fs/file-nr 2>/dev/null | awk '{print $1}'"); + if (!result.empty()) { + try { return std::stoi(Platform::trim(result)); } + catch (...) {} + } + return 0; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/linux/DisplayInfoLinux.cpp b/project_binary_fetch/binary_fetch_v1/platform/linux/DisplayInfoLinux.cpp new file mode 100644 index 0000000..810f89a --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/linux/DisplayInfoLinux.cpp @@ -0,0 +1,206 @@ +#include "../Platform.h" +#include "../../DisplayInfo.h" +#include +#include +#include +#include +#include + +std::string DisplayInfo::WideToUtf8(const wchar_t*) { + return ""; +} + +std::string DisplayInfo::scaleMultiplier(int scalePercent) { + float mul = scalePercent / 100.0f; + char buf[32]; + if (fabsf(mul - roundf(mul)) < 0.001f) { + snprintf(buf, sizeof(buf), "%.0fx", mul); + } else { + snprintf(buf, sizeof(buf), "%.2fx", mul); + } + return std::string(buf); +} + +int DisplayInfo::computeUpscaleFactor(int currentWidth, int nativeWidth) { + if (nativeWidth <= 0 || currentWidth <= 0) return 1; + float ratio = static_cast(currentWidth) / static_cast(nativeWidth); + if (ratio < 1.25f) return 1; + return static_cast(std::round(ratio)); +} + +std::string DisplayInfo::computeAspectRatio(int w, int h) { + if (w <= 0 || h <= 0) return "Unknown"; + int a = w, b = h; + while (b != 0) { int t = b; b = a % b; a = t; } + return std::to_string(w/a) + ":" + std::to_string(h/a); +} + +bool DisplayInfo::isNvidiaPresent() { + return Platform::fileExists("/sys/module/nvidia/version"); +} + +bool DisplayInfo::isAMDPresent() { + return Platform::fileExists("/sys/module/amdgpu/version"); +} + +DisplayInfo::EDIDInfo DisplayInfo::parseEDID(const unsigned char* edid, size_t size) { + EDIDInfo info = {"", 0, 0, false}; + if (!edid || size < 128) return info; + if (edid[0] != 0x00 || edid[1] != 0xFF || edid[7] != 0x00) return info; + + if (size >= 72) { + unsigned short hActive = ((edid[58] >> 4) << 8) | edid[56]; + unsigned short vActive = ((edid[61] >> 4) << 8) | edid[59]; + if (hActive > 0 && vActive > 0) { + info.nativeWidth = hActive; + info.nativeHeight = vActive; + info.valid = true; + } + } + + for (int i = 54; i < 126; i += 18) { + if (i + 17 >= static_cast(size)) break; + if (edid[i] == 0x00 && edid[i + 1] == 0x00 && edid[i + 3] == 0xFC) { + std::string name; + for (int j = 5; j < 18; ++j) { + if (edid[i + j] == 0x0A || edid[i + j] == 0x00) break; + if (edid[i + j] >= 0x20 && edid[i + j] <= 0x7E) { + name += static_cast(edid[i + j]); + } + } + while (!name.empty() && name.back() == ' ') name.pop_back(); + if (!name.empty()) info.friendlyName = name; + break; + } + } + return info; +} + +std::string DisplayInfo::getFriendlyNameFromEDID(const std::wstring&) { + DIR* dir = opendir("/sys/class/drm"); + if (!dir) return "Generic Monitor"; + + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + std::string name = entry->d_name; + if (name.find("card") == 0 && name.find("-") != std::string::npos) { + std::string edidPath = "/sys/class/drm/" + name + "/edid"; + std::ifstream file(edidPath, std::ios::binary); + if (file.is_open()) { + std::vector data((std::istreambuf_iterator(file)), + std::istreambuf_iterator()); + file.close(); + + if (data.size() >= 128) { + EDIDInfo info = parseEDID(data.data(), data.size()); + if (!info.friendlyName.empty()) { + closedir(dir); + return info.friendlyName; + } + } + } + } + } + closedir(dir); + return "Generic Monitor"; +} + +DisplayInfo::DisplayInfo() { + refresh(); +} + +bool DisplayInfo::refresh() { + screens.clear(); + return populateFromDXGI(); +} + +const std::vector& DisplayInfo::getScreens() const { + return screens; +} + +bool DisplayInfo::populateFromDXGI() { + std::string displayEnv = Platform::getEnv("DISPLAY"); + std::string waylandEnv = Platform::getEnv("WAYLAND_DISPLAY"); + + if (displayEnv.empty() && waylandEnv.empty()) { + return true; + } + + std::string xrandr = Platform::exec("xrandr --current 2>/dev/null"); + if (xrandr.empty()) return true; + + std::istringstream iss(xrandr); + std::string line; + ScreenInfo current; + bool inMonitor = false; + + while (std::getline(iss, line)) { + if (line.find(" connected") != std::string::npos) { + if (inMonitor && current.current_width > 0) { + screens.push_back(current); + } + + current = ScreenInfo(); + inMonitor = true; + + size_t spacePos = line.find(' '); + if (spacePos != std::string::npos) { + current.name = line.substr(0, spacePos); + } + + size_t resStart = line.find_first_of("0123456789"); + if (resStart != std::string::npos) { + int w = 0, h = 0, offX = 0, offY = 0; + if (sscanf(line.c_str() + resStart, "%dx%d+%d+%d", &w, &h, &offX, &offY) >= 2) { + current.current_width = w; + current.current_height = h; + current.native_width = w; + current.native_height = h; + current.native_resolution = std::to_string(w) + "x" + std::to_string(h); + current.aspect_ratio = computeAspectRatio(w, h); + } + } + } + else if (inMonitor && line.find("*") != std::string::npos) { + size_t hzStart = line.find_last_of("0123456789."); + if (hzStart != std::string::npos) { + size_t hzEnd = line.find("*"); + if (hzEnd != std::string::npos) { + while (hzStart > 0 && (std::isdigit(line[hzStart-1]) || line[hzStart-1] == '.')) { + hzStart--; + } + std::string hzStr = line.substr(hzStart, hzEnd - hzStart); + try { + current.refresh_rate = static_cast(std::stof(Platform::trim(hzStr))); + } catch (...) { + current.refresh_rate = 60; + } + } + } + } + } + + if (inMonitor && current.current_width > 0) { + screens.push_back(current); + } + + std::string dpiStr = Platform::exec("xrdb -query 2>/dev/null | grep -i dpi | head -1 | awk '{print $2}'"); + int dpi = 96; + if (!dpiStr.empty()) { + try { dpi = std::stoi(Platform::trim(dpiStr)); } + catch (...) { dpi = 96; } + } + + for (auto& screen : screens) { + screen.scale_percent = static_cast(std::round((dpi / 96.0f) * 100.0f)); + screen.scale_mul = scaleMultiplier(screen.scale_percent); + screen.upscale = "1x"; + screen.dsr_enabled = false; + screen.dsr_type = "None"; + } + + return !screens.empty(); +} + +bool DisplayInfo::enrichWithNVAPI() { return true; } +bool DisplayInfo::enrichWithADL() { return true; } diff --git a/project_binary_fetch/binary_fetch_v1/platform/linux/GPUInfoLinux.cpp b/project_binary_fetch/binary_fetch_v1/platform/linux/GPUInfoLinux.cpp new file mode 100644 index 0000000..e4381e5 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/linux/GPUInfoLinux.cpp @@ -0,0 +1,159 @@ +#include "../Platform.h" +#include "../../GPUInfo.h" +#include +#include +#include +#include +#include + +static std::string findGPUInDRM() { + std::vector gpus; + DIR* dir = opendir("/sys/class/drm"); + if (!dir) return ""; + + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + std::string name = entry->d_name; + if (name.find("card") == 0 && name.find("-") == std::string::npos) { + std::string vendorPath = "/sys/class/drm/" + name + "/device/vendor"; + std::string vendor = Platform::readFileLine(vendorPath); + if (!vendor.empty()) { + gpus.push_back(name); + } + } + } + closedir(dir); + return gpus.empty() ? "" : gpus[0]; +} + +float GPUInfo::get_gpu_usage() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits 2>/dev/null"); + if (!result.empty()) { + try { return std::stof(Platform::trim(result)); } + catch (...) {} + } + } + + std::string card = findGPUInDRM(); + if (!card.empty()) { + std::string busyPath = "/sys/class/drm/" + card + "/device/gpu_busy_percent"; + std::string busy = Platform::readFileLine(busyPath); + if (!busy.empty()) { + try { return std::stof(busy); } + catch (...) {} + } + } + + return -1.0f; +} + +float GPUInfo::get_gpu_temperature() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits 2>/dev/null"); + if (!result.empty()) { + try { return std::stof(Platform::trim(result)); } + catch (...) {} + } + } + + std::string card = findGPUInDRM(); + if (!card.empty()) { + DIR* hwmonDir = opendir(("/sys/class/drm/" + card + "/device/hwmon").c_str()); + if (hwmonDir) { + struct dirent* entry; + while ((entry = readdir(hwmonDir)) != nullptr) { + if (std::string(entry->d_name).find("hwmon") == 0) { + std::string tempPath = "/sys/class/drm/" + card + "/device/hwmon/" + entry->d_name + "/temp1_input"; + std::string temp = Platform::readFileLine(tempPath); + if (!temp.empty()) { + closedir(hwmonDir); + try { return std::stof(temp) / 1000.0f; } + catch (...) { return -1.0f; } + } + } + } + closedir(hwmonDir); + } + } + + return -1.0f; +} + +int GPUInfo::get_gpu_core_count() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=gpu_name --format=csv,noheader 2>/dev/null"); + return 0; + } + return 0; +} + +std::vector GPUInfo::get_all_gpu_info() { + std::vector list; + + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=name,memory.total,driver_version,utilization.gpu,temperature.gpu,clocks.gr --format=csv,noheader,nounits 2>/dev/null"); + + std::istringstream iss(result); + std::string line; + while (std::getline(iss, line)) { + if (line.empty()) continue; + + auto parts = Platform::split(line, ','); + if (parts.size() >= 6) { + gpu_data d; + d.gpu_name = Platform::trim(parts[0]); + + float memMB = std::stof(Platform::trim(parts[1])); + std::ostringstream memStream; + memStream << std::fixed << std::setprecision(1) << (memMB / 1024.0f) << " GB"; + d.gpu_memory = memStream.str(); + + d.gpu_driver_version = Platform::trim(parts[2]); + d.gpu_vendor = "NVIDIA"; + d.gpu_usage = std::stof(Platform::trim(parts[3])); + d.gpu_temperature = std::stof(Platform::trim(parts[4])); + d.gpu_frequency = std::stof(Platform::trim(parts[5])); + d.gpu_core_count = 0; + + list.push_back(d); + } + } + } + + std::string lspci = Platform::exec("lspci -nn 2>/dev/null | grep -i 'vga\\|3d\\|display'"); + if (!lspci.empty() && list.empty()) { + std::istringstream iss(lspci); + std::string line; + while (std::getline(iss, line)) { + gpu_data d; + + size_t colonPos = line.find(':'); + if (colonPos != std::string::npos && colonPos + 1 < line.length()) { + d.gpu_name = Platform::trim(line.substr(colonPos + 1)); + size_t bracketPos = d.gpu_name.find('['); + if (bracketPos != std::string::npos) { + d.gpu_name = Platform::trim(d.gpu_name.substr(0, bracketPos)); + } + } + + if (line.find("10de") != std::string::npos) d.gpu_vendor = "NVIDIA"; + else if (line.find("1002") != std::string::npos) d.gpu_vendor = "AMD"; + else if (line.find("8086") != std::string::npos) d.gpu_vendor = "Intel"; + else d.gpu_vendor = "Unknown"; + + d.gpu_memory = "Unknown"; + d.gpu_driver_version = "Unknown"; + d.gpu_usage = get_gpu_usage(); + d.gpu_temperature = get_gpu_temperature(); + d.gpu_frequency = -1.0f; + d.gpu_core_count = 0; + + if (!d.gpu_name.empty()) { + list.push_back(d); + } + } + } + + return list; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/linux/MemoryInfoLinux.cpp b/project_binary_fetch/binary_fetch_v1/platform/linux/MemoryInfoLinux.cpp new file mode 100644 index 0000000..1de4a92 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/linux/MemoryInfoLinux.cpp @@ -0,0 +1,106 @@ +#include "../Platform.h" +#include "../../MemoryInfo.h" +#include +#include +#include + +MemoryInfo::MemoryInfo() { + fetchSystemMemory(); + fetchModulesInfo(); +} + +void MemoryInfo::fetchSystemMemory() { + std::string content = Platform::readFile("/proc/meminfo"); + + auto parseKB = [&](const std::string& key) -> long long { + std::string val = Platform::parseValue(content, key); + if (val.empty()) return 0; + return std::stoll(val); + }; + + long long memTotal = parseKB("MemTotal"); + long long memAvailable = parseKB("MemAvailable"); + + if (memAvailable == 0) { + long long memFree = parseKB("MemFree"); + long long buffers = parseKB("Buffers"); + long long cached = parseKB("Cached"); + memAvailable = memFree + buffers + cached; + } + + totalGB = static_cast((memTotal + 1024 * 1024 - 1) / (1024 * 1024)); + freeGB = static_cast(memAvailable / (1024 * 1024)); +} + +void MemoryInfo::fetchModulesInfo() { + modules.clear(); + + std::string output = Platform::exec("dmidecode -t memory 2>/dev/null | grep -E 'Size:|Speed:|Type:' | head -20"); + + if (output.empty()) { + MemoryModule mod; + mod.capacity = std::to_string(totalGB) + "GB"; + mod.type = "Unknown"; + mod.speed = "Unknown"; + modules.push_back(mod); + return; + } + + std::istringstream iss(output); + std::string line; + MemoryModule current; + + while (std::getline(iss, line)) { + line = Platform::trim(line); + + if (line.find("Size:") == 0) { + if (!current.capacity.empty() && current.capacity.find("No Module") == std::string::npos) { + modules.push_back(current); + } + current = MemoryModule(); + + std::string size = line.substr(5); + size = Platform::trim(size); + if (size.find("No Module") == std::string::npos) { + current.capacity = size; + } + } + else if (line.find("Type:") == 0 && current.type.empty()) { + std::string type = Platform::trim(line.substr(5)); + if (type != "Unknown" && type != "Other") { + current.type = type; + } + } + else if (line.find("Speed:") == 0 && current.speed.empty()) { + std::string speed = Platform::trim(line.substr(6)); + if (speed != "Unknown") { + current.speed = speed; + } + } + } + + if (!current.capacity.empty() && current.capacity.find("No Module") == std::string::npos) { + modules.push_back(current); + } + + if (modules.empty()) { + MemoryModule mod; + mod.capacity = std::to_string(totalGB) + "GB"; + mod.type = "Unknown"; + mod.speed = "Unknown"; + modules.push_back(mod); + } +} + +int MemoryInfo::getTotal() const { return totalGB; } +int MemoryInfo::getFree() const { return freeGB; } + +int MemoryInfo::getUsedPercentage() const { + if (totalGB == 0) return 0; + double percentage = (static_cast(totalGB - freeGB) / totalGB) * 100; + if (percentage > 100.0) percentage = 100.0; + if (percentage < 0.0) percentage = 0.0; + return static_cast(percentage); +} + +const std::vector& MemoryInfo::getModules() const { return modules; } diff --git a/project_binary_fetch/binary_fetch_v1/platform/linux/NetworkInfoLinux.cpp b/project_binary_fetch/binary_fetch_v1/platform/linux/NetworkInfoLinux.cpp new file mode 100644 index 0000000..0886f64 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/linux/NetworkInfoLinux.cpp @@ -0,0 +1,148 @@ +#include "../Platform.h" +#include "../HttpClient.h" +#include "../../NetworkInfo.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static std::string getPrimaryInterface() { + struct ifaddrs* ifaddr; + if (getifaddrs(&ifaddr) == -1) return ""; + + std::string primary; + for (struct ifaddrs* ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) continue; + if (ifa->ifa_addr->sa_family != AF_INET) continue; + + std::string name = ifa->ifa_name; + if (name == "lo") continue; + if (name.find("docker") == 0) continue; + if (name.find("virbr") == 0) continue; + if (name.find("br-") == 0) continue; + if (name.find("veth") == 0) continue; + + if (ifa->ifa_flags & IFF_UP) { + primary = name; + break; + } + } + + freeifaddrs(ifaddr); + return primary; +} + +std::string NetworkInfo::get_local_ip() { + struct ifaddrs* ifaddr; + if (getifaddrs(&ifaddr) == -1) return "Unknown"; + + std::string result = "Unknown"; + + for (struct ifaddrs* ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) continue; + if (ifa->ifa_addr->sa_family != AF_INET) continue; + + std::string name = ifa->ifa_name; + if (name == "lo") continue; + if (name.find("docker") == 0) continue; + if (name.find("virbr") == 0) continue; + + if (!(ifa->ifa_flags & IFF_UP)) continue; + + char ip[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &((struct sockaddr_in*)ifa->ifa_addr)->sin_addr, ip, sizeof(ip)); + + int prefix = 24; + if (ifa->ifa_netmask) { + uint32_t mask = ntohl(((struct sockaddr_in*)ifa->ifa_netmask)->sin_addr.s_addr); + prefix = 0; + while (mask) { + prefix += (mask & 1); + mask >>= 1; + } + } + + std::ostringstream oss; + oss << ip << "/" << prefix; + result = oss.str(); + break; + } + + freeifaddrs(ifaddr); + return result; +} + +std::string NetworkInfo::get_mac_address() { + std::string iface = getPrimaryInterface(); + if (iface.empty()) return "Unknown"; + + std::string path = "/sys/class/net/" + iface + "/address"; + std::string mac = Platform::readFileLine(path); + + if (!mac.empty()) { + std::transform(mac.begin(), mac.end(), mac.begin(), ::toupper); + return Platform::trim(mac); + } + + return "Unknown"; +} + +std::string NetworkInfo::get_locale() { + std::string locale = Platform::getEnv("LANG"); + if (!locale.empty()) { + size_t dot = locale.find('.'); + if (dot != std::string::npos) { + locale = locale.substr(0, dot); + } + std::replace(locale.begin(), locale.end(), '_', '-'); + return locale; + } + + return "en-US"; +} + +std::string NetworkInfo::get_network_name() { + if (Platform::commandExists("iwgetid")) { + std::string ssid = Platform::exec("iwgetid -r 2>/dev/null"); + ssid = Platform::trim(ssid); + if (!ssid.empty()) return ssid; + } + + if (Platform::commandExists("nmcli")) { + std::string result = Platform::exec("nmcli -t -f NAME connection show --active 2>/dev/null | head -1"); + result = Platform::trim(result); + if (!result.empty()) return result; + } + + std::string iface = getPrimaryInterface(); + return iface.empty() ? "Unknown" : iface; +} + +std::string NetworkInfo::get_public_ip() { + Platform::HttpClient::Response resp = Platform::HttpClient::get("api.ipify.org", "/", 80, 5000); + if (resp.success) { + return Platform::trim(resp.body); + } + + resp = Platform::HttpClient::get("ifconfig.me", "/ip", 80, 5000); + if (resp.success) { + return Platform::trim(resp.body); + } + + return "Unknown"; +} + +std::string NetworkInfo::get_network_download_speed() { + return Platform::HttpClient::downloadSpeed("speed.cloudflare.com", "/__down", 1000000, 5000); +} + +std::string NetworkInfo::get_network_upload_speed() { + return Platform::HttpClient::uploadSpeed("speed.cloudflare.com", "/__up", 500000, 5000); +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/linux/OSInfoLinux.cpp b/project_binary_fetch/binary_fetch_v1/platform/linux/OSInfoLinux.cpp new file mode 100644 index 0000000..cf5457a --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/linux/OSInfoLinux.cpp @@ -0,0 +1,103 @@ +#include "../Platform.h" +#include "../../OSInfo.h" +#include +#include +#include +#include +#include +#include +#include + +std::string OSInfo::GetOSVersion() { + std::string content = Platform::readFile("/etc/os-release"); + std::string version = Platform::parseValue(content, "VERSION_ID", '='); + if (version.empty()) { + version = Platform::parseValue(content, "VERSION", '='); + } + version.erase(std::remove(version.begin(), version.end(), '"'), version.end()); + return version.empty() ? "Unknown" : version; +} + +std::string OSInfo::GetOSArchitecture() { + struct utsname buf; + if (uname(&buf) == 0) { + std::string machine = buf.machine; + if (machine == "x86_64" || machine == "amd64") return "64-bit"; + if (machine == "i386" || machine == "i686") return "32-bit"; + if (machine == "aarch64") return "ARM64"; + if (machine == "armv7l") return "ARM32"; + return machine; + } + return "Unknown"; +} + +std::string OSInfo::GetOSName() { + std::string content = Platform::readFile("/etc/os-release"); + std::string name = Platform::parseValue(content, "PRETTY_NAME", '='); + name.erase(std::remove(name.begin(), name.end(), '"'), name.end()); + + if (name.empty()) { + name = Platform::parseValue(content, "NAME", '='); + name.erase(std::remove(name.begin(), name.end(), '"'), name.end()); + std::string version = GetOSVersion(); + if (!version.empty() && version != "Unknown") { + name += " " + version; + } + } + + return name.empty() ? "Linux" : name; +} + +std::string OSInfo::get_os_install_date() { + struct stat st; + if (stat("/", &st) == 0) { + char buf[64]; + struct tm* tm_info = localtime(&st.st_ctime); + strftime(buf, sizeof(buf), "%Y-%m-%d", tm_info); + return std::string(buf); + } + + std::string result = Platform::exec("ls -lact --full-time /etc 2>/dev/null | tail -1 | awk '{print $6}'"); + return Platform::trim(result).empty() ? "N/A" : Platform::trim(result); +} + +std::string OSInfo::get_os_serial_number() { + std::string serial = Platform::readFileLine("/sys/class/dmi/id/product_serial"); + if (!serial.empty() && serial != "To Be Filled By O.E.M.") { + return Platform::trim(serial); + } + + serial = Platform::readFileLine("/sys/class/dmi/id/board_serial"); + if (!serial.empty() && serial != "To Be Filled By O.E.M.") { + return Platform::trim(serial); + } + + return "N/A (requires root)"; +} + +std::string OSInfo::get_os_uptime() { + std::string uptimeStr = Platform::readFileLine("/proc/uptime"); + if (uptimeStr.empty()) return "Unknown"; + + double uptime_seconds = std::stod(uptimeStr); + + int days = static_cast(uptime_seconds / 86400); + int hours = static_cast((uptime_seconds - days * 86400) / 3600); + int minutes = static_cast((uptime_seconds - days * 86400 - hours * 3600) / 60); + int seconds = static_cast(uptime_seconds) % 60; + + std::ostringstream ss; + ss << days << ":" + << std::setw(2) << std::setfill('0') << hours << ":" + << std::setw(2) << std::setfill('0') << minutes << ":" + << std::setw(2) << std::setfill('0') << seconds; + return ss.str(); +} + +std::string OSInfo::get_os_kernel_info() { + struct utsname buf; + if (uname(&buf) == 0) { + return std::string(buf.sysname) + " " + buf.release; + } + return "Linux"; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/linux/PerformanceInfoLinux.cpp b/project_binary_fetch/binary_fetch_v1/platform/linux/PerformanceInfoLinux.cpp new file mode 100644 index 0000000..36006f9 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/linux/PerformanceInfoLinux.cpp @@ -0,0 +1,127 @@ +#include "../Platform.h" +#include "../../PerformanceInfo.h" +#include +#include +#include +#include +#include +#include + +struct PerformanceInfo::Impl { + long prev_idle = 0; + long prev_total = 0; + bool first_call = true; +}; + +PerformanceInfo::PerformanceInfo() { + pImpl = new Impl(); +} + +PerformanceInfo::~PerformanceInfo() { + delete pImpl; + pImpl = nullptr; +} + +std::string PerformanceInfo::format_uptime(unsigned long long totalMilliseconds) { + unsigned long long totalSeconds = totalMilliseconds / 1000ULL; + int hours = static_cast(totalSeconds / 3600ULL); + int minutes = static_cast((totalSeconds % 3600ULL) / 60ULL); + int seconds = static_cast(totalSeconds % 60ULL); + return std::to_string(hours) + "h " + std::to_string(minutes) + "m " + std::to_string(seconds) + "s"; +} + +std::string PerformanceInfo::get_system_uptime() { + std::string uptimeStr = Platform::readFileLine("/proc/uptime"); + if (uptimeStr.empty()) return "Unknown"; + + double uptime_seconds = std::stod(uptimeStr); + unsigned long long ms = static_cast(uptime_seconds * 1000); + return format_uptime(ms); +} + +float PerformanceInfo::get_cpu_usage_percent() { + std::string stat = Platform::readFileLine("/proc/stat"); + if (stat.empty()) return 0.0f; + + long user, nice, system, idle, iowait, irq, softirq, steal; + sscanf(stat.c_str(), "cpu %ld %ld %ld %ld %ld %ld %ld %ld", + &user, &nice, &system, &idle, &iowait, &irq, &softirq, &steal); + + long idle_time = idle + iowait; + long total_time = user + nice + system + idle + iowait + irq + softirq + steal; + + if (pImpl->first_call) { + pImpl->prev_idle = idle_time; + pImpl->prev_total = total_time; + pImpl->first_call = false; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + return get_cpu_usage_percent(); + } + + long idle_delta = idle_time - pImpl->prev_idle; + long total_delta = total_time - pImpl->prev_total; + + pImpl->prev_idle = idle_time; + pImpl->prev_total = total_time; + + if (total_delta == 0) return 0.0f; + + return (1.0f - (float)idle_delta / (float)total_delta) * 100.0f; +} + +float PerformanceInfo::get_ram_usage_percent() { + std::string content = Platform::readFile("/proc/meminfo"); + + auto parseKB = [&](const std::string& key) -> long long { + std::string val = Platform::parseValue(content, key); + if (val.empty()) return 0; + return std::stoll(val); + }; + + long long memTotal = parseKB("MemTotal"); + long long memAvailable = parseKB("MemAvailable"); + + if (memAvailable == 0) { + long long memFree = parseKB("MemFree"); + long long buffers = parseKB("Buffers"); + long long cached = parseKB("Cached"); + memAvailable = memFree + buffers + cached; + } + + if (memTotal == 0) return 0.0f; + + long long used = memTotal - memAvailable; + return static_cast((used * 100.0) / memTotal); +} + +float PerformanceInfo::get_disk_usage_percent() { + struct statvfs stat; + if (statvfs("/", &stat) != 0) return 0.0f; + + unsigned long long total = stat.f_blocks * stat.f_frsize; + unsigned long long free = stat.f_bfree * stat.f_frsize; + + if (total == 0) return 0.0f; + + unsigned long long used = total - free; + return static_cast((used * 100.0) / total); +} + +float PerformanceInfo::get_gpu_usage_percent() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits 2>/dev/null"); + if (!result.empty()) { + try { return std::stof(Platform::trim(result)); } + catch (...) {} + } + } + + std::string busyPath = "/sys/class/drm/card0/device/gpu_busy_percent"; + std::string busy = Platform::readFileLine(busyPath); + if (!busy.empty()) { + try { return std::stof(busy); } + catch (...) {} + } + + return 0.0f; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/linux/StorageInfoLinux.cpp b/project_binary_fetch/binary_fetch_v1/platform/linux/StorageInfoLinux.cpp new file mode 100644 index 0000000..653e649 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/linux/StorageInfoLinux.cpp @@ -0,0 +1,195 @@ +#include "../Platform.h" +#include "../../StorageInfo.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static std::set pseudoFS = {"proc", "sysfs", "devtmpfs", "tmpfs", "securityfs", + "cgroup", "cgroup2", "pstore", "debugfs", "hugetlbfs", "mqueue", "fusectl", + "configfs", "devpts", "ramfs", "binfmt_misc", "autofs", "tracefs", "overlay", "squashfs"}; + +static std::string getBlockDevice(const std::string& mountPath) { + FILE* mtab = setmntent("/proc/mounts", "r"); + if (!mtab) return ""; + + struct mntent* ent; + while ((ent = getmntent(mtab)) != nullptr) { + if (std::string(ent->mnt_dir) == mountPath) { + std::string dev = ent->mnt_fsname; + endmntent(mtab); + + if (dev.find("/dev/") == 0) { + std::string base = dev.substr(5); + while (!base.empty() && (std::isdigit(base.back()) || base.back() == 'p')) { + base.pop_back(); + } + return base; + } + return ""; + } + } + endmntent(mtab); + return ""; +} + +std::string StorageInfo::get_storage_type(const std::string&, const std::string& root_path, bool) { + std::string blockDev = getBlockDevice(root_path); + if (blockDev.empty()) return "Unknown"; + + std::string rotPath = "/sys/block/" + blockDev + "/queue/rotational"; + std::string rot = Platform::readFileLine(rotPath); + + if (!rot.empty()) { + if (Platform::trim(rot) == "0") return "SSD"; + if (Platform::trim(rot) == "1") return "HDD"; + } + + if (blockDev.find("nvme") == 0) return "SSD"; + if (blockDev.find("mmcblk") == 0) return "SSD"; + + std::string removePath = "/sys/block/" + blockDev + "/removable"; + std::string removable = Platform::readFileLine(removePath); + if (!removable.empty() && Platform::trim(removable) == "1") return "USB"; + + return "Unknown"; +} + +static double measureSpeed(const std::string& path, bool write) { + const size_t BUF_SIZE = 16 * 1024 * 1024; + std::vector buffer(BUF_SIZE, 'X'); + + std::string testFile = path + "/.binaryfetch_speed_test"; + + if (write) { + auto start = std::chrono::high_resolution_clock::now(); + int fd = open(testFile.c_str(), O_WRONLY | O_CREAT | O_TRUNC | O_SYNC, 0644); + if (fd < 0) return 0.0; + + ssize_t written = ::write(fd, buffer.data(), BUF_SIZE); + fsync(fd); + close(fd); + + auto end = std::chrono::high_resolution_clock::now(); + + if (written <= 0) { + unlink(testFile.c_str()); + return 0.0; + } + + double seconds = std::chrono::duration(end - start).count(); + if (seconds < 0.001) seconds = 0.001; + + return (written / (1024.0 * 1024.0)) / seconds; + } else { + int fd = open(testFile.c_str(), O_RDONLY); + if (fd < 0) return 0.0; + + auto start = std::chrono::high_resolution_clock::now(); + ssize_t bytesRead = read(fd, buffer.data(), BUF_SIZE); + close(fd); + unlink(testFile.c_str()); + + auto end = std::chrono::high_resolution_clock::now(); + + if (bytesRead <= 0) return 0.0; + + double seconds = std::chrono::duration(end - start).count(); + if (seconds < 0.001) seconds = 0.001; + + return (bytesRead / (1024.0 * 1024.0)) / seconds; + } +} + +std::vector StorageInfo::get_all_storage_info() { + std::vector all_disks; + + FILE* mtab = setmntent("/proc/mounts", "r"); + if (!mtab) return all_disks; + + std::set seen; + struct mntent* ent; + + while ((ent = getmntent(mtab)) != nullptr) { + std::string fstype = ent->mnt_type; + std::string device = ent->mnt_fsname; + std::string mountpoint = ent->mnt_dir; + + if (pseudoFS.count(fstype) || device.find("/dev/") != 0) continue; + if (seen.count(device)) continue; + seen.insert(device); + + struct statvfs stat; + if (statvfs(mountpoint.c_str(), &stat) != 0) continue; + + unsigned long long total = stat.f_blocks * stat.f_frsize; + unsigned long long free = stat.f_bfree * stat.f_frsize; + unsigned long long used = total - free; + + if (total < 100 * 1024 * 1024) continue; + + double totalGiB = total / (1024.0 * 1024.0 * 1024.0); + double usedGiB = used / (1024.0 * 1024.0 * 1024.0); + double usedPercent = (total > 0) ? (used * 100.0 / total) : 0.0; + + storage_data disk; + disk.drive_letter = "Disk (" + mountpoint + ")"; + + std::ostringstream usedStr, totalStr, percentStr; + usedStr << std::fixed << std::setprecision(2) << usedGiB; + totalStr << std::fixed << std::setprecision(2) << totalGiB; + percentStr << "(" << static_cast(usedPercent) << "%)"; + + disk.used_space = usedStr.str(); + disk.total_space = totalStr.str(); + disk.used_percentage = percentStr.str(); + disk.file_system = fstype; + disk.storage_type = get_storage_type("", mountpoint, false); + disk.is_external = (disk.storage_type == "USB"); + + double w = measureSpeed(mountpoint, true); + usleep(100000); + double r = measureSpeed(mountpoint, false); + + std::ostringstream readStr, writeStr; + readStr << std::fixed << std::setprecision(2) << r; + writeStr << std::fixed << std::setprecision(2) << w; + disk.read_speed = readStr.str(); + disk.write_speed = writeStr.str(); + + if (disk.storage_type == "USB") { + disk.predicted_read_speed = "100"; + disk.predicted_write_speed = "80"; + } else if (disk.storage_type == "SSD") { + disk.predicted_read_speed = "500"; + disk.predicted_write_speed = "450"; + } else if (disk.storage_type == "HDD") { + disk.predicted_read_speed = "140"; + disk.predicted_write_speed = "120"; + } else { + disk.predicted_read_speed = "---"; + disk.predicted_write_speed = "---"; + } + + disk.serial_number = "N/A"; + + all_disks.push_back(disk); + } + + endmntent(mtab); + return all_disks; +} + +void StorageInfo::process_storage_info(std::function callback) { + auto disks = get_all_storage_info(); + for (const auto& disk : disks) { + callback(disk); + } +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/linux/SystemInfoLinux.cpp b/project_binary_fetch/binary_fetch_v1/platform/linux/SystemInfoLinux.cpp new file mode 100644 index 0000000..3089809 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/linux/SystemInfoLinux.cpp @@ -0,0 +1,41 @@ +#include "../Platform.h" +#include "../../SystemInfo.h" +#include + +static std::string readDMI(const std::string& file) { + std::string path = "/sys/class/dmi/id/" + file; + std::string value = Platform::readFileLine(path); + value = Platform::trim(value); + + if (value.empty() || value == "To Be Filled By O.E.M." || value == "Default string" || value == "Not Specified") { + return "N/A"; + } + return value; +} + +SystemInfo::SystemInfo() {} +SystemInfo::~SystemInfo() {} + +std::string SystemInfo::get_bios_vendor() { + return readDMI("bios_vendor"); +} + +std::string SystemInfo::get_bios_version() { + return readDMI("bios_version"); +} + +std::string SystemInfo::get_bios_date() { + return readDMI("bios_date"); +} + +std::string SystemInfo::get_motherboard_manufacturer() { + return readDMI("board_vendor"); +} + +std::string SystemInfo::get_motherboard_model() { + return readDMI("board_name"); +} + +std::string SystemInfo::read_registry_value(const std::string& /*subkey*/, const std::string& /*valueName*/) { + return ""; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactAudioPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactAudioPosix.cpp new file mode 100644 index 0000000..ec8b780 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactAudioPosix.cpp @@ -0,0 +1,243 @@ +#include "../../CompactAudio.h" +#include "../Platform.h" +#include +#include +#include + +#if PLATFORM_LINUX + +static std::string cachedOutputDevice; +static std::string cachedInputDevice; +static bool devicesCached = false; + +static std::string shortenDeviceName(const std::string& name) { + std::string result = name; + + std::vector removePatterns = { + "Family 17h (Models 00h-0fh) ", + "Family 17h ", + "(Models 00h-0fh) ", + "High Definition Audio Controller ", + "HD Audio Controller ", + "Audio Controller ", + "Controller ", + "(High Definition Audio Device)", + "(High Definition Audio)", + "High Definition Audio Device", + }; + + for (const auto& pattern : removePatterns) { + size_t pos; + while ((pos = result.find(pattern)) != std::string::npos) { + result.erase(pos, pattern.length()); + } + } + + while (!result.empty() && result[0] == ' ') result.erase(0, 1); + while (!result.empty() && result.back() == ' ') result.pop_back(); + + while (result.find(" ") != std::string::npos) { + size_t pos = result.find(" "); + result.erase(pos, 1); + } + + if (result.empty()) result = name; + + return result; +} + +static void cacheAudioDevices() { + if (devicesCached) return; + + if (Platform::commandExists("wpctl")) { + std::string status = Platform::exec("wpctl status 2>/dev/null"); + if (!status.empty()) { + std::istringstream iss(status); + std::string line; + bool inSinks = false; + bool inSources = false; + + while (std::getline(iss, line)) { + if (line.find("Sinks:") != std::string::npos) { + inSinks = true; + inSources = false; + continue; + } + if (line.find("Sources:") != std::string::npos) { + inSinks = false; + inSources = true; + continue; + } + if (line.find("Filters:") != std::string::npos || + line.find("Streams:") != std::string::npos) { + inSinks = false; + inSources = false; + continue; + } + + if ((inSinks || inSources) && line.find("*") != std::string::npos) { + size_t dotPos = line.find('.'); + size_t bracketPos = line.find('['); + if (dotPos != std::string::npos) { + size_t nameEnd = (bracketPos != std::string::npos) ? bracketPos : line.length(); + std::string name = Platform::trim(line.substr(dotPos + 1, nameEnd - dotPos - 1)); + + if (inSinks && cachedOutputDevice.empty()) { + cachedOutputDevice = name; + } else if (inSources && cachedInputDevice.empty()) { + cachedInputDevice = name; + } + } + } + } + } + } + + if ((cachedOutputDevice.empty() || cachedInputDevice.empty()) && Platform::commandExists("pactl")) { + if (cachedOutputDevice.empty()) { + std::string sinkName = Platform::trim(Platform::exec("pactl get-default-sink 2>/dev/null")); + if (!sinkName.empty()) { + std::string info = Platform::exec("pactl list sinks 2>/dev/null | grep -A5 'Name: " + sinkName + "' | grep 'Description:' | head -1"); + if (!info.empty()) { + size_t pos = info.find(':'); + if (pos != std::string::npos) { + cachedOutputDevice = Platform::trim(info.substr(pos + 1)); + } + } + if (cachedOutputDevice.empty()) { + cachedOutputDevice = sinkName; + } + } + } + + if (cachedInputDevice.empty()) { + std::string sourceName = Platform::trim(Platform::exec("pactl get-default-source 2>/dev/null")); + if (!sourceName.empty() && sourceName.find("monitor") == std::string::npos) { + std::string info = Platform::exec("pactl list sources 2>/dev/null | grep -A5 'Name: " + sourceName + "' | grep 'Description:' | head -1"); + if (!info.empty()) { + size_t pos = info.find(':'); + if (pos != std::string::npos) { + cachedInputDevice = Platform::trim(info.substr(pos + 1)); + } + } + if (cachedInputDevice.empty()) { + cachedInputDevice = sourceName; + } + } + } + } + + if ((cachedOutputDevice.empty() || cachedInputDevice.empty()) && Platform::commandExists("aplay")) { + if (cachedOutputDevice.empty()) { + std::string output = Platform::exec("aplay -l 2>/dev/null | grep 'card' | head -1"); + if (!output.empty()) { + size_t bracket = output.find('['); + size_t bracket2 = output.find(']'); + if (bracket != std::string::npos && bracket2 != std::string::npos && bracket2 > bracket) { + cachedOutputDevice = output.substr(bracket + 1, bracket2 - bracket - 1); + } + } + } + + if (cachedInputDevice.empty()) { + std::string output = Platform::exec("arecord -l 2>/dev/null | grep 'card' | head -1"); + if (!output.empty()) { + size_t bracket = output.find('['); + size_t bracket2 = output.find(']'); + if (bracket != std::string::npos && bracket2 != std::string::npos && bracket2 > bracket) { + cachedInputDevice = output.substr(bracket + 1, bracket2 - bracket - 1); + } + } + } + } + + if (cachedOutputDevice.empty()) cachedOutputDevice = "Default Audio Output"; + if (cachedInputDevice.empty()) cachedInputDevice = "Default Audio Input"; + + devicesCached = true; +} + +std::string CompactAudio::active_audio_output() { + cacheAudioDevices(); + return shortenDeviceName(cachedOutputDevice); +} + +std::string CompactAudio::active_audio_output_status() { + cacheAudioDevices(); + return cachedOutputDevice.empty() || cachedOutputDevice == "Default Audio Output" ? "(Unknown)" : "(Active)"; +} + +std::string CompactAudio::active_audio_input() { + cacheAudioDevices(); + return shortenDeviceName(cachedInputDevice); +} + +std::string CompactAudio::active_audio_input_status() { + cacheAudioDevices(); + return cachedInputDevice.empty() || cachedInputDevice == "Default Audio Input" ? "(Unknown)" : "(Active)"; +} + +#elif PLATFORM_FREEBSD + +std::string CompactAudio::active_audio_output() { + std::string sndstat = Platform::readFile("/dev/sndstat"); + if (!sndstat.empty()) { + std::istringstream iss(sndstat); + std::string line; + while (std::getline(iss, line)) { + if (line.find("default") != std::string::npos || + line.find("pcm0") != std::string::npos) { + size_t angleStart = line.find('<'); + size_t angleEnd = line.find('>'); + if (angleStart != std::string::npos && angleEnd != std::string::npos) { + return line.substr(angleStart + 1, angleEnd - angleStart - 1); + } + } + } + } + + if (Platform::commandExists("mixer")) { + std::string result = Platform::exec("mixer -S 2>/dev/null | head -1"); + if (!result.empty()) { + return Platform::trim(result); + } + } + + return "Default Audio Output"; +} + +std::string CompactAudio::active_audio_output_status() { + if (Platform::fileExists("/dev/dsp") || Platform::fileExists("/dev/dsp0")) { + return "(Active)"; + } + return "(Unknown)"; +} + +std::string CompactAudio::active_audio_input() { + std::string sndstat = Platform::readFile("/dev/sndstat"); + if (!sndstat.empty()) { + std::istringstream iss(sndstat); + std::string line; + while (std::getline(iss, line)) { + if (line.find("rec") != std::string::npos || + line.find("input") != std::string::npos) { + size_t angleStart = line.find('<'); + size_t angleEnd = line.find('>'); + if (angleStart != std::string::npos && angleEnd != std::string::npos) { + return line.substr(angleStart + 1, angleEnd - angleStart - 1); + } + } + } + } + + return "Default Audio Input"; +} + +std::string CompactAudio::active_audio_input_status() { + if (Platform::fileExists("/dev/dsp") || Platform::fileExists("/dev/dsp0")) { + return "(Active)"; + } + return "(Unknown)"; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactCPUPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactCPUPosix.cpp new file mode 100644 index 0000000..6571305 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactCPUPosix.cpp @@ -0,0 +1,151 @@ +#include "CompactCPU.h" +#include "platform/Platform.h" +#include +#include +#include +#include + +#if PLATFORM_LINUX + +static long prev_idle = 0; +static long prev_total = 0; +static bool first_call = true; + +std::string CompactCPU::getCPUName() { + std::string content = Platform::readFile("/proc/cpuinfo"); + std::string model = Platform::parseValue(content, "model name"); + return model.empty() ? "Unknown CPU" : model; +} + +std::string CompactCPU::getCPUCores() { + std::string content = Platform::readFile("/proc/cpuinfo"); + std::string cores = Platform::parseValue(content, "cpu cores"); + if (!cores.empty()) { + return cores; + } + int count = 0; + std::istringstream iss(content); + std::string line; + while (std::getline(iss, line)) { + if (line.find("processor") == 0) count++; + } + return std::to_string(count > 0 ? count / 2 : 1); +} + +std::string CompactCPU::getCPUThreads() { + std::string content = Platform::readFile("/proc/cpuinfo"); + int count = 0; + std::istringstream iss(content); + std::string line; + while (std::getline(iss, line)) { + if (line.find("processor") == 0) count++; + } + return std::to_string(count > 0 ? count : 1); +} + +double CompactCPU::getClockSpeed() { + std::string freq = Platform::readFileLine("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"); + if (!freq.empty()) { + return std::stof(freq) / 1000000.0; + } + + std::string content = Platform::readFile("/proc/cpuinfo"); + std::string mhz = Platform::parseValue(content, "cpu MHz"); + if (!mhz.empty()) { + return std::stof(mhz) / 1000.0; + } + return 0.0; +} + +double CompactCPU::getUsagePercent() { + std::string stat = Platform::readFileLine("/proc/stat"); + if (stat.empty()) return 0.0; + + long user, nice, system, idle, iowait, irq, softirq, steal; + sscanf(stat.c_str(), "cpu %ld %ld %ld %ld %ld %ld %ld %ld", + &user, &nice, &system, &idle, &iowait, &irq, &softirq, &steal); + + long idle_time = idle + iowait; + long total_time = user + nice + system + idle + iowait + irq + softirq + steal; + + if (first_call) { + prev_idle = idle_time; + prev_total = total_time; + first_call = false; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + return getUsagePercent(); + } + + long idle_delta = idle_time - prev_idle; + long total_delta = total_time - prev_total; + + prev_idle = idle_time; + prev_total = total_time; + + if (total_delta == 0) return 0.0; + + return (1.0 - (double)idle_delta / (double)total_delta) * 100.0; +} + +#elif PLATFORM_FREEBSD + +static long prev_cp_time[5] = {0}; +static bool first_call = true; + +std::string CompactCPU::getCPUName() { + std::string model = Platform::sysctlString("hw.model"); + return model.empty() ? "Unknown CPU" : model; +} + +std::string CompactCPU::getCPUCores() { + int ncpu = static_cast(Platform::sysctlLong("hw.ncpu")); + return std::to_string(ncpu > 0 ? ncpu : 1); +} + +std::string CompactCPU::getCPUThreads() { + int ncpu = static_cast(Platform::sysctlLong("hw.ncpu")); + return std::to_string(ncpu > 0 ? ncpu : 1); +} + +double CompactCPU::getClockSpeed() { + std::string freq = Platform::exec("sysctl -n dev.cpu.0.freq 2>/dev/null"); + freq = Platform::trim(freq); + if (!freq.empty()) { + try { + return std::stof(freq) / 1000.0; + } catch (...) {} + } + return 0.0; +} + +double CompactCPU::getUsagePercent() { + long cp_time[5]; + size_t len = sizeof(cp_time); + + if (sysctlbyname("kern.cp_time", cp_time, &len, nullptr, 0) != 0) { + return 0.0; + } + + if (first_call) { + memcpy(prev_cp_time, cp_time, sizeof(cp_time)); + first_call = false; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + return getUsagePercent(); + } + + long total_delta = 0; + long idle_delta = 0; + + for (int i = 0; i < 5; i++) { + total_delta += cp_time[i] - prev_cp_time[i]; + } + idle_delta = cp_time[4] - prev_cp_time[4]; + + memcpy(prev_cp_time, cp_time, sizeof(cp_time)); + + if (total_delta == 0) return 0.0; + + return (1.0 - (double)idle_delta / (double)total_delta) * 100.0; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactGPUPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactGPUPosix.cpp new file mode 100644 index 0000000..f121855 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactGPUPosix.cpp @@ -0,0 +1,280 @@ +#include "../../CompactGPU.h" +#include "../Platform.h" +#include +#include +#include +#include +#include + +#if PLATFORM_POSIX + +static std::map pciIdToName = { + // AMD Radeon RX 500 series + {"1002:67df", "AMD Radeon RX 580"}, + {"1002:67ef", "AMD Radeon RX 560"}, + {"1002:67ff", "AMD Radeon RX 560X"}, + {"1002:699f", "AMD Radeon RX 550"}, + // AMD Radeon RX 5000 series (RDNA) + {"1002:731f", "AMD Radeon RX 5700 XT"}, + {"1002:7340", "AMD Radeon RX 5700"}, + {"1002:7341", "AMD Radeon RX 5600 XT"}, + // AMD Radeon RX 6000 series (RDNA 2) + {"1002:73bf", "AMD Radeon RX 6900 XT"}, + {"1002:73af", "AMD Radeon RX 6800 XT"}, + {"1002:73a5", "AMD Radeon RX 6800"}, + {"1002:73df", "AMD Radeon RX 6700 XT"}, + {"1002:73ff", "AMD Radeon RX 6600 XT"}, + {"1002:73e3", "AMD Radeon RX 6600"}, + // AMD Radeon RX 7000 series (RDNA 3) + {"1002:744c", "AMD Radeon RX 7900 XTX"}, + {"1002:7448", "AMD Radeon RX 7900 XT"}, + {"1002:7480", "AMD Radeon RX 7600"}, + {"1002:7483", "AMD Radeon RX 7600 XT"}, + // NVIDIA RTX 40 series + {"10de:2684", "NVIDIA GeForce RTX 4090"}, + {"10de:2702", "NVIDIA GeForce RTX 4080 SUPER"}, + {"10de:2704", "NVIDIA GeForce RTX 4080"}, + {"10de:2782", "NVIDIA GeForce RTX 4070 Ti SUPER"}, + {"10de:2783", "NVIDIA GeForce RTX 4070 Ti"}, + {"10de:2786", "NVIDIA GeForce RTX 4070 SUPER"}, + {"10de:2788", "NVIDIA GeForce RTX 4070"}, + {"10de:27a0", "NVIDIA GeForce RTX 4060 Ti"}, + {"10de:27b0", "NVIDIA GeForce RTX 4060"}, + // NVIDIA RTX 30 series + {"10de:2204", "NVIDIA GeForce RTX 3090"}, + {"10de:2203", "NVIDIA GeForce RTX 3090 Ti"}, + {"10de:2206", "NVIDIA GeForce RTX 3080"}, + {"10de:2208", "NVIDIA GeForce RTX 3080 Ti"}, + {"10de:2216", "NVIDIA GeForce RTX 3070"}, + {"10de:2414", "NVIDIA GeForce RTX 3070 Ti"}, + {"10de:2484", "NVIDIA GeForce RTX 3060"}, + {"10de:2486", "NVIDIA GeForce RTX 3060 Ti"}, + // NVIDIA RTX 20 series + {"10de:1e04", "NVIDIA GeForce RTX 2080 Ti"}, + {"10de:1e07", "NVIDIA GeForce RTX 2080 SUPER"}, + {"10de:1e82", "NVIDIA GeForce RTX 2080"}, + {"10de:1f07", "NVIDIA GeForce RTX 2070 SUPER"}, + {"10de:1f02", "NVIDIA GeForce RTX 2070"}, + {"10de:1f08", "NVIDIA GeForce RTX 2060 SUPER"}, + {"10de:1f47", "NVIDIA GeForce RTX 2060"}, + // NVIDIA GTX 16 series + {"10de:2182", "NVIDIA GeForce GTX 1660 Ti"}, + {"10de:2184", "NVIDIA GeForce GTX 1660 SUPER"}, + {"10de:2187", "NVIDIA GeForce GTX 1650 SUPER"}, + {"10de:1f82", "NVIDIA GeForce GTX 1650"}, + // Intel Arc + {"8086:56a0", "Intel Arc A770"}, + {"8086:56a1", "Intel Arc A750"}, + {"8086:56a5", "Intel Arc A580"}, + {"8086:5690", "Intel Arc A380"}, + // Intel Integrated + {"8086:9a49", "Intel Iris Xe Graphics"}, + {"8086:a7a0", "Intel Raptor Lake-P GT2"}, + {"8086:46a6", "Intel Alder Lake-P GT2"}, +}; + +static std::string getVendorName(const std::string& vendorId) { + if (vendorId == "1002" || vendorId == "0x1002") return "AMD"; + if (vendorId == "10de" || vendorId == "0x10de") return "NVIDIA"; + if (vendorId == "8086" || vendorId == "0x8086") return "Intel"; + return "Unknown"; +} + +static std::string getGPUNameFromSysfs() { + DIR* dir = opendir("/sys/class/drm"); + if (!dir) return ""; + + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + std::string name = entry->d_name; + if (name.find("card") == 0 && name.find("-") == std::string::npos) { + std::string devicePath = "/sys/class/drm/" + name + "/device/"; + std::string uevent = Platform::readFile(devicePath + "uevent"); + + std::string pciId; + std::istringstream iss(uevent); + std::string line; + while (std::getline(iss, line)) { + if (line.find("PCI_ID=") == 0) { + pciId = line.substr(7); + for (char& c : pciId) c = std::tolower(c); + break; + } + } + + if (!pciId.empty()) { + closedir(dir); + + auto it = pciIdToName.find(pciId); + if (it != pciIdToName.end()) { + return it->second; + } + + std::string vendor = getVendorName(pciId.substr(0, 4)); + return vendor + " GPU (" + pciId + ")"; + } + } + } + closedir(dir); + return ""; +} + +static std::string getGPUNameFromLspci() { + std::string output = Platform::exec("lspci 2>/dev/null"); + if (output.empty()) return ""; + + std::istringstream iss(output); + std::string line; + + while (std::getline(iss, line)) { + bool isVGA = line.find("0300") != std::string::npos || + line.find("0302") != std::string::npos || + line.find("0380") != std::string::npos || + line.find("VGA") != std::string::npos || + line.find("3D") != std::string::npos || + line.find("Display") != std::string::npos; + + if (isVGA) { + size_t colonPos = line.rfind(':'); + if (colonPos != std::string::npos && colonPos > 5) { + std::string pciId = Platform::trim(line.substr(colonPos - 9, 9)); + for (char& c : pciId) c = std::tolower(c); + + auto it = pciIdToName.find(pciId); + if (it != pciIdToName.end()) { + return it->second; + } + + std::string vendor = getVendorName(pciId.substr(0, 4)); + return vendor + " GPU"; + } + } + } + + return ""; +} + +std::string CompactGPU::getGPUName() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null | head -1"); + result = Platform::trim(result); + if (!result.empty()) return result; + } + + std::string name = getGPUNameFromSysfs(); + if (!name.empty()) return name; + + name = getGPUNameFromLspci(); + if (!name.empty()) return name; + + return "Unknown GPU"; +} + +int CompactGPU::getGPUUsagePercent() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits 2>/dev/null | head -1"); + result = Platform::trim(result); + if (!result.empty()) { + try { return std::stoi(result); } + catch (...) {} + } + } + + DIR* dir = opendir("/sys/class/drm"); + if (dir) { + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + std::string name = entry->d_name; + if (name.find("card") == 0 && name.find("-") == std::string::npos) { + std::string busyPath = "/sys/class/drm/" + name + "/device/gpu_busy_percent"; + std::string busy = Platform::readFileLine(busyPath); + if (!busy.empty()) { + closedir(dir); + try { return std::stoi(Platform::trim(busy)); } + catch (...) {} + } + } + } + closedir(dir); + } + + return 0; +} + +double CompactGPU::getVRAMGB() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits 2>/dev/null | head -1"); + result = Platform::trim(result); + if (!result.empty()) { + try { + float memMB = std::stof(result); + return memMB / 1024.0; + } catch (...) {} + } + } + + DIR* dir = opendir("/sys/class/drm"); + if (dir) { + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + std::string name = entry->d_name; + if (name.find("card") == 0 && name.find("-") == std::string::npos) { + std::string memPath = "/sys/class/drm/" + name + "/device/mem_info_vram_total"; + std::string memInfo = Platform::readFileLine(memPath); + if (!memInfo.empty()) { + closedir(dir); + try { + unsigned long long bytes = std::stoull(memInfo); + return bytes / (1024.0 * 1024.0 * 1024.0); + } catch (...) {} + } + } + } + closedir(dir); + } + + return 0.0; +} + +std::string CompactGPU::getGPUFrequency() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=clocks.gr --format=csv,noheader,nounits 2>/dev/null | head -1"); + result = Platform::trim(result); + if (!result.empty()) { + return result + " MHz"; + } + } + + DIR* dir = opendir("/sys/class/drm"); + if (dir) { + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + std::string name = entry->d_name; + if (name.find("card") == 0 && name.find("-") == std::string::npos) { + std::string freqPath = "/sys/class/drm/" + name + "/device/pp_dpm_sclk"; + std::string freq = Platform::readFile(freqPath); + if (!freq.empty()) { + std::istringstream iss(freq); + std::string line; + while (std::getline(iss, line)) { + if (line.find('*') != std::string::npos) { + size_t colonPos = line.find(':'); + size_t mhzPos = line.find("Mhz"); + if (mhzPos == std::string::npos) mhzPos = line.find("MHz"); + if (colonPos != std::string::npos && mhzPos != std::string::npos) { + std::string clockStr = Platform::trim(line.substr(colonPos + 1, mhzPos - colonPos - 1)); + closedir(dir); + return clockStr + " MHz"; + } + } + } + } + } + } + closedir(dir); + } + + return "N/A"; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactMemoryPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactMemoryPosix.cpp new file mode 100644 index 0000000..d3f6dfd --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactMemoryPosix.cpp @@ -0,0 +1,131 @@ +#include "CompactMemory.h" +#include "platform/Platform.h" +#include + +#if PLATFORM_LINUX + +double CompactMemory::get_total_memory() { + std::string content = Platform::readFile("/proc/meminfo"); + std::string val = Platform::parseValue(content, "MemTotal"); + if (!val.empty()) { + long long kb = std::stoll(val); + return static_cast(kb) / (1024.0 * 1024.0); + } + return 0.0; +} + +double CompactMemory::get_free_memory() { + std::string content = Platform::readFile("/proc/meminfo"); + + std::string available = Platform::parseValue(content, "MemAvailable"); + if (!available.empty()) { + long long kb = std::stoll(available); + return static_cast(kb) / (1024.0 * 1024.0); + } + + long long memFree = 0, buffers = 0, cached = 0; + std::string val = Platform::parseValue(content, "MemFree"); + if (!val.empty()) memFree = std::stoll(val); + val = Platform::parseValue(content, "Buffers"); + if (!val.empty()) buffers = std::stoll(val); + val = Platform::parseValue(content, "Cached"); + if (!val.empty()) cached = std::stoll(val); + + long long freeKb = memFree + buffers + cached; + return static_cast(freeKb) / (1024.0 * 1024.0); +} + +double CompactMemory::get_used_memory_percent() { + std::string content = Platform::readFile("/proc/meminfo"); + + long long memTotal = 0, memAvailable = 0; + std::string val = Platform::parseValue(content, "MemTotal"); + if (!val.empty()) memTotal = std::stoll(val); + + val = Platform::parseValue(content, "MemAvailable"); + if (!val.empty()) { + memAvailable = std::stoll(val); + } else { + long long memFree = 0, buffers = 0, cached = 0; + val = Platform::parseValue(content, "MemFree"); + if (!val.empty()) memFree = std::stoll(val); + val = Platform::parseValue(content, "Buffers"); + if (!val.empty()) buffers = std::stoll(val); + val = Platform::parseValue(content, "Cached"); + if (!val.empty()) cached = std::stoll(val); + memAvailable = memFree + buffers + cached; + } + + if (memTotal == 0) return 0.0; + long long used = memTotal - memAvailable; + return static_cast(used * 100) / static_cast(memTotal); +} + +int CompactMemory::memory_slot_used() { + if (Platform::commandExists("dmidecode")) { + std::string result = Platform::exec("sudo dmidecode -t memory 2>/dev/null | grep -c 'Size:.*MB\\|Size:.*GB' || echo 0"); + result = Platform::trim(result); + if (!result.empty()) { + try { return std::stoi(result); } + catch (...) {} + } + } + return 0; +} + +int CompactMemory::memory_slot_available() { + if (Platform::commandExists("dmidecode")) { + std::string result = Platform::exec("sudo dmidecode -t memory 2>/dev/null | grep -c 'Size:' || echo 0"); + result = Platform::trim(result); + if (!result.empty()) { + try { return std::stoi(result); } + catch (...) {} + } + } + return 0; +} + +#elif PLATFORM_FREEBSD + +double CompactMemory::get_total_memory() { + unsigned long physmem = Platform::sysctlULong("hw.physmem"); + return static_cast(physmem) / (1024.0 * 1024.0 * 1024.0); +} + +double CompactMemory::get_free_memory() { + unsigned long pagesize = Platform::sysctlULong("hw.pagesize"); + if (pagesize == 0) pagesize = 4096; + + unsigned long free_count = Platform::sysctlULong("vm.stats.vm.v_free_count"); + unsigned long inactive = Platform::sysctlULong("vm.stats.vm.v_inactive_count"); + unsigned long cache = Platform::sysctlULong("vm.stats.vm.v_cache_count"); + + unsigned long available = (free_count + inactive + cache) * pagesize; + return static_cast(available) / (1024.0 * 1024.0 * 1024.0); +} + +double CompactMemory::get_used_memory_percent() { + unsigned long physmem = Platform::sysctlULong("hw.physmem"); + unsigned long pagesize = Platform::sysctlULong("hw.pagesize"); + if (pagesize == 0) pagesize = 4096; + + unsigned long free_count = Platform::sysctlULong("vm.stats.vm.v_free_count"); + unsigned long inactive = Platform::sysctlULong("vm.stats.vm.v_inactive_count"); + unsigned long cache = Platform::sysctlULong("vm.stats.vm.v_cache_count"); + + unsigned long available = (free_count + inactive + cache) * pagesize; + + if (physmem == 0) return 0.0; + unsigned long used = physmem - available; + return static_cast(used * 100) / static_cast(physmem); +} + +int CompactMemory::memory_slot_used() { + return 0; +} + +int CompactMemory::memory_slot_available() { + return 0; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactNetworkPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactNetworkPosix.cpp new file mode 100644 index 0000000..5df1c19 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactNetworkPosix.cpp @@ -0,0 +1,107 @@ +#include "CompactNetwork.h" +#include "platform/Platform.h" +#include +#include +#include +#include +#include + +#if PLATFORM_POSIX + +std::string CompactNetwork::get_wifi_ssid() { + if (Platform::commandExists("iwgetid")) { + std::string ssid = Platform::exec("iwgetid -r 2>/dev/null"); + ssid = Platform::trim(ssid); + if (!ssid.empty()) return ssid; + } + + if (Platform::commandExists("nmcli")) { + std::string result = Platform::exec("nmcli -t -f active,ssid dev wifi 2>/dev/null | grep '^yes'"); + if (!result.empty()) { + size_t colonPos = result.find(':'); + if (colonPos != std::string::npos) { + return Platform::trim(result.substr(colonPos + 1)); + } + } + } + + return ""; +} + +std::string CompactNetwork::get_ethernet_name() { + struct ifaddrs* ifaddr = nullptr; + if (getifaddrs(&ifaddr) == -1) return "Ethernet"; + + std::string result = "Ethernet"; + for (struct ifaddrs* ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) continue; + if (ifa->ifa_addr->sa_family != AF_INET) continue; + if (!(ifa->ifa_flags & IFF_UP)) continue; + if (ifa->ifa_flags & IFF_LOOPBACK) continue; + + std::string name = ifa->ifa_name; + if (name.find("eth") == 0 || name.find("en") == 0) { + result = name; + break; + } + } + + freeifaddrs(ifaddr); + return result; +} + +std::string CompactNetwork::get_network_name() { + std::string ssid = get_wifi_ssid(); + if (!ssid.empty()) return ssid; + return get_ethernet_name(); +} + +std::string CompactNetwork::get_network_type() { + struct ifaddrs* ifaddr = nullptr; + if (getifaddrs(&ifaddr) == -1) return "Unknown"; + + std::string type = "Unknown"; + for (struct ifaddrs* ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) continue; + if (ifa->ifa_addr->sa_family != AF_INET) continue; + if (!(ifa->ifa_flags & IFF_UP)) continue; + if (ifa->ifa_flags & IFF_LOOPBACK) continue; + + std::string name = ifa->ifa_name; + if (name.find("wl") == 0 || name.find("wlan") == 0) { + type = "WiFi"; + break; + } + if (name.find("eth") == 0 || name.find("en") == 0) { + type = "Ethernet"; + } + } + + freeifaddrs(ifaddr); + return type; +} + +std::string CompactNetwork::get_network_ip() { + struct ifaddrs* ifaddr = nullptr; + if (getifaddrs(&ifaddr) == -1) return "Unknown"; + + std::string ip = "Unknown"; + for (struct ifaddrs* ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) continue; + if (ifa->ifa_addr->sa_family != AF_INET) continue; + if (!(ifa->ifa_flags & IFF_UP)) continue; + if (ifa->ifa_flags & IFF_LOOPBACK) continue; + + char addrBuf[INET_ADDRSTRLEN]; + struct sockaddr_in* addr = reinterpret_cast(ifa->ifa_addr); + if (inet_ntop(AF_INET, &addr->sin_addr, addrBuf, sizeof(addrBuf))) { + ip = addrBuf; + break; + } + } + + freeifaddrs(ifaddr); + return ip; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactOSPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactOSPosix.cpp new file mode 100644 index 0000000..01f1462 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactOSPosix.cpp @@ -0,0 +1,112 @@ +#include "CompactOS.h" +#include "platform/Platform.h" +#include +#include + +#if PLATFORM_LINUX + +std::string CompactOS::getOSName() { + std::string content = Platform::readFile("/etc/os-release"); + std::string name = Platform::parseValue(content, "PRETTY_NAME", '='); + name.erase(std::remove(name.begin(), name.end(), '"'), name.end()); + + if (name.empty()) { + name = Platform::parseValue(content, "NAME", '='); + name.erase(std::remove(name.begin(), name.end(), '"'), name.end()); + } + + return name.empty() ? "Linux" : name; +} + +std::string CompactOS::getOSBuild() { + struct utsname buf; + if (uname(&buf) == 0) { + return std::string(buf.release); + } + return "Unknown"; +} + +std::string CompactOS::getUptime() { + std::string uptimeStr = Platform::readFileLine("/proc/uptime"); + if (uptimeStr.empty()) return "Unknown"; + + double uptime_seconds = std::stod(uptimeStr); + int days = static_cast(uptime_seconds / 86400); + int hours = static_cast((uptime_seconds - days * 86400) / 3600); + int minutes = static_cast((uptime_seconds - days * 86400 - hours * 3600) / 60); + + std::ostringstream oss; + if (days > 0) oss << days << "d "; + if (hours > 0) oss << hours << "h "; + oss << minutes << "m"; + return oss.str(); +} + +std::string CompactOS::getArchitecture() { + struct utsname buf; + if (uname(&buf) == 0) { + std::string machine = buf.machine; + if (machine == "x86_64" || machine == "amd64") return "64-bit"; + if (machine == "i386" || machine == "i686") return "32-bit"; + if (machine == "aarch64") return "ARM64"; + if (machine == "armv7l") return "ARM32"; + return machine; + } + return "Unknown"; +} + +#elif PLATFORM_FREEBSD + +std::string CompactOS::getOSName() { + std::string ostype = Platform::sysctlString("kern.ostype"); + std::string release = Platform::sysctlString("kern.osrelease"); + + if (!ostype.empty()) { + size_t dash = release.find('-'); + if (dash != std::string::npos) { + release = release.substr(0, dash); + } + return ostype + " " + release; + } + return "FreeBSD"; +} + +std::string CompactOS::getOSBuild() { + std::string release = Platform::sysctlString("kern.osrelease"); + return release.empty() ? "Unknown" : release; +} + +std::string CompactOS::getUptime() { + struct timeval boottime; + size_t len = sizeof(boottime); + int mib[2] = {CTL_KERN, KERN_BOOTTIME}; + + if (sysctl(mib, 2, &boottime, &len, nullptr, 0) == 0) { + time_t now = time(nullptr); + time_t uptime_seconds = now - boottime.tv_sec; + + int days = static_cast(uptime_seconds / 86400); + int hours = static_cast((uptime_seconds % 86400) / 3600); + int minutes = static_cast((uptime_seconds % 3600) / 60); + + std::ostringstream oss; + if (days > 0) oss << days << "d "; + if (hours > 0) oss << hours << "h "; + oss << minutes << "m"; + return oss.str(); + } + return "Unknown"; +} + +std::string CompactOS::getArchitecture() { + std::string arch = Platform::sysctlString("hw.machine_arch"); + if (!arch.empty()) { + if (arch == "amd64" || arch == "x86_64") return "64-bit"; + if (arch == "i386" || arch == "i686") return "32-bit"; + if (arch == "aarch64" || arch == "arm64") return "ARM64"; + return arch; + } + return "Unknown"; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactPerformancePosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactPerformancePosix.cpp new file mode 100644 index 0000000..d0899fd --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactPerformancePosix.cpp @@ -0,0 +1,171 @@ +#include "CompactPerformance.h" +#include "platform/Platform.h" +#include +#include +#include +#include +#include + +#if PLATFORM_LINUX + +static long prev_idle = 0; +static long prev_total = 0; +static bool cpu_first_call = true; + +int CompactPerformance::getCPUUsage() { + std::string stat = Platform::readFileLine("/proc/stat"); + if (stat.empty()) return 0; + + long user, nice, system, idle, iowait, irq, softirq, steal; + if (sscanf(stat.c_str(), "cpu %ld %ld %ld %ld %ld %ld %ld %ld", + &user, &nice, &system, &idle, &iowait, &irq, &softirq, &steal) != 8) { + return 0; + } + + long idle_time = idle + iowait; + long total_time = user + nice + system + idle + iowait + irq + softirq + steal; + + if (cpu_first_call) { + prev_idle = idle_time; + prev_total = total_time; + cpu_first_call = false; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + return getCPUUsage(); + } + + long idle_delta = idle_time - prev_idle; + long total_delta = total_time - prev_total; + + prev_idle = idle_time; + prev_total = total_time; + + if (total_delta == 0) return 0; + return static_cast((1.0 - static_cast(idle_delta) / total_delta) * 100.0); +} + +int CompactPerformance::getRAMUsage() { + std::string content = Platform::readFile("/proc/meminfo"); + + long long memTotal = 0, memAvailable = 0; + std::string val = Platform::parseValue(content, "MemTotal"); + if (!val.empty()) memTotal = std::stoll(val); + + val = Platform::parseValue(content, "MemAvailable"); + if (!val.empty()) { + memAvailable = std::stoll(val); + } else { + long long memFree = 0, buffers = 0, cached = 0; + val = Platform::parseValue(content, "MemFree"); + if (!val.empty()) memFree = std::stoll(val); + val = Platform::parseValue(content, "Buffers"); + if (!val.empty()) buffers = std::stoll(val); + val = Platform::parseValue(content, "Cached"); + if (!val.empty()) cached = std::stoll(val); + memAvailable = memFree + buffers + cached; + } + + if (memTotal == 0) return 0; + return static_cast(((memTotal - memAvailable) * 100) / memTotal); +} + +int CompactPerformance::getDiskUsage() { + struct statvfs stat; + if (statvfs("/", &stat) != 0) return 0; + + unsigned long long total = stat.f_blocks * stat.f_frsize; + unsigned long long available = stat.f_bavail * stat.f_frsize; + + if (total == 0) return 0; + return static_cast(((total - available) * 100) / total); +} + +int CompactPerformance::getGPUUsage() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits 2>/dev/null | head -1"); + result = Platform::trim(result); + if (!result.empty()) { + try { return std::stoi(result); } + catch (...) {} + } + } + + std::string busy = Platform::readFileLine("/sys/class/drm/card0/device/gpu_busy_percent"); + if (!busy.empty()) { + try { return std::stoi(Platform::trim(busy)); } + catch (...) {} + } + + return 0; +} + +#elif PLATFORM_FREEBSD + +static long prev_cp_time[5] = {0}; +static bool cpu_first_call = true; + +int CompactPerformance::getCPUUsage() { + long cp_time[5]; + size_t len = sizeof(cp_time); + + if (sysctlbyname("kern.cp_time", cp_time, &len, nullptr, 0) != 0) { + return 0; + } + + if (cpu_first_call) { + memcpy(prev_cp_time, cp_time, sizeof(cp_time)); + cpu_first_call = false; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + return getCPUUsage(); + } + + long total_delta = 0; + for (int i = 0; i < 5; i++) { + total_delta += cp_time[i] - prev_cp_time[i]; + } + long idle_delta = cp_time[4] - prev_cp_time[4]; + + memcpy(prev_cp_time, cp_time, sizeof(cp_time)); + + if (total_delta == 0) return 0; + return static_cast((1.0 - static_cast(idle_delta) / total_delta) * 100.0); +} + +int CompactPerformance::getRAMUsage() { + unsigned long physmem = Platform::sysctlULong("hw.physmem"); + unsigned long pagesize = Platform::sysctlULong("hw.pagesize"); + if (pagesize == 0) pagesize = 4096; + + unsigned long free_count = Platform::sysctlULong("vm.stats.vm.v_free_count"); + unsigned long inactive = Platform::sysctlULong("vm.stats.vm.v_inactive_count"); + unsigned long cache = Platform::sysctlULong("vm.stats.vm.v_cache_count"); + + unsigned long available = (free_count + inactive + cache) * pagesize; + + if (physmem == 0) return 0; + return static_cast(((physmem - available) * 100) / physmem); +} + +int CompactPerformance::getDiskUsage() { + struct statvfs stat; + if (statvfs("/", &stat) != 0) return 0; + + unsigned long long total = stat.f_blocks * stat.f_frsize; + unsigned long long available = stat.f_bavail * stat.f_frsize; + + if (total == 0) return 0; + return static_cast(((total - available) * 100) / total); +} + +int CompactPerformance::getGPUUsage() { + if (Platform::commandExists("nvidia-smi")) { + std::string result = Platform::exec("nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits 2>/dev/null | head -1"); + result = Platform::trim(result); + if (!result.empty()) { + try { return std::stoi(result); } + catch (...) {} + } + } + return 0; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactScreenPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactScreenPosix.cpp new file mode 100644 index 0000000..65c81bd --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactScreenPosix.cpp @@ -0,0 +1,184 @@ +#include "../../CompactScreen.h" +#include "../Platform.h" +#include +#include +#include +#include +#include + +#if PLATFORM_POSIX + +CompactScreen::CompactScreen() { + refresh(); +} + +bool CompactScreen::refresh() { + screens.clear(); + return populateFromXrandr() || populateFromDRM(); +} + +bool CompactScreen::isNvidiaPresent() { + return Platform::commandExists("nvidia-smi"); +} + +bool CompactScreen::isAMDPresent() { + std::string vendor = Platform::readFileLine("/sys/class/drm/card0/device/vendor"); + return vendor.find("1002") != std::string::npos; +} + +std::string CompactScreen::scaleMultiplier(int scalePercent) { + if (scalePercent <= 100) return "1x"; + if (scalePercent <= 125) return "1.25x"; + if (scalePercent <= 150) return "1.5x"; + if (scalePercent <= 175) return "1.75x"; + if (scalePercent <= 200) return "2x"; + return std::to_string(scalePercent / 100) + "x"; +} + +int CompactScreen::computeUpscaleFactor(int currentWidth, int nativeWidth) { + if (nativeWidth <= 0 || currentWidth <= nativeWidth) return 1; + return currentWidth / nativeWidth; +} + +bool CompactScreen::populateFromXrandr() { + if (!Platform::commandExists("xrandr")) return false; + + std::string output = Platform::exec("xrandr --query 2>/dev/null"); + if (output.empty()) return false; + + std::istringstream iss(output); + std::string line; + ScreenInfo current; + bool hasScreen = false; + + while (std::getline(iss, line)) { + if (line.find(" connected") != std::string::npos) { + if (hasScreen && current.current_width > 0) { + screens.push_back(current); + } + current = ScreenInfo(); + hasScreen = true; + + size_t pos = line.find(" connected"); + if (pos != std::string::npos) { + current.name = Platform::trim(line.substr(0, pos)); + } + + int w = 0, h = 0, offX = 0, offY = 0; + size_t resStart = line.find(" connected"); + if (resStart != std::string::npos) { + std::string rest = line.substr(resStart + 10); + if (rest.find("primary") == 0) { + rest = rest.substr(7); + } + rest = Platform::trim(rest); + + if (sscanf(rest.c_str(), "%dx%d+%d+%d", &w, &h, &offX, &offY) >= 2) { + current.current_width = w; + current.current_height = h; + current.native_width = w; + current.native_height = h; + } + } + + current.scale_percent = 100; + current.scale_mul = "1x"; + current.upscale = "Off"; + current.refresh_rate = 60; + } + else if (hasScreen && line.find("*") != std::string::npos) { + std::string trimmed = Platform::trim(line); + size_t starPos = trimmed.find('*'); + if (starPos != std::string::npos && starPos > 0) { + size_t hzEnd = starPos; + size_t hzStart = hzEnd; + while (hzStart > 0 && (std::isdigit(trimmed[hzStart-1]) || trimmed[hzStart-1] == '.')) { + hzStart--; + } + + if (hzStart < hzEnd) { + std::string hzStr = trimmed.substr(hzStart, hzEnd - hzStart); + try { + current.refresh_rate = static_cast(std::round(std::stof(hzStr))); + } catch (...) { + current.refresh_rate = 60; + } + } + } + } + } + + if (hasScreen && current.current_width > 0) { + screens.push_back(current); + } + + return !screens.empty(); +} + +bool CompactScreen::populateFromDRM() { + DIR* dir = opendir("/sys/class/drm"); + if (!dir) return false; + + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + std::string name = entry->d_name; + if (name.find("card") == 0 && name.find("-") != std::string::npos) { + std::string statusPath = "/sys/class/drm/" + name + "/status"; + std::string status = Platform::readFileLine(statusPath); + if (Platform::trim(status) == "connected") { + ScreenInfo info; + info.name = name; + + std::string modesPath = "/sys/class/drm/" + name + "/modes"; + std::string modes = Platform::readFileLine(modesPath); + if (!modes.empty()) { + int w = 0, h = 0; + if (sscanf(modes.c_str(), "%dx%d", &w, &h) == 2) { + info.current_width = w; + info.current_height = h; + info.native_width = w; + info.native_height = h; + } + } + + info.refresh_rate = 60; + info.scale_percent = 100; + info.scale_mul = "1x"; + info.upscale = "Off"; + + screens.push_back(info); + } + } + } + closedir(dir); + + return !screens.empty(); +} + +CompactScreen::EDIDInfo CompactScreen::parseEDID(const unsigned char* edid, size_t size) { + EDIDInfo info = {"Unknown", 0, 0, false}; + if (!edid || size < 128) return info; + if (edid[0] != 0x00 || edid[1] != 0xFF || edid[2] != 0xFF) return info; + + for (int i = 54; i <= 108; i += 18) { + if (edid[i] == 0 && edid[i+1] == 0 && edid[i+3] == 0xFC) { + char name[14] = {0}; + memcpy(name, &edid[i+5], 13); + for (int j = 0; j < 13; j++) { + if (name[j] == '\n' || name[j] == '\r') name[j] = '\0'; + } + info.friendlyName = Platform::trim(std::string(name)); + break; + } + } + + if (edid[56] && edid[59]) { + info.nativeWidth = ((edid[58] & 0xF0) << 4) | edid[56]; + info.nativeHeight = ((edid[61] & 0xF0) << 4) | edid[59]; + } + + info.valid = true; + return info; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactSystemPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactSystemPosix.cpp new file mode 100644 index 0000000..9cbdff3 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactSystemPosix.cpp @@ -0,0 +1,91 @@ +#include "CompactSystem.h" +#include "platform/Platform.h" + +#if PLATFORM_LINUX + +std::string CompactSystem::getBIOSInfo() { + std::string vendor = Platform::readFileLine("/sys/class/dmi/id/bios_vendor"); + std::string version = Platform::readFileLine("/sys/class/dmi/id/bios_version"); + + vendor = Platform::trim(vendor); + version = Platform::trim(version); + + if (!vendor.empty() && !version.empty()) { + return vendor + " " + version; + } + if (!vendor.empty()) return vendor; + if (!version.empty()) return version; + + if (Platform::commandExists("dmidecode")) { + std::string result = Platform::exec("sudo dmidecode -s bios-vendor 2>/dev/null"); + result = Platform::trim(result); + if (!result.empty()) { + std::string ver = Platform::exec("sudo dmidecode -s bios-version 2>/dev/null"); + ver = Platform::trim(ver); + if (!ver.empty()) result += " " + ver; + return result; + } + } + + return "Unknown"; +} + +std::string CompactSystem::getMotherboardInfo() { + std::string product = Platform::readFileLine("/sys/class/dmi/id/board_name"); + std::string vendor = Platform::readFileLine("/sys/class/dmi/id/board_vendor"); + + product = Platform::trim(product); + vendor = Platform::trim(vendor); + + if (!product.empty() && !vendor.empty()) { + return vendor + " " + product; + } + if (!product.empty()) return product; + if (!vendor.empty()) return vendor; + + if (Platform::commandExists("dmidecode")) { + std::string result = Platform::exec("sudo dmidecode -s baseboard-product-name 2>/dev/null"); + result = Platform::trim(result); + if (!result.empty()) return result; + } + + return "Unknown"; +} + +#elif PLATFORM_FREEBSD + +std::string CompactSystem::getBIOSInfo() { + if (Platform::commandExists("kenv")) { + std::string vendor = Platform::exec("kenv smbios.bios.vendor 2>/dev/null"); + std::string version = Platform::exec("kenv smbios.bios.version 2>/dev/null"); + + vendor = Platform::trim(vendor); + version = Platform::trim(version); + + if (!vendor.empty() && !version.empty()) { + return vendor + " " + version; + } + if (!vendor.empty()) return vendor; + if (!version.empty()) return version; + } + return "Unknown"; +} + +std::string CompactSystem::getMotherboardInfo() { + if (Platform::commandExists("kenv")) { + std::string product = Platform::exec("kenv smbios.planar.product 2>/dev/null"); + std::string maker = Platform::exec("kenv smbios.planar.maker 2>/dev/null"); + + product = Platform::trim(product); + maker = Platform::trim(maker); + + if (!product.empty() && !maker.empty()) { + return maker + " " + product; + } + if (!product.empty()) return product; + if (!maker.empty()) return maker; + } + return "Unknown"; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/CompactUserPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactUserPosix.cpp new file mode 100644 index 0000000..e59d880 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/CompactUserPosix.cpp @@ -0,0 +1,46 @@ +#include "CompactUser.h" +#include "platform/Platform.h" +#include +#include +#include + +#if PLATFORM_POSIX + +std::string CompactUser::getUsername() { + struct passwd* pw = getpwuid(getuid()); + if (pw && pw->pw_name) { + return std::string(pw->pw_name); + } + + const char* user = getenv("USER"); + if (user) return std::string(user); + + return "Unknown"; +} + +std::string CompactUser::getDomain() { + char hostname[HOST_NAME_MAX + 1] = {0}; + if (gethostname(hostname, sizeof(hostname) - 1) == 0) { + return std::string(hostname); + } + return "localhost"; +} + +std::string CompactUser::isAdmin() { + if (getuid() == 0 || geteuid() == 0) { + return "Root"; + } + + if (Platform::commandExists("sudo")) { + std::string groups = Platform::exec("groups 2>/dev/null"); + if (groups.find("sudo") != std::string::npos || + groups.find("wheel") != std::string::npos || + groups.find("admin") != std::string::npos) { + return "Sudoer"; + } + } + + return "User"; +} + +#endif diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/ConsoleUtilsPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/ConsoleUtilsPosix.cpp new file mode 100644 index 0000000..4262608 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/ConsoleUtilsPosix.cpp @@ -0,0 +1 @@ +// POSIX uses ANSI escape codes for console formatting - no special implementation needed diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/DetailedGPUInfoPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/DetailedGPUInfoPosix.cpp new file mode 100644 index 0000000..321f7a9 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/DetailedGPUInfoPosix.cpp @@ -0,0 +1,188 @@ +#include "../Platform.h" +#include "../../DetailedGPUInfo.h" +#include +#include +#include +#include + +using namespace std; +using namespace Platform; + +DetailedGPUInfo::DetailedGPUInfo() {} +DetailedGPUInfo::~DetailedGPUInfo() {} + +static vector get_nvidia_gpus() { + vector gpus; + + if (!commandExists("nvidia-smi")) { + return gpus; + } + + string output = exec("nvidia-smi --query-gpu=index,name,memory.total,clocks.gr --format=csv,noheader,nounits 2>/dev/null"); + if (output.empty()) return gpus; + + istringstream iss(output); + string line; + + while (getline(iss, line)) { + if (line.empty()) continue; + + vector parts = split(line, ','); + if (parts.size() < 3) continue; + + GPUData gpu; + + try { + gpu.index = stoi(trim(parts[0])); + } catch (...) { + gpu.index = static_cast(gpus.size()); + } + + gpu.name = trim(parts[1]); + + try { + float vramMiB = stof(trim(parts[2])); + gpu.vram_gb = vramMiB / 1024.0f; + } catch (...) { + gpu.vram_gb = 0.0f; + } + + if (parts.size() >= 4) { + try { + float clockMHz = stof(trim(parts[3])); + gpu.frequency_ghz = clockMHz / 1000.0f; + } catch (...) { + gpu.frequency_ghz = 0.0f; + } + } else { + gpu.frequency_ghz = 0.0f; + } + + gpus.push_back(gpu); + } + + return gpus; +} + +static vector get_lspci_gpus() { + vector gpus; + + if (!commandExists("lspci")) { + return gpus; + } + + string output = exec("lspci -nn 2>/dev/null | grep -iE 'VGA|3D|Display' 2>/dev/null"); + if (output.empty()) return gpus; + + istringstream iss(output); + string line; + int index = 0; + + while (getline(iss, line)) { + if (line.empty()) continue; + + GPUData gpu; + gpu.index = index++; + + size_t colonPos = line.find("]: "); + size_t bracketPos = line.rfind(" ["); + + if (colonPos != string::npos && bracketPos != string::npos && bracketPos > colonPos) { + gpu.name = trim(line.substr(colonPos + 3, bracketPos - colonPos - 3)); + } else if (colonPos != string::npos) { + gpu.name = trim(line.substr(colonPos + 3)); + } else { + gpu.name = trim(line); + } + + gpu.vram_gb = 0.0f; + gpu.frequency_ghz = 0.0f; + + gpus.push_back(gpu); + } + + return gpus; +} + +static void enrich_from_sysfs(vector& gpus) { + const string drmPath = "/sys/class/drm/"; + + DIR* dir = opendir(drmPath.c_str()); + if (!dir) return; + + struct dirent* entry; + int cardIndex = 0; + + while ((entry = readdir(dir)) != nullptr) { + string name = entry->d_name; + + if (name.find("card") != 0 || name.find('-') != string::npos) continue; + + string cardPath = drmPath + name + "/device/"; + + string vramStr = trim(readFile(cardPath + "mem_info_vram_total")); + if (!vramStr.empty() && cardIndex < static_cast(gpus.size())) { + try { + unsigned long long vramBytes = stoull(vramStr); + gpus[cardIndex].vram_gb = static_cast(vramBytes) / (1024.0f * 1024.0f * 1024.0f); + } catch (...) {} + } + + string ppDpmSclk = trim(readFile(cardPath + "pp_dpm_sclk")); + if (!ppDpmSclk.empty() && cardIndex < static_cast(gpus.size())) { + istringstream iss(ppDpmSclk); + string line; + while (getline(iss, line)) { + if (line.find('*') != string::npos) { + size_t mhzPos = line.find("Mhz"); + if (mhzPos == string::npos) mhzPos = line.find("MHz"); + if (mhzPos != string::npos) { + size_t colonPos = line.find(':'); + if (colonPos != string::npos) { + string clockStr = trim(line.substr(colonPos + 1, mhzPos - colonPos - 1)); + try { + float clockMHz = stof(clockStr); + gpus[cardIndex].frequency_ghz = clockMHz / 1000.0f; + } catch (...) {} + } + } + break; + } + } + } + + cardIndex++; + } + + closedir(dir); +} + +vector DetailedGPUInfo::get_all_gpus() { + vector gpus = get_nvidia_gpus(); + + if (gpus.empty()) { + gpus = get_lspci_gpus(); + } + + enrich_from_sysfs(gpus); + + if (gpus.empty()) { + GPUData gpu; + gpu.index = 0; + gpu.name = "Unknown GPU"; + gpu.vram_gb = 0.0f; + gpu.frequency_ghz = 0.0f; + gpus.push_back(gpu); + } + + return gpus; +} + +GPUData DetailedGPUInfo::primary_gpu_info() { + auto gpus = get_all_gpus(); + if (!gpus.empty()) { + return gpus[0]; + } + + return GPUData{ -1, "No GPU Found", 0.0f, 0.0f }; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/DetailedScreenPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/DetailedScreenPosix.cpp new file mode 100644 index 0000000..0a0f478 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/DetailedScreenPosix.cpp @@ -0,0 +1,270 @@ +#include "../Platform.h" +#include "../../DetailedScreen.h" +#include +#include +#include +#include +#include + +using namespace std; +using namespace Platform; + +DetailedScreen::DetailedScreen() { + refresh(); +} + +string DetailedScreen::scaleMultiplier(int scalePercent) { + if (scalePercent <= 100) return "1x"; + if (scalePercent <= 125) return "1.25x"; + if (scalePercent <= 150) return "1.5x"; + if (scalePercent <= 175) return "1.75x"; + if (scalePercent <= 200) return "2x"; + if (scalePercent <= 250) return "2.5x"; + if (scalePercent <= 300) return "3x"; + return to_string(scalePercent / 100) + "x"; +} + +int DetailedScreen::computeUpscaleFactor(int currentWidth, int nativeWidth) { + if (nativeWidth <= 0) return 1; + return (currentWidth + nativeWidth - 1) / nativeWidth; +} + +float DetailedScreen::calculatePPI(int width, int height, float diagonalInches) { + if (diagonalInches <= 0) return 0.0f; + float diagonalPixels = sqrt(static_cast(width * width + height * height)); + return diagonalPixels / diagonalInches; +} + +float DetailedScreen::calculateDiagonal(float widthMM, float heightMM) { + return sqrt(widthMM * widthMM + heightMM * heightMM); +} + +float DetailedScreen::calculateScreenSizeInches(float widthMM, float heightMM) { + float diagonalMM = calculateDiagonal(widthMM, heightMM); + return diagonalMM / 25.4f; +} + +bool DetailedScreen::isNvidiaPresent() { + return commandExists("nvidia-smi") && !exec("nvidia-smi -L 2>/dev/null").empty(); +} + +bool DetailedScreen::isAMDPresent() { + string output = exec("lspci 2>/dev/null | grep -i 'AMD\\|ATI\\|Radeon' 2>/dev/null"); + return !output.empty(); +} + +string DetailedScreen::getGPUVendor() { + if (isNvidiaPresent()) return "NVIDIA"; + if (isAMDPresent()) return "AMD"; + + string output = exec("lspci 2>/dev/null | grep -i 'Intel.*Graphics' 2>/dev/null"); + if (!output.empty()) return "Intel"; + + return "Unknown"; +} + +bool DetailedScreen::populateFromXrandr() { + if (!commandExists("xrandr")) { + return false; + } + + string output = exec("xrandr --query 2>/dev/null"); + if (output.empty()) return false; + + istringstream iss(output); + string line; + DetailedScreenInfo currentScreen; + bool inScreen = false; + + while (getline(iss, line)) { + if (line.find(" connected") != string::npos) { + if (inScreen && !currentScreen.name.empty()) { + screens.push_back(currentScreen); + } + + currentScreen = DetailedScreenInfo(); + inScreen = true; + + size_t spacePos = line.find(' '); + if (spacePos != string::npos) { + currentScreen.deviceName = line.substr(0, spacePos); + currentScreen.name = currentScreen.deviceName; + } + + currentScreen.isPrimary = (line.find("primary") != string::npos); + + size_t resStart = string::npos; + for (size_t i = 0; i < line.size(); i++) { + if (isdigit(line[i]) && (i == 0 || !isdigit(line[i-1]))) { + size_t xPos = line.find('x', i); + if (xPos != string::npos && xPos < i + 6) { + resStart = i; + break; + } + } + } + + if (resStart != string::npos) { + size_t xPos = line.find('x', resStart); + size_t plusPos = line.find('+', resStart); + + if (xPos != string::npos) { + try { + currentScreen.current_width = stoi(line.substr(resStart, xPos - resStart)); + + size_t heightEnd = (plusPos != string::npos) ? plusPos : line.find(' ', xPos); + if (heightEnd != string::npos) { + currentScreen.current_height = stoi(line.substr(xPos + 1, heightEnd - xPos - 1)); + } + } catch (...) {} + } + + if (plusPos != string::npos) { + size_t secondPlus = line.find('+', plusPos + 1); + if (secondPlus != string::npos) { + try { + currentScreen.pos_x = stoi(line.substr(plusPos + 1, secondPlus - plusPos - 1)); + size_t endPos = line.find(' ', secondPlus); + currentScreen.pos_y = stoi(line.substr(secondPlus + 1, endPos - secondPlus - 1)); + } catch (...) {} + } + } + } + + size_t mmPos = line.find("mm x "); + if (mmPos != string::npos) { + size_t widthStart = mmPos; + while (widthStart > 0 && (isdigit(line[widthStart-1]) || line[widthStart-1] == ' ')) { + widthStart--; + } + + try { + currentScreen.width_mm = stof(line.substr(widthStart, mmPos - widthStart)); + + size_t heightStart = mmPos + 5; + size_t heightEnd = line.find("mm", heightStart); + if (heightEnd != string::npos) { + currentScreen.height_mm = stof(line.substr(heightStart, heightEnd - heightStart)); + } + + currentScreen.diagonal_inches = calculateScreenSizeInches(currentScreen.width_mm, currentScreen.height_mm); + currentScreen.ppi = calculatePPI(currentScreen.current_width, currentScreen.current_height, currentScreen.diagonal_inches); + } catch (...) {} + } + + } else if (inScreen && line.find("*") != string::npos && line.find("x") != string::npos) { + size_t starPos = line.find('*'); + if (starPos != string::npos && starPos > 0) { + size_t rateStart = starPos - 1; + while (rateStart > 0 && (isdigit(line[rateStart-1]) || line[rateStart-1] == '.')) { + rateStart--; + } + + try { + float refreshFloat = stof(line.substr(rateStart, starPos - rateStart)); + currentScreen.refresh_rate = static_cast(round(refreshFloat)); + } catch (...) { + currentScreen.refresh_rate = 60; + } + } + + if (currentScreen.native_width == 0) { + size_t xPos = line.find('x'); + if (xPos != string::npos) { + size_t resStart = xPos; + while (resStart > 0 && isdigit(line[resStart-1])) { + resStart--; + } + + try { + currentScreen.native_width = stoi(line.substr(resStart, xPos - resStart)); + + size_t heightEnd = xPos + 1; + while (heightEnd < line.size() && isdigit(line[heightEnd])) { + heightEnd++; + } + currentScreen.native_height = stoi(line.substr(xPos + 1, heightEnd - xPos - 1)); + } catch (...) {} + } + } + } + } + + if (inScreen && !currentScreen.name.empty()) { + screens.push_back(currentScreen); + } + + return !screens.empty(); +} + +bool DetailedScreen::populateFromDRM() { + const string drmPath = "/sys/class/drm/"; + + DIR* dir = opendir(drmPath.c_str()); + if (!dir) return false; + + struct dirent* entry; + + while ((entry = readdir(dir)) != nullptr) { + string name = entry->d_name; + + if (name.find("card") != 0 || name.find('-') == string::npos) continue; + + string connectorPath = drmPath + name + "/"; + + string status = trim(readFile(connectorPath + "status")); + if (status != "connected") continue; + + DetailedScreenInfo screen; + screen.deviceName = name; + screen.name = name; + + string modes = readFile(connectorPath + "modes"); + if (!modes.empty()) { + istringstream iss(modes); + string mode; + if (getline(iss, mode)) { + size_t xPos = mode.find('x'); + if (xPos != string::npos) { + try { + screen.native_width = stoi(mode.substr(0, xPos)); + screen.native_height = stoi(mode.substr(xPos + 1)); + screen.current_width = screen.native_width; + screen.current_height = screen.native_height; + } catch (...) {} + } + } + } + + screens.push_back(screen); + } + + closedir(dir); + return !screens.empty(); +} + +bool DetailedScreen::refresh() { + screens.clear(); + + if (populateFromXrandr()) { + return true; + } + + if (populateFromDRM()) { + return true; + } + + DetailedScreenInfo placeholder; + placeholder.name = "Unknown Display"; + placeholder.deviceName = "Unknown"; + placeholder.isPrimary = true; + placeholder.current_width = 1920; + placeholder.current_height = 1080; + placeholder.native_width = 1920; + placeholder.native_height = 1080; + placeholder.refresh_rate = 60; + placeholder.scale_percent = 100; + screens.push_back(placeholder); + + return true; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/ExtraInfoPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/ExtraInfoPosix.cpp new file mode 100644 index 0000000..47b83f2 --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/ExtraInfoPosix.cpp @@ -0,0 +1,241 @@ +#include "../Platform.h" +#include "../../ExtraInfo.h" +#include +#include +#include +#include + +using namespace std; +using namespace Platform; + +static vector parse_pulseaudio_sinks() { + vector devices; + + string output = exec("pactl list sinks 2>/dev/null"); + if (output.empty()) return devices; + + istringstream iss(output); + string line; + AudioDevice current; + bool inSink = false; + string defaultSink = exec("pactl get-default-sink 2>/dev/null"); + defaultSink = trim(defaultSink); + + while (getline(iss, line)) { + if (line.find("Sink #") != string::npos) { + if (inSink && !current.name.empty()) { + devices.push_back(current); + } + current = AudioDevice(); + current.isOutput = true; + inSink = true; + } else if (inSink) { + if (line.find("Name:") != string::npos) { + size_t pos = line.find("Name:"); + string name = trim(line.substr(pos + 5)); + current.isActive = (name == defaultSink); + } else if (line.find("Description:") != string::npos) { + size_t pos = line.find("Description:"); + current.name = trim(line.substr(pos + 12)); + } + } + } + + if (inSink && !current.name.empty()) { + devices.push_back(current); + } + + return devices; +} + +static vector parse_pulseaudio_sources() { + vector devices; + + string output = exec("pactl list sources 2>/dev/null"); + if (output.empty()) return devices; + + istringstream iss(output); + string line; + AudioDevice current; + bool inSource = false; + string defaultSource = exec("pactl get-default-source 2>/dev/null"); + defaultSource = trim(defaultSource); + + while (getline(iss, line)) { + if (line.find("Source #") != string::npos) { + if (inSource && !current.name.empty()) { + if (current.name.find(".monitor") == string::npos && + current.name.find("Monitor") == string::npos) { + devices.push_back(current); + } + } + current = AudioDevice(); + current.isOutput = false; + inSource = true; + } else if (inSource) { + if (line.find("Name:") != string::npos) { + size_t pos = line.find("Name:"); + string name = trim(line.substr(pos + 5)); + current.isActive = (name == defaultSource); + } else if (line.find("Description:") != string::npos) { + size_t pos = line.find("Description:"); + current.name = trim(line.substr(pos + 12)); + } + } + } + + if (inSource && !current.name.empty()) { + if (current.name.find(".monitor") == string::npos && + current.name.find("Monitor") == string::npos) { + devices.push_back(current); + } + } + + return devices; +} + +static vector parse_alsa_outputs() { + vector devices; + + string output = exec("aplay -l 2>/dev/null"); + if (output.empty()) return devices; + + istringstream iss(output); + string line; + + while (getline(iss, line)) { + if (line.find("card") == 0 && line.find("device") != string::npos) { + AudioDevice dev; + dev.isOutput = true; + dev.isActive = (devices.empty()); + + size_t start = line.find('['); + size_t end = line.rfind(']'); + if (start != string::npos && end != string::npos && end > start) { + dev.name = line.substr(start + 1, end - start - 1); + } else { + dev.name = line; + } + + devices.push_back(dev); + } + } + + return devices; +} + +static vector parse_alsa_inputs() { + vector devices; + + string output = exec("arecord -l 2>/dev/null"); + if (output.empty()) return devices; + + istringstream iss(output); + string line; + + while (getline(iss, line)) { + if (line.find("card") == 0 && line.find("device") != string::npos) { + AudioDevice dev; + dev.isOutput = false; + dev.isActive = (devices.empty()); + + size_t start = line.find('['); + size_t end = line.rfind(']'); + if (start != string::npos && end != string::npos && end > start) { + dev.name = line.substr(start + 1, end - start - 1); + } else { + dev.name = line; + } + + devices.push_back(dev); + } + } + + return devices; +} + +vector ExtraInfo::get_output_devices() { + vector devices = parse_pulseaudio_sinks(); + + if (devices.empty()) { + devices = parse_alsa_outputs(); + } + + if (devices.empty()) { + AudioDevice dev; + dev.name = "Default Audio Output"; + dev.isActive = true; + dev.isOutput = true; + devices.push_back(dev); + } + + return devices; +} + +vector ExtraInfo::get_input_devices() { + vector devices = parse_pulseaudio_sources(); + + if (devices.empty()) { + devices = parse_alsa_inputs(); + } + + if (devices.empty()) { + AudioDevice dev; + dev.name = "Default Audio Input"; + dev.isActive = true; + dev.isOutput = false; + devices.push_back(dev); + } + + return devices; +} + +PowerStatus ExtraInfo::get_power_status() { + PowerStatus status; + status.hasBattery = false; + status.batteryPercent = 0; + status.isACOnline = true; + status.isCharging = false; + + const string powerSupplyPath = "/sys/class/power_supply/"; + + DIR* dir = opendir(powerSupplyPath.c_str()); + if (!dir) { + return status; + } + + struct dirent* entry; + while ((entry = readdir(dir)) != nullptr) { + string name = entry->d_name; + if (name == "." || name == "..") continue; + + string devicePath = powerSupplyPath + name + "/"; + string type = trim(readFile(devicePath + "type")); + + if (type == "Battery") { + status.hasBattery = true; + + string capacityStr = trim(readFile(devicePath + "capacity")); + if (!capacityStr.empty()) { + try { + status.batteryPercent = stoi(capacityStr); + } catch (...) { + status.batteryPercent = 0; + } + } + + string batteryStatus = trim(readFile(devicePath + "status")); + status.isCharging = (batteryStatus == "Charging"); + status.isACOnline = (batteryStatus == "Charging" || batteryStatus == "Full" || batteryStatus == "Not charging"); + + } else if (type == "Mains") { + string online = trim(readFile(devicePath + "online")); + if (online == "1") { + status.isACOnline = true; + } + } + } + + closedir(dir); + return status; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/UserInfoPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/UserInfoPosix.cpp new file mode 100644 index 0000000..21f2c1c --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/UserInfoPosix.cpp @@ -0,0 +1,78 @@ +#include "../Platform.h" +#include "../../UserInfo.h" +#include +#include +#include +#include +#include + +std::string UserInfo::get_username() { + const char* user = std::getenv("USER"); + if (user) return std::string(user); + + struct passwd* pw = getpwuid(getuid()); + if (pw) return std::string(pw->pw_name); + + return "Unknown User Name"; +} + +std::string UserInfo::get_domain_name() { + char hostname[256]; + if (gethostname(hostname, sizeof(hostname)) == 0) { + char* dot = strchr(hostname, '.'); + if (dot && *(dot + 1)) { + return std::string(dot + 1); + } + } + + std::string result = Platform::exec("hostname -d 2>/dev/null"); + result = Platform::trim(result); + if (!result.empty() && result != "(none)") { + return result; + } + + std::string resolv = Platform::readFile("/etc/resolv.conf"); + std::string search = Platform::parseValue(resolv, "search", ' '); + if (!search.empty()) { + auto parts = Platform::split(search, ' '); + if (!parts.empty()) return parts[0]; + } + + std::string domain = Platform::parseValue(resolv, "domain", ' '); + if (!domain.empty()) return domain; + + return "No Domain / Workgroup"; +} + +std::string UserInfo::get_user_groups() { + gid_t groups[64]; + int ngroups = 64; + + struct passwd* pw = getpwuid(getuid()); + if (!pw) return "Failed to retrieve groups"; + + if (getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups) == -1) { + return "Failed to retrieve groups"; + } + + std::string result; + for (int i = 0; i < ngroups; i++) { + struct group* gr = getgrgid(groups[i]); + if (gr) { + if (!result.empty()) result += ", "; + result += gr->gr_name; + } + } + + return result.empty() ? "No Groups Found" : result; +} + +std::string UserInfo::get_computer_name() { + char hostname[256]; + if (gethostname(hostname, sizeof(hostname)) == 0) { + char* dot = strchr(hostname, '.'); + if (dot) *dot = '\0'; + return std::string(hostname); + } + return "Unknown System"; +} diff --git a/project_binary_fetch/binary_fetch_v1/platform/posix/compact_disk_infoPosix.cpp b/project_binary_fetch/binary_fetch_v1/platform/posix/compact_disk_infoPosix.cpp new file mode 100644 index 0000000..96d67ea --- /dev/null +++ b/project_binary_fetch/binary_fetch_v1/platform/posix/compact_disk_infoPosix.cpp @@ -0,0 +1,188 @@ +#include "compact_disk_info.h" +#include "platform/Platform.h" +#include +#include +#include +#include + +#if PLATFORM_LINUX + +DiskInfo::DiskInfo() {} + +std::vector> DiskInfo::getAllDiskUsage() { + std::vector> result; + std::set seen; + + std::ifstream mounts("/proc/mounts"); + std::string line; + + while (std::getline(mounts, line)) { + std::istringstream iss(line); + std::string device, mountpoint, fstype; + iss >> device >> mountpoint >> fstype; + + bool isRealFs = (device.find("/dev/") == 0) || + (fstype == "zfs") || + (fstype == "btrfs" && mountpoint != "/") || + (fstype == "ext4" || fstype == "ext3" || fstype == "xfs"); + + if (!isRealFs) continue; + if (fstype == "squashfs" || fstype == "tmpfs" || fstype == "devtmpfs") continue; + if (mountpoint.find("/sys") == 0 || mountpoint.find("/proc") == 0) continue; + if (mountpoint == "/nix/store") continue; + if (seen.count(mountpoint)) continue; + seen.insert(mountpoint); + + int usage = calculateUsedPercentage(mountpoint); + + std::string label = mountpoint; + if (mountpoint == "/") label = "/"; + else if (mountpoint.rfind('/') != std::string::npos) { + label = mountpoint.substr(mountpoint.rfind('/') + 1); + } + + result.push_back({label, usage}); + } + + return result; +} + +std::vector> DiskInfo::getDiskCapacity() { + std::vector> result; + std::set seen; + + std::ifstream mounts("/proc/mounts"); + std::string line; + + while (std::getline(mounts, line)) { + std::istringstream iss(line); + std::string device, mountpoint, fstype; + iss >> device >> mountpoint >> fstype; + + bool isRealFs = (device.find("/dev/") == 0) || + (fstype == "zfs") || + (fstype == "btrfs" && mountpoint != "/") || + (fstype == "ext4" || fstype == "ext3" || fstype == "xfs"); + + if (!isRealFs) continue; + if (fstype == "squashfs" || fstype == "tmpfs" || fstype == "devtmpfs") continue; + if (mountpoint.find("/sys") == 0 || mountpoint.find("/proc") == 0) continue; + if (mountpoint == "/nix/store") continue; + if (seen.count(mountpoint)) continue; + seen.insert(mountpoint); + + int capacity = calculateCapacityGB(mountpoint); + + std::string label = mountpoint; + if (mountpoint == "/") label = "/"; + else if (mountpoint.rfind('/') != std::string::npos) { + label = mountpoint.substr(mountpoint.rfind('/') + 1); + } + + result.push_back({label, capacity}); + } + + return result; +} + +int DiskInfo::calculateUsedPercentage(const std::string& path) { + struct statvfs stat; + if (statvfs(path.c_str(), &stat) != 0) return 0; + + unsigned long long total = stat.f_blocks * stat.f_frsize; + unsigned long long available = stat.f_bavail * stat.f_frsize; + + if (total == 0) return 0; + return static_cast(((total - available) * 100) / total); +} + +int DiskInfo::calculateCapacityGB(const std::string& path) { + struct statvfs stat; + if (statvfs(path.c_str(), &stat) != 0) return 0; + + unsigned long long total = stat.f_blocks * stat.f_frsize; + return static_cast(total / (1024ULL * 1024ULL * 1024ULL)); +} + +#elif PLATFORM_FREEBSD + +#include + +DiskInfo::DiskInfo() {} + +std::vector> DiskInfo::getAllDiskUsage() { + std::vector> result; + + struct statfs* mounts; + int count = getmntinfo(&mounts, MNT_NOWAIT); + + for (int i = 0; i < count; i++) { + std::string fstype = mounts[i].f_fstypename; + std::string device = mounts[i].f_mntfromname; + std::string mountpoint = mounts[i].f_mntonname; + + if (device.find("/dev/") != 0) continue; + if (fstype == "devfs" || fstype == "nullfs" || fstype == "tmpfs") continue; + + int usage = calculateUsedPercentage(mountpoint); + + std::string label = mountpoint; + if (mountpoint == "/") label = "/"; + else if (mountpoint.rfind('/') != std::string::npos) { + label = mountpoint.substr(mountpoint.rfind('/') + 1); + } + + result.push_back({label, usage}); + } + + return result; +} + +std::vector> DiskInfo::getDiskCapacity() { + std::vector> result; + + struct statfs* mounts; + int count = getmntinfo(&mounts, MNT_NOWAIT); + + for (int i = 0; i < count; i++) { + std::string fstype = mounts[i].f_fstypename; + std::string device = mounts[i].f_mntfromname; + std::string mountpoint = mounts[i].f_mntonname; + + if (device.find("/dev/") != 0) continue; + if (fstype == "devfs" || fstype == "nullfs" || fstype == "tmpfs") continue; + + int capacity = calculateCapacityGB(mountpoint); + + std::string label = mountpoint; + if (mountpoint == "/") label = "/"; + else if (mountpoint.rfind('/') != std::string::npos) { + label = mountpoint.substr(mountpoint.rfind('/') + 1); + } + + result.push_back({label, capacity}); + } + + return result; +} + +int DiskInfo::calculateUsedPercentage(const std::string& path) { + struct statvfs stat; + if (statvfs(path.c_str(), &stat) != 0) return 0; + + unsigned long long total = stat.f_blocks * stat.f_frsize; + unsigned long long available = stat.f_bavail * stat.f_frsize; + + if (total == 0) return 0; + return static_cast(((total - available) * 100) / total); +} + +int DiskInfo::calculateCapacityGB(const std::string& path) { + struct statvfs stat; + if (statvfs(path.c_str(), &stat) != 0) return 0; + + unsigned long long total = stat.f_blocks * stat.f_frsize; + return static_cast(total / (1024ULL * 1024ULL * 1024ULL)); +} + +#endif