diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b20da1..e225a9c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,6 +118,9 @@ set(BINARYFETCH_HEADERS "${BINARYFETCH_INCLUDE}/core/resource.h" "${BINARYFETCH_INCLUDE}/core/config_management.h" "${BINARYFETCH_INCLUDE}/core/Image.h" + "${BINARYFETCH_INCLUDE}/core/Gif.h" + "${BINARYFETCH_INCLUDE}/core/Video.h" + "${BINARYFETCH_INCLUDE}/core/linux_ascii_database.h" "${BINARYFETCH_STB_IMAGE}/stb_image.h" # -------------------------------------------------------- @@ -185,6 +188,8 @@ if(WIN32) "${BINARYFETCH_CPP}/windows/core/AsciiArt.cpp" "${BINARYFETCH_CPP}/windows/core/config_management.cpp" "${BINARYFETCH_CPP}/windows/core/Image.cpp" + "${BINARYFETCH_CPP}/windows/core/Gif.cpp" + "${BINARYFETCH_CPP}/windows/core/Video.cpp" # ---------------------------------------------------- # Detailed Information # ---------------------------------------------------- @@ -266,7 +271,7 @@ elseif(UNIX AND NOT APPLE) "${BINARYFETCH_CPP}/Linux/core/AsciiArt.cpp" "${BINARYFETCH_CPP}/Linux/core/config_management.cpp" "${BINARYFETCH_CPP}/Linux/core/Image.cpp" - + "${BINARYFETCH_CPP}/Linux/core/linux_ascii_database.cpp" # ---------------------------------------------------- # Detailed Information # ---------------------------------------------------- diff --git a/binaryfetch-1.0/usr/local/bin/binaryfetch b/binaryfetch-1.0/usr/local/bin/binaryfetch new file mode 100755 index 0000000..f2297a7 Binary files /dev/null and b/binaryfetch-1.0/usr/local/bin/binaryfetch differ diff --git a/build files/BinaryFetch v1.8/BinaryFetch_v1.8_setup.iss b/build files/BinaryFetch v1.8/BinaryFetch_v1.8_setup.iss new file mode 100644 index 0000000..e7f2982 --- /dev/null +++ b/build files/BinaryFetch v1.8/BinaryFetch_v1.8_setup.iss @@ -0,0 +1,240 @@ +; ----------------------------------------------------------- +; BinaryFetch Installer +; Author: BinaryFetch-CLI +; Publisher: BinaryFetch-CLI +; Version: 1.8 +; +; Installs BinaryFetch.exe and adds it to the system PATH. +; +; New in 1.8: before installing, any existing +; C:\Users\Public\BinaryFetch folder (old config, ASCII art, etc.) +; is deleted so that stale settings can't conflict with the new +; version. BinaryFetch recreates its defaults on first run. +; ----------------------------------------------------------- + + +[Setup] +AppId={{9F6E2C2A-8A7B-4C6F-9A2D-3F6A0C91E4A1}} + +AppName=BinaryFetch +AppVersion=1.8 +AppPublisher=BinaryFetch-CLI + +; Version shown in the Setup .exe's Properties > Details tab +VersionInfoVersion=1.8.0.0 +VersionInfoProductVersion=1.8.0.0 +VersionInfoProductName=BinaryFetch +VersionInfoCompany=BinaryFetch-CLI +VersionInfoDescription=BinaryFetch Setup + +AppPublisherURL=https://github.com/BinaryFetch-CLI +AppSupportURL=https://github.com/BinaryFetch-CLI/BinaryFetch +AppUpdatesURL=https://github.com/BinaryFetch-CLI/BinaryFetch + +DefaultDirName={autopf}\BinaryFetch +DefaultGroupName=BinaryFetch + +UninstallDisplayIcon={app}\BinaryFetch.exe + +LicenseFile=H:\programming\git_and_github\BinaryFetch\build files\Build-License\License.txt +SetupIconFile=H:\programming\git_and_github\BinaryFetch\build files\Icon & Banners\BinaryFetch.ico + +OutputDir=C:\Users\OBITO\Downloads +OutputBaseFilename=BinaryFetch-v1.8-Setup + +Compression=lzma +SolidCompression=yes +WizardStyle=modern + +PrivilegesRequired=admin +ChangesEnvironment=yes + +ArchitecturesAllowed=x64 +ArchitecturesInstallIn64BitMode=x64 + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Files] +Source: "H:\programming\git_and_github\BinaryFetch\build\bin\Release\BinaryFetch.exe"; DestDir: "{app}"; Flags: ignoreversion + +[Icons] +Name: "{autoprograms}\BinaryFetch"; Filename: "{app}\BinaryFetch.exe" +Name: "{autodesktop}\BinaryFetch"; Filename: "{app}\BinaryFetch.exe" + +[Code] + +const + WM_SETTINGCHANGE = $001A; + SMTO_ABORTIFHUNG = $0002; + + // Where BinaryFetch keeps its config (BinaryFetch_Config.jsonc), + // BinaryArt.txt and other user files. Windows paths are + // case-insensitive, so this also matches "binaryfetch". + BF_DATA_DIR = 'C:\Users\Public\BinaryFetch'; + +function SendMessageTimeoutA( + hWnd: Longint; Msg: Longint; wParam: Longint; lParam: AnsiString; + fuFlags: Longint; uTimeout: Longint; var lpdwResult: Longint +): Longint; + external 'SendMessageTimeoutA@user32.dll stdcall'; + +// Tell Explorer and other running processes to re-read the environment +// block from the registry. Without this, RegWriteStringValue alone +// leaves every already-running process (including Explorer, which is +// what spawns new terminal windows) with a stale PATH, so a "new" +// terminal opened after install still won't find binaryfetch. +procedure RefreshEnvironment(); +var + dwResult: Longint; +begin + SendMessageTimeoutA( + HWND_BROADCAST, WM_SETTINGCHANGE, 0, 'Environment', + SMTO_ABORTIFHUNG, 5000, dwResult + ); +end; + +// Deletes the old BinaryFetch data folder (if it exists) so an old +// config can't conflict with the new version. Runs silently, also in +// /SILENT and /VERYSILENT installs. Failure is logged but never aborts +// the install. +procedure RemoveOldDataFolder(); +begin + if DirExists(BF_DATA_DIR) then + begin + Log('Old BinaryFetch data folder found: ' + BF_DATA_DIR); + if DelTree(BF_DATA_DIR, True, True, True) then + Log('Old BinaryFetch data folder deleted.') + else + Log('Could not fully delete old BinaryFetch data folder (a file may be in use).'); + end + else + Log('No old BinaryFetch data folder found. Nothing to delete.'); +end; + +function NeedsAddPath(): Boolean; +var + Paths: string; +begin + Result := True; + if RegQueryStringValue( + HKLM, + 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', + 'Path', + Paths) then + begin + Result := Pos( + Lowercase(ExpandConstant('{app}')), + Lowercase(Paths) + ) = 0; + end; +end; + +procedure AddAppPathToSystemPath(); +var + Paths, NewPaths, AppPath: string; +begin + AppPath := ExpandConstant('{app}'); + if RegQueryStringValue( + HKLM, + 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', + 'Path', + Paths) then + begin + if Pos(Lowercase(AppPath), Lowercase(Paths)) = 0 then + begin + NewPaths := Paths; + if (Length(NewPaths) > 0) and (NewPaths[Length(NewPaths)] <> ';') then + NewPaths := NewPaths + ';'; + NewPaths := NewPaths + AppPath; + RegWriteStringValue( + HKLM, + 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', + 'Path', + NewPaths + ); + end; + end + else + begin + RegWriteStringValue( + HKLM, + 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', + 'Path', + AppPath + ); + end; + + RefreshEnvironment(); +end; + +procedure RemoveAppPathFromSystemPath(); +var + Paths, NewPaths, AppPath: string; +begin + AppPath := ExpandConstant('{app}'); + if not RegQueryStringValue( + HKLM, + 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', + 'Path', + Paths) then + Exit; + + NewPaths := Paths; + + StringChangeEx(NewPaths, ';' + AppPath, '', True); + StringChangeEx(NewPaths, AppPath + ';', '', True); + StringChangeEx(NewPaths, AppPath, '', True); + + while Pos(';;', NewPaths) > 0 do + StringChangeEx(NewPaths, ';;', ';', True); + + if (Length(NewPaths) > 0) and (NewPaths[1] = ';') then + Delete(NewPaths, 1, 1); + + if (Length(NewPaths) > 0) and (NewPaths[Length(NewPaths)] = ';') then + Delete(NewPaths, Length(NewPaths), 1); + + if NewPaths <> Paths then + begin + RegWriteStringValue( + HKLM, + 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', + 'Path', + NewPaths + ); + RefreshEnvironment(); + end; +end; + +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +begin + if CurUninstallStep = usUninstall then + RemoveAppPathFromSystemPath(); +end; + +procedure CurStepChanged(CurStep: TSetupStep); +begin + // ssInstall runs right before the files are copied, so the old data + // folder is gone before the new BinaryFetch.exe is put in place. + if CurStep = ssInstall then + RemoveOldDataFolder(); + + if CurStep = ssPostInstall then + begin + if NeedsAddPath() then + AddAppPathToSystemPath(); + + if not WizardSilent() then + begin + MsgBox( + 'BinaryFetch v1.8 installed successfully.'#13#13 + + 'Open a NEW terminal and type:'#13 + + 'binaryfetch'#13#13 + + 'If it still doesn''t work, sign out and back in (or restart).', + mbInformation, + MB_OK + ); + end; + end; +end; diff --git a/src/BinaryFetch/Ascii_DataBase_Generator.py/ascii_art_database_generator.py b/src/BinaryFetch/Ascii_DataBase_Generator.py/ascii_art_database_generator.py new file mode 100644 index 0000000..618bf46 --- /dev/null +++ b/src/BinaryFetch/Ascii_DataBase_Generator.py/ascii_art_database_generator.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python3 +""" +generate_ascii_db.py + +Reads a markdown file of distro ASCII art entries in the format: + + ## 1. adelie + +```text + ...art... +``` + + ## 2. aeon + +```text + ...art... +``` + +and emits cpp/Linux/core/linux_ascii_database.cpp — a flat +std::map literal matching +include/core/linux_ascii_database.h. + +Usage: + python3 generate_ascii_db.py + (interactively asks for the .md input path and the .cpp output path) +""" + +import re +import sys +from pathlib import Path + +# ------------------------------------------------------------------ +# Known alias table — the markdown source only has one name per +# entry, so aliases (variant IDs that should resolve to the same +# art) are supplied here, keyed by the distro name as it appears +# in the markdown heading. Anything not listed gets an empty +# alias list — still valid, just no extra fallback IDs. +# ------------------------------------------------------------------ +KNOWN_ALIASES = { + "arch": ["archlinux", "arch-linux"], + "debian": [], + "fedora": ["fedora-workstation", "fedora-server"], + "manjaro": ["manjaro-linux"], + "pop": ["pop_os", "popos", "pop!_os"], + "ubuntu": ["ubuntu-desktop", "ubuntu-server"], + "linux": ["generic", "unknown"], + # add more as needed — anything absent here just gets [] below +} + +HEADING_BLOCK_RE = re.compile( + r"##\s*\d+\.\s*(\S+)\s*\n+```text\s*\n(.*?)```", + re.DOTALL, +) + + +def parse_markdown(md_path: Path): + """Returns a list of (key, art_text) tuples, in file order.""" + content = md_path.read_text(encoding="utf-8") + entries = [] + + for match in HEADING_BLOCK_RE.finditer(content): + name = match.group(1).strip().lower() + art = match.group(2) + + # Trim exactly one trailing newline before the closing ```, + # keep internal formatting/color tags exactly as written. + if art.endswith("\n"): + art = art[:-1] + + entries.append((name, art)) + + return entries + + +def pick_raw_delimiter(art: str) -> str: + """ + R"ART(...)ART" is used by default. If an art string happens to + contain the literal sequence )ART" (astronomically unlikely but + checked anyway), fall back to a delimiter guaranteed not to + collide, so the generated .cpp always compiles. + """ + base = "ART" + if f")ART\"" not in art: + return base + i = 0 + while f")ART{i}\"" in art: + i += 1 + return f"ART{i}" + + +def format_entry(key: str, art: str, aliases): + delim = pick_raw_delimiter(art) + alias_str = ", ".join(f'"{a}"' for a in aliases) + return ( + f' {{ "{key}", {{\n' + f' R"{delim}(\n{art}\n)' + f'{delim}",\n' + f' {{{alias_str}}}\n' + f' }}}},\n' + ) + + +def generate_cpp(entries, output_path: Path): + # Ensure a "linux" fallback entry always exists — mandatory per + # the database's design (getDistroArt() must be a total function). + keys = {k for k, _ in entries} + if "linux" not in keys: + print("Warning: no 'linux' entry found in markdown — " + "injecting a minimal placeholder fallback.") + entries.append(( + "linux", + "$7 .--.\n$7 |o_o |\n$7 |:_/ |\n" + "$7 // \\ \\\n$7 (| | )\n$7/'\\_ _/`\\\n$7\\___)=(___/", + )) + + # Alphabetical, matching the design doc's convention. + entries.sort(key=lambda e: e[0]) + + header = ( + '#include "core/linux_ascii_database.h"\n\n' + "// Auto-generated by generate_ascii_db.py — do not hand-edit.\n" + "// Regenerate from the source markdown instead.\n" + "//\n" + "// One flat table, alphabetical by key. Key = ID= from\n" + "// /etc/os-release (lowercase, one word). $N tags are parsed\n" + "// by the existing processColorCodes() pipeline in AsciiArt.cpp.\n" + "static const std::map kDistroArtDB = {\n\n" + ) + + body = "" + for key, art in entries: + aliases = KNOWN_ALIASES.get(key, []) + body += format_entry(key, art, aliases) + "\n" + + footer = ( + "};\n\n" + "const std::map& getDistroArtDatabase() {\n" + " return kDistroArtDB;\n" + "}\n\n" + "const std::string& getDistroArt(const std::string& distroId) {\n" + " if (auto it = kDistroArtDB.find(distroId); it != kDistroArtDB.end()) {\n" + " return it->second.art;\n" + " }\n" + " for (const auto& [key, entry] : kDistroArtDB) {\n" + " for (const auto& alias : entry.aliases) {\n" + " if (alias == distroId) return entry.art;\n" + " }\n" + " }\n" + " return kDistroArtDB.at(\"linux\").art;\n" + "}\n" + ) + + output_path.write_text(header + body + footer, encoding="utf-8") + + +def main(): + md_input = input("Path to the markdown art database file: ").strip().strip('"') + md_path = Path(md_input).expanduser().resolve() + + if not md_path.is_file(): + print(f"Error: file not found: {md_path}") + sys.exit(1) + + out_input = input( + "Output path for linux_ascii_database.cpp " + "(e.g. src/BinaryFetch/cpp/Linux/core/linux_ascii_database.cpp): " + ).strip().strip('"') + output_path = Path(out_input).expanduser().resolve() + output_path.parent.mkdir(parents=True, exist_ok=True) + + entries = parse_markdown(md_path) + if not entries: + print("Error: no entries found — check the markdown heading/" + "```text fence format matches what this script expects.") + sys.exit(1) + + print(f"Parsed {len(entries)} entries from {md_path.name}") + generate_cpp(entries, output_path) + print(f"Wrote: {output_path}") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/BinaryFetch/cpp/Linux/core/AsciiArt.cpp b/src/BinaryFetch/cpp/Linux/core/AsciiArt.cpp index 21ed609..49fcac4 100644 --- a/src/BinaryFetch/cpp/Linux/core/AsciiArt.cpp +++ b/src/BinaryFetch/cpp/Linux/core/AsciiArt.cpp @@ -2,6 +2,7 @@ // Linux implementation #include "core/AsciiArt.h" +#include "core/linux_ascii_database.h" #include #include #include @@ -15,6 +16,7 @@ #include #include #include +#include // ---------------- Helper path utilities ---------------- @@ -33,9 +35,71 @@ static std::string getHomeDir() { static std::string getLinuxConfigDir() { const char* xdg = std::getenv("XDG_CONFIG_HOME"); if (xdg && *xdg != '\0') { - return std::string(xdg) + "/binaryfetch"; + return std::string(xdg) + "/BinaryFetch"; } - return getHomeDir() + "/.config/binaryfetch"; + return getHomeDir() + "/.config/BinaryFetch"; +} + +// ---------------- Distro Detection (/etc/os-release) ---------------- + +static std::string readOSReleaseValue(const std::string& key) { + std::ifstream file("/etc/os-release"); + if (!file.is_open()) return ""; + + std::string line; + const std::string prefix = key + "="; + while (std::getline(file, line)) { + if (line.rfind(prefix, 0) != 0) continue; + + std::string value = line.substr(prefix.size()); + if (!value.empty() && (value.front() == '"' || value.front() == '\'')) { + value.erase(0, 1); + } + if (!value.empty() && (value.back() == '"' || value.back() == '\'')) { + value.pop_back(); + } + std::transform(value.begin(), value.end(), value.begin(), ::tolower); + return value; + } + return ""; +} + +static std::vector splitIdLikeChain(const std::string& raw) { + std::vector chain; + std::stringstream ss(raw); + std::string token; + while (ss >> token) chain.push_back(token); + return chain; +} + +// Resolves the correct art for THIS system: +// 1. Direct ID= match (key or alias) in the database. +// 2. Walk ID_LIKE= chain, same key-or-alias lookup, in order. +// 3. Database's mandatory "linux" fallback entry. +static std::string resolveDistroArt() { + const std::map& db = getDistroArtDatabase(); + + auto lookup = [&](const std::string& id) -> const std::string* { + if (id.empty()) return nullptr; + auto it = db.find(id); + if (it != db.end()) return &it->second.art; + for (const auto& [dbKey, entry] : db) { + for (const auto& alias : entry.aliases) { + if (alias == id) return &entry.art; + } + } + return nullptr; + }; + + std::string id = readOSReleaseValue("ID"); + if (const std::string* art = lookup(id)) return *art; + + for (const auto& likeId : splitIdLikeChain(readOSReleaseValue("ID_LIKE"))) { + if (const std::string* art = lookup(likeId)) return *art; + } + + auto fallback = db.find("linux"); + return (fallback != db.end()) ? fallback->second.art : std::string(); } // ---------------- Default Color Map ---------------- @@ -47,29 +111,7 @@ static const std::map kDefaultColorMap = { {13, "\033[96m"}, {14, "\033[97m"}, {15, "\033[0m"} }; -// ---------------- Default ASCII Art (Placeholder Logo) ---------------- -static const std::string kDefaultAsciiArt = -R"ASCIIART( .... - $14.',:clooo: $1.:looooo:. - $14.;looooooooc $1.oooooooooo' - $14.;looooool:,''. $1:ooooooooooc - $14;looool;. $1'oooooooooo, - $14;clool' $1.cooooooc. $14,, - $14... $1...... $14.:oo, - $1.;clol:,. $14.loooo' - $1:ooooooooo, $14'ooool -$1'ooooooooooo. $14loooo. -$1'ooooooooool $14coooo. - $1,loooooooc. $14.loooo. - $1.,;;;'. $14;ooooc - $14... $14,ooool. - $14.cooooc. $1..',,'. $14.cooo. - $14;ooooo:. $1;oooooooc. $14:l. - $14.coooooc,.. $1coooooooooo. - $14.:ooooooolc:. $1.ooooooooooo' - $14.':loooooo; $1,oooooooooc - $14..';::c' $1.;loooo:' -)ASCIIART"; + // ---------------- Utility Functions ---------------- @@ -161,7 +203,13 @@ bool AsciiArt::copyDefaultArt(const std::string& destPath) const { std::ofstream dest(destPath, std::ios::binary); if (!dest.is_open()) return false; - dest << kDefaultAsciiArt; + std::string art = resolveDistroArt(); + if (art.empty()) { + std::cerr << "Warning: resolveDistroArt() returned empty — " + "database missing its mandatory 'linux' fallback entry.\n"; + return false; + } + dest << art; dest.close(); return true; } @@ -200,7 +248,14 @@ bool AsciiArt::loadArtFromEmbedded() { const std::map& activeColorMap = colorMap.empty() ? kDefaultColorMap : colorMap; - std::istringstream stream(kDefaultAsciiArt); + std::string art = resolveDistroArt(); + if (art.empty()) { + std::cerr << "Warning: resolveDistroArt() returned empty — " + "database missing its mandatory 'linux' fallback entry.\n"; + enabled = false; + return false; + } + std::istringstream stream(art); std::string line; maxWidth = 0; bool isFirstLine = true; diff --git a/src/BinaryFetch/cpp/Linux/core/config_management.cpp b/src/BinaryFetch/cpp/Linux/core/config_management.cpp index 4f3de39..ccfed31 100644 --- a/src/BinaryFetch/cpp/Linux/core/config_management.cpp +++ b/src/BinaryFetch/cpp/Linux/core/config_management.cpp @@ -199,9 +199,9 @@ static std::string getHomeDir() { static std::string getLinuxConfigDir() { const char* xdg = std::getenv("XDG_CONFIG_HOME"); if (xdg && *xdg != '\0') { - return std::string(xdg) + "/binaryfetch"; + return std::string(xdg) + "/BinaryFetch"; } - return getHomeDir() + "/.config/binaryfetch"; + return getHomeDir() + "/.config/BinaryFetch"; } static bool ensureDirectoryExists(const std::string& directory) { diff --git a/src/BinaryFetch/cpp/Linux/core/linux_ascii_database.cpp b/src/BinaryFetch/cpp/Linux/core/linux_ascii_database.cpp new file mode 100644 index 0000000..83c0a33 --- /dev/null +++ b/src/BinaryFetch/cpp/Linux/core/linux_ascii_database.cpp @@ -0,0 +1,11285 @@ +#include "core/linux_ascii_database.h" + +// Auto-generated by generate_ascii_db.py — do not hand-edit. +// Regenerate from the source markdown instead. +// +// One flat table, alphabetical by key. Key = ID= from +// /etc/os-release (lowercase, one word). $N tags are parsed +// by the existing processColorCodes() pipeline in AsciiArt.cpp. +static const std::map kDistroArtDB = { + + { "adelie", { + R"ART( + $3 ,-^-___ +$3 /\\\/// +$2refined.$1 /\\\\// +$2reliable.$1 /\\\/// +$2ready.$1 /\\/////\ + __///\\\\/////\ +$3 _//////\\\\\\\//// +$1 ///////$3\\\\\\\\\\// + //////$1\\\\\/ + /////\\\\\/ + /////$3\\\\/ + /\\///\\\/ + /\\\/$1\\/ + /\\\\// + ////// + /// $3\\\\\ +)ART", + {} + }}, + + { "aeon", { + R"ART( +⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷ +⣿⡇ ⢸⣿ +⣿⡇ ⢀⣀ ⣀⡀ ⢸⣿ +⣿⣇ ⠸⣿⣄ ⣠⣿⠇ ⣸⣿ +⢹⣿⡄ ⠙⠻⠿⠿⠟⠋ ⢠⣿⡏ + ⠹⣿⣦⡀ ⢀⣴⣿⠏ + ⠈⠛⢿⣶⣤⣄ ⣠⣤⣶⡿⠛⠁ +$2 ⣠⣴⡿⠿⠛ ⠛⠿⢿⣦⣄ + ⣠⣾⠟⠉ ⠉⠻⣷⣄ +⢰⣿⠏ ⢀⣤⣶⣶⣤⡀ ⠹⣿⡆ +⣿⡟ ⢰⣿⠏⠁⠈⠹⣿⡆ ⢿⣿ +⣿⡇ ⠈⠋ ⠙⠁ ⢸⣿ +⣿⡇ ⢸⣿ +⣿⣷⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣾⣿ +)ART", + {} + }}, + + { "aeros", { + R"ART( + ooo OOO OOO ooo + oOO OOo + oOO OOo + oOO OOo + oOO OOo + oOO OOo + oOO OOo + OOo + OOo + OOo + OOo + OOo + OOo +oOO OOo + oOO OOo + oOO OOo + oOO OOo + oO OOo + oOO OOo + oOO OOo + ooo OOO OOO ooo +)ART", + {} + }}, + + { "aerynos", { + R"ART( + $1:: + $1-++- + $1-++++- + $1-++++++- + $1=+++==+++= + $1=+++= =+++= + $1=+++= =+++= + $1:+++= =+++: + $1-+++- -+++- + $1:+++=. .=+++: + $2.. $1-++++=--=+++++++=: + $2.:::. $1:=++++++++===++++=. + $2.::::. $1.:----:. $1.-++++- + $2.::::. .::. $1.++++- + $2.:::. .:::. $1.=+++- + $2.::::. ..:::: $1.=-. .++++= + $2.::::::::::::::::. $1.+++++++++++++++= +$2'''''''''''''''''' $1''''''''''''''''' +)ART", + {} + }}, + + { "aerynos_old", { + R"ART( + ;llll. + 0MMMMMM: + NMMMMMMMMd + .@ .cccccccccoWMMMMMMMMMM0 + @@ .MMMMMMMMMMMMMMMMMMMMMMMN + OMMMMMMMMMMMMMMMW. +.@ .MMMMMMMMMMMMMMMMMMM. +.@ dMMMMMMMMMMMMMMMMMMl OMMMMMMMMk + .OWMMMMM; dMMMMMMMMMk + .MMMMMMMMMk + @@ ooooooooooooooooooo .MMMMMMMMMN + .@ oooooMMMMMMMMMMMMP NMMMMMMMMW. + KMMMMMMMMMM. 0MMMMMMMMM: + NMMMMMMMMM. dMMMMMMMMMd + .WMMMMMMMW. XMMMMMMMMO + .MMMMMMMk. xMMMMMMMMX +)ART", + {} + }}, + + { "afterglow", { + R"ART( + $2. + $1. $2.{! + $1.L! $2J@||* + $1gJJJJL` $2g@FFS" + $1,@FFFJF`$2_g@@LLP` + $1_@FFFFF`$2_@@@@@P` $4. + $1J@@@LLF $2_@@@@@P` $4.J! + $1g@@@@@" $2_@@@@@P`$3. $4.L|||* +$1g@@@@M" $2"VP`$3.L! $4<@JJJJ` + $1"@N" $3:||||! $4JFFFFS" + $3.{JJ||F`$4_gFFFF@' + $3.@FJJJF`$4,@LFFFF` + $3_@FFFFF $4VLLLP` + $3J@@LL@" $4`" + $3V@@" +)ART", + {} + }}, + + { "aix", { + R"ART( + `:+ssssossossss+-` + .oys///oyhddddhyo///sy+. + /yo:+hNNNNNNNNNNNNNNNNh+:oy/ + :h/:yNNNNNNNNNNNNNNNNNNNNNNy-+h: + `ys.yNNNNNNNNNNNNNNNNNNNNNNNNNNy.ys + `h+-mNNNNNNNNNNNNNNNNNNNNNNNNNNNNm-oh + h+-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN.oy +/d`mNNNNNNN/::mNNNd::m+:/dNNNo::dNNNd`m: +h//NNNNNNN: . .NNNh mNo od. -dNNNNN:+y +N.sNNNNNN+ -N/ -NNh mNNd. sNNNNNNNo-m +N.sNNNNNs +oo /Nh mNNs` ` /mNNNNNNo-m +h//NNNNh ossss` +h md- .hm/ `sNNNNN:+y +:d`mNNN+/yNNNNNd//y//h//oNNNNy//sNNNd`m- + yo-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNm.ss + `h+-mNNNNNNNNNNNNNNNNNNNNNNNNNNNNm-oy + sy.yNNNNNNNNNNNNNNNNNNNNNNNNNNs.yo + :h+-yNNNNNNNNNNNNNNNNNNNNNNs-oh- + :ys:/yNNNNNNNNNNNNNNNmy/:sy: + .+ys///osyhhhhys+///sy+. + -/osssossossso/- +)ART", + {} + }}, + + { "almalinux", { + R"ART( +$1 'c:. +$1 lkkkx, .. $2.. ,cc, +$1 okkkk:ckkx' $2.lxkkx.okkkkd +$1 .:llcokkx' $2:kkkxkko:xkkd, +$1 .xkkkkdood: $2;kx, .lkxlll; +$1 xkkx. $2xk' xkkkkk: +$1 'xkx. $2xd .....,. +$3 .. $1:xkl' $2:c ..''.. +$3 .dkx' $1.:ldl:'. $2' $4':lollldkkxo; +$3 .''lkkko' $4ckkkx. +$3'xkkkd:kkd. .. $5;' $4:kkxo. +$3,xkkkd;kk' ,d; $5ld. $4':dkd::cc, +$3 .,,.;xkko'.';lxo. $5dx, $4:kkk'xkkkkc +$3 'dkkkkkxo:. $5;kx $4.kkk:;xkkd. +$3 ..... $5.;dk:. $5lkk. $4:;, + $5:kkkkkkkdoxkkx + ,c,,;;;:xkkd. + ;kkkkl... + ;kkkkl + ,od; +)ART", + {} + }}, + + { "alpine", { + R"ART( + .hddddddddddddddddddddddh. + :dddddddddddddddddddddddddd: + /dddddddddddddddddddddddddddd/ + +dddddddddddddddddddddddddddddd+ + `sdddddddddddddddddddddddddddddddds` + `ydddddddddddd++hdddddddddddddddddddy` +.hddddddddddd+` `+ddddh:-sdddddddddddh. +hdddddddddd+` `+y: .sddddddddddh +ddddddddh+` `//` `.` -sddddddddd +ddddddh+` `/hddh/` `:s- -sddddddd +ddddh+` `/+/dddddh/` `+s- -sddddd +ddd+` `/o` :dddddddh/` `oy- .yddd +hdddyo+ohddyosdddddddddho+oydddy++ohdddh +.hddddddddddddddddddddddddddddddddddddh. + `yddddddddddddddddddddddddddddddddddy` + `sdddddddddddddddddddddddddddddddds` + +dddddddddddddddddddddddddddddd+ + /dddddddddddddddddddddddddddd/ + :dddddddddddddddddddddddddd: + .hddddddddddddddddddddddh. +)ART", + {} + }}, + + { "alpine2", { + R"ART( + .:::::::::::::::::::::. + .:::::::::::::::::::::::. + .:::::::::::::::::::::::::. + .:::::::::::::::::::::::::::. + .:::::::::$2,db,$1::::::::::::::::. + .::::::::$2,d%%%%b,$1::$2,db,$1:::::::::. + .:::::::$2,%%%%P'%%%b,d%%%b,$1::::::::. +.::::::$2,%%%%P,$1:::$2`%%%b'^q%%b,$1:::::::. +'::::$2,%%%%P,d|$1:::::$2`%%%b:'^%%b,$1:::::' + '::$2`%%%'$1:$2'q$|$1:::::::$2'q%%b'`q%%b'$1::' + ':::::::::::::::::::::::::::::::' + ':::::::::::::::::::::::::::::' + ':::::::::::::::::::::::::::' + ':::::::::::::::::::::::::' + ':::::::::::::::::::::::' + ':::::::::::::::::::::' +)ART", + {} + }}, + + { "alpine2_small", { + R"ART( +$1 /\ /\ + /$2/ $1\ \ + /$2// $1\ \ +/$2// $1\ \ +$2// $1\ \ + \ +)ART", + {} + }}, + + { "alpine3_small", { + R"ART( + ,db, + ,d%%%%b, ,db, + ,%%%%P'%%%b,d%%%b, + ,%%%%P, `%%%b'^q%%b, + ,%%%%P,d| `%%%b '^%%b, +`%%%' 'q$| 'q%%b'`q%%b +)ART", + {} + }}, + + { "alpine_small", { + R"ART( + /\ /\ + // \ \ + // \ \ +/// \ \ +// \ \ + \ +)ART", + {} + }}, + + { "alter", { + R"ART( + %, + ^WWWw + 'wwwwww + !wwwwwwww + #`wwwwwwwww + @wwwwwwwwwwww + wwwwwwwwwwwwwww + wwwwwwwwwwwwwwwww + wwwwwwwwwwwwwwwwwww + wwwwwwwwwwwwwwwwwwww, + w~1i.wwwwwwwwwwwwwwwww, + 3~:~1lli.wwwwwwwwwwwwwwww. + :~~:~?ttttzwwwwwwwwwwwwwwww + #<~:~~~~?llllltO-.wwwwwwwwwww + #~:~~:~:~~?ltlltlttO-.wwwwwwwww + @~:~~:~:~:~~(zttlltltlOda.wwwwwww + @~:~~: ~:~~:~:(zltlltlO a,wwwwww + 8~~:~~:~~~~:~~~~_1ltltu ,www + 5~~:~~:~~:~~:~~:~~~_1ltq N,, + g~:~~:~~~:~~:~~:~:~~~~1q N, +)ART", + {} + }}, + + { "altlinux", { + R"ART( + ############## + ###################### + ########################## + ##+$2####$1####################### + #####$2#$1*$2###%+$1###################### + ########$2%$1*#$2%#####$1################### + ##########$2##$1*#*$2#######%+$1############## +#############$2%#############%$1############ +#############$2+################$1########## +##############$2################*$1######### +##############$2+################+$1######## +###############$2##########$1###$2+##%$1######## +###############$2+########$1######$2###$1####### +#############$2*####$1############$2%#+$1####### +############$2+###$3####$1##########$2%#*$1####### + ##########$2###*$3######$2+#+$1#####$2+##*$1###### + #########$2##%$3#####$2:%#####$1###$2###*$1##### + ########$2%#+$3######$2#############$1#### + #####$2##%:$3######$2:############$1## + ##$2+##*$3########$2############$1 + $2###$3#########$2##########$1 + $3########$2###### +)ART", + {} + }}, + + { "amazon", { + R"ART( + `-/oydNNdyo:.` + `.:+shmMMMMMMMMMMMMMMmhs+:.` + -+hNNMMMMMMMMMMMMMMMMMMMMMMNNho- +.`` -/+shmNNMMMMMMNNmhs+/- ``. +dNmhs+:. `.:/oo/:.` .:+shmNd +dMMMMMMMNdhs+:.. ..:+shdNMMMMMMMd +dMMMMMMMMMMMMMMNds odNMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +.:+ydNMMMMMMMMMMMh yMMMMMMMMMMMNdy+:. + `.:+shNMMMMMh yMMMMMNhs+:`` + `-+shy shs+:` +)ART", + {} + }}, + + { "amazon_linux", { + R"ART( + , $2#_$1 + ~\_ $2####_$1 + ~~ \_$2#####\$1 + ~~ \$2###|$1 + ~~ \$2#/$1 ___ + ~~ V~' '-> + ~~~ / + ~~._. _/ + _/ _/ + _/m/' +)ART", + {} + }}, + + { "amiga", { + R"ART( + ----.--- + :-==.-==- +$2 -=== ===: + ===-:===. +$3 -+++:=++= + =+++ +++. +$6 .+++-=++= +$4.::. ::: $6 :**+ +**- +$4 :--:.---. $6 .+**=-***. +$5 :--- ---::$6***:***+ +$5 .---::-$6=##*.*##- +$7 ----+$6##=:##*. +$7 :-$6###-*##+ +)ART", + {} + }}, + + { "amogos", { + R"ART( + ___________ + / \ + / $2______$1 \ + / $2/ \$1 \ + | $2( )$1 \ + / $2\______/$1 | + | | + / \ + | | + | | + / | + | | + | _______ | + ____/ / \ | +/ | | | +| / ____/ | +\_________/ / | + \ __/ + \_______/ +)ART", + {} + }}, + + { "anarchy", { + R"ART( + $2..$1 + $2..$1 + $2:..$1 + $2:+++.$1 + .:::++$2++++$1+::. + .:+######$2++++$1######+:. + .+#########$2+++++$1##########:. + .+##########$2+++++++$1##$2+$1#########+. + +###########$2+++++++++$1############: + +##########$2++++++$1#$2++++$1#$2+$1###########+ + +###########$2+++++$1###$2++++$1#$2+$1###########+ + :##########$2+$1#$2++++$1####$2++++$1#$2+$1############: + ###########$2+++++$1#####$2+++++$1#$2+$1###$2++$1######+ +.##########$2++++++$1#####$2++++++++++++$1#######. +.##########$2+++++++++++++++++++$1###########. + #####$2++++++++++++++$1###$2++++++++$1#########+ + :###$2++++++++++$1#########$2+++++++$1#########: + +######$2+++++$1##########$2++++++++$1#######+ + +####$2+++++$1###########$2+++++++++$1#####+ + :##$2++++++$1############$2++++++++++$1##: + .$2++++++$1#############$2++++++++++$1+. + :$2++++$1###############$2+++++++$1:: + .$2++. .:+$1##############$2+++++++$1.. + $2.:.$1 ..::++++++::..:$2++++$1+. + $2.$1 $2.:+++$1. + $2.:$1: + $2..$1 + $2..$1 +)ART", + {} + }}, + + { "android", { + R"ART( + -o o- + +hydNNNNdyh+ + +mMMMMMMMMMMMMm+ + `dMM$2m:$1NMMMMMMN$2:m$1MMd` + hMMMMMMMMMMMMMMMMMMh + .. yyyyyyyyyyyyyyyyyyyy .. +.mMMm`MMMMMMMMMMMMMMMMMMMM`mMMm. +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +-MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM- + +yy+ MMMMMMMMMMMMMMMMMMMM +yy+ + mMMMMMMMMMMMMMMMMMMm + `/++MMMMh++hMMMM++/` + MMMMo oMMMM + MMMMo oMMMM + oNMm- -mMNs +)ART", + {} + }}, + + { "android_small", { + R"ART( + ;, ,; + ';,.-----.,;' + ,' ', + / O O \ +| | +'-----------------' +)ART", + {} + }}, + + { "anduinos", { + R"ART( + $1+++++++++++ + +++++++++++++++++++++ + +++++++++++++++++++++++++++++++ +=+++++++++++++++++++++++++++++++++++++++= ++++++++++++++++++++++++++++++++++++++++++++++ +=++++++++++++++++++++++++++++++++++++++++++++ + ==+++++++++++++++++++++++++++++++++== + +++++++++++++++++++++++++++ +$2**** $1++=+++++++++++=++ $2**** +********** $1+++++++ $2********** +************** ************** + **************** **************** + *********************** +****** ************* ****** +*********** *** *********** +*************** *************** + *************** *************** + ********************* + *********** +)ART", + {} + }}, + + { "antergos", { + R"ART( +$2 `.-/::/-`` + .-/osssssssso/. + :osyysssssssyyys+- + `.+yyyysssssssssyyyyy+. + `/syyyyyssssssssssyyyyys-` + `/yhyyyyysss$1++$2ssosyyyyhhy/` + .ohhhyyyys$1o++/+o$2so$1+$2syy$1+$2shhhho. + .shhhhys$1oo++//+$2sss$1+++$2yyy$1+s$2hhhhs. + -yhhhhs$1+++++++o$2ssso$1+++$2yyy$1s+o$2hhddy: + -yddhhy$1o+++++o$2syyss$1++++$2yyy$1yooy$2hdddy- + .yddddhs$1o++o$2syyyyys$1+++++$2yyhh$1sos$2hddddy` +`odddddhyosyhyyyyyy$1++++++$2yhhhyosddddddo +.dmdddddhhhhhhhyyyo$1+++++$2shhhhhohddddmmh. +ddmmdddddhhhhhhhso$1++++++$2yhhhhhhdddddmmdy +dmmmdddddddhhhyso$1++++++$2shhhhhddddddmmmmh +-dmmmdddddddhhys$1o++++o$2shhhhdddddddmmmmd- +.smmmmddddddddhhhhhhhhhdddddddddmmmms. + `+ydmmmdddddddddddddddddddmmmmdy/. + `.:+ooyyddddddddddddyyso+:.` +)ART", + {} + }}, + + { "antix", { + R"ART( + \ + , - ~ ^ ~ - \ / + , ' \ ' , / + , \ '/ + , \ / , + ,___, \/ , + / | _ _ _|_ o /\ , +|, | / |/ | | | / \ , + \,_/\_/ | |_/|_/|_/_/ \, + , / ,\ + , / , ' \ + ' - , _ _ _ , ' +)ART", + {} + }}, + + { "anushos", { + R"ART( + $4####################### + $4# $2##### $4# + $4# $2####### $4# + $4# $2##$5O$2#$5O$2## $4# + $4# $2#$3#####$2# $4# + $4# $2##$1##$3###$1##$2## $4# + $4# $2#$1##########$2## $4# + $4# $2#$1############$2## $4# + $4# $2#$1######$5A_O$1####$2### $4# + $4# $3##$2#$1############$2##$3## $4# + $4#$3######$2#$1#######$2#$3######$4# + $4#$3#######$2#$1#####$2#$3#######$4# + $4# $3#####$2#######$3##### $4# + $4####################### + $4#$5╔═╗╔╗╔╦ ╦╔═╗╦ ╦╔═╗╔═╗$4# + $4#$5╠═╣║║║║ ║╚═╗╠═╣║ ║╚═╗$4# + $4#$5╩ ╩╝╚╝╚═╝╚═╝╩ ╩╚═╝╚═╝$4# + $4####################### + $4# $3WWW.ANUSHOS.ORG $4# + $4####################### +)ART", + {} + }}, + + { "aoscos", { + R"ART( + $2__ + $2gpBBBBBBBBBP + $2_gBBBBBBBBBRP + $24BBBBBBBBRP $4,_____ + $2`"" $4_g@@@@@@@@@@@@@%g> + $4__@@@@@@@@@@@@@@@@P" $1___ + $4_g@@@@@@@@@@@@@@@N"` $1_gN@@@@@N^ + $4_w@@@@@@@@@@@@@@@@P" $1_g@@@@@@@P" + $4_g@@@@@@@@@@@@@@@N"` $1VMNN@NNNM^` +$4^MMM@@@@@@@@@@@MP" $3,ggppww__ + $4`""""" $3_wNNNNNNNNNNNNNNNNNNN + $3_gBNNNNNNNNNNNNNNNNNP" + $3_wNNNNNNNNNNNNNNNNNNMP` + $3_gBNNNNNNNNNNNNNNNNNP" + $3_wNNNNNNNNNNNNNNNNNNNM^ + $3""Y^^MNNNNNNNNNNNNP` + $3`""""""" +)ART", + {} + }}, + + { "aoscos_old", { + R"ART( + .:+syhhhhys+:. + .ohNMMMMMMMMMMMMMMNho. + `+mMMMMMMMMMMmdmNMMMMMMMMm+` + +NMMMMMMMMMMMM/ `./smMMMMMN+ + .mMMMMMMMMMMMMMMo -yMMMMMm. + :NMMMMMMMMMMMMMMMs .hMMMMN: + .NMMMMhmMMMMMMMMMMm+/- oMMMMN. + dMMMMs ./ymMMMMMMMMMMNy. sMMMMd +-MMMMN` oMMMMMMMMMMMN: `NMMMM- +/MMMMh NMMMMMMMMMMMMm hMMMM/ +/MMMMh NMMMMMMMMMMMMm hMMMM/ +-MMMMN` :MMMMMMMMMMMMy. `NMMMM- + dMMMMs .yNMMMMMMMMMMMNy/. sMMMMd + .NMMMMo -/+sMMMMMMMMMMMmMMMMN. + :NMMMMh. .MMMMMMMMMMMMMMMN: + .mMMMMMy- NMMMMMMMMMMMMMm. + +NMMMMMms/.` mMMMMMMMMMMMN+ + `+mMMMMMMMMNmddMMMMMMMMMMm+` + .ohNMMMMMMMMMMMMMMNho. + .:+syhhhhys+:. +)ART", + {} + }}, + + { "aoscosretro", { + R"ART( +$2 ......... + ................... + .....................$1################$2 + .............. ....$1################$2 +.............. ...$1################$2 +............. ..$1****************$2 +............ . .$1****************$2 +........... ... $1................$2 +.......... ..... $1...............$2 +......... ....... ... + .$3...... $2. + $3..... .....$2.... $4........... + $3.... ......$2. $4........... + $3... ....... $4........... + $3................ $4*********** + $3................ $4########### + $3**************** + $3################ +)ART", + {} + }}, + + { "aoscosretro_small", { + R"ART( +$2 _____ $1_____$2 + -' '-$1| |$2 + / ___ $1| |$2 +| / _ \$1|_____|$2 +' / /_\ \ + \ / _____ \$4___ + $3|$2/_/ $3| $4| | + $3| | $4|___| + $3|_____| +)ART", + {} + }}, + + { "aperture", { + R"ART( + .,-:;//;:=, + $8. $1:H@@@MM@M#H/.$2,+%;, + $8,/X+ $1+M@@M@MM%=,$2-%HMMM@X/, + $8-+@MM; $1$$M@@MH+-,$2;XMMMM@MMMM@+- + $8;@M@@M- $1XM@X;. $2-+XXXXXHHH@M@M#@/. + $8,%MM@@MH $1,@%= $2.---=-=:=,. + $8=@#@@@MX., $3-%HX$$$$%%%:; + $7=-$8./@M@M$$ $3.;@MMMM@MM: + $7X@/$8 -$$MM/ $3. +MM@@@M$$ +$7,@M@H:$8 :@: $4. $3=X#@@@@- +$7,@@@MMX,$8 . $4/H- $3;@M@M= +$7.H@@@@M@+, $4%MM+. $3%#$. + $7/MMMM@MMH/. $4XM@MH; $3=; + $7/%+%$$XHH@$$= $5, $4.H@@@@MX, + $6=----------. $5-%H.$4,@@@@@MX, + $6.%MM@@@HHHXX$$$$$$%+- $5.:$$MMX$4 =M@@MM%. + $6=XMMM@MM@MM#H;$5,-+HMM@M+$4 /MMMX= + $6=%@M@M#@$$-$5.=$@MM@@@M;$4 %M%= + $6,:+$$+-$5,/H#MMMMMMM@=$4 =, + $5=++%%%%+/:-. +)ART", + {} + }}, + + { "apricity", { + R"ART( + ./o- + ``...`` `:. -/: + `-+ymNMMMMMNmho-` :sdNNm/ + `+dMMMMMMMMMMMMMMMmo` sh:.:::- + /mMMMMMMMMMMMMMMMMMMMm/`sNd/ + oMMMMMMMMMMMMMMMMMMMMMMMs -` +:MMMMMMMMMMMMMMMMMMMMMMMMM/ +NMMMMMMMMMMMMMMMMMMMMMMMMMd +MMMMMMMmdmMMMMMMMMMMMMMMMMd +MMMMMMy` .mMMMMMMMMMMMmho:` +MMMMMMNo/sMMMMMMMNdy+-.`-/ +MMMMMMMMMMMMNdy+:.`.:ohmm: +MMMMMMMmhs+-.`.:+ymNMMMy. +MMMMMM/`.-/ohmNMMMMMMy- +MMMMMMNmNNMMMMMMMMmo. +MMMMMMMMMMMMMMMms:` +MMMMMMMMMMNds/. +dhhyys+/-` +)ART", + {} + }}, + + { "arch", { + R"ART( + -` + .o+` + `ooo/ + `+oooo: + `+oooooo: + -+oooooo+: + `/:-:++oooo+: + `/++++/+++++++: + `/++++++++++++++: + `/+++o$2oooooooo$1oooo/` + ./$2ooosssso++osssssso$1+` +$2 .oossssso- +)ART", + {"archlinux", "arch-linux"} + }}, + + { "arch2", { + R"ART( + ▄ + ▟█▙ + ▟███▙ + ▟█████▙ + ▟███████▙ + ▂▔▀▜██████▙ + ▟██▅▂▝▜█████▙ + ▟█████████████▙ + ▟███████████████▙ + ▟█████████████████▙ + ▟███████████████████▙ +$2 ▟█████████▛▀▀▜████████▙ + ▟████████▛ ▜███████▙ + ▟█████████ ████████▙ + ▟██████████ █████▆▅▄▃▂ + ▟██████████▛ ▜█████████▙ + ▟██████▀▀▀ ▀▀██████▙ + ▟███▀▘ ▝▀███▙ +▟▛▀ ▀▜▙ +)ART", + {} + }}, + + { "arch3", { + R"ART( + . + / \ + / \ + / \ + / \ + />, \ + / `*. \ + / ` \ + / \ + / \ +$2 / ,.-+-.. \ + / ,/' `\. \ + / .|' `|. _ \ + / :|. ,|; `+.\ + / .\: ;/, "<\ + / __,--+" "+--.__ \ + / _,+'" "'+._ \ + /,-' `-.\ +' ' +)ART", + {} + }}, + + { "arch_old", { + R"ART( + __ + _=(SDGJT=_ + _GTDJHGGFCVS) + ,GTDJGGDTDFBGX0 +$1 JDJDIJHRORVFSBSVL$2-=+=,_ +$1 IJFDUFHJNXIXCDXDSV,$2 "DEBL +$1 [LKDSDJTDU=OUSCSBFLD.$2 '?ZWX, +$1 ,LMDSDSWH' `DCBOSI$2 DRDS], +$1 SDDFDFH' !YEWD,$2 )HDROD +$1 !KMDOCG &GSU|$2\_GFHRGO\' +$1 HKLSGP'$2 __$1\TKM0$2\GHRBV)' +$1JSNRVW'$2 __+MNAEC$1\IOI,$2\BN' +$1HELK['$2 __,=OFFXCBGHC$1\FD) +$1?KGHE $2\_-#DASDFLSV='$1 'EF +'EHTI !H + `0F' '! +)ART", + {} + }}, + + { "arch_small", { + R"ART( + /\ + / \ + / \ + / \ +$2 / ,, \ + / | | \ +/_-'' ''-_\ +)ART", + {} + }}, + + { "archbox", { + R"ART( + ...:+oh/:::.. + ..-/oshhhhhh` `::::-. + .:/ohhhhhhhhhhhh` `-::::. + .+shhhhhhhhhhhhhhhhh` `.::-. + /`-:+shhhhhhhhhhhhhh` .-/+shh + / .:/ohhhhhhhhh` .:/ohhhhhhhh + / `-:+shhh` ..:+shhhhhhhhhhhh + / .:ohhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / .+o+ `hhhhhhhhhhhhhhhhhhhh + / -hhhhh `hhhhhhhhhhhhhhhhhhhh + / ohhhhho `hhhhhhhhhhhhhhhhhhhh + /:::+`hhhhoos` `hhhhhhhhhhhhhhhhhs+` + `--/:` /: `hhhhhhhhhhhho/- + -/:. `hhhhhhs+:-` + ::::/ho/-` +)ART", + {} + }}, + + { "archcraft", { + R"ART( +$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢰⡆$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢠⣿⣿⡄$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$3⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢀⣾⣿⣿⣿⡀$3⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$4⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣷⡀$4⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣿⣿⣷$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$6⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢼⣿⣿⣿⣿⣿⣿⣿⣿⣧$6⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣰⣤⣈⠻⢿⣿⣿⣿⣿⣿⣿⣧$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣰⣿⣿⣿⣿⣮⣿⣿⣿⣿⣿⣿⣿⣧$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$3⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧$3⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$4⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧$4⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄ +$6⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣿⡿⣿⣿⡟$6⠄⠄$1⠸⣿⣿⡿⣿⣿⣿⣿⣿⣷⡀$6⠄⠄⠄⠄⠄⠄⠄⠄ +$1⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣿⡏$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⠈⣿⣿⣿⣿⣿⣷⡀$1⠄⠄⠄⠄⠄⠄⠄ +$2⠄⠄⠄⠄⠄⠄$1⢀⣼⣿⣿⣿⣿⣿⣿⡗$2⠄⠄⠄$1⢀⣠⣤⣀⠄⠄⠄$1⠸⣿⣿⣿⣿⣿⣿⣷⡀$2⠄⠄⠄⠄⠄⠄ +$3⠄⠄⠄⠄⠄$1⢀⣾⣿⣿⣿⣿⣿⡏⠁$3⠄⠄⠄$1⢠⣿⣿⣿⣿⡇$3⠄⠄⠄⠄$1⢙⣿⣿⣻⠿⣿⣷⡀$3⠄⠄⠄⠄⠄ +$4⠄⠄⠄⠄$1⢀⣾⣿⣿⣿⣿⣿⣿⣷⣤⡀$4⠄⠄⠄$1⠻⣿⣿⡿⠃$4⠄⠄⠄$1⢀⣼⣿⣿⣿⣿⣦⣌⠙⠄$4⠄⠄⠄⠄ +$5⠄⠄⠄$1⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀$5⠄⠄⠄ +$6⠄⠄$1⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁$6⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄$6⠄⠄ +$1⠄$1⣠⣿⣿⣿⣿⠿⠛⠋⠁$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⠉⠙⠻⢿⣿⣿⣿⣿⣆$1⠄ +$1⡰⠟⠛⠉⠁$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⠉⠙⠛⠿⢆ +)ART", + {} + }}, + + { "archcraft2", { + R"ART( + -o\ + :ooo: + .ooooo. + ooooooo. + +oooooooo. + -oooooooooo. + --:-+oooooooo. + yooo+=+sooooooo. + yoooooosooooooooo. + y+ooooooooooooooooo. + yoooooooooooooooooooo` + yoooooo+oo= :oo++ooooo` + :oooooo. +ooooo- + -ooooooo. .::. +ooosoo= + -oooooo` .oooo` +os-=o= + =ooooooo=: `oo+ :=ooo=--`. + +ooooooooos. .=sooooooo+- + .+osossos+-` `-+osososs+. + :sss+=-:` `:-=+ssss: +:=-:` `-=+: +)ART", + {} + }}, + + { "archlabs", { + R"ART( + 'c' + 'kKk, + .dKKKx. + .oKXKXKd. + .l0XXXXKKo. + c0KXXXXKX0l. + :0XKKOxxOKX0l. + :OXKOc. .c0XX0l. + :OK0o. $2...$1'dKKX0l. + :OX0c $2;xOx'$1'dKXX0l. + :0KKo.$2.o0XXKd'.$1lKXX0l. + c0XKd.$2.oKXXXXKd..$1oKKX0l. + .c0XKk;$2.l0K0OO0XKd..$1oKXXKo. + .l0XXXk:$2,dKx,.'l0XKo.$1.kXXXKo. + .o0XXXX0d,$2:x; .oKKx'$1.dXKXXKd. + .oKXXXXKK0c.$2;. :00c'$1cOXXXXXKd. + .dKXXXXXXXXk,$2. cKx'$1'xKXXXXXXKx' + 'xKXXXXK0kdl:. $2.ok; $1.cdk0KKXXXKx' + 'xKK0koc,.. $2'c, $1 ..,cok0KKk, + ,xko:'. $2.. $1 .':okx; + .,'. .',. +)ART", + {} + }}, + + { "archstrike", { + R"ART( +$1 * + **. + **** + ****** + ******* + ** ******* + **** ******* + $1****$2_____$1***$2/$1* + ***$2/$1*******$2//$1*** + **$2/$1********$2///$1*$2/$1** + **$2/$1*******$2////$1***$2/$1** + **$2/$1****$2//////.,$1****$2/$1** + ***$2/$1*****$2/////////$1**$2/$1*** + ****$2/$1**** $2/////$1***$2/$1**** + ******$2/$1*** $2//// $1**$2/$1****** + ********$2/$1* $2/// $1*$2/$1******** + ,****** $2// ______ / $1******, +)ART", + {} + }}, + + { "arco", { + R"ART( + /- + ooo: + yoooo/ + yooooooo + yooooooooo + yooooooooooo + .yooooooooooooo + .oooooooooooooooo + .oooooooarcoooooooo + .ooooooooo-oooooooooo + .ooooooooo- oooooooooo + :ooooooooo. :ooooooooo + :ooooooooo. :ooooooooo + :oooarcooo .oooarcooo + :ooooooooy .ooooooooo + $1:ooooooooo $2/ooooooooooooooooooo + $1:ooooooooo $2.-ooooooooooooooooo. + $1ooooooooo- $2-ooooooooooooo. + $1ooooooooo- $2.-oooooooooo. +$1ooooooooo. $2-ooooooooo +)ART", + {} + }}, + + { "arco_small", { + R"ART( + A + ooo + ooooo + ooooooo + ooooooooo + ooooo ooooo + ooooo ooooo + ooooo ooooo + ooooo $2$1 + ooooo $2$1 +ooooo $2 +)ART", + {} + }}, + + { "arkane", { + R"ART( + .:.. + ..:::...... + $2.$1 .$2.$1..... + $2+=$1...$2==$1.... + ......:.$3:-$2:$1..$3+*$2=$1.... + $2:----::$1...... + $2.=***##*+=: $1.. + $2=$3***######*$2= + $2.$3-*######+ + $2:+$3###%%%###$1: + $2-+*$3########+$1. + $2=++*$3#######$1- + $2-+=+**$3*####$1= + $1.$2-=++==***$3##*$1- + $2-++++++==++++= + .-+++**+++=+===$1. +$2:---===++++=-=--$1. +$2-===============$1-==--: +$2.-==+++***++*$3*#########$1=:::. + $2.-=++++*++++**$3#######%%###$1= + $2.:==++++++**$3#############$1: + $2.$1-+*++*+++==$3###$1+ + -$3*+$1: +)ART", + {} + }}, + + { "armbian", { + R"ART( + .. + `:]x**j-,' + .,+t***********z\<" + ?******************; + '*n` .'`^,;;,^`'. ,cc. + -<. .[l + // ^^ ^^ \\ + !^ $2^^$1 ": + 'tt}` $2!~]rj_$1 ")t/. + Itttt?' $2~~]rr]$1 `{tttt, + \tttttt!""I$2_]r($1"""~tttttt1 + '_tttttttttttt$2)f$1tttttttttttti. + \*ztttttttttttttttttttttttttf**[ +l**c)tttttttttttttttttttttttt(z**, +.z*x.`tttttttttttttttttttttttt.`u*n +>` (tttttttttttttttttttttt] "I + ,tttttttttttttttttttttt` + ./ttttt$2f$1tttttttt$2f$1ttttt( + 'I)$2))(\()($1tt$2))|\()($1{;' + $2.~~~~~~~|)~~~~~~~<$1 + '$2[)))))1$1|($2)))))))$1? + $2",,," ",,,^ +)ART", + {} + }}, + + { "armbian2", { + R"ART( + █ █ █ █ █ █ █ █ █ █ █ + ███████████████████████ +▄▄██ ██▄▄ +▄▄██ ███████████ ██▄▄ +▄▄██ ██ ██ ██▄▄ +▄▄██ ██ ██ ██▄▄ +▄▄██ ██ ██ ██▄▄ +▄▄██ █████████████ ██▄▄ +▄▄██ ██ ██ ██▄▄ +▄▄██ ██ ██ ██▄▄ +▄▄██ ██ ██ ██▄▄ +▄▄██ ██▄▄ + ███████████████████████ + █ █ █ █ █ █ █ █ █ █ █ +)ART", + {} + }}, + + { "arselinux", { + R"ART( + ⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⣴⣶⠀⠀⠀⠀⠀ +⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣄⠀⠀⠀⠀⣼⠟⠁⠀⠀⢀⣀⠀ +⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⢀⣤⡀⠀⠀⠀⠉⢻⣷⡄⠀⠀⠁⠀⢀⣤⣾⡿⠟⠀ +⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣷⣿⠏⠀⠀⠀⠀⠀⠀⠹⣿⡄⠀⠀⠀⠙⠉⠁⠀⠀⠀ +⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⡄⠀⠀⠀⠀⠀⠀⠀⢹⣿⠀⠀⠀⠀⠠⣶⣶⣶⡶ +⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀ +⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀ +⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠂⠀⠀⠀⠀⠀⢀⣾⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠇⠀⠀⠀⠀⠀⣠⣾⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⣇⣀⣀⣀⣠⣴⣾⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⢸⣿⠀⠀⠀⠀⠀⣤⣤⣴⣶⣾⠿⠟⣿⡏⠙⠛⠛⠛⠋⠉⢀⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⣿⡄⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⢸⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⠇⠀⠀⠀⠀⠀⠀⠘⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +)ART", + {} + }}, + + { "artix", { + R"ART( + ' + 'o' + 'ooo' + 'ooxoo' + 'ooxxxoo' + 'oookkxxoo' + 'oiioxkkxxoo' + ':;:iiiioxxxoo' + `'.;::ioxxoo' + '-. `':;jiooo' + 'oooio-.. `'i:io' + 'ooooxxxxoio:,. `'-;' + 'ooooxxxxxkkxoooIi:-. `' + 'ooooxxxxxkkkkxoiiiiiji' + 'ooooxxxxxkxxoiiii:'` .i' + 'ooooxxxxxoi:::'` .;ioxo' + 'ooooxooi::'` .:iiixkxxo' + 'ooooi:'` `'';ioxxo' + 'i:'` '':io' +'` `' +)ART", + {} + }}, + + { "artix2", { + R"ART( + .: + .==: + .====: + .======: + .========: + .==========: + .============: + .-===========: + .:-========: + .-:. .:======: + .======:.. :-===. + .============:.. .:=. + .==================:.. + .=======================: + .====================::. . + ================::. :-=== + ============-:. .:======== + ========-:. :-========== + =====:. ..:-===== + =::. ..:: +)ART", + {} + }}, + + { "artix2_small", { + R"ART( + /\ + / \ + /`'.,\ + / ', + / ,`\ + / ,.'`. \ +/.,'` `'.\ +)ART", + {} + }}, + + { "artix_small", { + R"ART( + ' + 'A' + 'ooo' + 'ookxo' + `ookxxo' + '. `ooko' + 'ooo`. `oo' + 'ooxxxoo`. `' + 'ookxxxkooo.` . + 'ookxxkoo'` .'oo' + 'ooxoo'` .:ooxxo' + 'io'` `'oo' +'` `' +)ART", + {} + }}, + + { "arya", { + R"ART( +$1 `oyyy/$2-yyyyyy+ +$1 -syyyy/$2-yyyyyy+ +$1 .syyyyy/$2-yyyyyy+ +$1 :yyyyyy/$2-yyyyyy+ +$1 `/ :yyyyyy/$2-yyyyyy+ +$1 .+s :yyyyyy/$2-yyyyyy+ +$1 .oys :yyyyyy/$2-yyyyyy+ +$1 -oyys :yyyyyy/$2-yyyyyy+ +$1 :syyys :yyyyyy/$2-yyyyyy+ +$1 /syyyys :yyyyyy/$2-yyyyyy+ +$1 +yyyyyys :yyyyyy/$2-yyyyyy+ +$1 .oyyyyyyo. :yyyyyy/$2-yyyyyy+ --------- +$1 .syyyyyy+` :yyyyyy/$2-yyyyy+-+syyyyyyyy +$1 -syyyyyy/ :yyyyyy/$2-yyys:.syyyyyyyyyy +$1:syyyyyy/ :yyyyyy/$2-yyo.:syyyyyyyyyyy +)ART", + {} + }}, + + { "asahi", { + R"ART( + ## $2** + $1*####$2****. + $1###$2, + $3...,$1/#$3,,,.. + $3/*,,,,,,,,$1*$3,........$4,, + $3,((((((//*,,,,,,,,$4,...... + $3(((((((((((((($5%..$4.......... + $3,((((((((((((((($5@@($4............ + $3((((((((((((((((($5@@@@/$4............ + $3,(((((((((((((((((($5@@@@@&*$4........... + $3(((((((((((((((((((($5@@@@@@@&$4,........... +$3((((((((((((((((((((($5@@@$6&%&$5@@@%$4,.......... + $3/((((((((((((((((((($5@@@$6&%%&$5@@@@($4........ + $3,(((((((((((((((($5@@@$6&&$5@@&/&@@@/$4.. + $3/(((((((((((($5@@@@@@/$4.../&& + $3.((((((((($5@@@@($4.... + $3/((((($5@@#$4... + $3.(($4&, +)ART", + {} + }}, + + { "asahi2", { + R"ART( + $1_wwM $2_ww + $1MMM$2MMMM + $1MM + $3_ww##############yy_ + $4wMMMMM$3###########$4MMMMm + $4,MMMMMMMMM$3######$4MMMMMMMM0_ + $4wMMMMMMMMMMMMM$5MM$60MMMMMMMMMMm + $4,MMMMMMMMMMMMMMM$5MMMM$60MMMMMMMMM0, + $4wMMMMMMMMMMMMMMMM$5MMMMM0$6MMMMMMMMMMb + $4_MMMMMMMMMMMMMMMMMM$5MMMMMMM0$6MMMMMMMMM0, + $4_MMMMMMMMMMMMMMMMMMM$5MMMM$7M$5MMMW$6MMMMMMMMMM_ +$4_MMMMMMMMMMMMMMMMMMMM$5MMMM$7M0$5MMMW$6MMMMMMMMMM_ + $4~MMMMMMMMMMMMMMMMM$5MMMM$7M$5MMMW$6MMMMM00~ + $4~MMMMMMMMMMMMM$5MMMWMMM$60MM$5MMM$6~ + $4~MMMMMMMMMM$5MMMMM$60MMM~~ + $4~MMMMMM$5MMM$60MM~ + $4~MM$5M$6@~ + $4M +)ART", + {} + }}, + + { "aster", { + R"ART( + ...''... + .;oOXWMWNXXXNMMN0d:. + .oXMWOo;.. ..:oO; + ;KMWx, co, + 'KMNl dMMW. + oMMx xMMMMk + xMM: dMMMMMM; + cMMl dMMMMMMMW + NMK xMMMx::dXMx +,MMl xMMN' .o. +cMM; dMMW' +;MMc oMMW, + WMK dMMW, ccccccc. + lMMl oMMM; ooooooo. + OMMc ... + xMMx + ;XMN: + ,. +)ART", + {} + }}, + + { "asteroidos", { + R"ART( +$1 *** +$1 ***** +$1 ********** +$1 *************** +$1 *///****////****////. +$2 (/////// /////// ///////( +$2 /(((((//* //, //((((((. +$2 ((((((((((( ((( (((((((( +$2 *((((((((((((((((((((((( (((((((( +$3 (((((#(((((((#((((( ((#((((( +$3 (#(#(#####(#(#, ####(#(# +$3 ######### ######## +$3 /######## ######## +$4 #######%####### +$4 (#%%%%%%%# +$4 %%%%% +$4 %%% +)ART", + {} + }}, + + { "astos", { + R"ART( + oQA#$%UMn + H 9 + G # + 6 % + ?#M#%KW3" + // \\ + // \\ + // \\ + // \\ + n%@$DK&ML .0O3#@&M_ + P # 8 W + H U G # + B N O @ + C&&#%HNAR 'WS3QMHB" + // \\ \\ + // \\ \\ + // \\ \\ + // \\ \\ +uURF$##Bv nKWB$%ABc aM@3R@D@b +8 M @ O # % +% & G U @ @ +& @ # % % # +!HGN@MNCf t&S9#%HQr ?@G#6S@QP +)ART", + {} + }}, + + { "astra_linux", { + R"ART( + AA + AaaA + Aa$2/\$1aA +$1 Aa$2/$1aa$2\$1aA +$1 Aa$2/$1aAAa$2\$1aA +$1 aA$2/$1aaAAaa$2\$1Aa +$1 aA$2/$1aaAAAAaa$2\$1Aa +$1 aaaaaaAAAAa$2/$1aaAAAAAAaa$2\$1aAAAAaaaaa +$1aAAa$2-----$1aaaaaAAAAAAAAAAaaaaa$2-----$1aAAa +$1 aAA$2\ $1aAAAAAAAAAAAAAAAAAAAAAAa$2 /$1AAa +$1 aAa$2\$1aAAA$2\$1AAAA$2\$1AAAA$2\$1AAA$2\$1AAa$2/$1aAa +$1 aAa$2\$1aA$2\\$1AAA$2\\$1AAA$2\\$1AA$2\\/$1aAa +$1 aAA$2\$1aA$2\\$1AAA$2\\$1AAA$2\\$1Aa$2/$1AAa +$1 aA$2\$1aA$2\\$1AAA$2\\$1AAA$2\\/$1Aa +$1 aA$2/$1AA$2\\\$1AA$2\\\$1AA$2\\\$1Aa +$1 aA$2/\$1AAa$2\\\$1Aa$2\\\$1Aa$2\\\$1Aa +$1 aA$2/\\$1AAa$2\\/\$1a$2\\\$1Aa$2\\$1Aa +$1 aA$2/$1a$2\\\$1Aa$2\/$1AA$2\\\\\$1Aa$2\\$1Aa +$1 aA$2/$1aA$2\\/$1aAa aAa$2\\\$1Aa$2\$1Aa +$1 aA$2/\$1A$2\/$1Aa aA$2\\$1A$2\\$1Aa +$1 A$2|/$1aaAa aAaa$2\|$1A +$1 aAaa aaAa +)ART", + {} + }}, + + { "athenaos", { + R"ART( + u. + ..:Y + .Y..1 + ..::i::.. .br7S. + .::::...::::. 5dDr: + ..:::.. .:i::.. Y7: + ..:::::.. ..::::. + ...:i:i:i:.. $2... $1:.:..:i:::... + ::i:. $2.USL Yr $1..i::. +.:::. $2:K :u. $1.::. +:... $2jB. .:vUi: 77 KB: $1..:: +...: $2iBR vP::5X5PgSKXvLjS. iBB $1.::. +:i:: $2BBQr jgDIuj1UuJjXbbi 2BBP $1:::; +'i:: $2sQBg: i2S55121XSSU. YBQZ: $1.::: + r::: $2r:JgBMu. Q :BqEqZEB: Q :qBBK7i: $1:i:i + .rir. $2IBqPDgQBDr P rB :q 1QBRgEqgB $1.::i. + :i:i $2:JsXPDDRQQPBL P qQXBQRDDPIYY $1rir: + :iii $25qvLUDDMgMgBB5 :DBQZRgMDdJ7Ygi $1iir: + iri: $2MBRgdZZggQgRBMIBQQRRggdZdMBBr $1riri + irii $2IBQgdZbDDRRRgQgQQMZDdZdgBB. $1iiri + i7rr $2.BBQZZbEEMQQDBQMEZdDDBBP $1.rir: + :7ir. $27BBQMDMQSbB5ZBggQBBQ. $1ivr7. + :r7r. $27BBBB:rBbQ.1BBBM. $1:r7vi + ::rLrr. $2.b:rBQ7QB uU. $1:7vLi. + .BB .iLYv: $1idL B1 $1:r77r. + LBB :vrvvr rvu7r: + ZB. ':7v177Lsvurr:' + .d2 ''::r:'' + :' +)ART", + {} + }}, + + { "athenaos_old", { + R"ART( + . .. +$1 :####: ####. +$1 .################ +$1 :################## +$1.###################. +$1######## ####### +$1####### $2####$1 ##### +$1:#######. #### +$1 ######### $2#$1 ## # +$1 ####### $2##$1 #### +$1######## $2####$1 ####### +$1######## $2#####$1 ######## +$1######## $2#######$1 ####### +$1 ####### $2########$1 ####### +$1 ######## $2#########$1 ###### +$1 ######## $2#########$1 ##### +$1 ####### $2#########$1 #### +$1 ####### $2#########$1 ## +$1 ####### $2########$1 ## +$1 ###### $2########$1 # +$1 ### $2#######$1 +$1 $2######$1 +$1 $2####$1 +$1 $2##$1 +)ART", + {} + }}, + + { "aurora", { + R"ART( + +++++++++ + +++++$4+$1++++++$4+$1++ + ++++++$4+$1+++ +++++++++++ + +++++++++++ $2+$1 +++++$4+$1+++++ + ++++++$4+$1++++ $4+++$1 +++++++++++ + ++++++++++$4 + +++++ ++ $2+++++$4+$2++++ + +++$4+$1++++$4 + + + +++++++ + + $2+++++$4+$2++ +++++++$4 $2+$4 +++ +++++++++ +++ $2++++++++ ++++$4+$1++$4 + +++++ +++++ + +++++++$4 $2+$4 +++++ +++++ +++++ +++$4+$2+++$4 + +++++ ++++++ ++++++++++ +++++++$4 +++++ +++++ + +++++++++++++++++++ +++++++$4 + +++++ + +++++++++++++++ ++++$4++$2+$4 ++++++ +++++++++++++ +++++++$4 + ++++++ +++++++++++++ $2+++ $4++ +++++++$4 ++++++++++++++++ $2++$4+$2+ $4++ $1+ +++++++$4 ++++++++++++++ $3+ $2++++ +++++++$4 +++++++++++ + $4+ $3++++++ +++$4+$3+++$4 ++++++++++ +++ $3+++++++++++++ ++++++ $4+++++++++ + $3+++++++++++++ + +++ $4++++++++ $2++$4 + $3++++++++++++++ ++++ + ++ $4++++++++ $3+ ++++++++++++++ +++++++ + $4++++++ $2+ $3+++++++++++++ +++++++$2++ + $4++++ $3+++++++++++++ ++++++$2+++ + +++++++++++ ++++++$2+++ + +++++ ++++++$2+++ + ++++++$2++ + +++++ +)ART", + {} + }}, + + { "axos", { + R"ART( + ▂🬭𜴧⎻𜷗𜴗𜴦𜵎⎻𜴧🬭▂ + ▁▂𜴧━𜵼𜵶𜶮▂🬭🬭𜴐🭗 🬁𜴜🬭🬭▂𜶮▁𜵁━𜴧▂▁ + 𜷓𜵐🬂🬂🮂𜶮𜴸𜴪━𜴆🮂▔ ▔🮂𜴆━𜴩𜵳𜴸🮂🬂🬂𜶚🬿 + 🭄🬨▍ 🬜🮂▔ ▁▂▂🬭🬭▂▂▁ ▔🮂🬪 🮈🬕𜶿 + 🭄🭙▐▎𜵫 🭃██████████🭎 🭢𜶡🮇▌🭤𜶿 + 🭄🭙 ▐🭄🭙 🭋█████🭜𜴦█████🭀 🭤🭏▌ 🭤🭏 + 𜵫🭗 🮉🭛 🭃███🭝🭙 🭥🭒███🭎 🭦▋ 🭢𜶡 +▟🬮𜴧━🭷🭘 🭋████▄▂ ▂▄████🭀 🭣𜴇━𜴧🬯🭏 +🭕𜴸𜴆╾🭺🬽 🭃██🭡 🭖██🭐 🭈𜵡╼𜴆🬡🭠 + 𜴤🬼 🮉🭀 🭋███΄ 🭤███🭀 🭋▊ 🭇𜵐 + 𜴠🬾 ▐𜴢🬾▁▁ 🭃██𜴍 𜶘██🭐 ▁▁🭉🭫▌ 🭉🭠 + 𜴠🬾🮈▎𜶚 ▔🮂🬂▀🬎🬎 🮅🬎▀🬂🮂▔ 𜵐🮇▌🭉𜴏 + 𜴢🭿▍ 𜴬▂▁ ▁▂🬜΄🮈🬲𜴏 + 🭥𜶡🬭🬭▂𜶭▁𜵁━𜴧▂▁ ▁▂𜴧━𜶷𜶭𜶮▂🬭🬭𜵫🭚 + ▔⎺𜴆━𜴩▔𜶮🮂🬂🬂𜴜🬼 🭇𜴐🬂🬂🮂𜶮▔𜴨━𜴆⎺▔ + ⠈🮂🭷𜴆╾𜶦𜷞🭄𜴬╼𜴆🬂🮂΄ +)ART", + {} + }}, + + { "azos", { + R"ART( +$1 ////. $2 ((((( +$1//////// $2 @(((((((( +$1//////// $2 @(((((((( +$1//////// /////// $2 ((((((( @(((((((( +$1//////// ///////// $2 ((((((((( @(((((((( +$1//////// ///////// $2 ((((((((( @(((((((( +$1//////// ///////// ////// $2 (((((( ((((((((( @(((((((( +$1//////// ///////// //////// $2 (((((((( ((((((((( @(((((((( +$1//////// ///////// //////// $2 (((((((( ((((((((( @(((((((( +$1//////// ///////// //////// $2 ((((((( ((((((((( @(((((((( +$1//////// ///////// /// $2 ( ((((((((( @(((((((( +$1//////// ///////// $2 ((((((((( @(((((((( +$1//////// ///////// $2 &(((((((( @(((((((( +$1//////// ////// $2 @(((( @(((((((( +$1//////// $2 @(((((((( +$1//////// $2 @(((((((( +$1 ///// $2 ((((( +)ART", + {} + }}, + + { "azurelinux", { + R"ART( + $1_((((((((((_ + $1_(((((((((($2///////// + $1_((((((($2//////////// + $1_(((((($2///////////// + $1_(((((($2///////////// + $1_((((((($2\\\\\\\\\\\\\ + $1_((((((((($2\\\\\\\\\\\\\ + $1_((((((($3.........$2\\\\\\\\ + $1_((((($3...............$2\\\\\\ + $1_((((($3..................$2\\\\\ + $1_((((($3.....................$2\\\\ + $1_((((($3.......................$2\\\\ + $1_((((($3.........................$2\\\\ + $1_((((($3...........................$2\\\ + $1_((((($3.............................$2\\ +$1_(((($3................................$2\ +)ART", + {} + }}, + + { "azurelinux2", { + R"ART( + $1############ + $1###########$2@@@@@@@@@ + $1########$2@@@@@@@@@@@@ + $1#######$2@@@@@@@@@@@@@ + $1#######$2@@@@@@@@@@@@@ + $1########$2@@@@@@@@@@@@@ + $1##########$2@@@@@@@@@@@@@ + $1########$3&&&&&&&&&$2@@@@@@@@ + $1######$3&&&&&&&&&&&&&&&$2@@@@@@ + $1######$3&&&&&&&&&&&&&&&&&&$2@@@@@ + $1######$3&&&&&&&&&&&&&&&&&&&&&$2@@@@ + $1######$3&&&&&&&&&&&&&&&&&&&&&&&$2@@@@ + $1######$3&&&&&&&&&&&&&&&&&&&&&&&&&$2@@@@ + $1######$3&&&&&&&&&&&&&&&&&&&&&&&&&&&$2@@@ + $1######$3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$2@@ +$1#####$3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$2@ +)ART", + {} + }}, + + { "bedrock", { + R"ART( +-------------------------------------- +-------------------------------------- +-------------------------------------- +---$2\\\\\\\\\\\\$1----------------------- +----$2\\\ \\\$1---------------------- +-----$2\\\ \\\$1--------------------- +------$2\\\ \\\\\\\\\\\\\\\\\$1------ +-------$2\\\ \\\$1----- +--------$2\\\ \\\$1---- +---------$2\\\ ______ \\\$1--- +----------$2\\\ ///$1--- +-----------$2\\\ ///$1---- +------------$2\\\ ///$1----- +-------------$2\\\////////////////$1------ +-------------------------------------- +-------------------------------------- +-------------------------------------- +)ART", + {} + }}, + + { "bedrock_small", { + R"ART( + _________ +| $2__ $1 | +| $2\ \___ $1 | +| $2 \ _ \$1 | +| $2 \___/$1 | +|_________| +)ART", + {} + }}, + + { "berserkarch", { + R"ART( + .~?5P^ + :&@#Y~..!^ :^ + 7@&: ^JPP!!55#!~YB#7. + ^: !&@&.?&GJ5G##G&@@@@@@J:. + JP. @@#?#@&#@&5&@@@@@@@@@@G!: + ^PP: :#@&@@@@@@&#G&B#&@@@@@@@@&5^ + ~J Y@@@@&&@@@@@@#~Y@@@@@@@@@@@@@&Y. +:G .@@@PJ&@&&@@@&BP#@@@@@@@@@@@@@@??~ +5: .&@BG&@7J@@@!. .:!J&@@@@@@@@@@~ .. +? . :B@@@&BG@@@@!. .&@@@@@@@@@@~ +~ ?&&@&@#Y~^^: !#@@@@@@@@@@B. +. J&7:&@@^ ^@@@@@@@@@@&!G. + .&G~. J@@@@@@@@@@@# ! + . . ^YG@@@@@@@@@@@@!? + P. : ~#B&@@@@@@@@@@@B#@@. + Y@: ?&B@@@@@@@@@@@@&G?~P@@B + .?#5. .Y&@@@@@@@@@@&####BGB@@@@Y + !#G^ Y@@@@@@@@@@BP#&@@@@@@@@&!B^ + B@@#Y5##&&&@@@@@#&@@@@@@@@@#! ^ + ^YG#@@@@@@@@@@@@@@@@@@@@#J: + .~#@@@@@@@@@&&BP?^ +)ART", + {} + }}, + + { "biglinux", { + R"ART( + ... + :OWMMMNd. + :NMMMMMMMMWc + okkl. kMMMMMW0xdOWMl + : xMMMMMW. kMMMMNc lW. + :x NMMMMMO ,MMMM0. 'l + Xx "lkk" kMMMX .okx, +$2.MX .cc;. .xXKx. KMMM: .OMMMMMl +:MM' 'KMMMMWK: 0MMMMk xMMM. lWMMMMMMM' +cMMN:;xMMMMk::MMO oMMMMX .XMM. .KMMMWOOMMMd +'MMMMMMMMN, NMMx OMMMMl .kM0OMMMMk. ;MMd + xMMMMMMd .MMMW :NMMMd .ckKKx' KMc + dWMNd. oMMMN lkNMX, oM. + ;. ;MMMMx "MM:. cO +$3 .X. oMMMMW. l. + dMk:..;xWMMMMW, + kMMMMMMMMMMX. + :XMMMMMMK: + ':MM:" Made in Brazil +)ART", + {} + }}, + + { "bitrig", { + R"ART( + `hMMMMN+ + -MMo-dMd` + oMN- oMN` + yMd /NM: + .mMmyyhMMs + :NMMMhsmMh + +MNhNNoyMm- + hMd.-hMNMN: + mMmsssmMMMo + .MMdyyhNMMMd + oMN.`/dMddMN` + yMm/hNm+./MM/ +.dMMMmo.``.NMo +:NMMMNmmmmmMMh +/MN/-------oNN: +hMd. .dMh +sm/ /ms +)ART", + {} + }}, + + { "blackarch", { + R"ART( +$3 00 + 11 + ====$1 + .$3//$1 + `o$3//$1: + `+o$3//$1o: + `+oo$3//$1oo: + -+oo$3//$1oo+: + `/:-:+$3//$1ooo+: + `/+++++$3//$1+++++: + `/++++++$3//$1++++++: + `/+++o$2ooo$3//$2ooo$1oooo/` +$2 $1./$2ooosssso$3//$2osssssso$1+` +$2 .oossssso-`$3//$1`/ossssss+` + -osssssso. $3//$1 :ssssssso. + :osssssss/ $3//$1 osssso+++. + /ossssssss/ $3//$1 +ssssooo/- + `/ossssso+/:- $3//$1 -:/+osssso+- + `+sso+:-` $3//$1 `.-/+oso: + `++:. $3//$1 `-/+/ + .` $3/$1 `/ +)ART", + {} + }}, + + { "blackmesa", { + R"ART( + .-;+$$XHHHHHHX$$+;- + ,:X@@X%/;=----=:\%X@@X:, + =$$@@%=. .=+H@X: + -XMX: =XMX= + /@@: =H@+ + %@X. .$$@$$ + +@X, $$@% +/@@, .@@\ +%@% +@$$ +H@: :@H +H@: :HHHHHHHHHHHHHHHHHHX, =@H +%@% ;@M@@@@@@@@@@@@@@@@@H- +@$$ +=@@, :@@@@@@@@@@@@@@@@@@@@@= .@@: + =@X :@@@@@@@@@@@@@@@@@@@@@@:%@% + $$@$$, ;@@@@@@@@@@@@@@@@@M@@@@@@$$ + +@@HHHHHHH@@@@@@@@@@@@@@@@@@@@@@@ + =X@@@@@@@@@@@@@@@@@@@@@@@@@@@X= + :$$@@@@@@@@@@@@@@@@@@M@@@@$$: + \$$@@@@@@@@@@@@@@@@@@X/- + .-;+$$XXHHHHHX$$+;-. +)ART", + {} + }}, + + { "blackpanther", { + R"ART( +$3 ........ + .,»╔╗╗╬▄▄╫█▀▓▄▄╬╗╗g≈,. + ,j╗╬╣▓▓███████▌;»╙▀▀▀▀█▄▄╗j, + .≈╗╬▓██▀▀▀▀▀╠╙░░»»;:`$2``>$1▄ $3▐ ▓╫╗⌂, + .j╬▓█▀▒░░░░░░░░░»»»;: +)ART", + {} + }}, + + { "blag", { + R"ART( + d + ,MK: + xMMMX: + .NMMMMMX; + lMMMMMMMM0clodkO0KXWW: + KMMMMMMMMMMMMMMMMMMX' + .;d0NMMMMMMMMMMMMMMMMMMK. + .;dONMMMMMMMMMMMMMMMMMMMMMMx +'dKMMMMMMMMMMMMMMMMMMMMMMMMl + .:xKWMMMMMMMMMMMMMMMMMMM0. + .:xNMMMMMMMMMMMMMMMMMK. + lMMMMMMMMMMMMMMMMMMK. + ,MMMMMMMMWkOXWMMMMMM0 + .NMMMMMNd. `':ldko + OMMMK: + oWk, + ;: +)ART", + {} + }}, + + { "blankon", { + R"ART( +$2 `./ohdNMMMMNmho+.` $1 .+oo:` +$2 -smMMMMMMMMMMMMMMMMmy-` $1`yyyyy+ +$2 `:dMMMMMMMMMMMMMMMMMMMMMMd/` $1`yyyyys +$2 .hMMMMMMMNmhso/++symNMMMMMMMh- $1`yyyyys +$2 -mMMMMMMms-` -omMMMMMMN-$1.yyyyys +$2.mMMMMMMy. .yMMMMMMm:$1yyyyys +$2sMMMMMMy `sMMMMMMh$1yyyyys +$2NMMMMMN: .NMMMMMN$1yyyyys +$2MMMMMMm. NMMMMMN$1yyyyys +$2hMMMMMM+ /MMMMMMN$1yyyyys +$2:NMMMMMN: :mMMMMMM+$1yyyyys +$2 oMMMMMMNs- .sNMMMMMMs.$1yyyyys +$2 +MMMMMMMNho:.` `.:ohNMMMMMMNo $1`yyyyys +$2 -hMMMMMMMMNNNmmNNNMMMMMMMMh- $1`yyyyys +$2 :yNMMMMMMMMMMMMMMMMMMNy:` $1`yyyyys +$2 .:sdNMMMMMMMMMMNds/. $1`yyyyyo +$2 `.:/++++/:.` $1:oys+. +)ART", + {} + }}, + + { "bluelight", { + R"ART( + oMMNMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + -+++++++++++++++++++++++mM$2 + +)ART", + {} + }}, + + { "bodhi", { + R"ART( +$1| $2,,mmKKKKKKKKWm,, + $1' $2,aKKP$1LL**********|L*$2TKp, + $1t $2aKP$1L** +)ART", + {} + }}, + + { "bonsai", { + R"ART( +$2 ,####, + $2#######, $2,#####, + $2#####',# $2'###### + $2''###'$3';,,,'$2###' + $3 ,; '''' + $3 ;;; $2,#####, + $3 ;;;' ,,;$2;;### + $3 ';;;;''$2'####' + $3 ;;; + $3 ,.;;';'',,, + $3 ' ' +$1 # + # O + ##, ,##,',##, ,## ,#, , + # # # # #''# #,, # # # + '#' '##' # # ,,# '##;, # +)ART", + {} + }}, + + { "bredos", { + R"ART( + ████████████████ + ██████░░░░░░████░░░░██ ████ + ████░░░░████░░░░░░██░░░░░░██░░░░██ + ██░░░░░░░░░░██░░░░░░██░░░░░░░░██░░░░██ + ██░░░░░░░░░░██░░░░░░░░░░░░░░░░██░░░░░░██ +██▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓██ +██▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓██ +██▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓██ + ██████████████████████████ +)ART", + {} + }}, + + { "bsd", { + R"ART( +$1 , , + /( )` + \ \___ / | + /- _ `-/ ' + ($2/\/ \ $1\ /\ + $2/ / | ` $1\ + $3O O $2) $1/ | + $2`-^--'$1`< ' + (_.) _ ) / + `.___/` / + `-----' / +$4<----. __ / __ \ +$4<----|====$1O)))$4==$1) \) /$4====| +<----' $1`--' `.__,' \ + | | + \ / /\ + $5______$1( (_ / \______/ + $5,' ,-----' | + `--{__________) +)ART", + {} + }}, + + { "bunsenlabs", { + R"ART( + `++ + -yMMs + `yMMMMN` + -NMMMMMMm. + :MMMMMMMMMN- + .NMMMMMMMMMMM/ + yMMMMMMMMMMMMM/ +`MMMMMMNMMMMMMMN. +-MMMMN+ /mMMMMMMy +-MMMm` `dMMMMMM +`MMN. .NMMMMM. + hMy yMMMMM` + -Mo +MMMMN + /o +MMMMs + +MMMN` + hMMM: + `NMM/ + +MN: + mh. + -/ +)ART", + {} + }}, + + { "cachyos", { + R"ART( + $3.$1-------------------------: + .$2+=$1========================. + :$2++$1===$2++===$1===============- :$2++$1- + :$2*++$1====$2+++++==$1===========- .==: + -$2*+++$1=====$2+***++=$1=========: + =$2*++++=$1=======------------: + =$2*+++++=$1====- $3...$1 + .$2+*+++++$1=-===: .$2=+++=$1: + :$2++++$1=====-==: -***$2**$1+ + :$2++=$1=======-=. .=+**+$3.$1 +.$2+$1==========-. $3.$1 + :$2+++++++$1====- $3.$1--==-$3.$1 + :$2++$1==========. $3:$2+++++++$1$3: + $1.-===========. =*****+*+ + $1.-===========: .+*****+: + $1-=======$2++++$1:::::::::::::::::::::::::-: $3.$1---: + :======$2++++$1====$2+++******************=. + $1:=====$2+++$1==========$2++++++++++++++*- + $1.====$2++$1==============$2++++++++++*- + $1.===$2+$1==================$2+++++++: + $1.-=======================$2+++: + $3.......................... +)ART", + {} + }}, + + { "cachyos_old_small", { + R"ART( + /''''''''''''/ + /''''''''''''/ + /''''''/ +/''''''/ +\......\ + \......\ + \.............../ + \............./ +)ART", + {} + }}, + + { "cachyos_small", { + R"ART( + ........... + $2/,,,,$1...../ + $2/,,,$1..$2,,$1../ $2() + $2/,,,,$1../ + $2/,,,$1.../ $1/'\ +$2/,$1...../ $2\,/ +$2\,,,,,,\\ $1_ + $2\,,$1....\\ $1/ \ + $1\...$2,$1..\\ $2\_/ + $1\..$2,,,,,,,,,,,,/ + $1\$2,,$1........$2,,/ +)ART", + {} + }}, + + { "calculate", { + R"ART( + ...... + ,,+++++++,. + .,,,....,,,$2+**+,,.$1 + ............,$2++++,,,$1 + ............... + ......,,,........ + .....+*#####+,,,*+. + .....,*###############,..,,,,,,.. + ......,*#################*..,,,,,..,,,.. + .,,....*####################+***+,,,,...,++, + .,,..,..*#####################*, + ,+,.+*..*#######################. + ,+,,+*+..,########################* +.,++++++. ..+##**###################+ +..... ..+##***#################*. + .,.*#*****##############*. + ..,,*********#####****+. + $2.,++*****+++$1*****************$2+++++,.$1 + $2,++++++**+++++$1***********$2+++++++++,$1 + $2.,,,,++++,.. .,,,,,.....,+++,.,,$1 +)ART", + {} + }}, + + { "calinixos", { + R"ART( +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⠤⠔⠒⠒⠋⠉⠉⠉⠉⠓⠒⠒⠦⠤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠒⠉⣁⣠⣤⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣤⣄⣈⠙⠲⢤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠴⠋⢁⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡈⠑⢦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⣠⠞⢁⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠈⠢⡀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⢀⠞⠁⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠋⠉⠁⠀⠀⠀⠀⠈⠉⠙⠛⠿⣿⣿⣿⣿⣿⣿⠏⠀⠀⠀⠈⢢⡀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⡰⠃⣠⣾⣿⣿⣿⣿⣿⣿⡿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⢿⡿⠁⠀⠀⠀⠀⠀⠀⠙⣄⠀⠀⠀⠀ +⠀⠀⠀⡼⠁⣴⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢆⠀⠀⠀ +⠀⠀⡼⠀⣼⣿⣿⣿⣿⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣆⠀⠀ +⠀⣰⠁⣸⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀ +⢀⡇⢠⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⠀ +⢸⠀⣸⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄ +⣼⠀⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇ +⡇⠀⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢛⣿⣿⣿⣿⣿⣿⣿⡦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇ +⢻⠀⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇ +⢸⡀⢹⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠃ +⠀⣇⠘⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀ +⠀⠸⡄⢹⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠃⠀ +⠀⠀⢳⡀⢻⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠈⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠏⠀⠀ +⠀⠀⠀⠳⡀⠻⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣷⣄⡀⠀⠀⠀⠀⢠⠏⠀⠀⠀ +⠀⠀⠀⠀⠙⣄⠙⢿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣾⣿⣿⣿⣿⣿⣦⡀⠀⡰⠃⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠈⠢⡈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣤⣄⣀⡀⠀⠀⠀⠀⢀⣀⣠⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⣠⠞⠁⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠈⠢⡈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⣡⠞⠁⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⢤⡈⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⣁⠴⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠑⠢⢄⣉⠙⠛⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠛⠋⣉⡤⠖⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠓⠒⠢⠤⠤⠤⠤⠤⠤⠤⠤⠖⠒⠋⠉⠀ +)ART", + {} + }}, + + { "calinixos_small", { + R"ART( +⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠐⣂⣈⣩⣭⣭⣍⣀⣐⠀⠄⡀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⡀⠔⣨⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣅⠢⡀⠀⠀⠀⠀⠀ +⠀⠀⠀⠠⢊⣴⣾⣿⣿⣿⣿⠿⠟⠛⠛⠛⠛⠻⠿⣿⣿⣿⣿⠃⠀⠠⡀⠀⠀⠀ +⠀⠀⡐⢡⣾⣿⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠁⠀⠀⠀⠈⢆⠀⠀ +⠀⡘⢰⣿⣿⣿⡟⠁⠀⠀⢀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢂⠀ +⢠⢠⣿⣿⣿⡟⠀⠀⠀⠀⠀⠙⠿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡀ +⡄⢸⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁ +⡇⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣹⣿⣿⣿⣷⠄⠀⠀⠀⠀⠀⠀⠀⠀ +⠃⢸⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⡿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⡀ +⠘⡘⣿⣿⣿⣧⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠁ +⠀⠡⠸⣿⣿⣿⣧⡀⠀⠀⠀⠉⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⢀⠆⠀ +⠀⠀⠡⡘⢿⣿⣿⣿⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣿⣷⣦⡀⢀⠊⠀⠀ +⠀⠀⠀⠈⠊⡻⢿⣿⣿⣿⣿⣶⣤⣤⣤⣤⣤⣤⣶⣿⣿⣿⣿⡿⢟⠕⠁⠀⠀⠀ +⠀⠀⠀⠀⠀⠈⠢⢙⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⡩⠐⠁⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠂⠭⠉⠙⣛⣛⠋⠉⠭⠐⠂⠁⠀⠀⠀⠀ +)ART", + {} + }}, + + { "carbs", { + R"ART( + .......... + ..,;:ccccccc:;'.. + ..,clllc:;;;;;:cllc,. + .,cllc,... ..';;'. + .;lol;.. .. + .,lol;. + .coo:. + .'lol,. + .,lol,. + .,lol,. + 'col;. + .:ooc'. + .'col:. + .'cllc'.. .''. + ..:lolc,'.......',cll,. + ..;cllllccccclllc;'. + ...',;;;;;;,,... + ..... +)ART", + {} + }}, + + { "cbl_mariner", { + R"ART( + . + :- . + :==. .=: + :===: -==: + :-===: .====: + :-====- -=====: + -====== :=======: + -======. .=========: + -======: -==========. + -======- -===========. + :======- :===========. + :=======. .-==========. + :=======: -==========. + :=======- :==========. + :=======- .-========- +:--------. :========- + ..:::--=========- + ..::---================-=- +)ART", + {} + }}, + + { "celos", { + R"ART( + `-:/++++/:-` + -/syyyyyyyyyyyyy+- + :ssssyyyyyyyyyyyyyyyy/ + .osy$2mmmmmmmmmmmmmmmNNNNNmmhy+ + $1.sssshhhhhhhddddddddddddddds- + $1`osssssssyyyyyyyyyyyyyyyyyyhy` + $1:ssssssyyyyyyyyyyyyyyyyyyyyhh/ +$2sMMMMMMMMMMMMMMMMMMMMMMMh$1yyyyyyhho + :sssssssyyyyyyyyyyyyyyyyyyyhh/ + `ssssssssyyyyyyyyyyyyyyyyyyhy. + -sssssyddddddddddddddddddddy + -ssss$2hmmmmmmmmmmmmmmmmmmmyssss- + $1`/ssssyyyyyyyyyyyyyyyy+` + $1`:osyyyyyyyyyyyyys/` + $1`.:/+ooooo+:-` +)ART", + {} + }}, + + { "center", { + R"ART( + . + o, + . d, . + ';' ..d;.. .cl' + .:; 'oldO,.oo. + ..,:,xKXxoo;'. +,;;;;;ldxkONMMMXxkxc;;;;;. +.....':oddXWMNOxlcl:...... + .:dlxk0c;:. . + :d:.,xcld,.,:. + ;l, .l; ';' + .o; + l, +)ART", + {} + }}, + + { "centos", { + R"ART( + .. + .PLTJ. + <><><><> + $2KKSSV' 4KKK $1LJ$4 KKKL.'VSSKK + $2KKV' 4KKKKK $1LJ$4 KKKKAL 'VKK + $2V' ' 'VKKKK $1LJ$4 KKKKV' ' 'V + $2.4MA.' 'VKK $1LJ$4 KKV' '.4Mb. + $4. $2KKKKKA.' 'V $1LJ$4 V' '.4KKKKK $3. + $4.4D $2KKKKKKKA.'' $1LJ$4 ''.4KKKKKKK $3FA. +$4 + '$4VD $3KKKKKKKK'.. $2LJ $1..'KKKKKKKK $3FV + $4' $3VKKKKK'. .4 $2LJ $1K. .'KKKKKV $3' + $3'VK'. .4KK $2LJ $1KKA. .'KV' + $3A. . .4KKKK $2LJ $1KKKKA. . .4 + $3KKA. 'KKKKK $2LJ $1KKKKK' .4KK + $3KKSSA. VKKK $2LJ $1KKKV .4SSKK + $2<><><><> + $2'MKKM' + $2'' +)ART", + {} + }}, + + { "centos_small", { + R"ART( + $2____$1^$4____ + $2|\ $1|$4 /| + $2| \ $1|$4 / | +$4<---- $3----> + $3| / $2|$1 \ | + $3|/__$2|$1__\| + $2v +)ART", + {} + }}, + + { "cereus", { + R"ART( + .. + '::,..... + .,;:llll;. $4 ... + $2...... $1''''.$4 ':::;. + $2 ..,::lll::;,..$4 ::::;. + $2 ':llllllllllll:' $4 ;:::; + $2 .;llllllllllllllll' $4 ;::;. +$3 .... $2 .;lllllllllllllllll:. $4 ;::;. +$3 .;::::, $2 ,lllllllllllllllllll. $4 . +$3 .::::::.$2 .lllllllllllllllllll:. +$3 .::::::. $2 ,lllllllllllllllllll:.$3 ...... +$3 .;:::::'$2 .;lllllllllllllllllll,$3 .,::::::,. +$3 .;::::;.$2.:lllllllllllllllllll.$3 .,::::::::;. +$3 .,;::;$2;lllllllllllllllllll;$3 .:::::::::;. +$3 ...$2,lllllllllllllllllll.$3 ':::::::::,. +$2 .:lllllllllllllllll, $3 .;::::::::;. +$2 .:llllllllllllllll:.$3 .;::::::::,. +$2 ,llllllllllllllll'$3 .';:::::::;. +$5 ... $2 .llllllllllllllll;$3,,,,;:::::::;,. +$5.:l:. $2 ,llllllllllllll;$3,,:::::::;,'.. +$5.;::, $2 .;lllllllllllll,$3 ''''''''''' +$5 .:::. $2 ':lllllllllll:. +$5 .;::' $2 .,:llllllllll, +$5 .,::;. $2 .';lllllllll' +$5 .,::;'.. $2 .';lllllll,. +$5 ..,;::;,. $2 ...,;lll:. +$5 ...''. $2 ..',;'. +)ART", + {} + }}, + + { "chakra", { + R"ART( + _ _ _ "kkkkkkkk. + ,kkkkkkkk., 'kkkkkkkkk, + ,kkkkkkkkkkkk., 'kkkkkkkkk. + ,kkkkkkkkkkkkkkkk,'kkkkkkkk, + ,kkkkkkkkkkkkkkkkkkk'kkkkkkk. + "''"''',;::,,"''kkk''kkkkk; __ + ,kkkkkkkkkk, "k''kkkkk' ,kkkk + ,kkkkkkk' ., ' .: 'kkkk',kkkkkk + ,kkkkkkkk'.k' , ,kkkk;kkkkkkkkk + ,kkkkkkkk';kk 'k "'k',kkkkkkkkkkkk +.kkkkkkkkk.kkkk.'kkkkkkkkkkkkkkkkkk' +;kkkkkkkk''kkkkkk;'kkkkkkkkkkkkk'' +'kkkkkkk; 'kkkkkkkk.,""''"''"" + ''kkkk; 'kkkkkkkkkk., + ';' 'kkkkkkkkkkkk., + ';kkkkkkkkkk' + ';kkkkkk' + "''" +)ART", + {} + }}, + + { "chaletos", { + R"ART( + `.//+osso+/:`` + `/sdNNmhyssssydmNNdo:` + :hNmy+-` .-+hNNs- + /mMh/` `+:` `+dMd: + .hMd- -sNNMNo. /yyy /mMs` + -NM+ `/dMd/--omNh::dMM `yMd` + .NN+ .sNNs:/dMNy:/hNmo/s yMd` + hMs `/hNd+-smMMMMMMd+:omNy- `dMo +:NM. .omMy:/hNMMMMMMMMMMNy:/hMd+` :Md` +/Md` `sm+.omMMMMMMMMMMMMMMMMd/-sm+ .MN: +/Md` MMMMMMMMMMMMMMMMMMMN .MN: +:NN. MMMMMMm....--NMMMMMN -Mm. +`dMo MMMMMMd mMMMMMN hMs + -MN: MMMMMMd mMMMMMN oMm` + :NM: MMMMMMd mMMMMMN +Mm- + -mMy. mmmmmmh dmmmmmh -hMh. + oNNs- :yMm/ + .+mMdo:` `:smMd/` + -ohNNmhsoo++osshmNNh+. + `./+syyhhyys+:`` +)ART", + {} + }}, + + { "chapeau", { + R"ART( + .-/-. + ////////. + ////////$2y+$1//. + ////////$2mMN$1/////. + ////////$2mMN+$1////////. + ////////////////////////. + /////////+$2shhddhyo$1+////////. + ////////$2ymMNmdhhdmNNdo$1///////. +///////+$2mMms$1////////$2hNMh$1///////. +///////$2NMm+$1//////////$2sMMh$1/////// +//////$2oMMNmmmmmmmmmmmmMMm$1/////// +//////$2+MMmssssssssssssss+$1/////// +`//////$2yMMy$1//////////////////// + `//////$2smMNhso++oydNm$1//////// + `///////$2ohmNMMMNNdy+$1/////// + `//////////$2++$1////////// + `////////////////. + -////////- +)ART", + {} + }}, + + { "chimera_linux", { + R"ART( +$3ddddddddddddddc $1,cc: +$3ddddddddddddddc $1,cc: +$3ddddddddddddddd $1,cc: +$3ddddddddddddl:' $1,cc: +$3dddddddddl' $1..;cc: +$3dddddddo. $1,:cccccc: +$3ddddddl $1,ccc:''''' +$3dddddo. $1;ccc. ............ + .ccc. cccccccccccc +$2...... $1.ccc. .ccc''''''''' +$2OOOOOk. $1;ccc. .ccc; ...... +$2OOOOOOd $1'ccc:,....,:ccc' $4coooooo +$2OOOOOOOx. $1':cccccccc:' $4.looooooo +$2OOOOOOOOOd, $1`'''` $4.coooooooo +$2OOOOOOOOOOOOdc,. $4..,coooooooooooo +$2OOOOOOOOOOOOOOOO' $4.oooooooooooooooo +$2OOOOOOOOOOOOOOOO' $4.oooooooooooooooo +$2OOOOOOOOOOOOOOOO' $4.oooooooooooooooo +)ART", + {} + }}, + + { "chimera_linux2", { + R"ART( +888888888888 $2888 +$1888888888888 $2888 +$1888888888888 $2888 +$188888888P"' $2_,888 +$1888888P' $2,jd88888 +$188888P $2d88P' +$18888b $2j88' xxxxxxxxxx +$3_____ $218{ 8888888888 +$38888b. $2l88, ,88" $3______ +$3888888 $218b,_ ,d88P $3888888 +$3888888b. $2`188bwwd88P' $3,d888888 +$388888888b._ $2`"^^"'`$3.,d88888888 +$3888888888888bo od888888888888 +$388888888888888 88888888888888 +$388888888888888 88888888888888 +)ART", + {} + }}, + + { "chimera_linux_small", { + R"ART( +$3XXXXX $1I: +$3XXX' $1,I; +$3XX $1,f""'.,,,, +$2,, $1I: ;P""" +$2XX $1`t...f' $4jj +$2XXX. $1`"' $4.XXX +$2OOOOOC $4lXXXXX +)ART", + {} + }}, + + { "chonkysealos", { + R"ART( + .-/-. + .:-=++****++=-:. + .:=+*##%%%%%%%%%%##*+=:. + :=*#%%%%%%%%%%%%%%%%%%%%#*=: + :=*#%%%%%%%%%%%%%%%%%%%%%%%%#*=. + -+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%#+- + =+#%%%%@@@@@@@%%%%%%%@@@@@@@%%%%%#+= + =+#@%%%%*+=-==*%%%%%%%#+====*%%%%%@#+= +:+*%%%%@* +@%%%@# -@%%%%%*+: +=+#%%%%%%#+====*###%%##*=--=+*%%%%%%%#+= ++*%%%%%%%@@##%%%%*=::=#%%%##%@%%%%%%%%*+ ++*%%%%%%%@**@%%%%%@==@%%%%%@+#%%%%%%%%*+ +=+#%%%%%%@#*@%%%%%%**%%%%%@%+%%%%%%%%#+= +:+*%%%%%%%@#*####**###*####*%@%%%%%%%*+: + =+#@%%%%%%@%%%%%%%@@%%%%%%%%%%%%%%@#+= + =+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#+= + -+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%*+- + .=*#%%%%%%%%%%%%%%%%%%%%%%%%#*=. + :=*##%%%%%%%%%%%%%%%%%%##*=: + .:=+*##%%%%%%%%%%##*+=:. + .:-=++****++=-:. +)ART", + {} + }}, + + { "chrom", { + R"ART( +$2 .,:loool:,. + .,coooooooooooooc,. + .,lllllllllllllllllllll,. + ;ccccccccccccccccccccccccc; +$1 '$2ccccccccccccccccccccccccccccc. +$1 ,oo$2c::::::::okO$5000$30OOkkkkkkkkkkk: +$1.ooool$2;;;;:x$5K0$4kxxxxxk$50X$3K0000000000. +$1:oooool$2;,;O$5K$4ddddddddddd$5KX$3000000000d +$1lllllool$2;l$5N$4dllllllllllld$5N$3K000000000 +$1lllllllll$2o$5M$4dccccccccccco$5W$3K000000000 +$1;cllllllllX$5X$4c:::::::::c$50X$3000000000d +$1.ccccllllllO$5Nk$4c;,,,;cx$5KK$30000000000. +$1 .cccccclllllxOO$5OOO$1Okx$3O0000000000; +$1 .:ccccccccllllllllo$3O0000000OOO, +$1 ,:ccccccccclllcd$30000OOOOOOl. +$1 '::ccccccccc$3dOOOOOOOkx:. +$1 ..,::cccc$3xOOOkkko;. +$1 ..,:$3dOkxl:. +)ART", + {} + }}, + + { "cleanjaro", { + R"ART( +███████▌ ████████████████ +███████▌ ████████████████ +███████▌ ████████████████ +███████▌ +███████▌ +███████▌ +███████▌ +███████▌ +█████████████████████████ +█████████████████████████ +█████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +)ART", + {} + }}, + + { "cleanjaro_small", { + R"ART( +█████ ██████████ +█████ ██████████ +█████ +█████ +█████ +████████████████ +████████████████ +)ART", + {} + }}, + + { "clear_linux", { + R"ART( + BBB + BBBBBBBBB + BBBBBBBBBBBBBBB + BBBBBBBBBBBBBBBBBBBB + BBBBBBBBBBB BBB + BBBBBBBB$2YYYYY +$1 BBBBBBBB$2YYYYYY +$1 BBBBBBBB$2YYYYYYY +$1 BBBBBBBBB$2YYYYY$3W +$4 GG$1BBBBBBBY$2YYYY$3WWW +$4 GGG$1BBBBBBB$2YY$3WWWWWWWW +$4 GGGGGG$1BBBBBB$3WWWWWWWW +$4 GGGGGGGG$1BBBB$3WWWWWWWW +$4GGGGGGGGGGG$1BBB$3WWWWWWW +$4GGGGGGGGGGGGG$1B$3WWWWWW +$4GGGGGGGG$3WWWWWWWWWWW +$4GG$3WWWWWWWWWWWWWWWW + WWWWWWWWWWWWWWWW + WWWWWWWWWW + WWW +)ART", + {} + }}, + + { "clearos", { + R"ART( + `.--::::::--.` + .-:////////////////:-. + `-////////////////////////-` + -////////////////////////////- + `//////////////-..-//////////////` + ./////////////: ://///////////. + `//////:..-////: :////-..-//////` + ://////` -///:.``.:///-` ://///: +`///////:. -////////-` `:///////` +.//:--////:. -////-` `:////--://. +./: .////:. --` `:////- :/. +`//-` .////:. `:////- `-//` + :///-` .////:. `:////- `-///: + `/////-` -///: :///- `-/////` + `//////- `///: :///` .//////` + `:////: `///: :///` -////:` + .://: `///: :///` -//:. + .:: `///: :///` -:. + `///: :///` + `... ...` +)ART", + {} + }}, + + { "clover", { + R"ART( + `omo``omo` + `oNMMMNNMMMNo` + `oNMMMMMMMMMMMMNo` + oNMMMMMMMMMMMMMMMMNo + `sNMMMMMMMMMMMMMMNs` + `omo` `sNMMMMMMMMMMNs` `omo` + `oNMMMNo` `sNMMMMMMNs` `oNMMMNo` + `oNMMMMMMMNo` `oNMMNs` `oNMMMMMMMNo` +oNMMMMMMMMMMMNo` `sy` `oNMMMMMMMMMMMNo +`sNMMMMMMMMMMMMNo.$2oNNs$1.oNMMMMMMMMMMMMNs` +`oNMMMMMMMMMMMMNs.$2oNNs$1.oNMMMMMMMMMMMMNo` +oNMMMMMMMMMMMNs` `sy` `oNMMMMMMMMMMMNo + `oNMMMMMMMNs` `oNMMNo` `oNMMMMMMMNs` + `oNMMMNs` `sNMMMMMMNs` `oNMMMNs` + `oNs` `sNMMMMMMMMMMNs` `oNs` + `sNMMMMMMMMMMMMMMNs` + +NMMMMMMMMMMMMMMMMNo + `oNMMMMMMMMMMMMNo` + `oNMMMNNMMMNs` + `omo``oNs` +)ART", + {} + }}, + + { "cobalt", { + R"ART( +$1 /// +$1 ,////////////// +$1 /////////////////////////////// +$1 ///////////////$5***********$1////// + ////$5***********************$1///// + /////$5***********************$1//// + //////$5,,,,,,,,,,,,,,,,,,,,,,$1/// + //////$5,,,,,,,,,,,,,,,,,,,,,,,,,$1///// + /////$5,,,,,,,,,,,,,,,,,,,,,,,,,,,,$1///// +$4 *****$3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$4***** + ******$3,,,,,,,,,,,,,,,,,,,,,,,,,,,,$4***** + *******$3,,,,,,,,,,,,,,,,,,,,,,,,,$4****** + *******$3......................$4******* + ******$3....$4*********************** + **************************** + ***** +)ART", + {} + }}, + + { "codex", { + R"ART( +#: :+#@@@@%# +@@#: .*@@@@@@@@@ +@@@@#- .@@@@@@@@@@@ +@@@@@@%- %@@@@@@@@@@@ +@@@@@@@@%= :@@@@%%%%@@@@ +@@@@@@@@@@%==*-: .:=# +:*@@@@@@@@@@= + :*@@@@@@@@= + .*@@@@@@= + .+@@@@= + .+%@= + += +)ART", + {} + }}, + + { "condres", { + R"ART( +$1syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+$3.+. +$1`oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+$3:++. +$2/o$1+oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy/$3oo++. +$2/y+$1syyyyyyyyyyyyyyyyyyyyyyyyyyyyy$3+ooo++. +$2/hy+$1oyyyhhhhhhhhhhhhhhyyyyyyyyy$3+oo+++++. +$2/hhh+$1shhhhhdddddhhhhhhhyyyyyyy$3+oo++++++. +$2/hhdd+$1oddddddddddddhhhhhyyyys$3+oo+++++++. +$2/hhddd+$1odmmmdddddddhhhhyyyy$3+ooo++++++++. +$2/hhdddmo$1odmmmdddddhhhhhyyy$3+oooo++++++++. +$2/hdddmmms$1/dmdddddhhhhyyys$3+oooo+++++++++. +$2/hddddmmmy$1/hdddhhhhyyyyo$3+oooo++++++++++: +$2/hhdddmmmmy$1:yhhhhyyyyy+$3+oooo+++++++++++: +$2/hhddddddddy$1-syyyyyys+$3ooooo++++++++++++: +$2/hhhddddddddy$1-+yyyy+$3/ooooo+++++++++++++: +$2/hhhhhdddddhhy$1./yo:$3+oooooo+++++++++++++/ +$2/hhhhhhhhhhhhhy$1:-.$3+sooooo+++++++++++///: +$2:sssssssssssso++$1$3`:/:--------. +)ART", + {} + }}, + + { "cosmic", { + R"ART( + .xMMMMMMMMMMMMMMMMMMMMMMx. +JDMMMMMMMMMMMMMMMMMMMMMMMMOL +IMMMY' 'YMMMI +MMMM MMMM +MMMM MMMM +IMMMb dMMMI +'YMMMMMMMMb. .dMMMMMMMMK' + 'OMMMMMMMP' 'YMMMMMMMP' + + $2.x76767$36767676$476767$5676x. + $2'*76767$36767676$476767$5676*' +)ART", + {} + }}, + + { "crux", { + R"ART( + $1odddd + oddxkkkxxdoo + ddcoddxxxdoool + xdclodod olol + xoc xdd olol + xdc $2k00$1Okdlol + xxd$2kOKKKOkd$1ldd + xdco$2xOkdlo$1dldd + ddc:cl$2lll$1oooodo + odxxdd$3xkO000kx$1ooxdo + oxddx$30NMMMMMMWW0o$1dkkxo + oooxd$30WMMMMMMMMMW0o$1dxkx +docldkXW$3MMMMMMMWWN$1Odolco +xx$2dx$1kxxOKN$3WMMWN$10xdoxo::c +$2xOkkO$10oo$3odOW$2WW$1XkdodOxc:l +$2dkkkxkkk$3OKX$2NNNX0Oxx$1xc:cd + $2odxxdx$3xllo$2dddooxx$1dc:ldo + $2lodd$1dolccc$2ccox$1xoloo +)ART", + {} + }}, + + { "crux_small", { + R"ART( + ___ + ($3.· $1| + ($2<> $1| + / $3__ $1\ + ( $3/ \ $1/| +$2_$1/\ $3__)$1/$2_$1) +$2\/$1-____$2\/ +)ART", + {} + }}, + + { "crystal", { + R"ART( + mysssym + mysssym + mysssym + mysssym + mysssyd + mysssyd N + mysssyd mysym + mysssyd dysssym + mysssyd dysssym +mysssyd dysssym +mysssyd dysssym + mysssyd dysssym + mysssyd dysssym + mysym dysssym + N dysssym + dysssym + dysssym + dysssym + dysssym + dysssym +)ART", + {} + }}, + + { "cucumber", { + R"ART( + `.-://++++++//:-.` + `:/+//$2::--------$1:://+/:` + -++/:$2----..........----$1:/++- + .++:$2---...........-......---$1:++. + /+:$2---....-::/:/--//:::-....---$1:+/ + `++:$2--.....:---::/--/::---:.....--$1:++` + /+:$2--.....--.--::::-/::--.--.....--$1:+/ +-o:$2--.......-:::://--/:::::-.......--$1:o- +/+:$2--...-:-::---:::..:::---:--:-...--$1:+/ +o/:$2-...-:.:.-/:::......::/:.--.:-...-$1:/o +o/$2--...::-:/::/:-......-::::::-/-...-$1:/o +/+:$2--..-/:/:::--:::..:::--::////-..--$1:+/ +-o:$2--...----::/:::/--/:::::-----...--$1:o- + /+:$2--....://:::.:/--/:.::://:....--$1:+/ + `++:$2--...-:::.--.:..:.--.:/:-...--$1:++` + /+:$2---....----:-..-:----....---$1:+/ + .++:$2---..................---$1:++. + -/+/:$2----..........----$1:/+/- + `:/+//$2::--------:::$1/+/:` + `.-://++++++//:-.` +)ART", + {} + }}, + + { "cuerdos", { + R"ART( + ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⡀ +⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣶⣾⣿⣿⣿⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣶⣿⣿⣿⡇ +⠀⠀⡄⢀⣤⣤⣤⣤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣤⣤⣤⣤⣤⣄⠀⣿⣿⣿⣿⣿⡇ +⠀⠀⡇⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⠁ +⠀⠀⣧⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃ +⠀⠀⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁ +⠀⠀⡇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁ +⠀⠀⠇⠘⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠿⠿⠿⠿⠛⠛⠋⠉ +⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡇ +⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉ +____________________________________ +| Optimizado hasta el último pixel | +************************************ +)ART", + {} + }}, + + { "cutefishos", { + R"ART( + ___ww___ +_ _wwMMM@M^^^^MMMMww_ +M0w_ _wMMM~~ ~~MMm_ + ~MMy _ww0M~ ~MMy + ~MMMM~ o "MM +$3 jw0M~~MMMw_ _wMM' +wMM~ ~~MMmw__ __w0M~ +~ ~~MM0MmwwwwwwwwwMMM~ + ~~~~^^~~~ +)ART", + {} + }}, + + { "cuteos", { + R"ART( + $31ua$2 + $3MMM1ua$2 + $1MM$2EE $3 MMMMM1uazE$2 +$1MM $2EEEE $3M1MM1uazzEn $2EEEE MME + EEEEE $3MMM uazEno $2EEEE + EEEEE$1MMMMMMEno~; $2EE E$2 + EE $1MMMMMMMM~;;E $2MMMMM M $2 + E $1MMMMMMMMM $2 E E $2 + $1MMMMMMMMMMM + $1MMMMMMMMM $2EE $1 + MM1MMMM $2EEE $1 + MMMMM + MMM + M +)ART", + {} + }}, + + { "cyberos", { + R"ART( +$3 !M$EEEEEEEEEEEP + .MMMMM000000Nr. + $3&MMMMMM$2MMMMMMMMMMMMM9 + $3~MMM$1MMMM$2MMMMMMMMMMMMC + $1" $3M$1MMMMMMM$2MMMMMMMMMMs + $1iM$2MMM&&$1MMMMMMMM$2MMMMMMMMs + $1BMMM$2MMMMM$1MMMMMMM$2MMMMMM$3" +$19MMMMM$2MMMMMMM$1MMMM$2MMMM$3MMMf- + $2sMMMMMMMM$1MM$2M$3MMMMMMMMM3_ + $2+ffffffff$1P$3MMMMMMMMMMMM0 + $2CMMMMMMMMMMM + }MMMMMMMMM + ~MMMMMMM + "RMMMM + .PMB +)ART", + {} + }}, + + { "cycledream", { + R"ART( + .:ox00000kdc, + ;; 'cdO. dxl,. + 00 'oO' 0x; + 00ko ,Oc + x00Okxx lO' + .x, .0c + ;c .O00' :: '0: + . O0000. o0. +.0c ,,;;:clO00000Olc:;;,, .0l +x0 ;00000000000000000c 00 +00 0000000000000. 0O +x0. ... 00000000000. ... '0: +.0c ,00000000000o .o + o0. O000; '0000 + 0k .0 O O' + lO. ''..... + .0o d000 + Oo' ,dO O0 + ;Oo;. .;oO, 00 + xkdocc:ccodko + ;k0k, +)ART", + {} + }}, + + { "dahlia", { + R"ART( + .#. + *%@@@%* + .,,,,,(&@@@@@@@&/,,,,,. + ,#@@@@@@@@@@@@@@@@@@@@@#. + ,#@@@@@@@&#///#&@@@@@@@#. + ,/%&@@@@@%/, .,(%@@@@@&#/. + *#&@@@@@@#,. .*#@@@@@@&#, + .&@@@@@@@@@( .(@@@@@@@@@&&. +#@@@@@@@@@@( )@@@@@@@@@@@# + °@@@@@@@@@@( .(@@@@@@@@@@@° + *%@@@@@@@(. ,#@@@@@@@%* + ,(&@@@@@@%*. ./%@@@@@@%(, + ,#@@@@@@@&(***(&@@@@@@@#. + ,#@@@@@@@@@@@@@@@@@@@@@#. + ,*****#&@@@@@@@&(*****, + ,/%@@@%/. + ,#, +)ART", + {} + }}, + + { "darkos", { + R"ART( +$3⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$1⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⠋⡆⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$5⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡆⢀⣤⢛⠛⣠⣿⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$6⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⣿⠟⣡⠊⣠⣾⣿⠃⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣯⣿⠀⠊⣤⣿⣿⣿⠃⣴⣧⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$1⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⡟⣠⣶⣿⣿⣿⢋⣤⠿⠛⠉⢁⣭⣽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$4 ⠀⠀⠀⠀⠀⠀ ⠀⣠⠖⡭⢉⣿⣯⣿⣯⣿⣿⣿⣟⣧⠛⢉⣤⣶⣾⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$5⠀⠀⠀⠀⠀⠀⠀⠀⣴⣫⠓⢱⣯⣿⢿⠋⠛⢛⠟⠯⠶⢟⣿⣯⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$2⠀⠀⠀⠀⠀⠀⢀⡮⢁⣴⣿⣿⣿⠖⣠⠐⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠛⠛⠛⢿⣶⣄⠀⠀⠀⠀⠀⠀⠀ +$3⠀⠀⠀⠀⢀⣤⣷⣿⣿⠿⢛⣭⠒⠉⠀⠀⠀⣀⣀⣄⣤⣤⣴⣶⣶⣶⣿⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀ +$1⠀⢀⣶⠏⠟⠝⠉⢀⣤⣿⣿⣶⣾⣿⣿⣿⣿⣿⣿⣟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$6⢴⣯⣤⣶⣿⣿⣿⣿⣿⡿⣿⣯⠉⠉⠉⠉⠀⠀⠀⠈⣿⡀⣟⣿⣿⢿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$5⠀⠀⠀⠉⠛⣿⣧⠀⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠃⣿⣿⣯⣿⣦⡀⠀⠉⠻⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$3⠀⠀⠀⠀⠀⠀⠉⢿⣮⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠀⣯⠉⠉⠛⢿⣿⣷⣄⠀⠈⢻⣆⠀⠀⠀⠀⠀⠀⠀⠀ +$2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⠀⠀⠀⠀⠀⠀⠀⢀⢡⠃⣾⣿⣿⣦⠀⠀⠀⠙⢿⣿⣤⠀⠙⣄⠀⠀⠀⠀⠀⠀⠀ +$6⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢋⡟⢠⣿⣿⣿⠋⢿⣄⠀⠀⠀⠈⡄⠙⣶⣈⡄⠀⠀⠀⠀⠀⠀ +$1⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠚⢲⣿⠀⣾⣿⣿⠁⠀⠀⠉⢷⡀⠀⠀⣇⠀⠀⠈⠻⡀⠀⠀⠀⠀⠀ +$4⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢢⣀⣿⡏⠀⣿⡿⠀⠀⠀⠀⠀⠀⠙⣦⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$3⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠿⣧⣾⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣮⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +$5⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠀⠀⠀⠀⠀⠀ +)ART", + {} + }}, + + { "debian", { + R"ART( + $2_,met$$$$$$$$$$gg. + ,g$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$P. + ,g$$$$P"" """Y$$$$.". + ,$$$$P' `$$$$$$. +',$$$$P ,ggs. `$$$$b: +`d$$$$' ,$P"' $1.$2 $$$$$$ + $$$$P d$' $1,$2 $$$$P + $$$$: $$$. $1-$2 ,d$$$$' + $$$$; Y$b._ _,d$P' + Y$$$$. $1`.$2`"Y$$$$$$$$P"' + `$$$$b $1"-.__ + $2`Y$$$$b + `Y$$$$. + `$$$$b. + `Y$$$$b. + `"Y$$b._ + `"""" +)ART", + {} + }}, + + { "debian_small", { + R"ART( + _____ + / __ \ +| / | +| \___- +-_ + --_ +)ART", + {} + }}, + + { "deepin", { + R"ART( + ............ + .';;;;;. .,;,. + .,;;;;;;;. ';;;;;;;. + .;::::::::' .,::;;,''''',. + ,'.:::::::: .;;'. '; + ;' 'cccccc, ,' :: '.. .: + ,, :ccccc. ;: .c, '' :. ,; +.l. cllll' ., .lc :; .l' l. +.c :lllc ;cl: .l' .ll. :' +.l 'looc. . ,o: 'oo' c, +.o. .:ool::coc' .ooo' o. + :: ..... .;dddo ;c + l:... .';lddddo. ,o + lxxxxxdoolllodxxxxxxxxxc :l + ,dxxxxxxxxxxxxxxxxxxl. 'o, + ,dkkkkkkkkkkkkko;. .;o; + .;okkkkkdl;. .,cl:. + .,:cccccccc:,. +)ART", + {} + }}, + + { "desaos", { + R"ART( +███████████████████████ +███████████████████████ +███████████████████████ +███████████████████████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +██████████████████████████████ +██████████████████████████████ +████████████████████████ +████████████████████████ +████████████████████████ +)ART", + {} + }}, + + { "devuan", { + R"ART( + ..,,;;;::;,.. + `':ddd;:,. + `'dPPd:,. + `:b$$$$b`. + 'P$$$$$d` + .$$$$$$$$$` + ;$$$$$$$$$P + .:P$$$$$$$$$$$$` + .,:b$$$$$$$$$$$$$;' + .,:dP$$$$$$$$$$$$$$$$b:' + .,:;db$$$$$$$$$$$$$$$$$$$$Pd'` + ,db$$$$$$$$$$$$$$$$$$$$$$$$$$$$b:'` +:$$$$$$$$$$$$$$$$$$$$$$$$b:'` + `$$$$$$$$$bd:''` + `'''` +)ART", + {} + }}, + + { "devuan_small", { + R"ART( + ..:::. + ..-==- + .+#: + =@@ + :+%@#: +.:=+#@@%*: +#@@@#=: +)ART", + {} + }}, + + { "dietpi", { + R"ART( + :=+******+- -+******+=: + =#-::-::::-=#:-#=-::::-::-#= + :%-::--==-::-%%-::-==--::-%: + +#-:::::=+++$2@@$1+++=-::::-#= + :#+-::::=%$2@@@@@$1=::::-+#: + =@%##%$2@@@@@@@@$1%##%@= +$2 .#@@@@@@@@@@@@@@@@@@@@#. + %@@@@@@@@@@@@@@@@@@@@@@% + -@@@@@@@@@@@@@@@@@@@@@@@@: +.#@@@@@@@@@@%%%%%@@@@@@@@@@@#. +#@@@$1+-=*#%$2%%%%%%%%%$1%%#+--#$2@@@# +%@@%$1*. .:$2=*%%%%*$1=: .#$2@@@% +:%@@@$1#+=-:$2:-*%%%%+::$1:-=+%$2@@@%: + :@@@@%@%%%%@$1#$2#$1#$2%@%%%%@%@@@@. + +@@@@@@@@@$1%$2=*+$1%$2@%@@@@@@@@+ + #@@@@@@@@@@@@@@@@@@@@@@# + -#@@@@@@@@@@@@@@@@@@#- + -*%@@@@@@@@@@%*- + .+%@@@@%+. +)ART", + {} + }}, + + { "dracos", { + R"ART( + `-:/- + -os: + -os/` + :sy+-` + `/yyyy+. + `+yyyyo- + `/yyyys: +`:osssoooo++- +yyyyyy/` + ./yyyyyyo yo`:syyyy+. + -oyyy+ +- :yyyyyo- + `:sy: `. `/yyyyys: + ./o/.` .oyyso+oo:` + :+oo+//::::///:-.` `.` +)ART", + {} + }}, + + { "dragonfly", { + R"ART( +$2,--, $1| $2,--, +$2| `-, $1,^, $2,-' | +$2 `, `-, $1(/ \) $2,-' ,' +$2 `-, `-,$1/ \$2,-' ,-' +$2 `------$1( )$2------' +$2 ,----------$1( )$2----------, +$2 | _,-$1( )$2-,_ | +$2 `-,__,-' $1\ /$2 `-,__,-' +$1 | | + | | + | | + | | + | | + | | + `|' +)ART", + {} + }}, + + { "dragonfly_old", { + R"ART( + .-. + $3 ()$1I$3() + $1 "==.__:-:__.==" + "==.__/~|~\__.==" + "==._( Y )_.==" + $2.-'~~""~=--...,__$1\/|\/$2__,...--=~""~~'-. +( ..=$1\=$1/$2=.. ) + `'-. ,.-"`;$1/=\$2;"-.,_ .-'` + `~"-=-~` .-~` $1|=|$2 `~-. `~-=-"~` + .-~` /$1|=|$2\ `~-. + .~` / $1|=|$2 \ `~. + .-~` .' $1|=|$2 `. `~-. + (` _,.-="` $1 |=|$2 `"=-.,_ `) + `~"~"` $1 |=|$2 `"~"~` + $1 /=\ + \=/ + ^ +)ART", + {} + }}, + + { "dragonfly_small", { + R"ART( +$2 ,$1_$2, +('-_$1|$2_-') + >--$1|$2--< +(_-'$1|$2'-_) + $1| + | + | +)ART", + {} + }}, + + { "drauger", { + R"ART( + -``- + `:+``+:` + `/++``++/. + .++/. ./++. + :++/` `/++: + `/++: :++/` + ./+/- -/+/. + -++/. ./++- + :++:` `:++: + `/++- -++/` + ./++. ./+/. + -++/` `/++- + :++:` `:++: + `/++- -++/` +.:-.`..............................`.-:. +`.-/++++++++++++++++++++++++++++++++/-.` +)ART", + {} + }}, + + { "droidian", { + R"ART( +$2 _,met$$$$$$$$$$gg. + ,g$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$P. + ,$$$$P' `$$$$$$. +',$$$$P ,ggs. `$$$$b: +`d$$$$' ,$$P"' $1.$2 $$$$$$ + $$$$P d$$' $1,$2 $$$$P + $$$$: $$$$. $1-$2 ,d$$$$' + $$$$; Y$$b._ _,d$$P' + Y$$$$. $1`.$2`"Y$$$$$$$$P"' +$2 `$$$$b $1"-.__ +$2 `Y$$$$ + `Y$$$$. + `$$$$b. + `Y$$$$b. + `"Y$$b._ +)ART", + {} + }}, + + { "elbrus", { + R"ART( +▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ +██ ██ +██ ███████ ███████ ██ +██ ██ ██ ██ ██ ██ +██ ██ ██ ██ ██ ██ +██ ██ ██ ██ ██ ██ +██ ██ ██ ██ ██ ██ +██ ██ ███████ ███████ +██ ██ ██ +██ ██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄██ +██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ +██ ██ +███████████████████████████ +)ART", + {} + }}, + + { "elementary", { + R"ART( + eeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeeeeeeeee + eeeee eeeeeeeeeeee eeeee + eeee eeeee eee eeee + eeee eeee eee eeee +eee eee eee eee +eee eee eee eee +ee eee eeee eeee +ee eee eeeee eeeeee +ee eee eeeee eeeee ee +eee eeee eeeeee eeeee eee +eee eeeeeeeeee eeeeee eee + eeeeeeeeeeeeeeeeeeeeeeee eeeee + eeeeeeee eeeeeeeeeeee eeee + eeeee eeeee + eeeeeee eeeeeee + eeeeeeeeeeeeeeeee +)ART", + {} + }}, + + { "elementary_small", { + R"ART( + _______ + / ____ \ +/ | / /\ +|__\ / / | +\ /__/ / + \_______/ +)ART", + {} + }}, + + { "elive", { + R"ART( + *@$2,,&(%%%..%*. + $1(@$2&%/##############((/$1*, + $2@$1@&$2#########$1*..../$2########%$1*.. + $2@$1&$2#%%%%%. $3,.$1,$2%%%%%%. + /%$2(%%%%. $1($2%%%%#. + /$1*$2%%##,. .,%%###, + ,####. ,$1*$2#%$1#$3/,(/ $2/$1#$2###, +((###/ ,,##########$1($3/(# $2%####, +%#((($1. .$1./$2(((((((((((((($1($2#/$3*.. $3*.$2((($1/ +$2%#///$1. $3***$2.*///////////// +$3#$2#////* $3***$2.*/////. + $3($2(***** $3*** + $2,*****.. + ..$1*$2*****.. *$1%$2/****. + .,,*******,$3,,../##($2%&$1&$2#******$1,$2. + ,*$1,$2,,,,,,,,,,,,,,,,,,,$1,$2.. + *//$1/,,$2,,,,,,,$1,..$2 +)ART", + {} + }}, + + { "emmabuntus", { + R"ART( + _~~_ + nmmmmmmm/$2/**\$1\ + nmHhHMMMHh\$2\__/$1/ + nm zot $2__$1 t*~~*n + m b $2_+*´cc`*+_$1 p m + m & $2/%cc,;;,cc%\$1 & m + _~~_ & $2c__ +cc$1 & n +/$2/**\$1\& $2cc;$1 & m +\$2\__/$1/& $2c~~ +cc´$1 & n + *~~* & $2\cc%*--*%cc/$1 & m + m b $2`+.cccc.+´$1 p m + nm zo o_~~_ + nmHhHMMMHhH/$2/**\$1\ + nmmmmmmmm\$2\__/$1/ + *~~* +)ART", + {} + }}, + + { "encryptos", { + R"ART( + ******* + *** **. + ** ** + ** ** + + ***************** +,,,,,,,,,,,,,,,,*** +,,,,,,, ,,,,,,, +,,,,,,, ,,,,,,, +,,,,,,, ,,,,,,, +,,,,,,, ,,,,,,, +,,,,,,,,,,,,,,,,,,, + ,,,,,,,,,,,,. +)ART", + {} + }}, + + { "endeavouros", { + R"ART( + $2./$1o$3. + $2./$1sssso$3- + $2`:$1osssssss+$3- + $2`:+$1sssssssssso$3/. + $2`-/o$1ssssssssssssso$3/. + $2`-/+$1sssssssssssssssso$3+:` + $2`-:/+$1sssssssssssssssssso$3+/. + $2`.://o$1sssssssssssssssssssso$3++- + $2.://+$1ssssssssssssssssssssssso$3++: + $2.:///o$1ssssssssssssssssssssssssso$3++: + $2`:////$1ssssssssssssssssssssssssssso$3+++. +$2`-////+$1ssssssssssssssssssssssssssso$3++++- + $2`..-+$1oosssssssssssssssssssssssso$3+++++/` + $3./++++++++++++++++++++++++++++++/:. + `:::::::::::::::::::::::::------`` +)ART", + {} + }}, + + { "endeavouros_small", { + R"ART( + /$2o$3. +$1 /$2sssso$3- +$1 /$2ossssssso$3: +$1 /$2ssssssssssso$3+ +$1 /$2ssssssssssssssso$3+ +$1//$2osssssssssssssso$3+- + `+++++++++++++++-` +)ART", + {} + }}, + + { "endless", { + R"ART( + `:+yhmNMMMMNmhy+:` + -odMMNhso//////oshNMMdo- + /dMMh+. .+hMMd/ + /mMNo` `oNMm: + `yMMo` `oMMy` + `dMN- -NMd` + hMN. .NMh +/MM/ -os` /MM/ +dMm `smNmmhs/- `:sNMd+ `` mMd +MMy oMd--:+yMMMMMNo.:ohmMMMNy` yMM +MMy -NNyyhmMNh+oNMMMMMy:. dMo yMM +dMm `/++/-``/yNNh+/sdNMNddMm- mMd +/MM/ `dNy: `-::- /MM/ + hMN. .NMh + `dMN- -NMd` + `yMMo` `oMMy` + /mMNo` `oNMm/ + /dMMh+. .+hMMd/ + -odMMNhso//////oshNMMdo- + `:+yhmNMMMMNmhy+:` +)ART", + {} + }}, + + { "enos", { + R"ART( + ______ _ _ ____ _____ +| ____| \ | | / __ \ / ____| +| |__ | \| |______| | | | (___ +| __| | . ` |______| | | |\___ \ +| |____| |\ | | |__| |____) | +|______|_| \_| \____/|_____/ +)ART", + {} + }}, + + { "enso", { + R"ART( + .:--==--:. + :=*#############*+-. + .+##################*##*: + .*##########+==-==++*####*##- + =########=: .-+**#***. + *#######- ++*#**. + +######+ -*+#** + :######* .*+**= + *######: --#*# + ####### +++#. + #######. ++=*. + *######+ .-+*+ + :#######- -:*+: + =#######*. :.*+- + +########*- :*=- + =###########+=: =+=: + .+#############. .-==: + .=###########= ..:--:. + .-+######+ +)ART", + {} + }}, + + { "eshanizedos", { + R"ART( + .:-==++++++++++++++++++++++-. + .:=+##############################+ + .=*###################################- + :+######################################: + :+######################################*- + .+#############*+--:::::::::::::::::::::. + :*##########*=: + -###########= + :##########+. + *#########= + =*********+ .::::::::::::::::. + **********. -*###################+: +:********** =#######################= +-*********+ +************************ +:*********+ :***********************: +.********** .=******************+- + +*********- + .**********. + =**********: + +**********=. + =***********=: + -*************+-. + :+****************+++++++++++++++++++++==: + :+**************************************+. + -+************************************- + .-+*********************************. + :-==+*************************=. +)ART", + {} + }}, + + { "eurolinux", { + R"ART( + __ + -wwwWWWWWWWWWwww- + -WWWWWWWWWWWWWWWWWWw- + \WWWWWWWWWWWWWWWWWWW- + _Ww `WWWWWWWWWWWWWWWWWWWw + -W$2E$1Www -WWWWWWWWW- +_WW$2U$1WWWW- _WWWWWWWW +_WW$2R$1WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW- +wWW$2O$1WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWW$2L$1WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw +WWW$2I$1WWWWWWWWWWWWWWWWWWWWWWWWWWWWww- +wWW$2N$1WWWWw + WW$2U$1WWWWWWw + wW$2X$1WWWWWWWWww + wWWWWWWWWWWWWWWWw + wWWWWWWWWWWWWWWWw + WWWWWWWWWWWWWw + wWWWWWWWw +)ART", + {} + }}, + + { "evolutionos", { + R"ART( + $2.':ldxxxxdo:,. + .lXMMMMMMMMMMMMMMMMNo' + dWMMMMMMMMMMMMMMMMMMMMMMWk + .OMMMMWWWWWWWWWWWWWWWWWWWMMMMM0; + kMMMMM$1XxxxxkkkkkkkkkkkkkkkK$2WMMMMMK. + .kMMMMMM$1Xddd0KKKKKKKKKKKKKKKN$2MMMMMMMN. + KMMMMMMM$1XdddX$2MMMMMMMMMMMMMMMMMMMMMMMMX. + cMMMMMMMM$1XdddX$2MMMMMMMMMMMMMMMMMMMMMMMMMo + KMMMMMMMM$1XdddX$2MMMMMMMMMMMMMMMMMMMMMMMMMN + XMMMMMMMM$1XdddX$2WO$1kkkkkkkK$2WK$1OOOX$2MMMMMMMMMW + XMMMMMMMM$1XdddX$2WO$1kkkkkkkK$2WK$1OOOX$2MMMMMMMMMW + 0MMMMMMMM$1XdddX$2MWWWWWWWWWMWWWWWMMMMMMMMMN + cMMMMMMMM$1XdddX$2MMMMMMMMMMMMMMMMMMMMMMMMMd + .kMMMMMMM$1XdddX$2MMMMMMMMMMMMMMMMMMMMMMMM0. + .kMMMMMM$1XxxxN$2W0$1OOOOOOOOOOOOOK$2MMMMMMMK. + oMMMMM$1XxxxN$2W0$1OOOOOOOOOOOOOK$2WMMMMMk. + '0MMMWNNNWMWWWWWWWWWWWWWWWMMMMX; + cWMMMMMMMMMMMMMMMMMMMMMMWd + :KWMMMMMMMMMMMMMMWXo. + .cdO0KK00xl' + .. +)ART", + {} + }}, + + { "evolutionos_old", { + R"ART( + dddddddddddddddddddddddd +.dddd''''''''''''''''''''''dddd. +dd: dddddddddddddddddddd; dd: +dd: ldl:'''''''''''''''' dd: +dd: ldl: dd: +dd: ldl: dd: +dd: ldl: dd: +dd: ldl: dd: +dd: ldl: ddddddd; ddddd; dd: +dd: ldl: ''''''' ''''' dd: +dd: ldl: dd: +dd: ldl: dd: +dd: ldl: dd: +dd: ldl: dd: +dd: ldl: ddddddddddddddd; dd: +dddd:.''' ''''''''''''''' dddd: + dddddddddddddddddddddddddd;;' + ''''''''''''''''''''''''' +)ART", + {} + }}, + + { "evolutionos_small", { + R"ART( + $2,coddoc' + 'cddddddddddc' + 'ddd$1OWWXXXXXXK$2ddo. +.dddd$1OMX$2ddddddddddd. +odddd$1OMX$2k$100O$2k$1OO$2ddddo +.dddd$1OMX$2kOOOxOkdddd. + .ddd$1OWW$2X$1XXXXXK$2ddd' + 'dddddddddddd' + 'cddddd, +)ART", + {} + }}, + + { "eweos", { + R"ART( +$2 #####%%% +$2 ##%%$3////$2%%%%%$3/// +$2 #%%%%$3////((((////$2% +$1 *@@@@@@@$3/$5,,,$3/////$5,,,$2%$1@@@@@@@ + .@@@@@@@@@@@$3////////$2%%%$1@@@@@@@@@@@@ +@@@$4...$1@@@@@@$3////$2%%$3////$1@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@ @@@@@@ + @@@ @@@ +)ART", + {} + }}, + + { "exherbo", { + R"ART( +$2 , +OXo. +NXdX0: .cok0KXNNXXK0ko:. +KX '0XdKMMK;.xMMMk, .0MMMMMXx; ... +'NO..xWkMMx kMMM cMMMMMX,NMWOxOXd. + cNMk NK .oXM. OMMMMO. 0MMNo kW. + lMc o: ., .oKNk; ;NMMWlxW' + ;Mc .. .,,' .0M$1g;$2WMN'dWMMMMMMO + XX ,WMMMMW. cM$1cfli$2WMKlo. .kMk +.Mo .WM$1GD$2MW. XM$1WO0$2MMk oMl +,M: ,XMMWx::,''oOK0x; NM. +'Ml ,kNKOxxxxxkkO0XXKOd:. oMk + NK .0Nxc$3:::::::::::::::$2fkKNk, .MW + ,Mo .NXc$3::$2qXWXb$3::::::::::$2oo$3::$2lNK. .MW + ;Wo oMd$3:::$2oNMNP$3::::::::$2oWMMMx$3:$2c0M; lMO + 'NO;W0c$3:::::::::::::::$2dMMMMO$3::$2lMk .WM' + xWONXdc$3::::::::::::::$2oOOo$3::$2lXN. ,WMd + 'KWWNXXK0Okxxo,$3:::::::$2,lkKNo xMMO + :XMNxl,';:lodxkOO000Oxc. .oWMMo + 'dXMMXkl;,. .,o0MMNo' + ':d0XWMMMMWNNNNMMMNOl' + ':okKXWNKkl' +)ART", + {} + }}, + + { "exodia_predator", { + R"ART( +- : ++: :+ +++. .++ ++++ : . +++ ++++= .+ + =+++ +++++- ++ += -++++ +++++++- -++ ++- -++++++ +++++++++: .+++ +++. :++++++++ +++++++++++: ++++ ++++ :++++++++++ ++++++++++++==++++ ++++=++++++=+++++ ++++++.:++++++++++ ++++++++++:.+++++ ++++++. .+++++++++ +++++++++. .+++++ ++++++: ++++++++ ++++++++ :+++++ +++++++- =+++++++ +++++++= -++++++ + :+++++= =+++++++ +++++++= =+++++: + :+++= =+++++++ +++++++= =+++: + -+= =+++++++ +++++++= ++- + : =++++++- -++++++= : + =++++- -++++= + =++= =++= + =++ ++= + =+. .+= + =- -= + : : +)ART", + {} + }}, + + { "fastfetch", { + R"ART( +╭───────────────────────╮ +│ $2● $3● $4● $5FASTFETCH $1│ +├───────────────────────┤ +│ │ +│ $2 /\ $7►►►►►►► $1│ +│ $2 /--\ $7►►►►►► $1│ +│ $2/----\ $7►►►►► $1│ +│ $6|xx| $7►►►► $1│ +│ $6|xx| $7►►► $1│ +│ $3^^^^ $1│ +╰───────────────────────╯ +)ART", + {} + }}, + + { "fedora", { + R"ART( + .',;::::;,'. + .';:cccccccccccc:;,. + .;cccccccccccccccccccccc;. + .:cccccccccccccccccccccccccc:. + .;ccccccccccccc;$2.:dddl:.$1;ccccccc;. + .:ccccccccccccc;$2OWMKOOXMWd$1;ccccccc:. +.:ccccccccccccc;$2KMMc$1;cc;$2xMMc$1;ccccccc:. +,cccccccccccccc;$2MMM.$1;cc;$2;WW:$1;cccccccc, +:cccccccccccccc;$2MMM.$1;cccccccccccccccc: +:ccccccc;$2oxOOOo$1;$2MMM000k.$1;cccccccccccc: +cccccc;$20MMKxdd:$1;$2MMMkddc.$1;cccccccccccc; +ccccc;$2XMO'$1;cccc;$2MMM.$1;cccccccccccccccc' +ccccc;$2MMo$1;ccccc;$2MMW.$1;ccccccccccccccc; +ccccc;$20MNc.$1ccc$2.xMMd$1;ccccccccccccccc; +cccccc;$2dNMWXXXWM0:$1;cccccccccccccc:, +cccccccc;$2.:odl:.$1;cccccccccccccc:,. +ccccccccccccccccccccccccccccc:'. +:ccccccccccccccccccccccc:;,.. + ':cccccccccccccccc::;,. +)ART", + {"fedora-workstation", "fedora-server"} + }}, + + { "fedora2_small", { + R"ART( + __ + / \ + __ |_ +/ | +\__/ +)ART", + {} + }}, + + { "fedora_coreos", { + R"ART( + ..... + .';:cccccccc:;'. + ':ccccclc$3lllllllll$1cc:. + .;cccccccc$3lllllllllllllll$1c, + ;clllccccc$3llllllllllllllllll$1c, + .cllclccccc$3lllll$2lll$3llllllllllll$1c: + ccclclcccc$3cllll$2kWMMNKk$3llllllllll$1c: + :ccclclcccc$3llll$2oWMMMMMMWO$3lllllllll$1c, +.ccllllllccc$3clll$2OMMMMMMMMM0$3lllllllll$1c +.lllllclcccc$3llll$2KMMMMMMMMMMo$3llllllll$1c. +.lllllllcccc$3clll$2KMMMMMMMMN0$3lllllllll$1c. +.cclllllcccc$3lllld$2xkkxxdo$3llllllllllc$1lc + :cccllllllcccc$3lllccllllcclccc$1cccccc; + .ccclllllllcccccccc$3lll$1ccccclccccccc + .cllllllllllclcccclccclccllllcllc + :cllllllllccclcllllllllllllcc; + .cccccccccccccclcccccccccc:. + .;cccclccccccllllllccc,. + .';ccccclllccc:;.. + ..... +)ART", + {} + }}, + + { "fedora_kinoite", { + R"ART( + ,clll:.$2 .,::::::::::::' +$1:ooooooo$2 .;:::::::::::::: +$1looooooo$2 ,:::::::::::::::' +$1looooooo$2 .:::::::::::::::: +$1looooooo$2 ;:::::::::::::::. +$1looooooo$2 .:::::::::::::::: +$1looooool$2;;;;,:::::::::::::::: +$1looool$2::, .:::::::::::::: +$1looooc$2:: ;:: +$1looooc$2::;. .::; +$1loooool$2:::::::::::. +$1looooooo$2. .::::::' +$1looooooo$2 .::::::,;,.. +$1looooooo$2 :::;' ';:;. +$1looooooo$2 ::: ::: +$1cooooooo$2 .::' '::. +$1 .ooooc $2 ::, ,:: + '''' +)ART", + {} + }}, + + { "fedora_old", { + R"ART( + /:-------------:\ + :-------------------:: + :-----------$2/shhOHbmp$1---:\ + /-----------$2omMMMNNNMMD$1 ---: + :-----------$2sMMMMNMNMP$1. ---: + :-----------$2:MMMdP$1------- ---\ +,------------$2:MMMd$1-------- ---: +:------------$2:MMMd$1------- .---: +:---- $2oNMMMMMMMMMNho$1 .----: +:-- .$2+shhhMMMmhhy++$1 .------/ +:- -------$2:MMMd$1--------------: +:- --------$2/MMMd$1-------------; +:- ------$2/hMMMy$1------------: +:--$2 :dMNdhhdNMMNo$1------------; +:---$2:sdNMMMMNds:$1------------: +:------$2:://:$1-------------:: +:---------------------:// +)ART", + {} + }}, + + { "fedora_sericea", { + R"ART( + :oooo, .',' + .';;;.;oooooooolooooo' + coooooooooooooooooooooooolc' + .':oooooooooooo$2ll$1ooooooooooooool +.oooooooooooooooo$2ll$1oooooooooooo$2l$1ool +ooooooooooooooooo$2ll$1ooooooooooo$2ll$1oo' + oooo$2l$1oooooooooo$2lll$1ooooooooo$2lll$1oo + .ooooo$2lll$1ooooo$2lll$1ooooooooo$2lll$1ool + .ooooooo$2lll$1oo$2llll$1oooo$2lllll$1ooooo: + 'oooooooo$2llllllllllll$1oooooooo' + .c,.oo$2lllll$1oooooooo.$2 + 'll; + 'll. + lll + lll + ;ll, + .l: +)ART", + {} + }}, + + { "fedora_silverblue", { + R"ART( + .;ooooooooooooooooooooooooooo. + ,dddddddddddddddddddddddddddddd'$3; +$1 lddddddddddddddddddddddddddddd'$3;;; +$1ddddd$2,XXX.$1ddddd$2,XXX.$1dddd'$2,XXX.$3;;;;; +$1ddddd$2XX$1x$2XX$1ddddd$2XX$1x$2XX$1ddd'$2,XX$3x$2XX$3;;;;; +$1ddddd$2'XXX'$1ddddd$2'XXX'$1dd'$2XXXXXX'$3;;;;; +$1dddddd$2;X;$1ddddddd$2;X:$1d'$2XXX$3;;;;;;;;;;; +$1dddddd$2;X;$1ddddddd$2;X:$2XXX$3;;;;;;;;;;;;; +$1dddddd$2;X;$1dddddd'$2;XXX,,,,,,XXX.$3;;;;; +$1dddddd$2;X;$1dddd'$2XXXX$2XXXXXXXXX$3x$2XX$3;;;;; +$1dddddd$2;X;$1dd'$2XXX$3;;;;;;;;;;;$2XXX$3;;;;;; +$1dddddd$2;X;$1'$2XXX$3;;;;;;;;;;;;;;;;;;;;;; +$1dddddd$2;XXXXX,,,,,,,,,,,,,;XXX:$3;;;;; +$1dddddd$2:XXXXXXXXXXXXXXXXXXXX$3x$2XX$3;;;;; +$1ddddd'$3;;;;;;;;;;;;;;;;;;;$2'XXX'$3;;;;' +$1ddd'$3;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +$1o'$3;;;;;;;;;;;;;;;;;;;;;;;;;;;;' +)ART", + {} + }}, + + { "fedora_small", { + R"ART( + ,'''''. + | ,. | + | | '_' + ,....| |.. +.' ,_;| ..' +| | | | +| ',_,' | + '. ,' + ''''' +)ART", + {} + }}, + + { "femboyos", { + R"ART( +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMWKkxkKWMMMMMMMMMMMMMMMMMMMMWKkxkKWMM +MMMMXo. .;xKWMMMMMMMMMMMMMMMMMMXo. .oXMM +MMWXx,..'..oXMMMMMMMMMMMMMMMMWKx, .lXMM +MMNo. .cOc.,xKWMMMMMMMMMMMMWXx;.....cXMM +MMXl..;kKl. .oXMMMMMMMMMMWKx;..,ok:.'o0W +WKx,.cKWNk;..lXMMMMMMMMWKx;..,o0NXl. .oN +No. .lXMMWKc.,dKWMMMMMMNo..;d0NWMNx,..lX +Nk:,:kNMMMNk:,ckNMMMMMMNxcxXWMMMMMN0ockN +MWNNNWMMMMMWNNNWMMMMMMMMWWWMMMMMMMMMWWWM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMNXKXNWMMMMMMMMMMMWNKOKWMMMMMMMMMM +MMMMMMWKdccxXMMMMMMMMMMW0o'.oXMMMMMMMMMM +MMMMMMMNO:.'o0NKkkkkkOXXo. .lXMMMMMMMMMM +MMMMMMMMNx,..;o;. .:o,..;kNMMMMMMMMMM +MMMMMMMMMNO: ... .cKWMMMMMMMMMMM +MMMMMMMMMMNx,. .;dk:. .;kNMMMMMMMMMMMM +MMMMMMMMMMMN0ocxXWNkl:,:xXWMMMMMMMMMMMMM +MMMMMMMMMMMMMWNWMMMWWNNNWMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +)ART", + {} + }}, + + { "feren", { + R"ART( + `----------` + :+ooooooooo+. +-o+oooooooooo+- +..`/+++++++++++/... +)ART", + {} + }}, + + { "filotimo", { + R"ART( +O ' +lk: ;xX. .0K ' +lodk ;lldK' .lld0O :okX; +lloo0 ;lllld0: .lllllxKx :clllkKk +llllo, ;llllloox .clllllloxK :cclllllx0N +lllll, ;llllllll .cclllllllo' :cccclllllld +cllll, ;cclllllc .ccccllllll' :cccccclllll +cllll, ;cccllllc ccccccllll' ::cccccclllc +ccccl, ;cccccllc :cccccccll' :::ccccccclc +ccccc, ;cccccccc ::cccccccl' :::::ccccccc +:cccc, ;:ccccccc ::::cccccc' :::::::ccccc +:cccc, ;:::ccccc ::::::cccc' :;::::::ccc: +:::cc, ;:::::ccc ;:::::::cc' :;;:::::::c: +:::::, ;:::::::c ;;:::::::c' :;;;;::::::: +:::::, ;;::::::c ;;;;::::::' :;;;;;:::::: +;::::, ,;;;::::c ,;;;;;::::' ';;;;;;:::: +';;::, ;;;;::: .;;;;;::' .;;;;;:: + ;;;, ;;;;: .;;;:' ;;;: + ,;, ,;: ';' + ., +)ART", + {} + }}, + + { "finnix", { + R"ART( + ,,:;;;;:,, + ,;*%S########S%*;, + ;?#################S?: + :%######################?: + +##########################; + +############################; + :#############.**,#############, + *###########+ +###########+ + ?########## $3Finnix$1 ##########* + *###########, ,###########+ + :#############%..%#############, + *############################+ + *##########################+ + ;S######################%: + ,+%##################%; + :+?S##########S?+: + ,:;++++;:, +)ART", + {} + }}, + + { "flatcar", { + R"ART( + ΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞ + ΞΞ ΞΞΞ ΞΞΞ ΞΞ ΞΞΞ + ΞΞ ΞΞΞ Ξ Ξ ΞΞ ΞΞΞΞ + ΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞ + ΞΞ ΞΞ ΞΞ ΞΞ + Ξ ΞΞ ΞΞΞΞ Ξ ΞΞ Ξ + Ξ ΞΞ ΞΞ ΞΞ Ξ Ξ ΞΞΞ Ξ + Ξ ΞΞ ΞΞ ΞΞ Ξ ΞΞΞ ΞΞΞ Ξ +ΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞ +)ART", + {} + }}, + + { "floflis", { + R"ART( + ,▄▄▄▌▓▓███▓▓▌▄▄▄, + ,▄▒▓███████████████████▓▄▄ + ▄▓███████████████████████████▌ + ▓███████████████████████████████ + , ╙▓████████████████████████████▀ ▄ + ╓█▓▄ ╙▀▓████████████████████▀▀` ,▄██▓ + ╓█████▌▄, '▀▀▀▀▓▓▓▓▓▓▀▀Å╙` ▄▄▓█████▌ + ██████████▓▌▄ , ▄▓███████████▄ +╢████████████▓ ║████▓▓███▌ ╣█████████████▓ +▓█████████████ ▐█████████▀ ▓██████████████ +▓█████████████ ▐█████████▄ ███████████████ +▀████████████▌ ║█████████▌ ▀█████████████▌ + ████████████M ▓██████████ ▐█████████████⌐ + ▀██████████▌ ▐███████████▌ ▀███████████▌ + ╙▓█████▓ ▓██████████████▄ ▀███████▀ + ╝▓██▀ ╓▓████████████████▓ ▀▓██▀ + ,▄████████████████████▌, + ╝▀████████████████████▓▀' + `╙▀▀▓▓███████▓▀▀╩' +)ART", + {} + }}, + + { "freebsd", { + R"ART( + +)ART", + {} + }}, + + { "freebsd_small", { + R"ART( +$1/\,-'''''-,/\ +\_) (_/ +| | +| | + ; ; + '-_____-' +)ART", + {} + }}, + + { "freemint", { + R"ART( + ## + ## ######### + #### ## + #### #### ## +#### #### ## ## + #### #### ## ## + #### #### ## ## ## + #### ###### + ###### ## ## #### + #### ################ + #### ## #### + ## #### ###### + ## ## #### #### + ## ## ## ## ## #### + #### ## ## ## +)ART", + {} + }}, + + { "frugalware", { + R"ART( + `++/::-.` + /o+++++++++/::-.` + `o+++++++++++++++o++/::-.` + /+++++++++++++++++++++++oo++/:-.`` + .o+ooooooooooooooooooosssssssso++oo++/:-` + ++osoooooooooooosssssssssssssyyo+++++++o: + -o+ssoooooooooooosssssssssssssyyo+++++++s` + o++ssoooooo++++++++++++++sssyyyyo++++++o: + :o++ssoooooo$2/-------------$1+syyyyyo+++++oo + `o+++ssoooooo$2/-----$1+++++ooosyyyyyyo++++os: + /o+++ssoooooo$2/-----$1ooooooosyyyyyyyo+oooss + .o++++ssooooos$2/------------$1syyyyyyhsosssy- + ++++++ssooooss$2/-----$1+++++ooyyhhhhhdssssso + -s+++++syssssss$2/-----$1yyhhhhhhhhhhhddssssy. + sooooooyhyyyyyh$2/-----$1hhhhhhhhhhhddddyssy+ + :yooooooyhyyyhhhyyyyyyhhhhhhhhhhdddddyssy` + yoooooooyhyyhhhhhhhhhhhhhhhhhhhddddddysy/ +-ysooooooydhhhhhhhhhhhddddddddddddddddssy + .-:/+osssyyyysyyyyyyyyyyyyyyyyyyyyyyssy: + ``.-/+oosysssssssssssssssssssssss + ``.:/+osyysssssssssssssh. + `-:/+osyyssssyo + .-:+++` +)ART", + {} + }}, + + { "funtoo", { + R"ART( + .dKXXd . + :XXl;:. .OXo +.'OXO'' .''''''''''''''''''''':XNd..'oco.lco, +xXXXXXX, cXXXNNNXXXXNNXXXXXXXXNNNNKOOK; d0O .k + kXX xXo KNNN0 KNN. 'xXNo :c; 'cc. + kXX xNo KNNN0 KNN. :xxxx. 'NNo + kXX xNo loooc KNN. oNNNN. 'NNo + kXX xN0:. KNN' oNNNX' ,XNk + kXX xNNXNNNNNNNNXNNNNNNNNXNNOxXNX0Xl + ... ......................... .;cc;. +)ART", + {} + }}, + + { "galliumos", { + R"ART( +sooooooooooooooooooooooooooooooooooooo+: +yyooooooooooooooooooooooooooooooooo+/::: +yyysoooooooooooooooooooooooooooo+/:::::: +yyyyyoooooooooooooooooooooooo+/::::::::: +yyyyyysoooooooooooooooooo++/:::::::::::: +yyyyyyysoooooooooooooo++/::::::::::::::: +yyyyyyyyysoooooo$2sydddys$1+/::::::::::::::: +yyyyyyyyyysooo$2smMMMMMMMNd$1+:::::::::::::: +yyyyyyyyyyyyo$2sMMMMMMMMMMMN$1/::::::::::::: +yyyyyyyyyyyyy$2dMMMMMMMMMMMM$1o//::::::::::: +yyyyyyyyyyyyy$2hMMMMMMMMMMMm$1--//:::::::::: +yyyyyyyyyyyyyy$2hmMMMMMMMNy$1:..-://:::::::: +yyyyyyyyyyyyyyy$2yyhhyys+:$1......://::::::: +yyyyyyyyyyyyyyys+:--...........-///::::: +yyyyyyyyyyyys+:--................://:::: +yyyyyyyyyo+:-.....................-//::: +yyyyyyo+:-..........................://: +yyyo+:-..............................-// +o/:-...................................: +)ART", + {} + }}, + + { "garuda", { + R"ART( + .%;888:8898898: + x;XxXB%89b8:b8%b88: + .8Xxd 8X:. + .8Xx; 8x:. + .tt8x .d x88; + .@8x8; .db: xx@; + ,tSXX° .bbbbbbbbbbbbbbbbbbbB8x@; + .SXxx bBBBBBBBBBBBBBBBBBBBbSBX8; + ,888S pd! +8X88/ q +8X88/ +GBB. + x%88 d888@8@X@X@X88X@@XX@@X@8@X. + dxXd dB8b8b8B8B08bB88b998888b88x. + dxx8o .@@;. + dx88 .t@x. + d:SS@8ba89aa67a853Sxxad. + .d988999889889899dd. +)ART", + {} + }}, + + { "garuda_dragon", { + R"ART( + .:--=========--:.. + .:-=+++++===-----=======-:. + :=++++-:.. ..:-===-:. + .+++=:. .-=---. + . :-: :---: + := . :---: + .=-: :-. .---: + :-===--::. .::::. ---: + .::--====-===+=-----=-: ---: + :: :-++++====--=-:=====--=--: .--- ++**=:+++===++++++==- -===== -==-. ---: +*****+==++==--::::::======== . ===-. :--- +****==++-::.:::::-.::--======-.-=== .--- +***+=+-::::--:. -==:-==--=======-::. . :--- +=**++-::::== -+===-==: :::.:-=-==--- :--: +.*+*-:::-+= ...::==== .:: .=-:--. .. + -*++:::=+-: .:=- -- .: . ... + =*++:.++-+: .:. =-.: :-: :: :. + -*++-=+=-+=-=++===-. .====: .::::. + :++++++-:::--.-:=== --. + .=+++++- .= +.=:= .:: + :=+++++:. .: : . :---- + .-++++=-:.. .:--===-. + .-=+++++===-----=======-:. +)ART", + {} + }}, + + { "garuda_small", { + R"ART( + .----. + .' , '. + .' '-----| +'. -----, + '.____.' +)ART", + {} + }}, + + { "gentoo", { + R"ART( + -/oyddmdhs+:. + -o$2dNMMMMMMMMNNmhy+$1-` + -y$2NMMMMMMMMMMMNNNmmdhy$1+- + `o$2mMMMMMMMMMMMMNmdmmmmddhhy$1/` + om$2MMMMMMMMMMMN$1hhyyyo$2hmdddhhhd$1o` +.y$2dMMMMMMMMMMd$1hs++so/s$2mdddhhhhdm$1+` + oy$2hdmNMMMMMMMN$1dyooy$2dmddddhhhhyhN$1d. + :o$2yhhdNNMMMMMMMNNNmmdddhhhhhyym$1Mh + .:$2+sydNMMMMMNNNmmmdddhhhhhhmM$1my + /m$2MMMMMMNNNmmmdddhhhhhmMNh$1s: + `o$2NMMMMMMMNNNmmmddddhhdmMNhs$1+` + `s$2NMMMMMMMMNNNmmmdddddmNMmhs$1/. + /N$2MMMMMMMMNNNNmmmdddmNMNdso$1:` ++M$2MMMMMMNNNNNmmmmdmNMNdso$1/- +yM$2MNNNNNNNmmmmmNNMmhs+/$1-` +/h$2MMNNNNNNNNMNdhs++/$1-` +`/$2ohdmmddhys+++/:$1.` + `-//////:--. +)ART", + {} + }}, + + { "gentoo_small", { + R"ART( + _-----_ +( \ +\ 0 \ + $2\ ) + / _/ +( _- +\____- +)ART", + {} + }}, + + { "ghostbsd", { + R"ART( + ,gggggg. + ,agg9* .g) + .agg* ._.,gg* + ,gga* (ggg*' + ,ga* ,ga* + ,ga' .ag* + ,ga' .agga' + 9g' .agg'g*,a + 'gggg*',gga' + .gg*' + .gga* + .gga* + (ga* +)ART", + {} + }}, + + { "ghostfreak", { + R"ART( + xSSSSSSSSSSSx: + XSSSSSSSSSSSSSSSSSSSSX + xSSSSSSSSSSSSSSSSSSSSSSSxSSX + xSSSSSSSSSSSSSSSSSSSSSSSSSSSSXSS + SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSXXXS; + +SSSSSSx++SSSSSSSSSSSSSSSSSSSSSSSSSXSX + SSSSS:::::::SSSSSSSSSSSSSXSSSSSSSSSS+S+ + XSSSX::::::::XxSSSSSSSSXSx;::xSSSSSSSSSS +;SSSS:::::::::XSSSSSSSSS+:::::::xSSSSSSSS; ++SSSSx::::::::SSSSSSSSS;:::::::::XSSSSSSSX + SSSSXSx:::::SSSSxXSSSS::::::::::XSSSSSSSX + xSSSSSSSSSSSS:::::SSSX::::::::::XSSSSSSS; + +SSSSSSSSSSSSSSX:SSSSS;:::::::SxSSSSSSS + +SSSSSSSSSSSSSSSSSSSSSSSSSXSSxSSSSSS + xxSSSSSSSSSSSSSSSSSSSSSSSSSSSSSx + SSSSSSSSSSSSSSSSSSSSSSSSSSSX + xXSSSSSSSSSSSSX + SSS +SSSxSSSSS + ;x xSSx +)ART", + {} + }}, + + { "glaucus", { + R"ART( + ,, ,d88P + ,d8P ,ad8888* + ,888P d88888* ,,ad8888P* + d d888P a88888P* ,ad8888888* + .d8 d8888: d888888* ,d888888P* + .888; 88888b d8888888b8888888P + d8888J888888a88888888888888P* ,d + 88888888888888888888888888P ,,d8* + 888888888888888888888888888888888* + *8888888888888888888888888888888* + Y888888888P* `*``*888888888888* + *^888^* *Y888P** +)ART", + {} + }}, + + { "gnewsense", { + R"ART( + ..,,,,.. + .oocchhhhhhhhhhccoo. + .ochhlllllllc hhhhhh ollllllhhco. + ochlllllllllll hhhllllllhhh lllllllllllhco + .cllllllllllllll hlllllo +hllh llllllllllllllc. +ollllllllllhco'' hlllllo +hllh ``ochllllllllllo +hllllllllc' hllllllllllllh `cllllllllh +ollllllh +llllllllllll+ hllllllo + `cllllh. ohllllllho .hllllc' + ochllc. ++++ .cllhco + `+occooo+. .+ooocco+' + `+oo++++ ++++oo+' +)ART", + {} + }}, + + { "gnome", { + R"ART( + ,@@@@@@@@, + @@@@@@ @@@@@@@@@@@@ + ,@@. @@@@@@@ *@@@@@@@@@@@@ + @@@@@% @@@@@@( @@@@@@@@@@@& + @@@@@@ @@@@* @@@@@@@@@# +@@@@* @@@@, *@@@@@% +@@@@@. + @@@@# @@@@@@@@@@@@@@@@ + ,@@@@@@@@@@@@@@@@@@@@@@@, + ,@@@@@@@@@@@@@@@@@@@@@@@@@@& + .@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@( + @@@@@@@@@@@@@@@@@@@@% + @@@@@@@@@@@@@@@@ + @@@@@@@@@@@@* @@@@@@@@/ + &@@@@@@@@@@ @@@@@@@@@* + @@@@@@@@@@@, @@@@@@@@@* + ,@@@@@@@@@@@@@@@@@@@@& + &@@@@@@@@@@@@@@ + ... +)ART", + {} + }}, + + { "gnu", { + R"ART( + _- +)ART", + {} + }}, + + { "gobolinux", { + R"ART( + _____ _ + / ____| | | +| | __ ___ | |__ ___ +| | |_ |/ _ \| '_ \ / _ \ +| |__| | (_) | |_) | (_) | + \_____|\___/|_.__/ \___/ +)ART", + {} + }}, + + { "goldendoglinux", { + R"ART( + .:^~!!^. .:: + ^7777!!!777!77Y5? + :??!!~~~77!~~~~~!7Y. + :J7~~!?!~!~~~~~~~!?? + ??~~~~7J7~~~~~~~7?!. + J7~~~~~!J7~~~~!J7. + !J~~~~!!?Y~~~~?7 + ~?7777?Y7~~~!Y^ + !J???7!~~~~!J! + ~?7~~~~~~~~~~~7J + .~?7~~~~~~~~~~~~~7J + .~?7~~~~~~~~~~~~~~~7J + ^??~~~~~~~~~~~~~~~~!Y^ + !J!~~~~~~!7777!!~~~~7J + !J!~~~~~!!!!!!77??~~~7J + :Y!~~~~~~~~~~~~~!!J?~~7J + :. !J!~~~~~~~~~~~~~!!JJ~~7Y. + JJ!!Y!~~~~~~~~~~~~!!JY!~~!J~ +.....~YJ?J!~~~~~~~~~~~~!JYJJJ7~!J^^:::.... +)ART", + {} + }}, + + { "grapheneos", { + R"ART( + B? + G~ + G~& + G!^:^?# + &^.:::.J + &PG& #G5JJ7~^~?JY5B& #PG + B5JJPGJ77YG5JYP# && &B5JYPGJ7?YG5JYP# + &Y..::.:P& &?..::.:G + #!::::? B~::::J + B~J# B!?# + !P 75 + !P 75 + !5 7Y + &Y~:^!P &J~:^!P + P..::.:B Y..::.:# + #PYJJ~^^!JJYP# &B5YJ?~^^!JJYG# + &YYG# && #PYJ5G5??JGGYJ5G& && #PYP + B^.::..7& + J::::^G + #Y^G& + B~ + G! + # +)ART", + {} + }}, + + { "grombyang", { + R"ART( + eeeeeeeeeeee + eeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeeeeeeeee + eeeee $2.o+ $1eeee + eeee $2`ooo/ $1eeee + eeee $2`+oooo: $1eeee +eee $2`+oooooo: $1eee +eee $2-+oooooo+: $1eee +ee $2`/:oooooooo+: $1ee +ee $2`/+ +++ +: $1ee +ee $2+o+\ $1ee +eee $2+o+\ $1eee +eee $2// \ooo/ \\ $1eee + eee $2//++++oooo++++\\ $1eee + eeee $2::::++oooo+::::: $1eeee + eeeee $3Grombyang OS $1 eeee + eeeeeeeeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeee +)ART", + {} + }}, + + { "guix", { + R"ART( + .. `. + `--.. +)ART", + {} + }}, + + { "guix_small", { + R"ART( +|.__ __.| +|__ \ / __| + \ \ / / + \ \ / / + \ \ / / + \ \/ / + \__/ +)ART", + {} + }}, + + { "gxde", { + R"ART( + ################ + ######################## + ##########-- --########## + #######* ****** *####### + ###### --*######--- ###### + ##### --- *#### ##### + ##### *-- #*#*#* * #### ##### +#####* ##- ##*-#* ### ### *##### +##### ###* -##*#* *# *# *### ##### +##### ###* -*##*-*## *#* ### ##### +##### #### - --#### - ##* ### ##### +##### *####* * - ###- ##* ##### +#####* #######- *###- ### *##### + #####* ***#####****--- ### *##### + ###### ----------- - ### ###### + ###### ----- ### ###### + ####### ####### + ##########*----*########## + ###################### + ############## +)ART", + {} + }}, + + { "haiku", { + R"ART( + MMMM MMMM + MMMM MMMM + MMMM MMMM + MMMM MMMM + MMMM$2 .ciO| /YMMMMM*" +$1 MMMM$2 .cOMMMMM|/MMMMM/` + , ,iMM|/MMMMMMMMMMMMMMM* + `*.__,-cMMMMMMMMMMMMMMMMM/`$1.MMM + MM$2MMMMMMM/`:MMM/ $1MMMM + MMMM MMMM + MMMM MMMM + """" """" +)ART", + {} + }}, + + { "haiku2", { + R"ART( +$2 :dc' + 'l:;'$1,$2'ck. .;dc:. + co $1..$2k. .;; ':o. + co $1..$2k. ol $1.$20. + co $1..$2k. oc $1..$20. + co $1..$2k. oc $1..$20. +.Ol,. co $1...''$2Oc;kkodxOdddOoc,. + ';lxxlxOdxkxk0kd$1oooll$2dl$1ccc:$2clxd; + ..$1oOolllllccccccc:::::$2od; + cx:ooc$1:::::::;$2cooolcX. + cd$1.$2''cloxdoollc' $1...$20. + cd$1......$2k;$1.$2xl$1.... .$20. + .::c$1;..$2cx;$1.$2xo$1..... .$20. + '::c'$1...$2do$1..... .$2K, + cd,.$1....:$2O,$1 + ':clod:'$1 + $1 +)ART", + {} + }}, + + { "haiku_small", { + R"ART( + ,^, + / \ +*--_ ; ; _--* +\ '" "' / + '. .' +.-'" "'-. + '-.__. .__.-' + |_| +)ART", + {} + }}, + + { "hamonikr", { + R"ART( + cO0Ox. + .ldddddddo. + .lddddddddddo + 'lddddddddddddc + ,oddddddddddddd; + 'ldddddddddddddo. + .oddddddddddddddc. + ,dddddddddddddddo. + ,ccoooooooocoddooo: + ,cooooooooooooooooop $3 c000x. +$1.cooooooooooooooopcllll$3 .cddddddo. +$1coooooooooooooop' .qlll.$3 .ddoooooooo; +$1cooooooooooc; $3'qlllp. .ddoooooooooo; +$1.cooooooc; $3'lllbc...coooooooooooo; +$1 .cooc' $3.llllcoooooooooooooo. + .coooooooooooooop: + .coooooooooooooop' + .cooooooooooooop. + .cooooooooooooop. + .coooooooooooop. + .cooooooooooop. + .cooooooooop. + .cooooop' +)ART", + {} + }}, + + { "hardclanz", { + R"ART( +$1 ........::::.... + ::################::.. + :########################:. + :######**###################: + :###$2&&&&^$1############ $2&$1#######: + :#$2&&&&&$1.:##############:$2^&o$1`:###: + :#$2&&&&$1.:#################:.$2&&&$1`###: + :##$2&^$1:######################:$2^&&$1::##: + :#############################:$2&$1:##:: + :##########$2@@$1###########$2@@$1#####:.###: +:#########$2@@$3o$2@@$1#########$2@@$3o$2@@$1########: +:#######:$2@@$3o$50$3o$2@@@@$1###$2@@@@$3o$50$3o$2@@$1######: : + :######:$2@@@$3o$2@@@@@@$1V$2@@@@@@$3o$2@@@$1######: + :#####:$2@@@@@@@@@@@@@@@@@@@$1:####; + :####:.$2@@@@@@@@@@@@@@@@$1:#####: + `:####:.$2@@@@@@@@@@@@@@$1:#####: + ``:##:.$2@@@@@@@@@@@@$1^## # : + : ## $2\@@@;@@@/ $1:: # : + $2 VVV +)ART", + {} + }}, + + { "harmonyos", { + R"ART( + ....-----.... + .-+##############+-.. + .+######################+.. + .########+- -++#######-. + .+######- -######+. + .######. .######.. + .+####+ +#####.. + .-####+. +####+. + .+####+ -####+.. + ..+####+ -####+... +$2......--$1+####+$2--.......................--$1+####+$2-......... + ..$1--++++-$2...... ...$1-++++--$2.. + ..$1--+++--$2... ...$1-+++++-$2.. + .$1--+++--$2.... ....$1--+++-$2... + ..$1-++++++--$2..... ......$1---+---$2... + ...$1-+++++++++-----$2..$1----++++++--$2.. + ...$1---++++++----++++++++---$2... + .....$1-----+++-----$2... + ...$1---$2... +)ART", + {} + }}, + + { "hash", { + R"ART( + + ###### + + ### ###### ### + ##### ###### ##### + ###### ###### ###### + +####### '"###### '"######## +####### ###### ######## +####### ###### ######## + + ###### '"###### '"###### + ##### ###### ##### + ### ###### ### + ~ ###### ~ +)ART", + {} + }}, + + { "hce", { + R"ART( + ti + jGGGGj + tGGGGGGt + ,LGGLGGGGGGGG, + jGGGGjGGGGGGGGGj + GGGGGGGGGGGGGGGGGGGG +iGGGGGGt tLLLLLLi +,GGGGGi iGGGGG, +,jGGGG LGGGG, +,LjGGj LLLL, +,LLGG. iiii. +,LLj +,LLj jLL, +,LLLL. GGLL, +,LLLLt GGLL, +,LGGGG LGGGj, +,GGGGGi iGGGGG, +iGGGGGGj tGGGGGG, + GGGGGGGGGGGGGGGGGGGG + jGGGGGGGGGjGGGGj + ,LGGGGGGGGGGG, + tGGGGGGt + jGGGGj + it +)ART", + {} + }}, + + { "heliumos", { + R"ART( + ,,╥╥╥╦╦╦╥╥,, + ,╓╦Ñ╨^`_,,,,,,. `"╨╩Nw + ,╥Ñ^`,╥╦╫╫╫╫╫╫╫╫╫╫╫╫ÑN≥,`╙Ñ╦_ + ,j╩_,╦Ñ╙╙╩╫╫╫╫╫╫╫╫╫╫╫╫╫Ñ╨╨╩N,`╨N, + j╩_╓╫╫Ñ ]N ]╫╫╫╫╫╫╫╫╫╫╫╫_]N ]╫Ñw_╩N + ,╫^ ]╫╫╫Ñ ╫╫ ]╫╫╫╫╫╫╫╫╫╫╫╫ ╫╫ ]╫╫╫N_╙╫ + _╫`,╫╫╫╫╫Ñ ╫╫ ]╫╫╫╫╫╫╫╫╫╫╫╫ ╫╫ ]╫╫╫╫╫ `╫ + ÑH ╫╫╫╫╫╫Ñ ╫╫ ]╫╫╫╫╫╫╫╫╫╫╫╫ ╫╫ ]╫╫╫╫╫╫_]Ñ +j╫ ]╫╫╫╫╫╫Ñ ╫╫ ]╫╫╫╫╫╫╫╫╫╫╫╫ ╫╫ ]╫╫╫╫╫╫H ╫H +j╫ ╟╫╫╫╫╫╫Ñ ╫╫,,,,,,,,,,,,,,,╫╫ ]╫╫╫╫╫╫╫ ╠N +j╫ ]╫╫╫╫╫╫Ñ ╫╫ +)ART", + {} + }}, + + { "huayra", { + R"ART( +$2 ` + . . ` + `` - . . + `.` -` `. - `` .` + ..`-`-` + - / .` +)ART", + {} + }}, + + { "hybrid", { + R"ART( +$1 / $2# +$1////& $2##### +$1///// $2###### +$1///// ////////// $2###### +$1///// //////////////////// $2###### +$1////////////////////////// $2###### +$1///////// /// $2###### +$1/////// / $2###### +$1////// $2###### +$1///// $2###### +$1///// $2###### +$1///// $2###### +$1///// $2###### +$1///// $2###### +$1///// $2######### +$1////& $2######## +)ART", + {} + }}, + + { "hydroos", { + R"ART( + _ _ _ ____ _____ +| | | | | | / __ \ / ____| +| |__| |_ _ __| |_ __ ___ | | | | (___ +| __ | | | |/ _` | '__/ _ \| | | |\___ \ +| | | | |_| | (_| | | | (_) | |__| |____) | +|_| |_|\__, |\__,_|_| \___/ \____/|_____/ + __/ | + |___/ +)ART", + {} + }}, + + { "hyperbola", { + R"ART( + WW + KX W + WO0W NX0O + NOO0NW WNXK0OOKW + W0OOOOOOOOOOOOKN + N0OOOOOOO0KXW + WNXXXNW + NXK00000KN + WNK0OOOOOOOOOO0W + NK0OOOOOOOOOOOOOO0W + X0OOOOOOO00KK00OOOOOK + X0OOOO0KNWW WX0OO0W + X0OO0XNW KOOW + N00KNW KOW + NKXN W0W +WW W +)ART", + {} + }}, + + { "hyperbola_small", { + R"ART( + |`__.`/ + \____/ + .--. + / \ + / ___ \ + / .` `.\ +/.` `.\ +)ART", + {} + }}, + + { "iglunix", { + R"ART( + | + | | + | +| ________ +| /\ | \ + / \ | \ | + / \ \ | +/ \________\ +\ / / + \ / / + \ / / + \/________/ +)ART", + {} + }}, + + { "instantos", { + R"ART( + 'cx0XWWMMWNKOd:'. + .;kNMMMMMMMMMMMMMWNKd' + 'kNMMMMMMWNNNWMMMMMMMMXo. +,0MMMMMW0o;'..,:dKWMMMMMWx. +OMMMMMXl. .xNMMMMMNo +WMMMMNl .kWWMMMMO' +MMMMMX; oNWMMMMK, +NMMMMWo .OWMMMMMK, +kWMMMMNd. ,kWMMMMMMK, +'kWMMMMWXxl:;;:okNMMMMMMMMK, + .oXMMMMMMMWWWMMMMMMMMMMMMK, + 'oKWMMMMMMMMMMMMMMMMMMMK, + .;lxOKXXXXXXXXXXXXXXXO;...... + ................,d0000000kd:. + .kMMMMMMMMMW0; + .kMMMMMMMMMMMX + .xMMMMMMMMMMMW + cXMMMMMMMMMM0 + :0WMMMMMMNx, + .o0NMWNOc. +)ART", + {} + }}, + + { "interix", { + R"ART( + .$3. +$1 75$3G! +$1 ^?PG$3&&J. +$1 :!5GPP$3&&&B! +$1 :YPPPPP$3&&&&&Y: +$1 !5PPPPPP$3&&&&&&B! +$1 :?PPPPPPPP$3&&&&&&&&Y~ +$1 !5PPPPPPPPP$3###&&&&&&B7 +$1 :?PPPP5555555$3B####&&&&&&5: +$1 ~5PPPP555YJ$57!~7?$35B###&&&&&B?. +$1 .:JPPPP5555Y$5?^....:^?$3G####&&&&&5: +$1 75PPP555555Y$57:....:^!$35#####&&&&&B7. +$1 :JPPPP$2555555YY?$5~::::^~$27YPGBB###$3&&&&&5^ +$175$2GGPPPPPP555555YJ?77??YYYYYY55PPGGB#$3&B? +$2~!!7JY5PGGBBBBBBBBGGGGGGGBGGGGGP5YJ?7~~~ + .::^~7?JYPGBB#BGPYJ?7!7^:. + ..:^... +)ART", + {} + }}, + + { "irix", { + R"ART( + ./ohmNd/ +dNmho/- + `:+ydNMMMMMMMM.-MMMMMMMMMdyo:. + `hMMMMMMNhs/sMMM-:MMM+/shNMMMMMMh` + -NMMMMMmo-` /MMM-/MMM- `-omMMMMMN. + `.`-+hNMMMMMNhyMMM-/MMMshmMMMMMmy+...` ++mMNds:-:sdNMMMMMMMyyMMMMMMMNdo:.:sdMMm+ +dMMMMMMmy+.-/ymNMMMMMMMMNmy/-.+hmMMMMMMd +oMMMMmMMMMNds:.+MMMmmMMN/.-odNMMMMmMMMM+ +.MMMM-/ymMMMMMmNMMy..hMMNmMMMMMmy/-MMMM. + hMMM/ `/dMMMMMMMN////NMMMMMMMd/. /MMMh + /MMMdhmMMMmyyMMMMMMMMMMMMhymMMMmhdMMM: + `mMMMMNho//sdMMMMM//NMMMMms//ohNMMMMd + `/so/:+ymMMMNMMMM` mMMMMMMMmh+::+o/` + `yNMMNho-yMMMM` NMMMm.+hNMMNh` + -MMMMd: oMMMM. NMMMh :hMMMM- + -yNMMMmooMMMM- NMMMyomMMMNy- + .omMMMMMMMM-`NMMMMMMMmo. + `:hMMMMMM. NMMMMMh/` + .odNm+ /dNms. +)ART", + {} + }}, + + { "ironclad", { + R"ART( + &#BGPPPPPG#& + B5?77!!?YJJ7!7YBB& + &G5YJ77!7JYYYYYBPJ&PY# + #PYYYYYY?!?YYYYY7?7JP5JJ + B?YYYYYY7!!7JYYYYJ!!?JJJ5 + && B7?J?77?7!!!!!77777!7Y5YYBBPGGG& +G77?YBB!!!!!!!!!!!!!JYJ??7JYJJY# PYPPG& +J777JB?!7JJ???!!!7?JYYYYYPJ!7JB +GYYG #JJJJJ??7!!!JYYY5PGB&GB& + #Y!?GB5YYJY5PG###& + GJJP +)ART", + {} + }}, + + { "itc", { + R"ART( +$1....................-==============+... +$1....................-==============:... +$1...:===========-....-==============:... +$1...-===========:....-==============-... +$1....*==========+........-::********-... +$1....*===========+.:*====**==*+-.-...... +$1....:============*+-..--:+**====*---... +$1......::--........................::... +$1..+-:+-.+::*:+::+:-++::++-.:-.*.:++:++. +$1..:-:-++++:-::--:+::-::.:++-++:++--:-:. +)ART", + {} + }}, + + { "januslinux", { + R"ART( + 'l: + loooooo + loooo coooool + looooooooooooooooooool + looooooooooooooooo + lool cooo + coooooooloooooooo + clooooo ;lood cloooo + :loooocooo cloo loooo + loooo :ooooool loooo +looo cooooo cooooo +looooooooooooo ;loooooo $2looooooc +$1looooooooo loo cloooooool $2looooc +$1 cooo cooooooooooo $2looolooooool +$1 cooo: $2coooooooooooooooooool + loooooooooooolc: loooc; + cooo: loooooooooooc + ;oool looooooo: + coool olc, + looooc ,, + coooooc loc + :oooool, coool:, looool:, + looool: ooooooooooooooo: + cooolc .ooooooooooool +)ART", + {} + }}, + + { "kaisen", { + R"ART( + `:+oyyho. + `+:`sdddddd/ + `+` :ho oyo++ohds-` + .ho :dd. .: `sddddddhhyso+/- + ody.ddd-:yd- +hysssyhddddddddho` + yddddddhddd` ` `--` -+hddddddh. + hddy-+dddddy+ohh/..+sddddy/:::+ys + :ddd/sdddddddddd- oddddddd ` + `yddddddddddddddd/ /ddddddd/ +:. :ydddddddddddddddddo..sddddddy/` +odhdddddddo- `ddddh+-``....-+hdddddds. +-ddddddhd: /dddo -ydddddddhdddddddd- + /hdy:o - `:sddds .`./hdddddddddddddo + `/- `+hddyosy+ :dddddddy-.-od/ + :sydds -hddddddd` / + .+shd- `:ohddddddddd` + `:+ooooooooooooo: +)ART", + {} + }}, + + { "kali", { + R"ART( +.............. + ..,;:ccc,. + ......''';lxO. +.....''''..........,:ld; + .';;;:::;,,.x, + ..'''. 0Xxoc:,. ... + .... ,ONkc;,;cokOdc',. + . OMo ':$2dd$1o. + dMc :OO; + 0M. .:o. + ;Wd + ;XO, + ,d0Odlc;,.. + ..',;:cdOOd::,. + .:d;.':;. + 'd, .' + ;l .. + .o + c + .' + . +)ART", + {} + }}, + + { "kali_small", { + R"ART( + -#. # + @### + -###### + @######### +=##. .##### +## ## ## +## ## # +## @### +##. ### + ##% ##- + -##% -* + :*##+ + :*#* + -# + @ + : +)ART", + {} + }}, + + { "kalpa_desktop", { + R"ART( + +++ + ++++++++ + + ++++++++++++ +++ + ++++++++++* +++++++++ ++++ + +++++++ ++++++++++++++++++ + ++++ ++++ +++++ + ++++ +++ ++++ + +++++ +++ ++++++ +++ ++++++++++++++ +++++++++ +++ ++++++++++++++ +++ +++ +++ ++++++++++++++ ++++ +++ +++ + ++++++++ +++ +++++++ +++ + +++++++ +++ + ++++++++ ++++ ++ + +++++++++++ +++++ +++++ + ++++++++ ++++++++++++ +++++++++ + ++++++++++++++ ++++++++++++++++ + ++++++++++++++++++++++++ +++++++++ + ++++++ +++++++++ ++++ + + +++++++ + +++++++ + +++++ +)ART", + {} + }}, + + { "kaos", { + R"ART( + .. + ..... ..OSSAAAAAAA.. + .KKKKSS. .SSAAAAAAAAAAA. +.KKKKKSO. .SAAAAAAAAAA... +KKKKKKS. .OAAAAAAAA. +KKKKKKS. .OAAAAAA. +KKKKKKS. .SSAA.. +.KKKKKS..OAAAAAAAAAAAA........ + DKKKKO.=AA=========A===AASSSO.. + AKKKS.==========AASSSSAAAAAASS. + .=KKO..========ASS.....SSSSASSSS. + .KK. .ASS..O.. =SSSSAOSS: + .OK. .ASSSSSSSO...=A.SSA. + .K ..SSSASSSS.. ..SSA. + .SSS.AAKAKSSKA. + .SSS....S.. +)ART", + {} + }}, + + { "kdelinux", { + R"ART( + $1kB@BB >BWWmm$2 + $1$BBBB .kBBBBB"$2 + ,mp. $1%BBBB {BBBBBF$2 + '%BBBBmm $1$BBBR,$BBBBB`$2 + `TBBB"` $1$BBBBBBBBBF$2 + kBF $1%BBBRRBBBBB.$2 +,mmWBBF $1kBBBB `%BBBBm$2 +T%BBBB $1%BBBB %BBBBBn$2 + `"T%m $1$BBBB "%BBBBm$2 + TBm $1"*""" $2,m.$1"F""`$2 + {BBBBm,. ,zmBBBm. + !%BBBP"T%BBBBBB""R%BBB + `` %BBBF `` + !BBP +)ART", + {} + }}, + + { "kdeneon", { + R"ART( + `..---+/---..` + `---.`` `` `.---.` + .--.` `` `-:-. + `:/: `.----//----.` :/- + .:. `---` `--.` .:` + .:` `--` .:- `:. + `/ `:. `.-::-.` -:` `/` + /. /. `:++++++++:` .: .: +`/ .: `+++++++++++/ /` `+` +/+` -- .++++++++++++` :. .+: +`/ .: `+++++++++++/ /` `+` + /` /. `:++++++++:` .: .: + ./ `:. `.:::-.` -:` `/` + .:` `--` .:- `:. + .:. `---` `--.` .:` + `:/: `.----//----.` :/- + .-:.` `` `-:-. + `---.`` `` `.---.` + `..---+/---..` +)ART", + {} + }}, + + { "kernelos", { + R"ART( + .''''....''''. + .''... ...''. + ''.. ..'' + '.. ..'' + .'. .,,'.. .',,,' ..'. + .'. .,,,,' .,,,,,' .'. + .'. .,,,,' .,,,,,. .'. + '.. .,,,,'',,,,;. .'' +.'. .,,,,,,,;;. ..' +.'. .,,,,;;;;;$2, $1..'. + '.. .,;;;,$2';;;;;, $1..' + .'. .;;$2;;' .;;:::: $1.,. + '.. $2.;;;;' .::::::. $1.,' + '.. $2.;;;;' .::::::. $1.,$2'$1 + .'.. $2.',. + $1',.. $2.',' + $1.,,... $2..',,. + ..,,''........',,,. + ...... +)ART", + {} + }}, + + { "kibaos", { + R"ART( + _ ___ _ ___ ____ +| |/ (_) |__ __ _ / _ \/ ___| +| ' /| | '_ \ / _` | | | \___ \ +| . \| | |_) | (_| | |_| |___) | +|_|\_\_|_.__/ \__,_|\___/|____/ + +)ART", + {} + }}, + + { "kibojoe", { + R"ART( +$3 ./+oooooo+/. + -/+ooooo+/:.` + $1`$3yyyo$2+++/++$3osss$1. + $1+NMN$3yssssssssssss$1. + $1.dMMMMN$3sssssssssssy$1Ns` + +MMMMMMMm$3sssssssssssh$1MNo` + `hMMMMMNNNMd$3sssssssssssd$1MMN/ + .$3syyyssssssy$1NNmmmmd$3sssss$1hMMMMd: + -NMmh$3yssssssssyhhhhyssyh$1mMMMMMMMy` + -NMMMMMNN$3mdhyyyyyyyhdm$1NMMMMMMMMMMMN+ +`NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd. +ods+/:-----://+oyydmNMMMMMMMMMMMMMMMMMN- +` .-:+osyhhdmmNNNmdo +)ART", + {} + }}, + + { "kiss", { + R"ART( + $3 ___ + ($2.· $3| + ($1<> $3| + / $2__$3 \ + ( $1/ \ $3/| +$1_$3/\ $2__)$3/$1_$3) +$1\/$3-____$1\/$2 +)ART", + {} + }}, + + { "kiss2", { + R"ART( + ██████ ██████ + ██$2██████$1████$2██████$1██ + ██$3████$2████████████████$1██ + ██$2██$3████$2██████████████████$1██ +██$2██$3██$2████$3████████████$2████████$1██ +██$2██████$3████████████████$2██████$1██ +██$2████████████████████████████$1██ + ██$2████████████████████████$1██ + ██$2██████$3████████$2██████$1██ + ████$2████████████$1████ + ████████████ +)ART", + {} + }}, + + { "kogaion", { + R"ART( + ;; ,; + ;;; ,;; + ,;;;; ;;;; + ,;;;;;;;; ;;;; + ;;;;;;;;;;; ;;;;; + ,;;;;;;;;;;;; ';;;;;, + ;;;;;;;;;;;;;;, ';;;;;;; + ;;;;;;;;;;;;;;;;;, ';;;;; +; ';;;;;;;;;;;;;;;;;;, ;;; +;;;, ';;;;;;;;;;;;;;;;;;;,;; +;;;;;, ';;;;;;;;;;;;;;;;;;, +;;;;;;;;, ';;;;;;;;;;;;;;;;, +;;;;;;;;;;;;, ';;;;;;;;;;;;;; +';;;;;;;;;;;;; ';;;;;;;;;;;;; + ';;;;;;;;;;;;;, ';;;;;;;;;;; + ';;;;;;;;;;;;; ;;;;;;;;;; + ';;;;;;;;;;;; ;;;;;;;; + ';;;;;;;; ;;;;;; + ';;;;; ;;;; + ';;; ;; +)ART", + {} + }}, + + { "korora", { + R"ART( +$2 ____________ + _add55555555554$1: + _w?'$1 +)ART", + {} + }}, + + { "krassos", { + R"ART( + $2**@@@@@@@@@@@* + $2,@@@@%$1((((((((((((($2%@@@@, + $2#@@&$1((((((((((((((((((((((($2&@@% + $2@@&$1((((((((((((((((((((((((((((($2@@@ + $2@@&$1((((((((((((((((((((((((((((((((($2&@@ + $2.@@$1((((((((((((((((((((((((((((((((((((($2@@. + $2@@$1((((((((((((((((((((((((((((((((((((((($2@@ + $2@@#$1((((((((((((((((((((((((((((($2%@@@@@@@#$1(#$2@@ + $2.@@$1(((((((((((((((($2#%@@@@@@@@@&%#$1(((($2%@&$1(((($2@@. + $2.@@$1(((((((/($2&@@@@@@%$1(/(((((((((((((($2@@/$1((((($2@@. + $2.@@$1(///////////////////////////////$2@$1(///////$2@@ + $2%@#$1/////////////////////////////($2#$1////////$2%@% + $2 @@$1(///////////////////////////$2%$1/////////($2@@ + $2@@#$1***********************************$2%@@ + $2*@@$1********************************$2/@@/ + $2,@@#$1***************************$2%@@* + $2@@@&$1********************$2/@@@@ + $2&@@@@&$1(//***//($2&@@@@& + $2**@@@@@@@@@@@* +)ART", + {} + }}, + + { "kslinux", { + R"ART( +K K U U RRRR ooo +K K U U R R o o +KKK U U RRRR o o +K K U U R R o o +K K UUU R R ooo + +$2 SSS AAA W W AAA +S A A W W A A + SSS AAAAA W W W AAAAA + S A A WW WW A A + SSS A A W W A A +)ART", + {} + }}, + + { "kubuntu", { + R"ART( +$1 `.:/ossyyyysso/:. + .:oyyyyyyyyyyyyyyyyyyo:` + -oyyyyyyyo$2dMMy$1yyyyyyysyyyyo- + -syyyyyyyyyy$2dMMy$1oyyyy$2dmMMy$1yyyys- + oyyys$2dMy$1syyyy$2dMMMMMMMMMMMMMy$1yyyyyyo + `oyyyy$2dMMMMy$1syysoooooo$2dMMMMy$1yyyyyyyyo` + oyyyyyy$2dMMMMy$1yyyyyyyyyyys$2dMMy$1sssssyyyo +-yyyyyyyy$2dMy$1syyyyyyyyyyyyyys$2dMMMMMy$1syyy- +oyyyysoo$2dMy$1yyyyyyyyyyyyyyyyyy$2dMMMMy$1syyyo +yyys$2dMMMMMy$1yyyyyyyyyyyyyyyyyysosyyyyyyyy +yyys$2dMMMMMy$1yyyyyyyyyyyyyyyyyyyyyyyyyyyyy +oyyyyysos$2dy$1yyyyyyyyyyyyyyyyyy$2dMMMMy$1syyyo +-yyyyyyyy$2dMy$1syyyyyyyyyyyyyys$2dMMMMMy$1syyy- + oyyyyyy$2dMMMy$1syyyyyyyyyyys$2dMMy$1oyyyoyyyo + `oyyyy$2dMMMy$1syyyoooooo$2dMMMMy$1oyyyyyyyyo + oyyysyyoyyyys$2dMMMMMMMMMMMy$1yyyyyyyo + -syyyyyyyyy$2dMMMy$1syyy$2dMMMy$1syyyys- + -oyyyyyyy$2dMMy$1yyyyyysosyyyyo- + ./oyyyyyyyyyyyyyyyyyyo/. + `.:/oosyyyysso/:.` +)ART", + {} + }}, + + { "kylin", { + R"ART( + $1++ + $2* *** + $2******* + $2*******$1++ + $2********$1+$3=== + $2******$1#$2*$1+$3====== + $2*******$1#$2***$1++$3=== + $2*********$1+$2**$3=== + $1##$2*********$1##$3== $3====$1+ +$4%$1##$2****$1++$3==$1+$2****$1# $2***$1+$3=$2** +$1#$2****$1++$3=====$1++$2****$1## $2******** +$1####$2*$1+$3=======$1+$2******$3===$1- $2***$1#$2*$1##$2**** + $1#$4%$1#$2******$1+$2**$1+$3==$1++$2**$3=======$1+$2*$1+$2*$1#$4% + $4%$1#$2****$1+$2******$3=====$1+$3====$1+++$3==$2** + $1#$2*********$1##$2***$1###$2********$1##$4% + $2***$1##$4%$1#$4%%%%$2*****$1#$2*$1###$2*****$1#$4% + $2*$1#$4%%%$1#$4%%%%%$2**** $4%%$2*******$1#$4% + $1#$4%%%%%% $4%%%$1##$2***$1###$4%% + $2**$1#$4% $4%%%%$1#$4% $2**$1#$2**$1## + $1###$4%% $4%%%%%$1 $4%%%$2*** + $4%%%%%% $4%%%%%%%$1 $4%%%%$1#$2* + $4%%%%%% $4%%%%%%$1+$3= +)ART", + {} + }}, + + { "lainos", { + R"ART( +$2 /==\ + \==/ +$1 · · · · · · · + · · · · · · · · · · + · · · $2.-======-.$1· · · · +$2 .::.$1 ·$2.-============-.$1· $2.::. + .:==:$1· $2.:===:'$1. ·· .$2':===:.$1 ·$2:==:. + .:===:$1 · $2:===.$1 · $3.--.$1 · $2.===:$1 · $2:===:. + :===:$1· · $2:===.$1 · $3.:====:.$1 · $2.===:$1 · ·$2:===: +(===:$1· · $2:===-$1 · $3:======:$1 · $2-===:$1 · ·$2:===) + :===:$1· · $2:===.$1 · $3':====:'$1 · $2.===:$1 · ·$2:===: + ':===:$1 · $2:===.$1 · $3'--'$1 · $2.===:$1 · $2:===:' + ':==:$1· $2':===:.$1' ·· '$2.:===:'$1 ·$2:==:' + '::'$1 · $2'===-. .-==='$1 · $2'::' + $2/==\$1 · · · $2:=== ===:$1 · · · $2/==\ + \==/$1 · · ·$2:===$1 ·$2===:$1· · · $2\==/$2 + .-. $1· $2:===$1· $2===:$1 ·$2 $2.-. + .===. .=== ===. .===. + .======== ========. + ''''' ''''' +)ART", + {} + }}, + + { "langitketujuh", { + R"ART( +$2. $1'7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7 +$2L7. $1'7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7 +$2L7L7L $17L7L7L7L7L7L7L7L7L7L7L7L7L7 +$2L7L7L7 $1L7L7L7 +$2L7L7L7 $1'L7L7L7L7L7L7L7L7L7L7 +$2L7L7L7 $1'L7L7L7L7L7L7L7L7 +$2L7L7L7 $1'L7L7L7L7L7L7 +$2L7L7L7 $1L7L7L7 +$2L7L7L7L7L7L7L7L7L7L7LL7L7L7. $1'7L7L7 +$2L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L. $1'L7 +$2L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7. $1' +)ART", + {} + }}, + + { "laxeros", { + R"ART( + /. + `://:- + `//////: + .////////:` + -//////////:` + -/////////////` + :///////////////. + `://////. +)ART", + {} + }}, + + { "lede", { + R"ART( + _________ + / /\ + / LE / \ + / DE / \ +/________/ LE \ +\ \ DE / + \ LE \ / + \ DE \ / + \________\/ +)ART", + {} + }}, + + { "lfs", { + R"ART( +$2 :@@@@@@@: +$2 @@@@@@@@@- +$2 .:%. @@@@@@@@@+. @% +$2 *@@@%+: :@@@@@@@%=: .=%@@@@@@= +$2 :@@@@@@##@@@@@@@@@%*+%@%+@@@@@@@+ +$2 @@#$1####$2+@@@@@@@%:$1######$2=@@@@@@@@@- +$2 *@%$1######$2.@@@@@#$1#########$2-@@@@@@@@#. +$2 %@-$1#$2.@$1=$2:$1##$2+@@@@-$1###$2%@$1:$2=$1###$2*@#*+=-+#: +$2 @@.$1#$2@@*$1=$2:$1#$2-%%**-$1##$2%@@%$1*$2*$1###$2#=- +$2 @@-$1#$2@@@@+.-$3...$2:=.$1#$2%@@@@%$1###$2#- +$2 %@%$1##$2*#:$3.o.....o...$2-%@+$1###$2#@+ -: +$2 +@@*$1#$3....................$2+@@@@@@@@+ +$2 @%:$3....................._:$2@@@@@@@=. +$2 .=:$3...............__*-=`.$2=@@@@@@#=. +$2 :+:$3....:==*__*-=`:..==-:$2#@@@@@%+: +$2 .--=-: $3+..::.....-: $2=%@*=: +$2 :........- +$2 .:...--. +)ART", + {} + }}, + + { "libreelec", { + R"ART( +$1 :+ooo/. $2./ooo+: +$1 :+ooooooo/. $2./ooooooo+: +$1 :+ooooooooooo:$2:ooooooooooo+: +$1 :+ooooooooooo+- $2-+ooooooooooo+: +$1 :+ooooooooooo+- $3-- $2-+ooooooooooo+: +$1.+ooooooooooo+- $3:+oo+: $2-+ooooooooooo+- +$1-+ooooooooo+- $3:+oooooo+: $2-+oooooooooo- +$1 :+ooooo+- $3:+oooooooooo+: $2-+oooooo: +$1 :+o+- $3:+oooooooooooooo+: $2-+oo: +$4 ./ $3:oooooooooooooooooo: $5/. +$4 ./oo+: $3-+oooooooooooooo+- $5:+oo/. +$4 ./oooooo+: $3-+oooooooooo+- $5:+oooooo/. +$4-oooooooooo+: $3-+oooooo+- $5:+oooooooooo- +$4.+ooooooooooo+: $3-+oo+- $5:+ooooooooooo+. +$4 -+ooooooooooo+: $3.. $5:+ooooooooooo+- +$4 -+ooooooooooo+: $5:+ooooooooooo+- +$4 -+oooooooooo+:$5:+oooooooooo+- +$4 -+oooooo+: $5:+oooooo+- +$4 -+oo+: $5:+oo+- +$4 .. $5.. +)ART", + {} + }}, + + { "lilidog", { + R"ART( + +DDDL+ +LDDDDD+ + LD++++D+D+::::::+D + D+-::::=D+::::::::+LLDD+ + D=::::::=L=-::::::=LL++=+D + D-:::::=LDD=-::-=+L=-::::=D + L+--==+++===++LDD+:::::::-D + DL+++==:::::::::-+D-:::::::=D + D=:::::::::::::::::++:::::-+D +D+::::::::::::::::::+D++==+LD+ + D=:::::::::::::::::+LD+=--:-+D + L+=-::::::::::::::L+-::::::=D + DLL++-::::::::::-D:::::::-+D + DL+:::::::::+D=-:::-=+D + D=:::::::-D +LDLLD+ + L+--::-=D + +LDLDD+ +)ART", + {} + }}, + + { "limeos", { + R"ART( + ############ + ####### ####### + #### #### + ### ###### ###### ### + ### ######### ######### ### + ### ######## ######## ### + ### #### ###### ####### ### ### + ### ####### ##### ##### ###### ### + ## ######## ### ### ######## ## +### ########### ########### ### +## ############ ########### ## +## ## +## ############ ########### ## +### ########### ########### ### + ## ######## ### ### ######## ## + ### ###### ##### ##### ###### ### + ### ### ####### ####### ### ### + ### ######### ######### ### + ### ######### ######### ### + ### ###### ###### ### + #### #### + ####### ####### + ############## +)ART", + {} + }}, + + { "lingmo", { + R"ART( + ..',;;;;;;,,.. + ..,;;;;;;;;;;;;;;;;,.. + .';;;;;;;;;;;;;;;;;;;;;;;;,. + .;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;' + .;;;;;;;;;$2clodddol:$1;;;;;;;;;;;;;;;;. + ';;;;;;;$2ckXWWWNNWWWN0d:$1;;;;;;;;;;;;;;' + ';;;;;;$2cOWWKxl:$1;;;:$2okXWXx$1;;;;;;;;;;;;;;, + ;;;;;;$2:XWWo$1;;;;;;;;;;;$2ONNx$1;;;;;;;;;;;;;;. +,;;;;;;$2xWMk$1;;;;;;;;;;;;;$20NX:$1;;;;;;;;;;;;;; +;;;;;;;$2xMMk$1;;;;;;;;;;;;;$2oXNdcloooolc:$1;;;;; +,;;;;;;$2:NMWl$1;;;;;;;;;;;;$2ckodKK00000Oc$1;;;;; +.;;;;;;;$2cKMWOo:$1;;;;;$2cox0Xccdl:$1;;;;;:;;;;;' + ;;;;;;;;;$2o0WWNK000KXXKkodKKo$1;;;;;;;;;;;; + ,;;;;;;;;;$2:loxxxxdlc$1;;;;$2xKKxc$1;;;;;;;;; + ,;;;;;;;;;;;;;;;;;;;;;;;$2ckK0o;$1;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;$2:l$1;;;;;;. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;. + ;;;;;;;;;;;;;;;;;;;;;;. + ';;;;;;;;;;;;, + ';;'. +)ART", + {} + }}, + + { "linspire", { + R"ART( +$2 __^ +$2 __/ \ +$2 MMy dMy __/ \ +$2 dMMy MMy $1MM$2 \ +$2 MMMy ,, $1dMMMMn $2\ +$2 dMMy dMM dMMMMMMy $1dMM MM dMMMMMy dMM MM.nMMM dMMMMMM +$1MMM $2MMy MMy MMy $1dMM MMy MMy MMy MMy dy dMy +$1MMM $2dMM dMM MMy $1dMMMMy dMM dMM dMM dMM dMMMMMMM +$2 dMMy MMy MMy MMy $1dMMy MM MMy MMy MMy dMM +$2dMMy dMM dMM dMM $1dMM MMy dMMMMMy dMM dMM MMy MM +$2MMMMMMMMMM MMy MMy MMy $1dMMMyyy MMy MMy MMy dMMMMMMy +$2 $1dy +)ART", + {} + }}, + + { "linux", { + R"ART( + $2##### + $2####### + $2##$1O$2#$1O$2## + $2#$3#####$2# + $2##$1##$3###$1##$2## + $2#$1##########$2## + $2#$1############$2## + $2#$1############$2### + $3##$2#$1###########$2##$3# +$3######$2#$1#######$2#$3###### +$3#######$2#$1#####$2#$3####### + $3#####$2#######$3##### +)ART", + {"generic", "unknown"} + }}, + + { "linux_small", { + R"ART( + $1___ + ($2.. $1\ + ($3<> $1| + /$2/ \ $1\ + ( $2| | $1/| +$3_$1/\ $2__)$1/$3_$1) +$3\/$1-____$3\/ +)ART", + {} + }}, + + { "linuxlite", { + R"ART( + ,xXc + .l0MMMMMO + .kNMMMMM$2W$1MMMN, + KMMMMMM$2K$1MMMMMMo + 'MMMMMMN$2K$1MMMMMM: + kMMMMMM$2O$1MMMMMMO + .MMMMMM$20$1XMMMMMW. + oMMMMM$2x$1MMMMMMM: + WMMMMM$2x$1MMMMMMO +:MMMMMM$2O$1XMMMMW +.0MMMMM$2x$1MMMMM; +:;cKMMW$2x$1MMMMO +'MMWMMX$2O$1MMMMl + kMMMMK$2O$1MMMMMX: + .WMMMMK$2O$1WMMM0c + lMMMMMW$2O$1WMNd:' + oollXMK$2o$1Xxl;. + ':. .:$2 .$1' + $2.. + . +)ART", + {} + }}, + + { "linuxlite_small", { + R"ART( + /\ + / \ + / $2/ $1/ +/ $2/ $1/ +\ $2\ $1\ + \_$2\$1_\ +$2 \ +)ART", + {} + }}, + + { "linuxmint", { + R"ART( + $2_.-ppOOOOOOqq-._ + .oOOOOPPPPPPPPPPOOOOo. + .oOOOO$1.=oOOOOOOOOOOo=.$2OOOOo. + .:OOO$1.=oOOOOOOOOOOOOOOOOo=.$2OOO:. + .OOO$1.OOOOOOOOOOOOOOOOOOOOOOOO.$2OOO. + .OOO$1.OO OOO:´ `::´ `:OOO.$2OO: + .OOO$1.OOO OO OOO.$2OOO: + OOO$1.OOOO OO oo oo OOOO.$2OOO +:OOO$1:OOOO OO OO OO OOOO:$2OOO: +:OOO$1:OOOO OO OO OO OOOO:$2OOO: +'OOO$1'OOOO OO OO OO OOOO'$2OOO' + OOO$1'OOOO OO____OO____OO OOOO'$2OOO' + 'OOO$1'OOO 'OOOOOOOOOOOO' OOOO'$2OOO + 'OOO$1'OOO .OOO'$2OOO' + 'OOO$1'OOOO:ooooooooooooooo:OOOO'$2OOO' + ':OOOo$1'=OOOOOOOOOOOOOOOOO='$2oOOO:' + ':OOOOo$1'=OOOOOOOOOOO='$2oOOOO:' + ``-OOOOooooooooooOOOO-´´ + +)ART", + {} + }}, + + { "linuxmint2", { + R"ART( + $2...-:::::-... + .-MMMMMMMMMMMMMMM-. + .-MMMM$1`..-:::::::-..`$2MMMM-. + .:MMMM$1.:MMMMMMMMMMMMMMM:.$2MMMM:. + -MMM$1-M---MMMMMMMMMMMMMMMMMMM.$2MMM- + :MMM$1:MM` :MMMM:....::-...-MMMM:$2MMM: + :MMM$1:MMM` :MM:` `` `` `:MMM:$2MMM: +.MMM$1.MMMM` :MM. -MM. .MM- `MMMM.$2MMM. +:MMM$1:MMMM` :MM. -MM- .MM: `MMMM-$2MMM: +:MMM$1:MMMM` :MM. -MM- .MM: `MMMM:$2MMM: +:MMM$1:MMMM` :MM. -MM- .MM: `MMMM-$2MMM: +.MMM$1.MMMM` :MM:--:MM:--:MM: `MMMM.$2MMM. + :MMM$1:MMM- `-MMMMMMMMMMMM-` -MMM-$2MMM: + :MMM$1:MMM:` `:MMM:$2MMM: + .MMM$1.MMMM:--------------:MMMM.$2MMM. + '-MMMM$1.-MMMMMMMMMMMMMMM-.$2MMMM-' + '.-MMMM$1``--:::::--``$2MMMM-.' + '-MMMMMMMMMMMMM-' + ``-:::::-`` +)ART", + {} + }}, + + { "linuxmint2_small", { + R"ART( + __________ +|_ \ + | $2| _____ $1| + | $2| | | | $1| + | $2| | | | $1| + | $2\__$2___/ $1| + \_________/ +)ART", + {} + }}, + + { "linuxmint_old", { + R"ART( +MMMMMMMMMMMMMMMMMMMMMMMMMmds+. +MMm----::-://////////////oymNMd+` +MMd $2/++ $1-sNMd: +MMNso/` $2dMM `.::-. .-::.` $1.hMN: +ddddMMh $2dMM :hNMNMNhNMNMNh: $1`NMm + NMm $2dMM .NMN/-+MMM+-/NMN` $1dMM + NMm $2dMM -MMm `MMM dMM. $1dMM + NMm $2dMM -MMm `MMM dMM. $1dMM + NMm $2dMM .mmd `mmm yMM. $1dMM + NMm $2dMM` ..` ... ydm. $1dMM + hMM- $2+MMd/-------...-:sdds $1dMM + -NMm- $2:hNMNNNmdddddddddy/` $1dMM + -dMNs-$2``-::::-------.`` $1dMM + `/dMNmy+/:-------------:/yMMM + ./ydNMMMMMMMMMMMMMMMMMMMMM + .MMMMMMMMMMMMMMMMMMM +)ART", + {} + }}, + + { "linuxmint_small", { + R"ART( + ____________________ +| \ +|_ $2| ___________ $1 | + | $2| / __ __ \$1 | + | $2| | | | | | |$1 | + | $2| | | | | | |$1 | + | $2| | | | | | |$1 | + | $2| \_/ \_/ | |$1 | + | $2\____________/_/$1 | + \___________________/ +)ART", + {} + }}, + + { "live_raizo", { + R"ART( + `......` + -+shmNMMMMMMNmhs/. + :smMMMMMmmhyyhmmMMMMMmo- + -hMMMMd+:. `----` .:odMMMMh- + `hMMMN+. .odNMMMMMMNdo. .yMMMMs` + hMMMd. -dMMMMmdhhdNMMMNh` .mMMMh +oMMMm` :MMMNs.:sddy:-sMMMN- `NMMM+ +mMMMs dMMMo sMMMMMMd yMMMd sMMMm +----` .---` oNMMMMMh `---. .---- + .sMMy: + /MM/ + +dMMms. + hMMMMMMN + `dMMMMMMm: + .+ss+sMNysMMoomMd+ss+. + +MMMMMMN` +MM/ hMMMMMNs + sMMMMMMm-hNMMMd-hMMMMMMd + :yddh+`hMMMMMMN :yddy/` + .hMMMMd: + `..` +)ART", + {} + }}, + + { "lliurex", { + R"ART( + ~. ........ + ::~~ +=: ~:========:~ + ..~:+oo===oo:.~+oooooooooooo+~ + .:+==ooooooooooo==ooooooooooooooo: + .:=oooooooooooooooooooooooooooooooo= +.. .=oooooooooooooooooooooooooooooooooo= +==. .+ooooooooooooooooooooooooooooooooooo= +~+:~:oooooooooooooooooooooooooooooooooooo: + ~ooooooooooooooooooooooooooooooooooooo=: + ~oooooooooooooooooooooooooooooooooo==:. + .+oooooooooooooooooooooooooo=~::::~.. + ~+oooooooooooooooooooooooo=: + .:=ooooooooooooooooooooo=: + .:==ooooooooooooooo==:. + ~~:===oooooo==+:~ + ...~~:~::.. +)ART", + {} + }}, + + { "lmde", { + R"ART( +$2 `.-::---.. +$1 .:++++ooooosssoo:. + .+o++::. `.:oos+. +$1 :oo:.` -+oo$2: +$1 $2`$1+o/` .$2::::::$1-. .++-$2` +$1$2`$1/s/ .yyyyyyyyyyo: +o-$2` +$1$2`$1so .ss ohyo` :s-$2: +$1$2`$1s/ .ss h m myy/ /s`$2` +$1`s: `oo s m Myy+-o:` +`oo :+sdoohyoydyso/. + :o. .:////////++: +$1 `/++ $2-:::::- +$1 $2`$1++- +$1 $2`$1/+- +$1 $2.$1+/. +$1 $2.$1:+-. + `--.`` +)ART", + {} + }}, + + { "locos", { + R"ART( + $3..;:::::::;. + .0X'$1''''''''''''$3'N: + :Xd$1,.'''''''''''''''$3lKx + .0o$1'.'''''''''''''''''''$3:K; + .O$1;.'$3okOx:$1'''''''''$3,dOOx:$1''$3O; + xc$1.'$3xXl$1 $3kX;$1''$2:cc;$1''$3kXl$1 $3OX;$1''$3k. + 'x$1..'$3:0X0Xx$1',$2OOOOOd$1,:$30X0Xx$1'''$3o: + ::$1..'$2,clollxOOOOOOOOdlddlc$1''''$3d + l'$1..$2':kkkkOOOOOOOOOOOOkkkx,$1'''$3x + o$1...''''',$2codxkkxxxdl$1:''''''''$3d. + d$1...''''''''''''''''''''''''''$3o. + d$1..''''$3,loc,$1''''''''$3;os:,$1'''''$3d' + :d$1..'$3,dKXXXXX0kxxxk0XXXXXX0l$1'''$3,O. + '0$1..'$3cKXXXXXXXXXXXXXXXXXXXXXXk$1'''$3ck + '0$1'.'$3cXXXXXXXXXXXXXXXXXXXXXXXXXO$1'''$3od + .0$1,.''$30XXXXXXXXXXXXXXXXXXXXXXXXXXo$1'''$3k; + cc$1..''$3XXXXXXXXXXXXXXXXXXXXXXXXXXXk$1''''$3k + l$1...',$3XXXXXXXXXXXXXXXXXXXXXXXXXXXO$1''''$3d. +)ART", + {} + }}, + + { "lubuntu", { + R"ART( + `.:/ossyyyysso/:. + `.:yyyyyyyyyyyyyyyyyy:.` + .:yyyyyyyyyyyyyyyyyyyyyyyy:. + .:yyyyyyyyyyyyyyyyyyyyyyyyyyyy:. + -yyyyyyyyyyyyyy$2+hNMMMNh+$1yyyyyyyyy- + :yy$2mNy+$1yyyyyyyy$2+Nmso++smMdhyysoo+$1yy: + -yy$2+MMMmmy$1yyyyyy$2hh$1yyyyyyyyyyyyyyyyyyy- +.yyyy$2NMN$1yy$2shhs$1yyy$2+o$1yyyyyyyyyyyyyyyyyyyy. +:yyyy$2oNM+$1yyyy$2+sso$1yyyyyyy$2ss$1yyyyyyyyyyyyy: +:yyyyy$2+dNs$1yyyyyyy$2++$1yyyyy$2oN+$1yyyyyyyyyyyy: +:yyyyy$2oMMmhysso$1yyyyyyyyyy$2mN+$1yyyyyyyyyyy: +:yyyyyy$2hMm$1yyyyy$2+++$1yyyyyyy$2+MN$1yyyyyyyyyyy: +.yyyyyyy$2ohmy+$1yyyyyyyyyyyyy$2NMh$1yyyyyyyyyy. + -yyyyyyyyyy$2++$1yyyyyyyyyyyy$2MMh$1yyyyyyyyy- + :yyyyyyyyyyyyyyyyyyyyy$2+mMN+$1yyyyyyyy: + -yyyyyyyyyyyyyyyyy$2+sdMMd+$1yyyyyyyy- + .:yyyyyyyyy$2hmdmmNMNdy+$1yyyyyyyy:. + .:yyyyyyy$2my$1yyyyyyyyyyyyyyy:. + `.:yyyy$2s$1yyyyyyyyyyyyy:.` + `.:/oosyyyysso/:.` +)ART", + {} + }}, + + { "lunar", { + R"ART( +`-. `-. + -ohys/-` `:+shy/` + -omNNdyo/` :+shmNNy/` + $3 - + /mMmo + hMMMN` + .NMMs + $1 -:+oooo+//: $3/MN$1. -///oooo+/-` + /:.` $3/$1 `.:/` +$3 __ + | | _ _ ___ ___ ___ + | |__| | | | .'| _| + |_____|___|_|_|__,|_| +)ART", + {} + }}, + + { "macaronios", { + R"ART( + .::-::::. :======---:. + .-=++++++++==-:. .:-++===--=**+=: +.=. ...:::::--=****+++=-:. -- +-: $2.-==-.$1 .::. :: +. $2:*%@@@@@#. .:::. + :#%%%%%@%#+. :*##%%%%#+. + *%%%%%%*. =. +*#%%%%%%%#: + *%%%%%%- +%%%%%%#@= + :%%%%%%#-. .:+%%%%%%%%+ + :*%%%%%%+. .-+*###*=: + :=+=-. +)ART", + {} + }}, + + { "macos", { + R"ART( + ..' + ,xNMM. + .OMMMMo + lMM" + .;loddo:. .olloddol;. + cKMMMMMMMMMMNWMMMMMMMMMM0: + $2.KMMMMMMMMMMMMMMMMMMMMMMMWd. + XMMMMMMMMMMMMMMMMMMMMMMMX. +$3;MMMMMMMMMMMMMMMMMMMMMMMM: +:MMMMMMMMMMMMMMMMMMMMMMMM: +$4.MMMMMMMMMMMMMMMMMMMMMMMMX. + kMMMMMMMMMMMMMMMMMMMMMMMMWd. + $5'XMMMMMMMMMMMMMMMMMMMMMMMMMMk + 'XMMMMMMMMMMMMMMMMMMMMMMMMK. + $6kMMMMMMMMMMMMMMMMMMMMMMd + ;KMMMMMMMWXXWMMMMMMMk. + "cooc*" "*coo'" +)ART", + {} + }}, + + { "macos2", { + R"ART( + ..' + ,xN . + .O o + l " + .;loddo:. .olloddol;. + cK NW 0: + $2.K Wd. + X X. +$3; : +: : +$4. X. + k Wd. + $5'X k + 'X K. + $6k d + ;K WXXW k. + "cooc*" "*coo'" +)ART", + {} + }}, + + { "macos2_small", { + R"ART( +$1 .:' + __ :'__ +$2 .'` `-' ``. +$3: .-' +$4: : + : `-; +$5 `.__.-.__.' +)ART", + {} + }}, + + { "macos3", { + R"ART( + -:+:. + :++++. + /+++/. + .:-::- .+/:-\`\`.::- + .:/++++++/::::/++++++/::` + $2.:///////////////////////::` + /////////////////////////` +$3+++++++++++++++++++++++++` +++++++++++++++++++++++++ +$4ssssssssssssssssssssssss. +:ssssssssssssssssssssssss- + $5osssssssssssssssssssssssss` + `syyyyyyyyyyyyyyyyyyyyyyyyys` + $6`ossssssssssssssssssssssss + :ooooooooooooooooooo+. + `:++oo+/:- -:/+o+/- +)ART", + {} + }}, + + { "macos_small", { + R"ART( +$1 .:' + __ :'__ +$2 .'`__`-'__``. +$3:__________.-' +$4:_________: + :_________`-; +$5 `.__.-.__.' +)ART", + {} + }}, + + { "mageia", { + R"ART( + .°°. + °° .°°. + .°°°. °° + . . + °°° .°°°. + .°°°. '___' +$2 .$1'___' $2 . + :dkxc;'. ..,cxkd; + .dkk. kkkkkkkkkk .kkd. +.dkk. ';cloolc;. .kkd +ckk. .kk; +xO: cOd +xO: lOd +lOO. .OO: +.k00. .00x + .k00; ;00O. + .lO0Kc;,,,,,,;c0KOc. + ;d00KKKKKK00d; + .,KKKK,. +)ART", + {} + }}, + + { "mageia_small", { + R"ART( + * + * + ** +$2 /\__/\ +/ \ +\ / + \____/ +)ART", + {} + }}, + + { "mainsailos", { + R"ART( + - + *%: + :%%%# + =%%%%%- + *%%%%%%# + :#%%%%%%%#. + -%%%%%%%%+ + *%%%%%%%%- : + .#%%%%%%%#. *%= + -%%%%%%%%+ :#%%%* + +%%%%%%%%- =%%%%%%#. + .#%%%%%%%#. *%%%%%%%%: + -%%%%%%%%* :#%%%%%%%#. + +%%%%%%%%- =%%%%%%%%+ :%*. + .#%%%%%%%#: *%%%%%%%%- +%%%%*: + :%%%%%%%%* :#%%%%%%%#. .*%%%%%%%* + +%%%%%%%%= -%%%%%%%%+ :%%%%%%%%* + .#%%%%%%%%: *%%%%%%%%- =%%%%%%%%= +)ART", + {} + }}, + + { "mainsailos_small", { + R"ART( + -: + +%* + .#%%+ + -%%%: += + +%%#..#%%- + .#%%+ -%%%- += + -%%%- +%%#..#%%+ +)ART", + {} + }}, + + { "mandriva", { + R"ART( +$2 `` + `-. +$1 ` $2.--- +$1 -/ $2-::--` +$1 `++ $2`----... +)ART", + {} + }}, + + { "manjaro", { + R"ART( +██████████████████ ████████ +██████████████████ ████████ +██████████████████ ████████ +██████████████████ ████████ +████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +)ART", + {"manjaro-linux"} + }}, + + { "manjaro_small", { + R"ART( +||||||||| |||| +||||||||| |||| +|||| |||| +|||| |||| |||| +|||| |||| |||| +|||| |||| |||| +|||| |||| |||| +)ART", + {} + }}, + + { "massos", { + R"ART( +-+++/+++osyyhdmNNMMMMNdy/ +/MMMMMMMMMMMMMMMMMMMMMMMMm. +/MMMMMMMMMMMMMMMMMMMMMMMMMm +/MMMMMMMMMMMMMMMMMMMMMMMMMM: +:ddddddddhddddddddhdddddddd/ +/NNNNNNNm:NNNNNNNN-NNNNNNNNo +/MMMMMMMN:MMMMMMMM-MMMMMMMMs +/MMMMMMMN:MMMMMMMM-MMMMMMMMs +/MMMMMMMN:MMMMMMMM-MMMMMMMMs +/MMMMMMMN:MMMMMMMM-MMMMMMMMs +/MMMMMMMN:MMMMMMMM-MMMMMMMMs +/MMMMMMMN:MMMMMMMM-MMMMMMMMs +/MMMMMMMN:MMMMMMMM-MMMMMMMMs +/MMMMMMMN:MMMMMMMM-MMMMMMMMs +:MMMMMMMN:MMMMMMMM-MMMMMMMMs + dMMMMMMN:MMMMMMMM-MMMMMMMMs + `yNMMMMN:MMMMMMMM-MMMMMMMMs + `:+oss.ssssssss.ssssssss/ +)ART", + {} + }}, + + { "matuusos", { + R"ART( +░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +░░░░░░░░░░░░░░░░▒▓▓████▓▒▒░░░░░░░░░░░░░░░░ +░░░░░░░░░░░░░▒▓████████████▓░░░░░░░░░░░░░░ +░░░░░░░░░░░░▓████████████████▒░░░░░░░░░░░░ +░░░░░░░░░░░▓██████████████████▒░░░░░░░░░░░ +░░░░░░░░░░▓████▒▓███████▓▓█████░░░░░░░░░░░ +░░░░░░░░░░██████▓░▓████▒░██████▓░░░░░░░░░░ +░░░░░░░░░▒███████▓░▒▓▒░░████████░░░░░░░░░░ +░░░░░░░░░▒█████████▒░░░█████████░░░░░░░░░░ +░░░░░░░░░░██████████▓▒██████████░░░░░░░░░░ +░░░░░░░░░░▓████████████████████▒░░░░░░░░░░ +░░░░░░░░░░░███████████████████▓░░░░░░░░░░░ +░░░░░░░░░░░░█████████████████▓░░░░░░░░░░░░ +░░░░░░░░░░░░░▓██████████████▒░░░░░░░░░░░░░ +░░░░░░░░░░░░░░░▒▓████████▓░░░░░░░░░░░░░░░░ +░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +)ART", + {} + }}, + + { "maui", { + R"ART( + `.-://////:--` + .:/oooooooooooooooo+:. + `:+ooooooooooooooooooooooo:` + `:oooooooooooooooooooooooooooo/` + .. +)ART", + {} + }}, + + { "mauna", { + R"ART( + .. :-=++++=-: + .-+*+ -********* **= + =***= +******+ =---=+*. + +**** +****+ :-=++*++=-- + =****= **** :+***********+: + +****+ *** $2.-- $1+******- + =*****: *- $2:+=: $1=*****: +$2. $1+*****: : $2-+++ $1:****= +$2-+ $1:*****+ $2- ++++ $1:***- +$2-++=: $1=+****: $2:++ +++++ $1**+ +$2 +++++= $1-====-$2++++: +++++ $1*+ +$2 .=++++++++++++++: $2+++++= $1. +$2 .=+++++++++= :=+++++= + .:::--- -+++++++- + :-==++==-. +)ART", + {} + }}, + + { "meowix", { + R"ART( +$1 #$2% $3&$4* +$1 ##$2%% $3&&$4** +$1 ## $2%% $3&& $4** +$1 ## $2%% $3&& $4** +$1 ## $2%% $3&& $4** +$1 ## $2%% $3&& $4** +$1 ## $2%%$3&& $4** +$1 ## $2%% $4** +$1 ## $4** +$1## $4** +)ART", + {} + }}, + + { "mer", { + R"ART( + dMs + .-` + `y`-o+` + ``NMMy + .--`:++. + .hNNNNs + /MMMMMN + `ommmd/ +/ + +)ART", + {} + }}, + + { "midnightbsd", { + R"ART( + ..:::'''':::.. + .:'''` `''':. + .:'` .::` `':: + :' .::' ':. + .:` .:::' `:. + :` :::: `: +:: ::::: :: +: ::::: :: : +: :::::: .:::' : +:: ::::::. : .:::::: :: + :. :::::::. : :::::::' .: + `:. `':::::::.'.:::::': .:' + `:. '':::::::::::::.: .:` + ':. `''::::::::''' .:' + '':.. ``'`` ..:'' + ''''::::::'''' +)ART", + {} + }}, + + { "midos", { + R"ART( + ▁▂▃▄▅▆▇▇████▇▇▆▅▄▃▂▁ + ▃▅▇████████████████████▇▅▃ + ▂▅████████████████████████████▅▁ + ▗▟██████████████▛▀▀▜██████████████▙▖ + ▗▟████████████████▌ ▐████████████████▙▖ + ▗██████████████████▌ ▐██████████████████▖ + ▗███████████████████▌ ▐███████████████████▖ +▕███████████████▀▘ ██▌ ▐██ ▝▀███████████████▏ +▐██████████▛▀▀ ▂██▌ ▐██▂ ▀▀▜██████████▌ +███████▀▀ ▁▄▆████▌ ▐████▆▄▁ ▀▀███████ +█████ ▂▄▂ ▔▀▜████▌ ▐████▛▀▔ ▂▄▂ █████ +▐████▄▄▆█████▄▂ ▔▀██▌ ▐██▀▔ ▂▄█████▆▄▄████▌ +▕██████████████▇▄▂ ██▌ ▐██ ▂▄▇██████████████▏ + ▝███████████████████▌ ▐███████████████████▘ + ▝██████████████████▌ ▐██████████████████▘ + ▝▜████████████████▌ ▐████████████████▛▘ + ▝▜██████████████▙▄▄▟██████████████▛▘ + ▔▀▜██████████████████████████▛▀▔ + ▔▀▜████████████████████▛▀▔ + ▔▔▀▀▀▜██████▛▀▀▀▔▔ +)ART", + {} + }}, + + { "midos_old", { + R"ART( + .:=+*#%%@@@@@@%%#*+=:. + .=*%@@@@@@@@@@@@@@@@@@@@@@%*=: + .=%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+. + :*@@@@@@@@@@@@@@@@@$2++$1%@@@@@@@@@@@@@@@@#- + .*@@@@@@@@@@@@@@@@@@%$2..$1#@@@@@@@@@@@@@@@@@@#. + -%@@@@@@@@@@@@@@@@@@@%$2..$1#@@@@@@@@@@@@@@@@@@@@- + -@@@@@@@@@@@@@@@@@@@@@%$2..$1#@@@@@@@@@@@@@@@@@@@@@= +:@@@@@@@@@@@@@@@@@%%@@@%$2..$1#@@@@#@@@@@@@@@@@@@@@@@: +*@@@@@@@@@@@@#$2*=:..$1*@@@%$2..$1#@@@#$2..:=+$1#@@@@@@@@@@@@* +%@@@@@@@#+$2=:...-+$1#@@@@@%$2..$1#@@@@@#$2+=:..:-$1+#@@@@@@@% +%@@@@@$2:..:=+-..-+$1#@@@@@%$2..$1#@@@@@%$2+-..-+=:..:$1@@@@@@ +*@@@@@$2*%$1@@@@@@%$2+-..$1#@@@%$2..$1#@@@%$2..-+$1#@@@@@@$2%*$1@@@@@* +:@@@@@@@@@@@@@@@@@$2#%$1@@@%$2..$1#@@@$2%#$1@@@@@@@@@@@@@@@@@: + =@@@@@@@@@@@@@@@@@@@@@%$2..$1#@@@@@@@@@@@@@@@@@@@@@= + -@@@@@@@@@@@@@@@@@@@@%$2..$1#@@@@@@@@@@@@@@@@@@@@= + .*@@@@@@@@@@@@@@@@@@%$2..$1#@@@@@@@@@@@@@@@@@@#: + :*@@@@@@@@@@@@@@@@@$2==$1%@@@@@@@@@@@@@@@@#-. + .+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+: + :=*%@@@@@@@@@@@@@@@@@@@@@@%*=:. + .-=+*#%%@@@@@@%%#*+=-. +)ART", + {} + }}, + + { "minimal", { + R"ART( + ##### + ##### + ##### + ###### + ###### +##### +##### ##### + ###### ##### + ###### ##### + ###### ###### + ##### ###### + ##### ##### + ##### + ###### + ###### + ###### + ##### + ##### +)ART", + {} + }}, + + { "minix", { + R"ART( +$2 -sdhyo+:-` -/syymm: + sdyooymmNNy. `` .smNmmdysNd + odyoso+syNNmysoyhhdhsoomNmm+/osdm/ + :hhy+-/syNNmddhddddddmNMNo:sdNd: + `smNNdNmmNmddddddddddmmmmmmmy` + `ohhhhdddddmmNNdmddNmNNmdddddmdh- + odNNNmdyo/:/-/hNddNy-`..-+ydNNNmd: + `+mNho:` smmd/ sNNh :dmms` -+ymmo. +-od/ -m$1mm$2mo -NN+ +m$1mm$2m- yms: ++sms -.` :so: .NN+ :os/ .-`mNh: +.-hyh+:////- -sNNd:` .--://ohNs- + `:hNNNNNNNMMd/sNMmhsdMMh/ymmNNNmmNNy/ + -+sNNNNMMNNNsmNMo: :NNmymNNNNMMMms: + //oydNMMMMydMMNysNMMmsMMMMMNyo/` + ../-yNMMy--/::/-.sMMmos+.` + -+oyhNsooo+omy/ +)ART", + {} + }}, + + { "miracle_linux", { + R"ART( + ,A + .### + .#' .#### .#. + r##: :#### ####. + +###; :#### ######C + :####: #### ,######".#. +.# :####. :### #####'.#####. +##: `####. ### ###'.########+. +#### `####::## ##'.#######+' + ####+.`###i## #',####:' + `+###MI`##### 'l###:' + `+####+`### ;#E' + `+###:## #' + `:### ' + '## + '; +)ART", + {} + }}, + + { "mos", { + R"ART( + :--==========================--: +.-=================================. +-==================================- +==================================== +=======-....:==========:....:======= +=======: -======-. .======= +=======: :====- .======= +=======: :==: .======= +=======: .. .======= +=======: .: .: .======= +=======: .=- :=: .======= +=======: .===. .-==: .======= +=======: .==========: .======= +=======: :==========: :======= +==================================== +-=================================== +.==================================: + :--===========================-:. +)ART", + {} + }}, + + { "msys2", { + R"ART( +$2 ... + 5GB###GJ. !YPGGGG + 7@@@@@@@B. :G@@@@@@@ + 7@@@@@@@@Y ~&@@@@@@@@$3YJYY5YY?L + $2!@@@@@@@@@@^ ^&@@@@@@@$3#PP555555PBY + $2~&@@@@@@@@@@? ^&@@@@@@$3#5YY5YYYYYYYY#7 + $2^&@@@@@@@@@@@B :#@@@@@@@$3G5BBYGPYYYYYY#J + $2^#@@@&J#@@@@@@@~ .B@@@@@@@@@@@P $3?#YYYYYPB. + $2:#@@@@7 G@@@@@@@J P@@@#!&@@@@@@G$3.GGYYYYGB^ + $2:#@@@@J Y@@@@@@@B 5@@@&:.&@@@@@@&$3BBYYY5B5. + $2:#@@@@Y !@@@@@@@@!Y@@@&~ .#@@@@@@$3GYYYYYBP JP~ + $2:#@@@@P :&@@@@@@@@@@@&~ B@@@@@$3#5YYYYYPGPGPGG + $2^#@@@@G. P@@@@@@@@@@@! P@@@@$3GYYYYYYYYYYYYBY + $2^#@@@@B: ^@@@@@@@@@@7 !@@@$3#GGGGGGGPPPP5GB: + $2!&@@@@B: Y@@@@@@@@? P@@@@@@@@@&? $3^PY: + $27&@@@@5. P@@@@@@? P@@@@@@@@@B + Y@@@&P! 5@@@@7 7G@@@@@&P~ +.JJ?~: ^JY~ ^!5J!^: + $1:@P5#B. #G 7&^ :@P5#B. + !&P^. ?@~ #P !&P^. + .?BG! #G5@~ .?BG! + :.B@. 7@@5 :.B@. + !PYY5Y :&@^ !PYY5Y + ~@Y + !5: +)ART", + {} + }}, + + { "mx", { + R"ART( +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMM +MMMMMMMMMMNs..yMMMMMMMMMMMMMm: +NMMMMMMM +MMMMMMMMMN+ :mMMMMMMMMMNo` -dMMMMMMMM +MMMMMMMMMMMs. `oNMMMMMMh- `sNMMMMMMMMM +MMMMMMMMMMMMN/ -hMMMN+ :dMMMMMMMMMMM +MMMMMMMMMMMMMMh- +ms. .sMMMMMMMMMMMMM +MMMMMMMMMMMMMMMN+` ` +NMMMMMMMMMMMMMM +MMMMMMMMMMMMMMNMMd: .dMMMMMMMMMMMMMMM +MMMMMMMMMMMMm/-hMd- `sNMMMMMMMMMMMMM +MMMMMMMMMMNo` -` :h/ -dMMMMMMMMMMMM +MMMMMMMMMd: /NMMh- `+NMMMMMMMMMM +MMMMMMMNo` :mMMN+` `-hMMMMMMMM +MMMMMMh. `oNMMd: `/mMMMMMM +MMMMm/ -hMd- `sNMMMM +MMNs` - :dMMM +Mm: `oMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +)ART", + {} + }}, + + { "mx2", { + R"ART( +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@%*+--:------=+*%@@@@@@@@@@@@ +@@@@@@@@@#=. .-+#%@@@@@%#*+--=#@@@@@@@@@ +@@@@@@@+. .=%@@@@@@@@@@@@@@@@*-:+@@@@@@@ +@@@@@*. *@@@@@@@@@@@@@@@@@@@@@%-.*@@@@@ +@@@@- -@@@@@@@@@@@@@@@@@@@@@@@#: -@@@@ +@@@: -@@@@@@@=.*@@@@@@@@@@@@%- = :@@@ +@@= .@@@@@@@@%- :%@@@@@@@@@+ -%@# =@@ +@% +@@@@@@@@@@#. =@@@@@@*. .*@@@@. %@ +@+ *@@@@@@*..*@@+ *@@%- =@@@@@@- +@ +@= *@@@@%- -%@@- := -%@@@@@@@: +@ +@+ :@@@= +@@= .#@@@@@@@@% *@ +@% +*. .: *@@#: +@@: @@ +@@+ :%@- :- :: +@@ +@@@- .=@@= -@@@ +@@+. . +@@ +%=..:.................::...........:..-% +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +)ART", + {} + }}, + + { "mx_small", { + R"ART( + \\ / + \\/ + \\ + /\/ \\ + / \ /\ + / \/ \ +/__________\ +)ART", + {} + }}, + + { "namib", { + R"ART( + .:+shysyhhhhysyhs+:. + -/yyys syyy/- + -shy yhs- + -yhs shy- + +hy yh+ + +ds sd+ +/ys so sy/ +sh smMMNdyo hs +yo ymMMMMNNMMNho oy +N ydMMMNNMMMMMMMMMmy N +N shmMMMMNNMMMMMMMMMMMMMNy N +yo ooshmNMMMNNNNMMMMMMMMMMMMMMMMMms oy +sd yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy ds +/ys sy/ + +ds sd+ + +hy yh+ + -yhs shy- + -shy yhs- + -/yyys syyy/- + .:+shysyhyhhysyhs+:. +)ART", + {} + }}, + + { "nebios", { + R"ART( + $2:ddl. $3:O0x' + $2.dddddd: $3x00000c + $2:dddddddl $3.O000000k + $2cdddddddo $3.00000000c + $2,dddddddd. $3:000000000. + $1.: $2.dddddddd' $3l0000000000 + $1:oo. $2dddddddd; $3.00000000000 + $1oooo. $2ddddddddc $3.000000000k + $1ooooo, $2ldddddddl $300000000c + $1.oooooo; $2:dddddddo $3k000000. + $1'oooooooc $2'dddddddd. $3c00000 + $1:ooooooool $2.dddddddd' $3'0000 + $1ooooooooooo $2dddddddd; $3.00k + $1oooooooooo. $2ddddddddc $3.0: + $1ooooooooo. $2cdddddddl +$1.oooooooo. $2,dddddddo +$1:ooooooo. $2.dddddddd. +$1loooooo. $2.ddddddd: + $1coooo $2ldddd, +)ART", + {} + }}, + + { "nekos", { + R"ART( + @@@@@ + @@@@@@@@@. + @@@@@@@@ @@@ + @@@@@@@@@@@ @@. + @@@@@@@@@@@@@ . + @@@@@@@@@@@@@@@@@ , + @@@@@@@@@@@@@@@@@@@ + @@@@@$2///$1@@@@@@@$2///$1@@@ + @@@@$2/***$1@@@@@@@$2**//$1@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@ + @@@/ /@@@@@@@@@/ /@@@ + @@@@@@ @@@$3██$1@@@@ @@@@@@ + @@@@@@/ /@$2██$3██$2██$1@@/ /@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@ + ##########%%%% + ##########%% %% + @ @@@#######@@%%% + @@@ @@@@####@@@@ % + @@@ @@@@@@@#@@@@@@@ + @@@ @@@@@@@@@@@@@@@ + @@@@ @@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@ +)ART", + {} + }}, + + { "neptune", { + R"ART( + ./+sydddddddys/-. + .+ymNNdyooo/:+oooymNNmy/` + `/hNNh/.` `-+dNNy:` + /mMd/. .++.:oy/ .+mMd- + `sMN/ oMMmdy+. `oNNo + `hMd. `/ymy/. :NMo + oMN- `/dMd: /MM- +`mMy -dMN+` mMs +.MMo -NMM/ yMs + dMh mMMMo:` `NMo + /MM/ /ymMMMm- sMN. + +Mm: .hMMd` oMN/ + +mNs. `yNd/` -dMm- + .yMNs: `/.` `/yNNo` + .odNNy+-` .:ohNNd/. + -+ymNNmdyyyyyyydmNNmy+. + `-//sssssss//. +)ART", + {} + }}, + + { "netbsd", { + R"ART( +$1 `-/oshdmNMNdhyo+:-` +$2y$1/s+:-`` `.-:+oydNMMMMNhs/-`` +$2-m+$1NMMMMMMMMMMMMMMMMMMMNdhmNMMMmdhs+/-` + $2-m+$1NMMMMMMMMMMMMMMMMMMMMmy+:` + $2-N/$1dMMMMMMMMMMMMMMMds:` + $2-N/$1hMMMMMMMMMmho:` + $2-N/$1-:/++/:.` +$2 :M+ + :Mo + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms +)ART", + {} + }}, + + { "netbsd2", { + R"ART( + __,gnnnOCCCCCOObaau,_ +$2 _._ $1__,gnnCCCCCCCCOPF"'' +$2 (N\\$1XCbngg,._____.,gnnndCCCCCCCCCCCCF"___,,,,___ +$2 \N\\$1XCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOOOOPYvv. +$2 \N\\$1XCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPF"'' +$2 \N\\$1XCCCCCCCCCCCCCCCCCCCCCCCCCOF"' +$2 \N\\$1XCCCCCCCCCCCCCCCCCCCCOF"' +$2 \N\\$1XCCCCCCCCCCCCCCCPF"' +$2 \N\\$1\"PCOCCCOCCFP"" +$2 \N\\ + \N\\ + \N\\ + \NN\ + \NN\ + \NNA. + \NNA, + \NNN, + \NNN\ + \NNN\ + \NNNA +)ART", + {} + }}, + + { "netbsd_small", { + R"ART( +$2 \\$1`-______,----__ +$2 \\ $1 __,---`_ +$2 \\ $1 `.____ +$2 \\$1-______,----`- +$2 \\ +$2 \\ +$2 \\ +$2 \\ +)ART", + {} + }}, + + { "nethydra", { + R"ART( +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⣶⣶⣦⣤⣄⡀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣦⣤⣌⣙⠻⢶⣄⠀ +⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠊⣤⣶⣶⣶⣦⣤⣼⡧⢤⡈⠙⠳⣦⡙⢷⣄⠀ +⠀⠀⣠⣴⣶⣿⣿⣿⣿⣿⣿⣶⣦⣀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡿⢾⡷⣢⢄⣠⣬⣭⣝⣿⣿⣄⠈⠓⢄⠈⠳⡄⠙⢷ +⢀⣾⣿⡿⠛⠉⠀⠀⠀⠀⠉⠛⠿⣿⣷⣦⡀⠀⠀⠀⡖⠉⣠⠶⢛⣼⣡⡍⢉⠍⠉⠙⠻⣿⣿⣧⠀⠀⠁⠀⠀⠀⠀⠳⡀ +⢸⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣿⣦⣄⠀⠀⠈⠁⡠⠟⣫⣵⡇⠀⠀⠀⠀⠀⢈⣿⣿ +⢸⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣷⣄⠀⠚⠀⠞⠋⠀⠀⠀⠀⠀⠀⢀⣼⣿⡟ +⠸⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠙⢿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀⢀⣠⣿⣿⠏ +⠀⠹⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⣀⣴⡞⠁⠀⠀⠀⠀⠈⠛⠿⣿⣿⣶⣶⣶⣶⣾⡿⠟⠋ +⠀⠀⠙⠿⣿⣷⣶⣦⣴⣶⣾⣿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠁ +⠀⠀⠀⠀⠈⠉⠛⠛⠛⠛⠉ +)ART", + {} + }}, + + { "netrunner", { + R"ART( + .:oydmMMMMMMmdyo:` + -smMMMMMMMMMMMMMMMMMMds- + +mMMMMMMMMMMMMMMMMMMMMMMMMd+ + /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMm/ + `hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy` + .mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd` + dMMMMMMMMMMMMMMMMMMMMMMNdhmMMMMMMMMMMh ++MMMMMMMMMMMMMNmhyo+/-. -MMMMMMMMMMMM/ +mMMMMMMMMd+:.` `mMMMMMMMMMMMMd +MMMMMMMMMMMdy/. yMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMNh+` +MMMMMMMMMMMMMMM +mMMMMMMMMMMMMMMMMMs -NMMMMMMMMMMMMMMd ++MMMMMMMMMMMMMMMMMN. `mMMMMMMMMMMMMMMM/ + dMMMMMMMMMMMMMMMMMy hMMMMMMMMMMMMMMMh + `dMMMMMMMMMMMMMMMMM-+MMMMMMMMMMMMMMMd` + `hMMMMMMMMMMMMMMMMmMMMMMMMMMMMMMMMy + /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMm: + +dMMMMMMMMMMMMMMMMMMMMMMMMd/ + -odMMMMMMMMMMMMMMMMMMdo- + `:+ydmNMMMMNmhy+-` +)ART", + {} + }}, + + { "nexalinux", { + R"ART( + **** + ********** + ****************** + ************************ + ****************************** + *************** *************** + ************ **** #*********** + ********* ********** ********* + ****** #****************# #***** + * ************************ *# + ****************************** + #************** **************# + ************ **** ************ + ********* ********** ********* + *** **************** *** + ********************** + ******************** + ***** ***** +)ART", + {} + }}, + + { "nitrux", { + R"ART( +`:/. +`/yo +`/yo +`/yo .+:. +`/yo .sys+:.` +`/yo `-/sys+:.` +`/yo ./sss+:.` +`/yo .:oss+:-` +`/yo ./o///:-` +`/yo `.-:///////:` +`/yo `.://///++//-`` +`/yo `.-:////++++/-` +`/yo `-://///++o+/-` +`/yo `-/+o+++ooo+/-` +`/s+:+oooossso/.` +`//+sssssso:. +`+syyyy+:` +:+s+- +)ART", + {} + }}, + + { "nixos", { + R"ART( + $1▗▄▄▄ $2▗▄▄▄▄ ▄▄▄▖ + $1▜███▙ $2▜███▙ ▟███▛ + $1▜███▙ $2▜███▙▟███▛ + $1▜███▙ $2▜██████▛ + $1▟█████████████████▙ $2▜████▛ $3▟▙ + $1▟███████████████████▙ $2▜███▙ $3▟██▙ + $6▄▄▄▄▖ $2▜███▙ $3▟███▛ + $6▟███▛ $2▜██▛ $3▟███▛ + $6▟███▛ $2▜▛ $3▟███▛ +$6▟███████████▛ $3▟██████████▙ +$6▜██████████▛ $3▟███████████▛ + $6▟███▛ $5▟▙ $3▟███▛ + $6▟███▛ $5▟██▙ $3▟███▛ + $6▟███▛ $5▜███▙ $3▝▀▀▀▀ + $6▜██▛ $5▜███▙ $4▜██████████████████▛ + $6▜▛ $5▟████▙ $4▜████████████████▛ + $5▟██████▙ $4▜███▙ + $5▟███▛▜███▙ $4▜███▙ + $5▟███▛ ▜███▙ $4▜███▙ + $5▝▀▀▀ ▀▀▀▀▘ $4▀▀▀▘ +)ART", + {} + }}, + + { "nixos2", { + R"ART( +$1 __ $2____ __ +$1 / \ $2\ \ / \ +$1 \ \ $2\ \/ / +$1 ___\ \___$2\ / +$1 / $2\ / $1/\ +$1 /______________$2\ \ $1/ \ +$2 / / $2\ \$1/ / +$2 ______/ / $2\ $1/ /___ +$2/ / $2\$1/ \ +$2\____ /$1\ $1/ ______/ +$2 / /$1 \ $1/ / +$2 / /$1\ \$2______$1/$2___$1/$2_____ +$2 \ /$1 \ \$2 / +$2 \/$1 / \$2____ ____/ + $1 / \$2 \ \ + $1/ /\ \$2 \ \ + $1\__/ \___\$2 \__/ +)ART", + {} + }}, + + { "nixos_old", { + R"ART( +$1 ____ $2_______ ____ +$1 /####\ $2\######\ /####\ +$1 ######\ $2\######\ /#####/ +$1 \######\ $2\######\ /#####/ +$1 \######\ $2\######\/#####/ $1/\ +$1 \######\ $2\###########/ $1/##\ +$1 ________\######\______$2\#########/ $1/####\ +$1 /#######################$2\#######/ $1/###### +$1 /#########################$2\######\ $1/######/ +$1 /###########################$2\######\ $1/######/ +$1 ¯¯¯¯¯¯¯¯¯¯¯¯$2/######/$1¯¯¯¯¯¯¯¯¯$2\######$1/######/ +$2 /######/ $2\####$1/######/________ +$2 _____________/######/ $2\##$1/################\ +$2 /###################/ $2\$1/##################\ +$2 \##################/$1\ /###################/ +$2 \################/$1##\ /######/¯¯¯¯¯¯¯¯¯¯¯¯¯ +$2 ¯¯¯¯¯¯¯¯/######/$1####\ /######/ +$2 /######/$1######\$2_________$1/######/$2____________ +$2 /######/ $1\######\$2###########################/ +$2 /######/ $1\######\$2#########################/ +$2 ######/ $1/#######\$2#######################/ +$2 \####/ $1/#########\$2¯¯¯¯¯¯\######\¯¯¯¯¯¯¯¯ +$2 \##/ $1/###########\$2 \######\ +$2 \/ $1/#####/\######\$2 \######\ +$1 $1/#####/ \######\$2 \######\ +$1 $1/#####/ \######\$2 \###### +$1 $1\####/ \######\$2 \####/ +$1 $1¯¯¯¯ ¯¯¯¯¯¯¯$2 ¯¯¯¯ +)ART", + {} + }}, + + { "nixos_old_small", { + R"ART( +$1 \\ $2\\ // +$1 ==\\__$2\\/ $1// +$2 // $2\\$1// +$2==// $1//== +$2 //$1\\$2___$1// +$2// $1/\\ $2\\== + $1// \\ $2\\ +)ART", + {} + }}, + + { "nixos_small", { + R"ART( +$1 ▗▄ $2▗▄ ▄▖ +$1 ▄▄🬸█▄▄▄$2🬸█▛ $3▃ +$6 ▟▛ $2▜$3▃▟🬕 +$6🬋🬋🬫█ $3█🬛🬋🬋 +$6 🬷▛🮃$5▙ $3▟▛ +$6 🮃 $5▟█🬴$4▀▀▀█🬴▀▀ + $5▝▀ ▀▘ $4▀▘ +)ART", + {} + }}, + + { "nobara", { + R"ART( +⢀⣤⣴⣶⣶⣶⣦⣤⡀⠀⣀⣠⣤⣴⣶⣶⣶⣶⣶⣶⣶⣶⣤⣤⣀⡀ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠉⠁⠀⠀⠉⠉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⢀⣀⣀⡀⠀⠀⠀⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀⢠⣾⣿⣿⣿⣿⣷⡄⠀⠀⠀⠻⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⣀⣀⣬⣽⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠈⠻⢿⣿⣿⡿⠟⠁⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠉⠉⠛⠛⢿⣿⣿⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿ +⠘⢿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⠟⠁ + ⠈⠙⠛⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠛⠛⠉⠁ +)ART", + {} + }}, + + { "nomadbsd", { + R"ART( + _======__ + (===============\ + (===================\ + _ _---__ + (= ====- + (= ====== + (== ====== + (== ====== + (==\ \=-_ _=/ /====/ + (==\ \========/ /====/ /====-_ + (==\ \=====/ /==/ /===-- +/================/ /===- +\===========/ +)ART", + {} + }}, + + { "nuros", { + R"ART( + ⢀⣤⣶⠿⠿⠿⠿⢷⣶⣄⡀ + ⣰⡿⠋⠁⢀⣠⣤⣀⡀⠈⠙⢿⣄ +$2⣸⡿⠁⢀⣾⣿⣿⣿⣿⣿⣷⡀⠈⢿⡆ +⣿⠃ ⣾⣿⣿⣿⡿⣟⣾⡽⣷ ⠸⣿ +$3⣿⡄ ⢿⣿⣿⣟⣿⣻⣽⣻⡽ ⢰⣟ +⠸⣷⡀⠈⠿⣷⣻⢷⣻⣞⠷⠁⢀⣾⠇ +$4 ⠙⣷⣄⡀⠈⠉⠉⠁ ⢀⣤⡿⠋ + ⠙⠿⢷⣶⣶⣶⠾⠟⠋ +)ART", + {} + }}, + + { "nurunner", { + R"ART( + ,xc + ;00cxXl + ;K0, .xNo. + :KO' .lXx. + cXk. ;xl cXk. + cXk. ;k:.,xo. cXk. + .lXx. :x::0MNl,dd. :KO, + .xNx. cx;:KMMMMMNo'dx. ;KK; + .dNl. cd,cXMMMMMMMMMWd,ox' 'OK: +;WK. 'K,.KMMMMMMMMMMMMMWc.Kx lMO + 'OK: 'dl'xWMMMMMMMMMM0::x: 'OK: + .kNo .xo'xWMMMMMM0;:O: ;KK; + .dXd. .do,oNMMO;ck: ;00, + oNd. .dx,;'cO; ;K0, + oNx. okk; ;K0, + lXx. :KO' + cKk' cXk. + ;00:lXx. + ,kd. +)ART", + {} + }}, + + { "nutyx", { + R"ART( + . + . + ... + ... + .... .........--. + ..-++-----....--++++++---. + .-++++++-. .-++++++++++++-----.. + .--... .++..-+++--.....-++++++++++--.. + . .-+-. .**- .... ..-+----.. + .+++. .*+. + -++-----. + .+++++- ++. .*+. .....-+++-----. + -+++-++. .+. .-+***++***++--++++. . + -+-. -- -. -*- ...... ..--. +.-. .+- . -+. +. .+- +. + -- -- + -+----. .- + -++-.+. . + .++. -- + +. ----. + . .+. .. + - . + . +)ART", + {} + }}, + + { "obarun", { + R"ART( + ,;::::; + ;cooolc;, + ,coool; + ,loool, + loooo; + :ooool + cooooc ,:ccc; + looooc :oooooool + cooooo ;oooooooooo, + :ooooo; :ooooooooooo + oooooo oooooooooooc +:oooooo :ooooooooool +loooooo ;oooooooool +looooooc .coooooooc +cooooooo: ,;co; +,ooooooool; ,:loc + cooooooooooooloooooc + ;ooooooooooooool; + ;looooooolc; +)ART", + {} + }}, + + { "obrevenge", { + R"ART( + __ __ + _@@@@ @@@g_ + _@@@@@@ @@@@@@ + _@@@@@@M W@@@@@@_ + j@@@@P ^W@@@@ + @@@@L____ _____Q@@@@ +Q@@@@@@@@@@j@@@@@@@@@@ +@@@@@ T@j@ T@@@@@ +@@@@@ ___Q@J@ _@@@@@ +@@@@@fMMM@@j@jggg@@@@@@ +@@@@@ j@j@^MW@P @@@@ +Q@@@@@ggg@@f@ @@@@@@L +^@@@@WWMMP ^ Q@@@@ + @@@@@_ _@@@@l + W@@@@@g_____g@@@@@P + @@@@@@@@@@@@@@@@l + ^W@@@@@@@@@@@P + ^TMMMMTll +)ART", + {} + }}, + + { "obsidianos", { + R"ART( +$2 *+++++++# +$2#*******###$3 @ +$2#*******###$3 @ +$2#*******###$3 @ @ +$2#*******##%$3 @ +$3@@@@@@@@@ @ @ @ + @ @ @ @ @ + @ @ @ @ @ + @ @ @ @ + @ @ @ @ @ + @ @ @@@@@@@@@ + @$1#*******##%$3 + @$1 ##########%$3 + @$1 ##########%$3 + @$1 ##########% + ########% +)ART", + {} + }}, + + { "omnios", { + R"ART( + ____ __ __ _ _ _ + / __ \ | \/ || \ | || | +| | | || || \| || | +| |__| || |\/| || , `$2_$1||$2_$1| $2____$1 + \____/ |_| |_||_|\$2/ __ \ / ___| + | | | ||(__ + $3community$2 | |__| | ___)| + $3edition$2 \____/ |____/ +)ART", + {} + }}, + + { "openbsd", { + R"ART( +$3 _ + (_) +$1 | . +$1 . |L /| . $3 _ +$1 _ . |\ _| \--+._/| . $3(_) +$1 / ||\| Y J ) / |/| ./ + J |)'( | ` F`.'/ $3 _ +$1 -<| F __ .-< $3(_) +$1 | / .-'$3. $1`. /$3-. $1L___ + J \ < $3\ $1 | | $5O$3\$1|.-' $3 _ +$1 _J \ .- \$3/ $5O $3| $1| \ |$1F $3(_) +$1 '-F -<_. \ .-' `-' L__ +__J _ _. >-' $1)$4._. $1|-' +$1 `-|.' /_. $4\_| $1 F + /.- . _.< + /' /.' .' `\ + /L /' |/ _.-'-\ + /'J ___.---'\| + |\ .--' V | `. ` + |/`. `-. `._) + / .-.\ + \ ( `\ + `.\ +)ART", + {} + }}, + + { "openbsd_small", { + R"ART( + _____ + \- -/ + \_/ \ + | $2O O$1 | + |_ < ) 3 ) + / \ / + /-_____-\ +)ART", + {} + }}, + + { "openeuler", { + R"ART( + `.cc.` + ``.cccccccc..` + `.cccccccccccccccc.` + ``.cccccccccccccccccccccc.`` + `..cccccccccccccccccccccccccccc..` +`.ccccccccccccccc$2/++/$1ccccccccccccccccc.` +.ccccccccccccccc$2mNMMNdo+oso+$1ccccccccccc. +.cccccccccc$2/++odms+//+mMMMMm/:+syso/$1cccc +.ccccccccc$2yNNMMMs:::/::+o+/:$1c$2dMMMMMm$1cccc +.ccccccc$2:+NmdyyhNNmNNNd:$1ccccc$1$2:oyyyo:$1cccc +.ccc$2:ohdmMs:$1cccc$2+mNMNmy$1ccccccccccccccccc +.cc$2/NMMMMMo////:$1c$2:///:$1cccccccccccccccccc +.cc$2:syysyNMNNNMNy$1ccccccccccccccccccccccc +.cccccccc$2+MMMMMNy$1c$2:/+++/$1cccccccccccccccc +.ccccccccc$2ohhhs/$1c$2omMMMMNh$1ccccccccccccccc +.ccccccccccccccc$2:MMMMMMMM/$1cccccccccccccc +.cccccccccccccccc$2sNNNNNd+$1cccccccccccccc. +`..cccccccccccccccc$2/+/:$1cccccccccccccc..` + ``.cccccccccccccccccccccccccccc.`` + `.cccccccccccccccccccccc.` + ``.cccccccccccccc.`` + `.cccccccc.` + `....` +)ART", + {} + }}, + + { "openindiana", { + R"ART( +$2 .sy/ + .yh+ + + $1-+syyyo+- $2 /+. + $1+ddo/---/sdh/ $2 ym- + $1`hm+ `sms$2 ym- +)ART", + {} + }}, + + { "openkylin", { + R"ART( + /KKK] + KKKKKKK` ]KKKK\ + KKKKK/ /KKKKKKKKK\ + KKKK/ ,KKKKKKKKKKKK^ + ,]KKK =KKK` /KKKKKKOOOOOO` +,KKKKKK =KK /` [\OOOOOOO\ + \KKKKK =K ,OOOOOOO` + ,KKKKK =^ \OOOOOO + ,KKKK ^ OOOOOO^ + *KKK^ =OOOOO^ + OOKK^ OOOOOO^ + \OOOK\ /OOOOOO` + OOOOOO] ,OOOOOOO^ + ,OOOOOOOO\] ,[OOOOOOOOO/ + \OOOOOOOOOOOOOOOOOOOOO` + [OOOOOOOOOOOOOOOO/` + ,[OOOOOOOOO] +)ART", + {} + }}, + + { "openmamba", { + R"ART( + +)ART", + {} + }}, + + { "openmandriva", { + R"ART( + +)ART", + {} + }}, + + { "openruyi", { + R"ART( + ⣠⣴⣶⣾⣿⣿⣷⣶⣦⣄ + ⣠⣾⣿⡿⠟⠛⠉⠉⠛⠻⢿⣿⣷⣄ + ⣼⣿⡿⠋ ⠙⢿⣿⣧ + ⣀⣠⣿⣿⠁ ⠈⣿⣿⣄⣀ + ⢀⣴⣾⣿⣿⡿⠟$2 ⢀⣀⣀⣄⣀⣀ $1⠻⢿⣿⣿⣷⣦⡀ +$1 ⣰⣿⣿⠟⠉ $2 ⣠⣾⣿⡿⠿⠿⠿⢿⣿⣦⡀ $1 ⠉⠻⣿⣿⣆ +$1⢰⣿⡿⠁ $2⢰⣿⡿⠁$3⢀⣠⣄⡀$2 ⠙⣿⣷$1 ⠘⣿⣿⡆ +$1⣿⣿⡇ $2⠙⣿⠁$3⣴⣿⡿⠿⠟$2 ⢀⣿⣿$1 ⢸⣿⣿ +$1⣿⣿⡇ $3 ⣿⡟$2⢀⣀⣀⣴⣾⣿⠋ $1 ⢸⣿⣿ +$1⠸⣿⣷⡀ $3 ⣿⡇$2⠘⢿⣿⣿⡋ $1 ⢠⣾⣿⠇ +$1 ⠙⣿⣿⣶⣤⣀⣀⣀$3⣀⣀⣰⣿⡇$2 ⠙⢿⣿⣦⣀⣀$1⣀⣀⣤⣶⣿⣿⠋ +$1 ⠙⠿⢿⣿⣿⣿$3⣿⣿⣿⠟ $2 ⠉⠻⣿⣿$1⣿⣿⡿⠟⠋ +)ART", + {} + }}, + + { "openstage", { + R"ART( + /(/ + .(((((((, + /(((((((((/ + .(((((/,/(((((, + *(((((* ,(((((/ + (((((* .*/(( + *((((/ (//(/* + /((((* ((((((((((, + . /((((* (((((((((((((. + ((. *((((/ ,(((((((( + ,(((/ (((((/ ** ,((((((* + /(((((. .(((((/ //(((* *(((((/ + .(((((, ((/ .(((((/. .(((((, + /((((* ,(((((((/ ,((((( + /(((((((((((((((((((/. /(((((((((/ + /(((((((((((((((((, /(((((((((((/ + */(((((//*. */((/(/(/* +)ART", + {} + }}, + + { "opensuse", { + R"ART( + $2.;ldkO0000Okdl;. + .;d00xl:^''''''^:ok00d;. + .d00l' 'o00d. + .d0Kd'$1 Okxol:;,. $2:O0d + .OK$1KKK0kOKKKKKKKKKKOxo:, $2lKO. + ,0K$1KKKKKKKKKKKKKKK0P^$2,,,$1^dx:$2 ;00, +.OK$1KKKKKKKKKKKKKKKk'$2.oOPPb.$1'0k.$2 cKO. +:KK$1KKKKKKKKKKKKKKK: $2kKx..dd $1lKd$2 'OK: +dKK$1KKKKKKKKKOx0KKKd $2^0KKKO' $1kKKc$2 dKd +dKK$1KKKKKKKKKK;.;oOKx,..$2^$1..;kKKK0.$2 dKd +:KK$1KKKKKKKKKK0o;...^cdxxOK0O/^^' $2.0K: + kKK$1KKKKKKKKKKKKK0x;,,......,;od $2lKk + '0K$1KKKKKKKKKKKKKKKKKKKK00KKOo^ $2c00' + 'kK$1KKOxddxkOO00000Okxoc;'' $2.dKk' + l0Ko. .c00l' + 'l0Kk:. .;xK0l' + 'lkK0xl:;,,,,;:ldO0kl' + '^:ldxkkkkxdl:^' +)ART", + {} + }}, + + { "opensuse_leap", { + R"ART( + ==== + ====== + ==== ====+ + +==== +==== + +===+ ==== + ==== ==== ++=== +==== +==== +==== + ===== ==== + +===+ ===== +==+ ===== +===+ === +==== ==== ===== ===== + ==== ======= ==== + ==== === ==== + ====+ ==== + ==== ===== + ====== + == +)ART", + {} + }}, + + { "opensuse_leap_old", { + R"ART( + .-++:. + ./oooooo/- + `:oooooooooooo:. + -+oooooooooooooooo+-` + ./oooooooooooooooooooooo/- + :oooooooooooooooooooooooooo: + ` `-+oooooooooooooooooooo/- ` + `:oo/- .:ooooooooooooooo+:` `-+oo/. +`/oooooo:. -/oooooooooo/. ./oooooo/. + `:+ooooo+-` `:+oooo+- `:oooooo+:` + .:oooooo/. .::` -+oooooo/. + -/oooooo:. ./oooooo+- + `:+ooooo+-:+oooooo:` + ./oooooooooo/. + -/oooo+:` + `:/. +)ART", + {} + }}, + + { "opensuse_microos", { + R"ART( + ⣀⣠⣴⣶⣶⣿⣿⣿⣿⣶⣶⣦⣄⣀ + ⢀⣴⣾⣿⠿⠛⠉⠉ ⠉⠉⠛⠿⣿⣷⣦⡀ + ⣴⣿⡿⠋ ⠙⢿⣿⣦ + ⣾⣿⡟ ⣠⣴⣶⣿⣿⣶⣦⣄ ⢻⣿⣷ +⣠⣤⣤⣤⣤⣤⣤⣼⣿⣿ ⣼⣿⡟⠉ ⠉⢻⣿⣧ ⣿⣿⣧⣤⣤⣤⣤⣤⣤⣄ +⠙⠛⠛⠛⠛⠛⠛⢻⣿⣿ ⢻⣿⣧⡀ ⢀⣼⣿⡟ ⣿⣿⡟⠛⠛⠛⠛⠛⠛⠋ + ⢿⣿⣇ ⠙⠿⣿⣿⣿⣿⠿⠋ ⣸⣿⡿ + ⠈⢻⣿⣧⣀ ⣀⣾⣿⡟⠁ + ⠙⠻⣿⣷⣦⣄⣀ ⣀⣠⣴⣾⣿⠟⠋ + ⠉⠛⠿⢿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠉ +)ART", + {} + }}, + + { "opensuse_slowroll", { + R"ART( + _,......,_ + _aaQQQQQQWQQQQQQQaa. + ajQQQ??^' '^??QQQw. + ,aQQP^ ?4QQa + wQQP ^4QQa + ,QQP' ,aaaaa. ^$Q6, + ,QQP ajQQQWWWWQQQw. 4QQ + QQP aQQP? ?$QQ. 4Q6 +jQQ jQQ' ?WQr 'QQb +QQf ]QQ' ]QQ QQ6 +QQf ]QQ ]QQ) QQQ +QQ6 'QQ6 ]QQ QQf +]QQ. ^4QQaa .QQP ,QQ' + $QQ. ^?QQQQf _yQP ,QQP + ^WQQ6. aQQ? _QQP + ^4QQQ6a. ajQQP' aQQP + ?QQQQQWQaaaaaaajQWQP? aQQP' + ?QQQQP????????^' saWQP? + ^?QQQgaaa._ __aaaQQQP?' + '^?QWQQQQQQQQ@??^' +)ART", + {} + }}, + + { "opensuse_small", { + R"ART( + _______ +__| __ \ + / .\ \ + \__/ | + _______| + \_______ +__________/ +)ART", + {} + }}, + + { "opensuse_tumbleweed", { + R"ART( + ,..., + .,:lloooooc;. + ,ool' oo,;oo: + .lo' oo. oo: +.oo. oo. oo: +:ol oo. 'oo +:oo .oo. .oo. +.oooooooooooooo. .oo. + ;oo. .oo. + 'oo, .oo. + "ooc,',,,,,,,,,,:ooc,,,,,,,,,,, + ':cooooooooooooooooooooooooool;. + .oo. .oo; + .oo. .oo. + .oo. 'oooooooooo:ooo. + .oo. 'oo. col + .oo' 'oo col + coo 'oo oo' + coc 'oo .lo, + `oo, 'oo .:oo + 'ooooc,, ,:lol + `''"clc"' +)ART", + {} + }}, + + { "opensuse_tumbleweed2", { + R"ART( + ⣀⣤⣤⣶⣶⣶⣶⣶⣤⣄⡀ + ⣠⣾⣿⣿⡿⠿⠛⠛⣿⣿⣿⣿⣿⣶⣄ + ⢠⣾⣿⣿⠛⠁ ⣿⣿⣿⠉⠻⣿⣿⣦ +⢀⣿⣿⡿⠁ ⣿⣿⣿ ⠙⣿⣿⣧ +⢸⣿⣿⠃ ⣿⣿⣿ ⢹⣿⣿⡀ +⢸⣿⣿⣤⣤⣤⣤⣤⣤⣤⣤⣿⣿⣿ ⢸⣿⣿⡇ +⠘⣿⣿⣿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿ ⢸⣿⣿⡇ + ⠹⣿⣿⣷⡀ ⢸⣿⣿⡇ + ⠙⢿⣿⣿⣷⣤⣄⣀⣀⣀⣀⣀⣀⣀⣀⣸⣿⣿⣇⣀⣀⣀⣀⣀⣀⣀⣀ + ⠉⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀ + ⠈⠉⠉⠉⠉⠉⠉⠉⠉⢹⣿⣿⡏⠉⠉⠉⠉⠉⠉⠉⠉⠙⠛⢿⣿⣿⣷⡀ + ⢸⣿⣿⡇ ⠈⢻⣿⣿⣆ + ⢸⣿⣿⡇ ⢰⣶⣶⣶⣶⣶⣶⣶⣶⣶⣿⣿⣿⡄ + ⢸⣿⣿⡇ ⢸⣿⣿⠛⠛⠛⠛⠛⠛⠛⠛⣿⣿⡇ + ⠘⣿⣿⡇ ⢸⣿⣿ ⢰⣿⣿⡇ + ⢻⣿⣿⡄ ⢸⣿⣿ ⢀⣾⣿⡿⠁ + ⢻⣿⣿⣦⣀⢸⣿⣿ ⢀⣴⣿⣿⡿⠁ + ⠙⢿⣿⣿⣿⣿⣿⣤⣴⣶⣾⣿⣿⡿⠋ + ⠈⠙⠻⠿⠿⠿⠿⠿⠛⠋⠁ +)ART", + {} + }}, + + { "opensuse_tumbleweed_old", { + R"ART( + ...... + .,cdxxxoc,. .:kKMMMNWMMMNk:. + cKMMN0OOOKWMMXo. A ;0MWk:' ':OMMk. + ;WMK;' 'lKMMNM, :NMK' 'OMW; + cMW; WMMMN ,XMK' oMM. +.MMc ''^*~l. xMN: KM0 +'MM. .NMO oMM +.MM, .kMMl xMN + KM0 .kMM0' .dl>~,. .WMd + 'XM0. ,OMMK' OMMM7' .XMK + *WMO:. .;xNMMk' NNNMKl. .xWMx + ^ONMMNXMMMKx; V 'xNMWKkxllox0NMWk' + ''''' ':dOOXXKOxl' +)ART", + {} + }}, + + { "opensuse_tumbleweed_small", { + R"ART( + .oooo. +o o o +ooooo oo +o oo + 'oooooooooooo. + oo o + oo ooooo + o o o + 'oooo' +)ART", + {} + }}, + + { "openwrt", { + R"ART( + ..,,.. + ,;odOMMMMMMMMObo:. + ,odOMMMMMO""''""OMMMMMObo. +.dMMMM" .,,. "OMMMb, + '0" ,;ddMMMMMMMMbb:. "0' + oOMMMMO""''""OMMMMOo + $2;. $1'0" .,,. "0' $2.: + .OMM* $1.odMMMMMMbo. $2*MMO. + MMMO $1"0" +)ART", + {} + }}, + + { "openwrt_old", { + R"ART( + _______ +| |.-----.-----.-----. +| - || _ | -__| | +|_______|| __|_____|__|__| + |__| + ________ __ +| | | |.----.| |_ +| | | || _|| _| +|________||__| |____| +)ART", + {} + }}, + + { "openwrt_small", { + R"ART( + ..,.. + ,odM"""""Mbo, + `.odMMMMMbo.` + $2d,$1" ,mmm, "$2,b +iM $1" . " $2Mi +Ml $1dMb $2lM +'M, $1' $2.M' + "0b. ,d0" + `"WWWWW"` +)ART", + {} + }}, + + { "opnsense", { + R"ART( + .''''''''''''''''''''''''''''''''''' + oocc:::::::::::::::::::::::::::::::cox + ;00; o0O + .,:' .;;;;;;;;;;;;;;;;;;;;;;;;;; ;:, + .',;;cxOOOOOOOOOOOOOOOOOOOOOOOkd:;;,.. + .,cll:' ':llc,. + ,;;:okxdxd: :dxdxko:;;, + .xxxx0XNNK0O. .O0KNNX0xxxx. + ,$2cc:$1,. .,$2:cc$1, + ........;$2ccc:$1;. .;$2:ccc$1;........ + $2ccccccccccccccc ccccccccccccccc$1 + ........;$2ccc:$1;. .;$2:ccc$1;........ + ,$2cc:$1,. .,$2:cc$1, + .xxxx0XNNK0O. .O0KNNX0xxxx. + ,;;:okxdxd: :dxdxko:;;, + .,cll:' ':llc,. + .,,;,ckOOOOOOOOOOOOOOOOOOOOOOOOx;,;,'. + .:l' ........................... ;:; + lOk' cdd + ;lccccccccccccccccccccccccccccccccccc:. +)ART", + {} + }}, + + { "oracle", { + R"ART( + `-/+++++++++++++++++/-.` + `/syyyyyyyyyyyyyyyyyyyyyyys/. + :yyyyo/-...............-/oyyyy/ + /yyys- .oyyy+ +.yyyy` `syyy- +:yyyo /yyy/ +.yyyy` `syyy- + /yyys. .oyyyo + /yyyyo:-...............-:oyyyy/` + `/syyyyyyyyyyyyyyyyyyyyyyys+. + `.:/+ooooooooooooooo+/:.` +)ART", + {} + }}, + + { "orchid", { + R"ART( +$2 .==. + .-$3#$1@@$3#$2-. + .-$3##$1@@@@$3##$2-. + .-$3##$1@@@@@@@@$3##$2-. + :*$1@@@@@$3####$1@@@@@$2*: + ..:*$1@@@@$2==--==$1@@@@$2*:.. + .-*$1%%$3#$2==$3#$1@@$3#$2====$3#$1@@$3#$2==$3#$1%%$2*-. + .-$3#$1@@@@@$3##$2==$3#$1@@$2++$1@@$3##$2==$3#$1@@@@@$3#$2-. + .-$3#$1@@@@@$2#$1@@@$3#$2++#====$3#$2++#$1@@@$2#$1@@@@@$3#$2-. +.-$3#$1@@@@@$3#$2-==**$3###$2+:--:+$3###$2**==-$3#$1@@@@@$3#$2-. +.-$3#$1@@@@@$3#$2-==**$3###$2+:--:+$3###$2**==-$3#$1@@@@@$3#$2-. + .-$3#$1@@@@@$2#$1@@@$3#$2++#====$3#$2++#$1@@@$2#$1@@@@@$3#$2-. + .-$3#$1@@@@@$3##$2==$3#$1@@$2++$1@@$3##$2==$3#$1@@@@@$3#$2-. + .-*$1%%$3#$2==$3#$1@@$3#$2====$3#$1@@$3#$2==$3#$1%%$2*-. + ..:*$1@@@@$2==--==$1@@@@$2*:.. + :*$1@@@@@$3####$1@@@@@$2*: + .-$3##$1@@@@@@@@$3##$2-. + .-$3##$1@@@@$3##$2-. + .-$3#$1@@$3#$2-. + .==. +)ART", + {} + }}, + + { "orchid_small", { + R"ART( + $2:##: + -#$1@@@@$2#- + #$1@@$2=..=$1@@$2# + +$1@@$2- -$1@@$2+ + -#$1@@$2*..*$1@$2..$1@$2*..*$1@@$2#- + :#$1@@$2*+%$1@$2= . . =$1@$2%+*$1@@$2#: ++$1@@@$2: :-. .-: :$1@@@$2+ + :#$1@@$2*+%$1@$2= . . =$1@$2%+*$1@@$2#: + -#$1@@$2*..*$1@$2..$1@$2*..*$1@@$2#- + +$1@@$2- -$1@@$2+ + #$1@@$2=..=$1@@$2# + -#$1@@@@$2#- + :##: +)ART", + {} + }}, + + { "oreon", { + R"ART( + @@@@@@@@@@ + @@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@ @@@@@@@@@@@ + @@@@@@@@ @@@@@@@@@ + @@@@@@@@ @@@@@@@@ + @@@@@@@ @@@@@@@ + @@@@@@@@ @@@@@@@ + @@@@@@@@ @@@@@@ + @@@@@@@@@ @@@@@@ +@@@@@@@@@@ @@@@@@ +@@@@@@@@@@ @@@@@@ + @@@@@@@@@ @@@@@@ + @@@@@@@@ @@@@@@ + @@@@@@@@ @@@@@@@ + @@@@@@@ @@@@@@@ + @@@@@@@@ @@@@@@@@ + @@@@@@@@ @@@@@@@@ + @@@@@@@@@@ @@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@ + @@@@@@@@@@ +)ART", + {} + }}, + + { "origami", { + R"ART( + -+: + =+++- + .=+++++= + :+++++++++. +$2.8....... $1-++++*++++++:$2 ...88 + .8888888..$1-+++++*+++++*+:$2..8888888 + .8888888=8===$1=++++==$2==8888888888 + .88888==========88888888888888 + .888========888=888888888888. + 8=======888888====88888888. + 8====88888888======88888. + 888888888888=========8. +)ART", + {} + }}, + + { "origami_small", { + R"ART( + 00 + 01 00 + 0000 0000 + 000001 00000 +$211010011110 $100 $201111001011 + 01111100 $100000000 $200111110 + 0110 00010000001000 0110 + 000000000000000000 +)ART", + {} + }}, + + { "os2warp", { + R"ART( + .-==: . . + -+:::+= * *- = -. -%* + ** *# :%- . :.*=: -%% + %@: -@% =%@%%*: - :. -%= +-@@: :@@- -+#%%+ .: :*. +-@@: :@@-- -% = .* +.%@- -%% ++ # . -: . + #* ** =.:*: +- = #%%%%#+-*: + -=====- .:- .. + +$2 =*+ -+*: + .*+ :*+= -+*++**- + +*-++++ -++-:. .:-=++.=*+. =*- + -***:-+:*++=*++*: +*+=:-**+=**++- + :- :***==*+.=++ +*+=++*=.=*+. + .=-=*+***+*= +*+ :**+=++ + . -*+ +*+ .=: +)ART", + {} + }}, + + { "os_elbrus", { + R"ART( +▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ +██ ██ +██ ███████ ███████ ██ +██ ██ ██ ██ ██ ██ +██ ██ ██ ██ ██ ██ +██ ██ ██ ██ ██ ██ +██ ██ ██ ██ ██ ██ +██ ██ ███████ ███████ +██ ██ ██ +██ ██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄██ +██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ +██ ██ +███████████████████████████ +)ART", + {} + }}, + + { "osmc", { + R"ART( + -+shdmNNNNmdhs+- + .+hMNho/:..``..:/ohNMh+. + :hMdo. .odMh: + -dMy- -yMd- + sMd- -dMs + hMy +. .+ yMh + yMy dMs. .sMd yMy +:Mm dMNMs` `sMNMd `mM: +yM+ dM//mNs``sNm//Md +My +mM- dM: +NNNN+ :Md -Mm +mM- dM: `oNN+ :Md -Mm +yM+ dM/+NNo` :Md +My +:Mm` dMMNs` :Md `mM: + yMy dMs` -ms yMy + hMy +. yMh + sMd- -dMs + -dMy- -yMd- + :hMdo. .odMh: + .+hMNho/:..``..:/ohNMh+. + -+shdmNNNNmdhs+- +)ART", + {} + }}, + + { "pacbsd", { + R"ART( + :+sMs. + `:ddNMd- -o--` + -sMMMMh: `+N+`` + yMMMMMs` .....-/-... `mNh/ + yMMMMMmh+-`:sdmmmmmmMmmmmddy+-``./ddNMMm + yNMMNMMMMNdyyNNMMMMMMMMMMMMMMMhyshNmMMMm + :yMMMMMMMMMNdooNMMMMMMMMMMMMMMMMNmy:mMMd + +MMMMMMMMMmy:sNMMMMMMMMMMMMMMMMMMMmshs- + :hNMMMMMMN+-+MMMMMMMMMMMMMMMMMMMMMMMs. + .omysmNNhy/+yNMMMMMMMMMMNMMMMMMMMMNdNNy- + /hMM:::::/hNMMMMMMMMMMMm/-yNMMMMMMN.mMNh` +.hMMMMdhdMMMMMMMMMMMMMMmo `sMMMMMMN mMMm- +:dMMMMMMMMMMMMMMMMMMMMMdo+ oMMMMMMN`smMNo` +/dMMMMMMMMMMMMMMMMMMMMMNd/` :yMMMMMN:-hMMM. +:dMMMMMMMMMMMMMMMMMMMMMNh` oMMMMMMNo/dMNN` +:hMMMMMMMMMMMMMMMMMMMMMMNs--sMMMMMMMNNmy++` + sNMMMMMMMMMMMMMMMMMMMMMMMmmNMMMMMMNho::o. + :yMMMMMMMMMMMMMNho+sydNNNNNNNmysso/` -// + /dMMMMMMMMMMMMMs- +)ART", + {} + }}, + + { "panwah", { + R"ART( + HHH + HAAAH HHH + HAAAAH HAAAH + HAAAAAAH HAAAAH + HAAAAAAH HAAAAAH + HAAAAAAAAH$2WWWWWWWWWWWWWWWW $1HAAAAAH + HAAAAAAAAH$2WWWWWWWWWWWWWWWWWWWW$1 HAAAAAH + HAA$2WWWWWWWWWWWWWWWWWWWWWWWWWWWWW$1AAAAAH$2 + WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW$1WAH$2 + WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW + WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW + WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWW$1AAA$2WWWW WWWWWWWWWWWWWWWWWWWWWWWWWWW + WWWW$1AAA$2WWWWW WWWWWWW WWWWWWWWWWWWWWW + WW$1AAA$2WWWWWWWWWWWWWWWWW WWWWW$1AAA$2WWWWWWWW + $1AAA$2WWWWW$1OOOOOOOOOOO$2WWWWWWWWWWW$1AAA$2WWWWWW + $1OOOO$3GGGGGGG$1OOOO$2WWWWWWWWWW$1AAA$2WWWW + $1OOO$3GGGGGGG$1OOO$2WWWWWWWWWWWW$1AAA$2W + $1OOOOOOOOO +)ART", + {} + }}, + + { "parabola", { + R"ART( + `.-. `. + `.` `:++. `-+o+. + `` `:+/. `:+/. `-+oooo+ + ``-::-.:+/. `:+/. `-+oooooo+ + `.-:///- ..` .-. `-+oooooooo- + `..-..` `+ooooooooo: +`` :oooooooo/ + `ooooooo: + `oooooo: + -oooo+. + +ooo/` + -ooo- + `+o/. + /+- + //` + -. +)ART", + {} + }}, + + { "parabola2_small", { + R"ART( + _. .d;' ,b, + _.=: `" "` ,d88} +` "888!' + }8!' + ,P/ + ,1' + /' +)ART", + {} + }}, + + { "parabola_small", { + R"ART( + __ __ __ _ +.`_//_//_/ / `. + / .` + / .` + /.` + /` +)ART", + {} + }}, + + { "parch", { + R"ART( + ,:lodddd. + .:clooood. + ;clllooooc + ;cclllllloo + .cccccllllll + . ,cccclllll + ':::;; ccccclll; + .:::cccccccccccll; + ;::::ccccllllllcll: +.;::::cccclllloool::; +;;;::::cccclllolc::::;. +;;;::::cccclllccc:::::;. +;;;::::cccclccccc::::::;. +;;;;::::::llcccccc:::::' +;;;;:; ,clllccccccc:: +.;; .cllllllcccccc::;::::' + .'''''''''',:lddoooolll + '.....'''',cdddooooollll + ........':oddddoooolllllc + ....';ldddddooooolllllc: + ,cdddddddooooollllccc + :ddddddoooolllllccc + ;ddooooolllllcc. + :ooollllc. + c' +)ART", + {} + }}, + + { "pardus", { + R"ART( + .smNdy+- `.:/osyyso+:.` -+ydmNs. +/Md- -/ymMdmNNdhso/::/oshdNNmdMmy/. :dM/ +mN. oMdyy- -y `-dMo .Nm +.mN+` sMy hN+ -: yMs `+Nm. + `yMMddMs.dy `+` sMddMMy` + +MMMo .` . oMMM+ + `NM/ +)ART", + {} + }}, + + { "parrot", { + R"ART( + `:oho/-` +`mMMMMMMMMMMMNmmdhy- + dMMMMMMMMMMMMMMMMMMs` + +MMsohNMMMMMMMMMMMMMm/ + .My .+dMMMMMMMMMMMMMh. + + :NMMMMMMMMMMMMNo + `yMMMMMMMMMMMMMm: + /NMMMMMMMMMMMMMy` + .hMMMMMMMMMMMMMN+ + ``-NMMMMMMMMMd- + /MMMMMMMMMMMs` + mMMMMMMMsyNMN/ + +MMMMMMMo :sNh. + `NMMMMMMm -o/ + oMMMMMMM. + `NMMMMMM+ + +MMd/NMh + mMm -mN` + /MM `h: + dM` . + :M- + d: + -+ + - +)ART", + {} + }}, + + { "parsix", { + R"ART( + $2-/+/:. + $2.syssssys. + $1.--. $2ssssssssso$1 ..--. + :++++++: $2+ssssssss+$1 ./++/+++: + /+++++++++.$2.yssooooy`$1-+///////o- + /++++++++++.$2+soooos:$1:+////////+- + :+++++////o-$2oooooo-$1+/////////- + `-/++//++-$4.-----.-$1:+/////:- + $3-://::--$1-:/:$4.--. +)ART", + {} + }}, + + { "pcbsd", { + R"ART( + .. + s. + +y + yN + -MN `. + :NMs `m + .yMMm` `No + `-/+++sdMMMNs+-`+Ms + `:oo+-` .yMMMMy` `-+oNMh + -oo- +NMMMM/ oMMh- + .s+` ` oMMMMM/ - oMMMhy. + +s`- :: :MMMMMd -o `mMMMy`s+ + y+ h .Ny+oNMMMMMN/ sh+NMMMMo +y + s+ .ds -NMMMMMMMMMMNdhdNMMMMMMh` +s +-h .NM` `hMMMMMMMMMMMMMMNMMNy: h- +y- hMN` hMMmMMMMMMMMMNsdMNs. -y +m` mMMy` oMMNoNMMMMMMo` sMMMo `m +m` :NMMMdyydMMMMo+MdMMMs sMMMd` `m +h- `+ymMMMMMMMM--M+hMMN/ +MMMMy -h +:y `.sMMMMM/ oMM+.yMMNddNMMMMMm y: + y: `s dMMN- .MMMM/ :MMMMMMMMMMh :y + `h: `mdmMMM/ yMMMMs sMMMMMMMMN- :h` + so -NMMMN /mmd+ `dMMMMMMMm- os + :y: `yMMM` `+NMMMMMMNo`:y: + /s+`.omy /NMMMMMNh/.+s: + .+oo:-. /mdhs+::oo+. + -/o+++++++++++/- +)ART", + {} + }}, + + { "pclinuxos", { + R"ART( + mhhhyyyyhhhdN + dyssyhhhhhhhhhhhssyhN + Nysyhhyo/:-.....-/oyhhhssd + Nsshhy+. `/shhysm + dohhy/ -shhsy + dohhs` /hhys +N+hho $2+ssssss+- .+syhys+ $1/hhsy +ohhh` $2ymmo++hmm+`smmy/::+y` $1shh+ ++hho $2ymm- /mmy+mms $1:hhod +/hh+ $2ymmhhdmmh.smm/ $1.hhsh ++hhs $2ymm+::-` /mmy` ` $1/hh+m +yyhh- $2ymm- /dmdyosyd` $1`yhh+ + ohhy` $2://` -/+++/- $1ohhom + N+hhy- `shhoh + sshho. `+hhyom + dsyhhs/. `:ohhhoy + dysyhhhso///://+syhhhssh + dhyssyhhhhhhyssyyhN + mddhdhdmN +)ART", + {} + }}, + + { "pearos", { + R"ART( + .+yh + sMMMo + sMMN+ + +o: +$2 ./oyyys+. + :dMMMMMMMMMm/ + :MMMMMMMMMMMMMy + yMMMMMMMMMMMMMN +$3 mMMMMMMMMMMMMs` + yMMMMMMMMMMMMo + -mMMMMMMMMMMMMM` + oMMMMMMMMMMMMMMM` +$4 oMMMMMMMMMMMMMMMMy + .MMMMMMMMMMMMMMMMMMy` + +MMMMMMMMMMMMMMMMMMMMy/` + /MMMMMMMMMMMMMMMMMMMMMMMNds +$5 `mMMMMMMMMMMMMMMMMMMMMMMMM/ + .mMMMMMMMMMMMMMMMMMMMMMM+ + `oNMMMMMMMMMMMMMMMMMMd- + `+hMMMMMMMMMMMMMms- + -/osyhhyso:. +)ART", + {} + }}, + + { "pengwin", { + R"ART( +$3 ...` +$3 `-///:-` +$3 .+$2ssys$3/ +$3 +$2yyyyy$3o $2 +$2 -yyyyyy: +$2 `.:/+ooo+/:` -yyyyyy+ +$2 `:oyyyyyys+:-.`syyyyyy: +$2 .syyyyyyo-` .oyyyyyyo +$2`syyyyyy `-+yyyyyyy/` +$2/yyyyyy+ -/osyyyyyyo/. +$2+yyyyyy- `.-:::-.` +$2.yyyyyy- +$3 :$2yyyyy$3o +$3 .+$2ooo$3+ +$3 `.::/:. +)ART", + {} + }}, + + { "pentoo", { + R"ART( +$2 `:oydNNMMMMNNdyo:` + :yNMMMMMMMMMMMMMMMMNy: + :dMMMMMMMMMMMMMMMMMMMMMMd: + oMMMMMMMho/-....-/ohMMMMMMMo + oMMMMMMy. .yMMMMMMo + .MMMMMMo oMMMMMM. + +MMMMMm mMMMMM+ + oMMMMMh hMMMMMo + //hMMMMMm//$1`$2 $1`$2////mMMMMMh// +MMMMMMMMMMM$1/$2 $1/o/`$2 $1.$2smMMMMMMMMMMM +MMMMMMMMMMm $1`NMN:$2 $1.$2yMMMMMMMMMM +MMMMMMMMMMMh$1:.$2 dMMMMMMMMM +MMMMMMMMMMMMMy$1.$2 $1-$2NMMMMMMMMM +MMMMMMMMMMMd:$1`$2 $1-$2yNMMMMMMMMMM +MMMMMMMMMMh$1`$2 $1./$2hNMMMMMMMMMMMM +MMMMMMMMMM$1s$2 $1.:$2ymMMMMMMMMMMMMMMM +MMMMMMMMMMN$1s:..-/$2ohNMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +)ART", + {} + }}, + + { "peppermint", { + R"ART( +$1 PPPPPPPPPPPPPP +$1 PPPP$2MMMMMMM$1PPPPPPPPPPP +$1 PPPP$2MMMMMMMMMM$1PPPPPPPP$2MM$1PP +$1 PPPPPPPP$2MMMMMMM$1PPPPPPPP$2MMMMM$1PP +$1 PPPPPPPPPPPP$2MMMMMM$1PPPPPPP$2MMMMMMM$1PP +$1 PPPPPPPPPPPP$2MMMMMMM$1PPPP$2M$1P$2MMMMMMMMM$1PP +$1 PP$2MMMM$1PPPPPPPPPP$2MMM$1PPPPP$2MMMMMMM$1P$2MM$1PPPP +$1 P$2MMMMMMMMMM$1PPPPPP$2MM$1PPPPP$2MMMMMM$1PPPPPPPP +$1P$2MMMMMMMMMMMM$1PPPPP$2MM$1PP$2M$1P$2MM$1P$2MM$1PPPPPPPPPPP +$1P$2MMMMMMMMMMMMMMMM$1PP$2M$1P$2MMM$1PPPPPPPPPPPPPPPP +$1P$2MMM$1PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP$2MMMMM$1P +$1PPPPPPPPPPPPPPPP$2MMM$1P$2M$1P$2MMMMMMMMMMMMMMMM$1PP +$1PPPPPPPPPPP$2MM$1P$2MM$1PPPP$2MM$1PPPPP$2MMMMMMMMMMM$1PP +$1 PPPPPPPP$2MMMMMM$1PPPPP$2MM$1PPPPPP$2MMMMMMMMM$1PP +$1 PPPP$2MM$1P$2MMMMMMM$1PPPPPP$2MM$1PPPPPPPPPP$2MMMM$1PP +$1 PP$2MMMMMMMMM$1P$2M$1PPPP$2MMMMMM$1PPPPPPPPPPPPP +$1 PP$2MMMMMMM$1PPPPPPP$2MMMMMM$1PPPPPPPPPPPP +$1 PP$2MMMM$1PPPPPPPPP$2MMMMMMM$1PPPPPPPP +$1 PP$2MM$1PPPPPPPP$2MMMMMMMMMM$1PPPP +$1 PPPPPPPPPP$2MMMMMMMM$1PPPP +$1 PPPPPPPPPPPPPP +)ART", + {} + }}, + + { "peropesis", { + R"ART( +#### #### #### ### #### #### #### # #### +# # # # # # # # # # # # # +#### ### #### # # #### ### # # # +# # # # # # # # # # # +# #### # # ### # #### #### # #### +)ART", + {} + }}, + + { "phyos", { + R"ART( +.^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.^^^^^. + :777777777777777777777777777777^~7777: + .~~~~~~~~~~~~~~~~~~~~~^~7777!:!777!. + ~7!!!!!!!!!!!!!!!!!^:!777~^!777~ + ^77777!!!!!!!!!7!^^7777^^7777^ + ^7777~.~~~~^. .~7777^~7777: + :!777~^!777~. !777!:~777!: + .!777!:~777!:~77~:!777!. + ~777!^~7777:^~^!777~ + ^7777^^7777^^7777^ + :7777~^!7777777: + .!777!:!7777!. + .~777!:~77~. + ~7777^~~ + ^7777. + :77: + .. +)ART", + {} + }}, + + { "pikaos", { + R"ART( + - + ---------------- + ------------------ + ------------------- + -- -----------=*-=----##### + -----------------------------####--=###### + ------------------------------++---+#### + =============----------------=+=----- + =================-----------####+---- + ==================----------*###=---- + ===================----------------- + ==================----------------- + =================---------------- + ===============------------:::: + ============-::::::::::::::: + =======--::::::::::::::: + .::::::::::::::::. + ::::::: +)ART", + {} + }}, + + { "pisi", { + R"ART( + \Fv/!- `:?lzC +$1 Q!::=zFx! $2`;v6WBCicl;` $1,vCC\!::#. +$1 ,%:::,'` $2+#%@@FQ@@. ,cF%i$1``-',::a? +$1 +m:,' +)ART", + {} + }}, + + { "pnm_linux", { + R"ART( + ``.---..` `--` + ``.---........-:.$2-::`$1 + $2./::-$1........$2--::. +)ART", + {} + }}, + + { "pop", { + R"ART( + ///////////// + ///////////////////// + ///////$2*767$1//////////////// + //////$27676767676*$1////////////// + /////$276767$1//$27676767$1////////////// + /////$2767676$1///$2*76767$1/////////////// + ///////$2767676$1///$276767$1.///$27676*$1/////// +/////////$2767676$1//$276767$1///$2767676$1//////// +//////////$276767676767$1////$276767$1///////// +///////////$276767676$1//////$27676$1////////// +////////////,$27676$1,///////$2767$1/////////// +/////////////*$27676$1///////$276$1//////////// +///////////////$27676$1//////////////////// + ///////////////$27676$1///$2767$1//////////// + //////////////////////$2'$1//////////// + //////$2.7676767676767676767,$1////// + /////$2767676767676767676767$1///// + /////////////////////////// + ///////////////////// + ///////////// +)ART", + {"pop_os", "popos", "pop!_os"} + }}, + + { "pop_small", { + R"ART( +______ +\ _ \ __ + \ \ \ \ / / + \ \_\ \ / / + \ ___\ /_/ + \ \ _ + __\_\__(_)_ + (___________)` +)ART", + {} + }}, + + { "porteus", { + R"ART( + `.-:::-.` + -+ydmNNNNNNNmdy+- + .+dNmdhs+//////+shdmdo. + .smmy+-` ./sdy: + `omdo. `.-/+osssso+/-` `+dy. + `yms. `:shmNmdhsoo++osyyo-``oh. + hm/ .odNmds/.` ``.....:::-+s +/m: `+dNmy:` `./oyhhhhyyooo++so +ys `yNmy- .+hmmho:-.` +)ART", + {} + }}, + + { "postmarketos", { + R"ART( + /\ + / \ + / \ + / \ + / \ + / \ + \ \ + /\ \____ \ + / \____ \ \ + / / \ \ + / / \ ___\ + / / \ / ____ + / / \/ / \ + / / __________/ \ + / \ \ \ + / \ \ \ + / / / \ +/___________/ /____________________\ +)ART", + {} + }}, + + { "postmarketos2", { + R"ART( + db + d88b + d8888b + d888888b + j88888888b + !888888888b + j| J8^"888888b + d8[;__, '888888b + d88888P' '888888b + d88888P '888888b + d88888P '888888b + d88888P '1^`,.__ + d88888P " ,A888b + d888888, =ooooooooooo888888b + d88888888, "J8888888888888888b + d888888888" ,d88888888888888888b +d88888888P' ,d8888888888888888888b +)ART", + {} + }}, + + { "postmarketos_small", { + R"ART( + /\ + / \ + / \ + \__ \ + /\__ \ _\ + / / \/ __ + / / ____/ \ + / \ \ \ +/_____/ /________\ +)ART", + {} + }}, + + { "prismlinux", { + R"ART( + ⣤⣤ ⢀⡄ + ⢀⣾⣦ ⠙⠛ ⢀⣴⣿⣷ ⢠⣤ + ⣤⡄ ⣸⣿⣿⣷⣄ ⣠⣶⣿⣿⣿⣿ ⠈⠉ ⢀⣤⡀ + ⠉⠁ ⢠⣿⣿⣿⣿⣿⣦⡈⢿⣿⣿⣿⣿⣿⡇⢀⣀⣤⣤⣤⣤⣴⣶⠆⠘⠿⠃ ⠉ ⡀ + ⢤⣄⡀ ⣾⣿⣿⣿⣿⣿⣿⣷⡄⠻⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⡏ ⡇ + ⠘⣿⣿⣿⣿⣶⣤⣈⣉⠛⠿⢿⣿⣿⣿⣿⣦⠘⢿⣿⣿⣷⠈⣿⣿⣿⣿⣿⠏ ⠐⠁ + ⢿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣤⣉⡛⠻⢿⣷⣄⠻⣿⣿ ⣿⣿⣿⣿⠟⢠⣀ ⡐⠁ + ⢰⣶ ⠘⣿⣿⣿⣿⣿⣿⣿⠿⠿⠛⠛⠉⠉ ⠈⠉ ⠘⣿ ⣿⣿⣿⡏⢠⣿⣿⣿⣶⣦⣄⡀ ⠂ + ⠈⠁ ⠙⠋⣉⣉⣤⣤⣶⣶⠾⠉ ⠈ ⢹⣿⠏⢠⣿⣿⣿⣿⣿⣿⣿⣿⠟ + ⢀⣠⣤⣴⣶⣿⣿⣿⣿⣿⣿⣿⠟⠁ ⢸⠟⣰⣿⣿⣿⣿⣿⡿⠟⠉ + ⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⠟⢁⣴⡏ ⠈⣰⣿⣿⣿⠿⠛⣁⡀ ⢀⡒ + ⢤⡀ ⠙⢿⣿⣿⣿⠟⢁⣴⣿⣿ ⣰⡿⠟⢉⣠⣴⣾⣿⣿⣆ + ⠛⠁ ⠔ ⠈⠛⢁⣴⣿⣿⣿⡇⢰⡆ ⠊⣁⣤⣾⣿⣿⣿⣿⣿⣿⣿⣷⡀ + ⡠⠂ ⢀⣴⣿⣿⣿⣿⣿⠃⣾⣿⡄⢢⡀ ⠤⠶⠿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄ + ⢀⠈ ⢀⣴⣿⣿⣿⣿⣿⣿⡿⢠⣿⣿⣷ ⢿⣷⣄⠑⢶⣶⣶⣶⣶⣶⣤⣤⣤⣤⣤⣤ +⠠⠁ ⠚⠛⠿⠿⢿⣿⣿⣿⡇⢸⣿⣿⣿⣧⠈⢿⣿⣿⣦⣌⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⡄ ⢰⣶ +⡆ ⣼⣿⣿⣿⣿⣇⠘⣿⣿⣿⣿⣿⣦⣈⠛⢿⣿⣿⣿⣿⣿⡇ +⢁ ⣀ ⠄⠂⠁⢀⣿⣿⣿⣿⣿⣿⡆⠹⣿⣿⣿⣿⣿⣿⠗ ⠈⠛⢿⣿⣿⡇ + ⠁⠂ ⠒⠒⠈⠁ ⢸⣿⣿⣿⠿⠛⠉ ⢻⣿⣿⣿⣿⠟ ⠈⠙⠃ + ⠼⠛⠉⠁ ⢻⣿⣿⠏ ⢀⣄ + ⠿⠇ ⠈⠿⠁ ⠘⠋ +)ART", + {} + }}, + + { "prismlinux_small", { + R"ART( + ⢠⣦⡀⠘⠁⢀⣴⣾ ⢀⡄ + ⠛ ⣸⣿⣿⣄⢰⣿⣿⣿⡄⢀⣀⣀⣀⡀⢾⠆⠐⠂⢄ + ⠰⣤⣄⡀ ⢿⣿⣿⣿⣧⡹⣿⣿⡇⣿⣿⣿⡿⠁ + ⢻⣿⣿⣿⣶⣶⣭⣝⡻⠷⣌⢿⡇⢸⣿⡿⢁⣀ + ⠘⠛ ⠸⠿⠟⣛⣋⡭⠅ ⠻⢸⡿⢡⣿⣿⣿⣶⣤⠁ + ⠠⣤⣶⣶⣿⣿⡿⢋ ⠸⣡⣿⣿⡿⠟⠉ + ⢠ ⠈⠻⣿⡿⢋⣴⡟ ⢰⠟⣋⣥⣾⣦⡀ ⠁ + ⠈⠠⠊ ⢈⣴⣿⣿⣇⣧⢀ ⢀⣠⣴⣿⣿⣿⣿⣿⣷⡄ + ⣰⣿⣿⣿⣿⢹⣿⣆⢳⣦⣐⠶⣶⣦⣤⣬⣭⣭⠉⢉⠉⠉ +⡀ ⠈⠉⠉⢉⢸⣿⣿⣆⢻⣿⣷⣮⡙⢿⣿⣿⣿ ⠉ + ⣀⣀ ⠄⠐⠈ ⣾⣿⣿⠿ ⣿⣿⣿⡿ ⠉⠻⢿ + ⠛⠉ ⢀⡀⠘⣿⠟ ⢠⡀ + ⠈⠁ ⠁ +)ART", + {} + }}, + + { "proxmox", { + R"ART( +$1 .://:` `://:. + `hMMMMMMd/ /dMMMMMMh` + `sMMMMMMMd: :mMMMMMMMs` +$2`-/+oo+/:$1`.yMMMMMMMh- -hMMMMMMMy.`$2:/+oo+/-` +`:oooooooo/$1`-hMMMMMMMyyMMMMMMMh-`$2/oooooooo:` + `/oooooooo:$1`:mMMMMMMMMMMMMm:`$2:oooooooo/` + ./ooooooo+-$1 +NMMMMMMMMN+ $2-+ooooooo/. + .+ooooooo+-$1`oNMMMMNo`$2-+ooooooo+. + -+ooooooo/.$1`sMMs`$2./ooooooo+- + :oooooooo/$1`..`$2/oooooooo: + :oooooooo/`$1..$2`/oooooooo: + -+ooooooo/.`$1sMMs$2`./ooooooo+- + .+ooooooo+-`$1oNMMMMNo$2`-+ooooooo+. + ./ooooooo+-$1 +NMMMMMMMMN+ $2-+ooooooo/. + `/oooooooo:`$1:mMMMMMMMMMMMMm:$2`:oooooooo/` +`:oooooooo/`$1-hMMMMMMMyyMMMMMMMh-$2`/oooooooo:` +`-/+oo+/:`$1.yMMMMMMMh- -hMMMMMMMy.$2`:/+oo+/-` +$1 `sMMMMMMMm: :dMMMMMMMs` + `hMMMMMMd/ /dMMMMMMh` + `://:` `://:` +)ART", + {} + }}, + + { "puffos", { + R"ART( + _,..._,m, + ,/' '""; + / ". + ,'mmmMMMMmm. \ + _/-"^^^^^"""%#%mm, ; + ,m,_,' "###) ;, +(###% \#/ ;##mm. + ^#/ __ ___ ; (######) + ; //.\\ //.\\ ; \####/ + _; (#\"// \\"/#) ; ,/ +@##\ \##/ = `"=" ,;mm/ +`\##>.____,...,____,<####@ +)ART", + {} + }}, + + { "puppy", { + R"ART( + `-/osyyyysosyhhhhhyys+- + -ohmNNmh+/hMMMMMMMMNNNNd+dMMMMNM+ + yMMMMNNmmddo/NMMMNNNNNNNNNo+NNNNNy +.NNNNNNmmmddds:MMNNNNNNNNNNNh:mNNN/ +-NNNdyyyhdmmmd`dNNNNNmmmmNNmdd/os/ +.Nm+shddyooo+/smNNNNmmmmNh. :mmd. + NNNNy:` ./hmmmmmmmNNNN: hNMh + NMN- -++- +NNNNNNNNNNm+..-sMMMM- +.MMo oNNNNo hNNNNNNNNmhdNNNMMMMM+ +.MMs /NNNN/ dNmhs+:-` yMMMMMMMM+ + mMM+ .. `sNN+. hMMMMhhMMM- + +MMMmo:...:sNMMMMMms:` hMMMMm.hMMy + yMMMMMMMMMMMNdMMMMMM::/+o+//dMMd` + sMMMMMMMMMMN+:oyyo:sMMMNNMMMNy` + :mMMMMMMMMMMMmddNMMMMMMMMmh/ + /dMMMMMMMMMMMMMMMMMMNdy/` + .+hNMMMMMMMMMNmdhs/. + .:/+ooo+/:-. +)ART", + {} + }}, + + { "pureos", { + R"ART( +dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd +dNm//////////////////////////////////mNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNm//////////////////////////////////mNd +dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd +)ART", + {} + }}, + + { "pureos_small", { + R"ART( + _____________ +| _________ | +| | | | +| | | | +| |_________| | +|_____________| +)ART", + {} + }}, + + { "q4os", { + R"ART( + .:***** :=====. + .:******** :========. + .*********** :===========. + .:************ :============- + .************** :============== + :*************** :=============== + :**************. :=============== +.*************: .=============. +*************. .============: + +$1:############. $2:==: +$1:##############. $2:======: + $1:################ $2.==========: + $1:############### $2.===========: + $1:############## $2.===========: + $1:############# $2.=========: + $1:########### $2.=====: + $1.######### $2.=: + $1.##### +)ART", + {} + }}, + + { "qts", { + R"ART( + $1###########################- + $1############################### +$1=#########**************######### +$1########## ######## +$1########## ######## +$1########## ######## +$1########## ######## +$1########## ######## +$1########## $2. $1######## +$1########## $2+=. $1:##### +$1+#########+=========- $2%%%* $1=# + $1#####################* $2%%%%# + $1-#####################* $2%%%%%. + $2 +)ART", + {} + }}, + + { "quasar", { + R"ART( +### + ##### + ## #### + ## ##### + ## ##### + ## ### + ## #### + ## #### #### + ## ### ### #### + ##### ## + ### ## ### ## + ## ## ## ## + # ## ## ## + ## ## ## ## + ## #### ## ### + ### ##### + #### ### #### ### + ##### #### ## + ### ## + ### ## + ##### ## + ##### ## + #### ## + ###### + ### +)ART", + {} + }}, + + { "qubes", { + R"ART( + `..--..` + `.----------.` + `..----------------..` + `.------------------------.`` + `..-------------....-------------..` +.::----------..`` ``..----------:+: +:////:----..` `..---:/ossso +:///////:` `/osssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:////////-` .:sssssssso +:///////////-.` `-/osssssssssso +`//////////////:- +)ART", + {} + }}, + + { "qubes_small", { + R"ART( + .,dQb,. + .,qdQQQQQQQbq,. + .,qdQQQQQQQQQQQQQQQbq,. +dIQQQQQQQQP"'"1QQQQQQQQ^b +ttttI%QP'` `'1Q%^---| +tttttt |----| +tttttt |----| +tttttt |----| +tttttt |----| +ttttttti, .,;-----| +1ttttttttti, ,----------' + '"^1ttttttt|----------;, + '"^1ttt|---^-------->, + '"1|^'` "^==-:" +)ART", + {} + }}, + + { "qubyt", { + R"ART( +$1 ########################$2($3ooo +$1 ########################$2($3ooo +$1###$2($3ooo $1###$2($3ooo +$1###$2($3ooo $1###$2($3ooo +$1###$2($3ooo $1###$2($3ooo +$1###$2($3ooo $1###$2($3ooo +$1###$2($3ooo $1###$2($3ooo +$1###$2($3ooo $1###$2($3ooo +$1###$2($3ooo $1##$3o $2(((($3ooo +$1###$2($3ooo o$2(($1### $3oooooo +$1###$2($3ooo oo$2(($1###$3o +$1###$2($3ooo ooo$2(($1### +$1################$2($3oo oo$2(((($3o +$2((((((((((((((((($3ooo ooooo + oooooooooooooooooo o +)ART", + {} + }}, + + { "quibian", { + R"ART( + `.--::::::::--.` + `.-:::-..`` ``..-::-.` + .::::-` .$2+$1:`` `.-::.` + .::::.` -::::::-` `.::. + `-:::-` -:::::::::--..`` .::` + `::::- .$2oy$1:::::::---. +)ART", + {} + }}, + + { "quirinux", { + R"ART( +$2 @=++++++++++=@ +$2 =++++++++++++++++++= +$2 *++++++++++++++++++++++* +$2 =++++++++++++++++++++++++++= +$2 *++++++++$1-..........-$2++++++++* +$2 =++++++++$1..............$2++++++++= +$2@++++++++$1:.....$2:++$1:.....:$2++++++++@ +$2=++++++++$1:.....$2++++$1.....:$2++++++++= +$2=++++++++$1:.....$2++++$1.....:$2++++++++= +$2#++++++++$1:.....$2++++$1.....:$2++++++++# +$2 +++++++++$1......$2--$1......$2+++++++++ +$2 @++++++++$1:............:$2++++++++@ +$2 @+++++++++++$1-....-$2+++++++++++@ +$2 *++++++++++$1::::$2++++++++++* +$2 *++++++++++++++++++++* +$2 @*++++++++++++++*@ +$2 @#====#@ +)ART", + {} + }}, + + { "radix", { + R"ART( + .:oyhdmNo + `/yhyoosdms` + -o+/ohmmho- + ..`.:/:-` + `.--:::-.``$2 + .+ydNMMMMMMNmhs:` +`omMMMMMMMMMMMMMMNh- +oNMMMNmddhhyyhhhddmy. +mMMMMNmmddhhysoo+/:-` +yMMMMMMMMMMMMMMMMNNh. +-dmmmmmNNMMMMMMMMMMs` + -+oossyhmMMMMMMMMd- + `sNMMMMMMMMMMMMMm: + `yMMMMMMNmdhhhh: + `sNMMMMMNmmho. + `+mMMMMMMMy. + .yNMMMm+` + `:yd+. +)ART", + {} + }}, + + { "raspbian", { + R"ART( + $2`.::///+:/-. --///+//-:` + `+oooooooooooo: `+oooooooooooo: + /oooo++//ooooo: ooooo+//+ooooo. + `+ooooooo:-:oo- +o+::/ooooooo: + `:oooooooo+`` `.oooooooo+- + `:++ooo/. :+ooo+/.`$1 + ...` `.----.` ``.. + .::::-``:::::::::.`-:::-` + -:::-` .:::::::-` `-:::- + `::. `.--.` `` `.---.``.::` + .::::::::` -::::::::` ` + .::` .:::::::::- `::::::::::``::. +-:::` ::::::::::. ::::::::::.`:::- +:::: -::::::::. `-:::::::: :::: +-::- .-:::-.``....``.-::-. -::- + .. `` .::::::::. `..`.. + -:::-` -::::::::::` .:::::` + :::::::` -::::::::::` :::::::. + .::::::: -::::::::. :::::::: + `-:::::` ..--.` ::::::. + `...` `...--..` `...` + .:::::::::: + `.-::::-` +)ART", + {} + }}, + + { "raspbian_small", { + R"ART( + $2.~~. .~~. + '. \ ' ' / .'$1 + .~ .~~~..~. + : .~.'~'.~. : + ~ ( ) ( ) ~ +( : '~'.~.'~' : ) + ~ .~ ( ) ~. ~ + ( : '~' : ) + '~ .~~~. ~' + '~' +)ART", + {} + }}, + + { "ravynos", { + R"ART( + ..oooo.. + .o$$$$$$$$$$$$$$$$$$$$$$$$$$$$o. + od$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$o + o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$o + .$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$. + d$$$$$$$$$$$$$$$$$********$$$$$$$$$$$$$$$$$$$$$$$$$$$$$b + d$$$$$$$$$$$$$* °****?$$$$$$$$$$$$$$$$b + $$$$$$$$$$$$* °$$$$$$$$$$$$$ + d$$$$** .oo$$$$$$$$$$$$$$$$b + *° o$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$P + *$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + ?$$$$$$$$$$$$$$$$$$$$$$$$$$$$P + $$$$$$$$$$$$$$$$$$$$$$$$$P + $$$$$$$$$$$$$$$$$$$$$$$$P + ?$$$$$$$$$$$$$$$$$$$$* + $$$$$$$$$$$$$*° + d$$$$$$$$*° + ° +)ART", + {} + }}, + + { "rebornos", { + R"ART( + $1.======================. + $1.#$2#*********$1%%$2*********#$1%: + $1:%$2#**********$1%%$2**********#$1%- + $1-%$2************$1%%$2************$1%= + $1+%$2******$1%%#####$1%%#####%%$2******$1%+ + $1*%%#$2****$1%#$3+=====$1%%$3=====+$1#%$2****$1#%%* + $1*%$2*#$1#%%#%#$3====+++$1%%$3+++====$1#%#%%#$2#*$1##. + $1.##$2*****$1#%%%#$3*++$1%######%$3*+*$1#%%%#$2*****$1#%. + $1:%#$2*****$1#%$3*=+*$1#%%$3*++++++*$1%%#$3*+=*$1%#$2*****$1#%: +$1-%#$2*****$1#%$3+====*$1%$3*++++++++*$1%#$3====+$1%#$2******$1%- +$1-%#$2*****$1#%$3+====*$1%$3*++++++++*$1%#$3====+$1%#$2******$1%= + $1:%#$2*****$1#%$3*=+*$1#%%$3*++++++*$1%%#$3*+=*$1%#$2*****$1#%- + $1.##$2*****$1#%%%#$3*+*$1%######%$3*+*$1#%%%#$2*****$1#%: + $1.##$2**$1#%%#%#$3====+++$1%%$3+++====$1#%#%%#$2#*$1##. + $1*%%#$2****$1%#$3+=====$1%%$3=====+$1#%$2****$1#%%* + $1+%$2******$1%%#####%%#####%%$2******$1%* + $1-%$2************$1%%$2************$1%= + $1:%$2#**********$1%%$2**********#$1%- + $1:%$2#*********$1%%$2*********#$1%: + $1.======================. +)ART", + {} + }}, + + { "rebornos_small", { + R"ART( + _______ + /\_____/\ + / /\___/\ \ +/_/_/ \_\_\ +\ \ \___/ / / + \ \/___\/ / + \/_____\/ +)ART", + {} + }}, + + { "redcore", { + R"ART( + RRRRRRRRR + RRRRRRRRRRRRR + RRRRRRRRRR RRRRR + RRRRRRRRRRRRRRRRRRRRRRRRRRR + RRRRRRR RRR RRR RRRRRRRR +RRRRR RR RRRRRRRRR +RRRR RR RRRRRRRR RR RRRRRR +RRRR R RRRRRRRRRRRRRR RR RRRRR +RRRR R RRRRRRRRRRRRRRRRRR R RRRRR +RRRR RRRRRRRRRRRRRRRRRRR R RRRR + RRR RRRRRRRRRRRRRRRRRRRR R RRRR + RRR RRRRRRRRRRRRRRRRRRRR RRRR + RR RRRRRRRRRRRRRRRRRRR RRR + RR RRRRRRRRRRRRRRRRR RRR + RR RRRRRRRRRRRRRR RR + R RRRR RR +)ART", + {} + }}, + + { "redos", { + R"ART( +╭───────────────╮ ╭───────────────╮ +│###############│ │###############│ +│#+++++++++++++#│ │#+++++++++++++#│ +│#+++++++++++++#│ │#+++++++++++++#│ +│#+++++++++++++#│ │#+++++++++++++#│ +│#+++++++++++++#│ │#+++++++++++++#│ +│#+++++++++++++#│ │#+++++++++++++#│ +│###############│ │###############│ +╰───────────────╯ ╰───────────────╯ +╭───────────────╮ +│###############│ +│#+++++++++++++#│ +│#+++++++++++++#│ +│#+++++++++++++#│ +│#+++++++++++++#│ +│#+++++++++++++#│ +│###############│ +╰───────────────╯ +)ART", + {} + }}, + + { "redos_small", { + R"ART( +╭─────╮ ╭─────╮ +│ │ │ │ +│ │ │ │ +╰─────╯ ╰─────╯ +╭─────╮ +│ │ +│ │ +╰─────╯ +)ART", + {} + }}, + + { "redrose", { + R"ART( + xxrjr ftttt + xxxxxjjfffft + xxxxxxxjjjjj + xxxxxxxjjjjj + xxxxxxxxxnxx + xxxxxxxn + $2[[ +//// [[ +//// [[ +///////[[ + /////]] + [[ + [[ + [[ + [[ + [[ + [] +)ART", + {} + }}, + + { "redstar", { + R"ART( + .. + .oK0l + :0KKKKd. + .xKO0KKKKd + ,Od' .d0000l + .c;. .'''... ..'. +.,:cloddxxxkkkkOOOOkkkkkkkkxxxxxxxxxkkkx: +;kOOOOOOOkxOkc'...',;;;;,,,'',;;:cllc:,. + .okkkkd,.lko .......',;:cllc:;,,'''''. + .cdo. :xd' cd:. ..';'',,,'',,;;;,'. + . .ddl.;doooc'..;oc;'..';::;,'. + coo;.oooolllllllcccc:'. . + .ool''lllllccccccc:::::;. + ;lll. .':cccc:::::::;;;;' + :lcc:'',..';::::;;;;;;;,,. + :cccc::::;...';;;;;,,,,,,. + ,::::::;;;,'. ..',,,,'''. + ........ ...... +)ART", + {} + }}, + + { "refracta", { + R"ART( + A + VW + VVW\ + .yWWW\ +,;,,u,;yy;;v;uyyyyyyy ,WWWWW^ + *WWWWWWWWWWWWWWWW/ $VWWWWw , + ^*%WWWWWWVWWX $WWWW** ,yy + , "**WWW/' **' ,yy/WWW*` + &WWWWwy `*` <,ywWW%VWWW* + yWWWWWWWWWW* ., "**WW%W + ,&WWWWWM*"` ,y/ &WWWww ^* + XWWX*^ ,yWWWW09 .WWWWWWWWwy, +*` &WWWWWM WWWWWWWWWWWWWww, + (WWWWW` /#####WWW*********** + ^WWWW + VWW + Wh. + V/ +)ART", + {} + }}, + + { "regata", { + R"ART( + ddhso+++++osydd + dho/.`hh$2.:/+/:.$1hhh`:+yd + do-hhhhhh$2/sssssss+`$1hhhhh./yd + h/`hhhhhhh$2-sssssssss:$1hhhhhhhh-yd + do`hhhhhhhhh$2`ossssssso.$1hhhhhhhhhh/d + d/hhhhhhhhhhhh$2`/ossso/.$1hhhhhhhhhhhh.h + /hhhhhhhhhhhh$3`-/osyso/-`$1hhhhhhhhhhhh.h +shh$4-/ooo+-$1hhh$3:syyso+osyys/`$1hhh$5`+oo`$1hhh/ +h$4`ohhhhhhho`$3+yyo.$1hhhhh$3.+yyo`$5.sssssss.$1h`h +s$4:hhhhhhhhho$3yys`$1hhhhhhh$3.oyy/$5ossssssso-$1hs +s$4.yhhhhhhhy/$3yys`$1hhhhhhh$3.oyy/$5ossssssso-$1hs +hh$4./syyys+.$1 $3+yy+.$1hhhhh$3.+yyo`$5.ossssso/$1h`h +shhh$4``.`$1hhh$3`/syyso++oyys/`$1hhh$5`+++-`$1hh:h +d/hhhhhhhhhhhh$3`-/osyso+-`$1hhhhhhhhhhhh.h + d/hhhhhhhhhhhh$6`/ossso/.$1hhhhhhhhhhhh.h + do`hhhhhhhhh$6`ossssssso.$1hhhhhhhhhh:h + h/`hhhhhhh$6-sssssssss:$1hhhhhhhh-yd + h+.hhhhhh$6+sssssss+$1hhhhhh`/yd + dho:.hhh$6.:+++/.$1hhh`-+yd + ddhso+++++osyhd +)ART", + {} + }}, + + { "regolith", { + R"ART( + ``.... +)ART", + {} + }}, + + { "rengeos", { + R"ART( + .. + .:~!. + ...::^~!!7?J?: + ..::^^~~!!!7?JYYYYYYY?. + .::::..::^!7?JJYYYJYY! +:~~~:.. .:~!?JJYYYYYYYJ!?J^ + :!?JJ?7!!7?JYYYYYYYYYYYJ~.~?: + :~?YYYYYYYYYYYYYYY?~. ^7. + .~?YYYYYYYYYY?^ .~ + ..:~!7?JYYYYYYYY?^ +.^~!7777777JYYYYY7: + ^YYYJ7: + :YYJ!: + :JJ!. + .7~. + .. +)ART", + {} + }}, + + { "rhaymos", { + R"ART( + ### + ##### + + ####### /######## + ############# ########### + ,########### #### ####(.. + #### #### ####* ########## + #### ##### ##### (#### + #### ########### ########### + #### ######### ########## + + ################################### + ##################################### +####################################### +)ART", + {} + }}, + + { "rhel", { + R"ART( + .MMM..:MMMMMMM + MMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMM. + MMMMMMMMMMMMMMMMMMMMMM + ,MMMMMMMMMMMMMMMMMMMMMM: + MMMMMMMMMMMMMMMMMMMMMMMM + .MMMM' MMMMMMMMMMMMMMMMMMMMMM + MMMMMM `MMMMMMMMMMMMMMMMMMMM. +MMMMMMMM MMMMMMMMMMMMMMMMMM . +MMMMMMMMM. `MMMMMMMMMMMMM' MM. +MMMMMMMMMMM. MMMM +`MMMMMMMMMMMMM. ,MMMMM. + `MMMMMMMMMMMMMMMMM. ,MMMMMMMM. + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + `MMMMMMMMMMMMMMMMMMMMMMMM: + ``MMMMMMMMMMMMMMMMM' +)ART", + {} + }}, + + { "rhel_old", { + R"ART( + `.-..........` + `////////::.`-/. + -: ....-////////. + //:-::///////////` + `--::: `-://////////////: + //////- ``.-:///////// .` + `://////:-.` :///////::///:` + .-/////////:---/////////////: + .-://////////////////////. +$2 yMN+`.-$1::///////////////-` +$2 .-`:NMMNMs` `..-------..` + MN+/mMMMMMhoooyysshsss +MMM MMMMMMMMMMMMMMyyddMMM+ + MMMM MMMMMMMMMMMMMNdyNMMh` hyhMMM + MMMMMMMMMMMMMMMMyoNNNMMM+. MMMMMMMM + MMNMMMNNMMMMMNM+ mhsMNyyyyMNMMMMsMM +)ART", + {} + }}, + + { "rhel_small", { + R"ART( + .M.:MMM + MMMMMMMMMM. + ,MMMMMMMMMMM + .MM MMMMMMMMMMM +MMMM MMMMMMMMM +MMMMMM MM + MMMMMMMMM ,MMMM + MMMMMMMMMMMMMMMM: + `MMMMMMMMMMMM +)ART", + {} + }}, + + { "rhino", { + R"ART( +$1 .;:;,. .: +$1 'coooooooo:oo.';. +$1 ,oooooooooooooooo ; +$1 clllcccllloooooooo;c:'o +$1.$4;$3';:::::::::$1cclooooooo' +$4''',$3::::::::::::::$1ccclc. +$4.'''$3;::::::::::$2l$3::::::: +$4 ''''$3,:::::::::$2kd$3. +$4 .'''''$3,;::$2ck:$2oW$3; +$4 ''''''''$2kXOM. +$4 .,,:$2dXMK +$4 $2:k +)ART", + {} + }}, + + { "rocky", { + R"ART( + __wgliliiligw_, + _williiiiiiliilililw, + _%iiiiiilililiiiiiiiiiii_ + .Qliiiililiiiiiiililililiilm. + _iiiiiliiiiiililiiiiiiiiiiliil, + .lililiiilililiiiilililililiiiii, +_liiiiiiliiiiiiiliiiiiF{iiiiiilili, +jliililiiilililiiili@` ~ililiiiiiL +iiiliiiiliiiiiiili>` ~liililii +liliiiliiilililii` -9liiiil +iiiiiliiliiiiii~ "4lili +4ililiiiiilil~| -w, )4lf +-liiiiililiF' _liig, )' + )iiiliii@` _QIililig, + )iiii>` .Qliliiiililw + )<>~ .mliiiiiliiiiiil, + _gllilililiililii~ + giliiiiiiiiiiiiT` + -^~$ililili@~~' +)ART", + {} + }}, + + { "rocky_small", { + R"ART( + `-/+++++++++/-.` + `-+++++++++++++++++-` +.+++++++++++++++++++++. +-+++++++++++++++++++++++. ++++++++++++++++/-/+++++++ ++++++++++++++/. ./+++++ ++++++++++++:. ./+++ ++++++++++:` `:/:` .:/ +-++++++:` .:+++++:` + .+++-` ./+++++++++:` + `-` ./+++++++++++- + -+++++++++:-.` +)ART", + {} + }}, + + { "rosa", { + R"ART( +$2 ⢀⣀⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣄ +$2 ⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ +$1 ⢀⣤⣄ $2⣿⣿⣿⡇ +$1 ⢀⣴⣿⣿⣿⠗ $2⣿⣿⣿⡇ +$1 ⢠⣾⣿⣿⡿⠁ $2⣿⣿⣿⡇ +$1 ⢠⣿⣿⣿⡟ $2⣿⣿⣿⡇ +$1⢀⣿⣿⣿⡿ $2⣿⣿⣿⡇ +$1⢸⣿⣿⣿⠃ $2⣿⣿⣿⡇ +$1⢸⣿⣿⣿ $2⣿⣿⣿⡇ +$1⢸⣿⣿⣿ $2⣿⣿⣿⡇ +$1⢸⣿⣿⣿⡄ $2⠙⢿⡿ +$1⠘⣿⣿⣿⣷ + ⠘⣿⣿⣿⣦ + ⠙⣿⣿⣿⣷⡀ ⢀⡀ + ⠘⢿⣿⣿⣿⣦⣄ ⣠⣴⣿⣿⡦ + ⠙⢿⣿⣿⣿⣷⣦⣀⣀⡀ ⢀⣀⣠⣴⣾⣿⣿⣿⠟⠁ + ⠈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠁ + ⠈⠙⠛⠿⠿⠿⠿⠿⠿⠟⠛⠋⠁ +)ART", + {} + }}, + + { "sabayon", { + R"ART( + ........... + .. .. + .. .. + .. $2o $1.. + .. $2:W' $1.. + .. $2.d. $1.. +:. $2.KNO $1.: +:. $2cNNN. $1.: +: $2dXXX, $1: +: $2. dXXX, .cd, $1: +: $2'kc .. dKKK. ,ll;:' $1: +: $2.xkkxc;..dkkkc',cxkkl $1: +:. $2.,cdddddddddddddo:. $1.: + .. $2:lllllll: $1.. + .. $2',,,,, $1.. + .. .. + .. .. + ............... +)ART", + {} + }}, + + { "sabotage", { + R"ART( + .|'''.| | '||''|. ..|''|| + ||.. ' ||| || || .|' || + ''|||. | || ||'''|. || || +. '|| .''''|. || || '|. || +|'....|' .|. .||. .||...|' ''|...|' + +|''||''| | ..|'''.| '||''''| + || ||| .|' ' || . + || | || || .... ||''| + || .''''|. '|. || || + .||. .|. .||. ''|...'| .||.....| +)ART", + {} + }}, + + { "sailfish", { + R"ART( + _a@b + _#b (b + _@@ @_ _, + _#^@ _#*^^*gg,aa@^^ + #- @@^ _a@^^ + @_ *g#b + ^@_ ^@_ + ^@_ @ + @(b (b + #b(b#^ + _@_#@^ + _a@a*^ +,a@*^ +)ART", + {} + }}, + + { "salentos", { + R"ART( + ``..`` + .-:+oshdNMMMMMMNdhyo+:-.` + -oydmMMMMMMMMMMMMMMMMMMMMMMMMMMNdhs/ +$4 +hdddm$1NMMMMMMMMMMMMMMMMMMMMMMMMN$4mdddh+` +$2`MMMMMN$4mdddddm$1MMMMMMMMMMMM$4mdddddm$3NMMMMM- +$2 mMMMMMMMMMMMN$4ddddhyyhhddd$3NMMMMMMMMMMMM` +$2 dMMMMMMMMMMMMMMMMM$4oo$3MMMMMMMMMMMMMMMMMN` +$2 yMMMMMMMMMMMMMMMMM$4hh$3MMMMMMMMMMMMMMMMMd +$2 +MMMMMMMMMMMMMMMMM$4hh$3MMMMMMMMMMMMMMMMMy +$2 :MMMMMMMMMMMMMMMMM$4hh$3MMMMMMMMMMMMMMMMMo +$2 .MMMMMMMMMMMMMMMMM$4hh$3MMMMMMMMMMMMMMMMM/ +$2 `NMMMMMMMMMMMMMMMM$4hh$3MMMMMMMMMMMMMMMMM- +$2 mMMMMMMMMMMMMMMMM$4hh$3MMMMMMMMMMMMMMMMN` +$2 hMMMMMMMMMMMMMMMM$4hh$3MMMMMMMMMMMMMMMMm +$2 /MMMMMMMMMMMMMMMM$4hh$3MMMMMMMMMMMMMMMMy +$2 .+hMMMMMMMMMMMMM$4hh$3MMMMMMMMMMMMMms: +$2 `:smMMMMMMMMM$4hh$3MMMMMMMMMNh+. +$2 .+hMMMMMM$4hh$3MMMMMMdo: +$2 `:smMM$4yy$3MMNy/` + $2.- $4`$3:. +)ART", + {} + }}, + + { "salientos", { + R"ART( + 00xxxx0 + 00xxxxxx0 + 0xxxxxxxxx 000000 + 0xxxxxxxxxx xxxxxxxxxx0 + 0xxxxxxxxxxx0 xxxxxxxxxxxxx0 + 0xxxxxxxxxxxx0 0xxxxxxxxxxxxxx0 + 0xxxxxxxxxxxxx0 0xxxxxxxxxxxxxxx0 +0xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx0 +xxxxxxxxxxxxxxxx0 0xxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxx 0xxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxx0 xxxxxxxxxxxxxx +0xxxxxxxxxxxxxxxxxx0 0xxxxxxxxxxxx0 + 0xxxxxxxxxxxxxxxxxx xxxxxxxxxxx0 + 0xxxxxxxxxxxxxxxxx xxxxxxxxxx0 + 0xxxxxxxxxxxxxxxx xxxxxxxxx0 + 0xxxxxxxxxxxx0 0xxxxxxx0 + 0xxxxxxx0 xxxxxx0 + 0xxx00 + x00 +)ART", + {} + }}, + + { "salix", { + R"ART( + __s_aaaaaaaaauuoXSSSSSSSS: + ._xSSSSSSSSSSSSSSSSSSSSSSSSSS: + _aSSSSSSSSSSSSSSSSSSSSSSSSSSSSS: + _xSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS: + + nSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS} + nSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS}` + XSSSSSSSSSSSSSSSSSSSSSSSSSSSS"` + SSSSSSSSSSSSSSSSSSSSSSSSS!"` +-""""""""""""""""""""""` +)ART", + {} + }}, + + { "sambabox", { + R"ART( + # + *////##### + /////////#########( + .((((((///// ,####(#((((( + /#######(((* (#(((((((((. +//((#(#(#, ((##( ,((((((// +////// #(##########( ////// +////// ((#(#(#(#(##########(///////// +/////( (((((((#########(##((((((///// +/(((#( ((((/ +####(# ((### +#########(((/////////(((((((((, (#(#( +########( /////////(((((((* ##### +####///, *////((( ((((((( +./////////// .//((((((((( + ///////////, *(/////((((* + ,/(((((((((##########/. + .((((((####### + ((##* +)ART", + {} + }}, + + { "sasanqua", { + R"ART( + __,_ + _╕⌐≡µ,√* º≡, + ñ "' ░ + ╞) _, ▒ __ + _,,,_ _Ñ╜^≡µ ≡' 1µ╕º^el "%µ + ∩' K Yµ& 1l ╞) + ▒ √" ^Ü 1" `1µ + Γ ║h _¿▒∞√;, ^≡, + K ^u_ ⌐* ╙¥ ╓Ñ + ⌠ º≡u,, ║I Å + Ü _∩" ║µ_¿╝" + Yu_ ▒ ╙º≡_ ║l1µ + ║l , Y∞µ___≡ª Γl + ╓hⁿ╖I 1l Ñ ╓Ñ + Ñ ¥,___≡1l ╓Ñ ¿╕ª + Ü ╙L ¿¿∩ª ╓P + ª≡,__ *ⁿ┤ⁿÑⁿ^µ √ª + ⁿ≡,,__√╝* "ⁿⁿ*" +)ART", + {} + }}, + + { "scientific", { + R"ART( + =/;;/- + +: // + /; /; + -X H. +.//;;;:;;-, X= :+ .-;:=;:;#;. +M- ,=;;;#:, ,:#;;:=, ,@ +:# :#.=/++++/=.$= #= + ,#; #/:+/;,,/++:+/ ;+. + ,+/. ,;@+, ,#H;, ,/+, + ;+;;/= @. $3.H$2#$3#X $1-X :///+; + ;+=;;;.@, $2.X$3M$2@$. $1=X.//;=#/. + ,;: :@#= =$H: .+#- + ,#= #;-///==///-// =#, +;+ :#-;;;:;;;;-X- +: +@- .-;;;;M- =M/;;;-. -X + :;;::;;-. #- :+ ,-;;-;:== + ,X H. + ;/ #= + // +; + '////' +)ART", + {} + }}, + + { "secureblue", { + R"ART( + ==++++++++++ + :========++++++++++++: + ===============+++++++++++ + ====================++++++++++ + :=============$3#%@@@%$1=====++++++++- + -============$3%@%$1====$3%@@$1========+++++ + -============$3%@#$1======$3@@$1==========+++- +.=============$3%@+$1======$3@@$1==============. +$2--$1=========$3+@@@@@@@@@@@@@@@%+$1==========- +$2------$1=====$3%@@@@@@@@@@@@@@@@*$1=========== +$2---------$1==$3%@@@@@@@%%@@@@@@@*$1=========== +$2:----------$3%@@@@@#$1===$3+%@@@@@*$1==========- + $2----------$3%@@@@@%$1===$3*@@@@@@*$1==========. + $2:---------$3%@@@@@@@@@@@@@@@@*$1=========- + $2:--------$3%@@@@@@@@@@@@@@@@*$1========- + $2:--------$3+##############+$1========: + $2-------------------------$1====- + $2-------------------------- + .--------------------. + ------------ +)ART", + {} + }}, + + { "semc", { + R"ART( + /\ + ______/ \ + / |()| $2E M C +$1 | (-- | | + \ \ | | +.----) | |__| +|_______/ / $3"$1 \ + $3" + " +)ART", + {} + }}, + + { "septor", { + R"ART( +ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssss$2;okOOOOOOOOOOOOOOko;$1ssssssssss +sssssssss$2oNWWWWWWWWWWWWWWWWWWNo$1sssssssss +ssssssss$2:WWWWWWWWWWWWWWWWWWWWWW:$1ssssssss +ssssssss$2lWWWWWk$1ssssssssss$2lddddd:$1ssssssss +ssssssss$2cWWWWWNKKKKKKKKKKKKOx:$1ssssssssss +$3yy$1sssssss$2OWWWWWWWWWWWWWWWWWWWWx$1sssssss$3yy +yyyyyyyyyy$2:kKNNNNNNNNNNNNWWWWWW:$3yyyyyyyy +yyyyyyyy$2sccccc;$3yyyyyyyyyy$2kWWWWW:$3yyyyyyyy +yyyyyyyy$2:WWWWWWNNNNNNNNNNWWWWWW;$3yyyyyyyy +yyyyyyyy$2.dWWWWWWWWWWWWWWWWWWWNd$3yyyyyyyyy +yyyyyyyyyy$2sdO0KKKKKKKKKKKK0Od;$3yyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +)ART", + {} + }}, + + { "serene", { + R"ART( + __---''''''---__ + . . + : : + - _______----_- + s __----''' __---- + __h_ _-' _-' h + '-._''--.._ ; _-' y + : ''-._ '-._/ _-' : + y ':_ _--'' y + m .--'' '-._.;' m + m : : m + y '.._ '-__ y + : '--._ '''----___ : + y '--._ ''-- _ y + h '--._ : h + s __'; vs + - __..--'' - + :_..--'' : + . _ . + `''---______---''-`` +)ART", + {} + }}, + + { "serpent_os", { + R"ART( + ,dKNWWNKOxo;. + ;xKXOdoloOWMWX0d:. + .dNNd' cNMMMMNKOx;. + .dWNo .:oxO000KXKl. + .OMNl ..... + oNMXd,. + .lKWMNKkdollccc:::;;;,'.. + .;ox0KNWWMMMMMMMMWWWWNK0xl,. + ..,;:ccloodxO0KNWMMMMNOc. + .';lxKWMMWk' + ..,:ccc:,. .oXMMMO + .:d0NWWWWWMWXOo,. .,cc:;,,'..oWMMW + .c0WW0xl:;,;cd0NMNO:'..ldl;. .'.:XMMM + xWMKc. .;OWMWX0xl. .dWMMK + WMWd. .oKWMMXx, .dNMMXc + NMMK:. ..:oxo:oOXMMNOdc:;;cxKWMWO; + ;kXWN0xooodkOOko;. .lONMMMMWWMMWKx;. + ,okKXXXKOxc'. .:kKWMMWXOl' +)ART", + {} + }}, + + { "sharklinux", { + R"ART( + `:shd/ + `:yNMMMMs + `-smMMMMMMN. + .+dNMMMMMMMMs + .smNNMMMMMMMMm` + .sNNNNNNNMMMMMM/ + `omNNNNNNNMMMMMMm + /dNNNNNNNNMMMMMMM+ + .yNNNNNNNNNMMMMMMMN` + +mNNNNNNNNNMMMMMMMMh + .hNNNNNNNNNNMMMMMMMMMs + +mMNNNNNNNNMMMMMMMMMMMs + .hNMMNNNNMMMMMMMMMMMMMMMd + .oNNNNNNNNNNMMMMMMMMMMMMMMMo +`:+syyssoo++++ooooossssssssssso: +)ART", + {} + }}, + + { "shastraos", { + R"ART( + ..,;;,'. + ':oo. ;o: + :o, ol + .oo ..';co: + ooo',;:looo; + .;lddl + cx .xl .c:' + dd xx xx ,d; +.xd cx. xx dd. + cx: .xo xx ,x: + 'xl xx cx' .xl + xd, xx .xd dx. + .xo:xx xx .xx + 'c xx:.'lx: + ..,;cxxxo + .';:codxxl lxo +cd. 'xo +:o, 'ld + .oc'...';lo +)ART", + {} + }}, + + { "shebang", { + R"ART( + ' + '#' + '#!#' + '#!#!#' + '#!#!#!#' + '#!#!#!#!#' + '#!#!#!#!#!#' + '#!#!#!#!#!#!#' + #!#!#!#!#!#!' + '#! #!#!#!#!#' + '#!#!#!#! #!#!#!' + '#!#!#!#!#!#!#! #!#!' + '#!#!#!#!#!#!#!#!#!#! #' + '#!#!#!#!#!#!#!#!#!#!#!#! + '#!#!#!#!#!#!#!#!#!#! #!' + '#!#!#!#!#!#!#!#! #!#!#!' + '#!#!#!#!#!#! #!#!#!#!#!' + '#!#!#!#! #!#!#!#!#' + '#!#! #!#!#' +'# #!' +)ART", + {} + }}, + + { "siduction", { + R"ART( + _aass, + jQh: =$w + QWmwawQW + )$QQQQ@( .. + _a_a. ~??^ syDY?Sa, + _mW>-<$c jWmi imm. + ]QQwayQE 4QQmgwmQQ` + ?WWQWP' -9QQQQQ@'._aas, + _a%is. .adYYs,. -"?!` aQB*~^3$c +_Qh;.nm .QWc. {QL ]QQp;..vmQ/ +"QQmmQ@ -QQQggmQP ]QQWmggmQQ( + -???" "$WQQQY` __, ?QQQQQQW! + _yZ!?q, - .yWY!!Sw, "???^ + .QQa_=qQ mQm>..vmm + $QQWQQP $QQQgmQQ@ + "???" _aa, -9WWQQWY` + _mB>~)$a -~~ + mQms_vmQ. + ]WQQQQQP + -?T??" +)ART", + {} + }}, + + { "skiffos", { + R"ART( +$2 ,@@@@@@@@@@@w,_ + $2====~~~,,.$2A@@@@@@@@@@@@@@@@@W,_ + $1`||||||||||||||L{$2"@$@@@@@@@@B" + $1`|||||||||||||||||||||L{$2"$D + $2@@@@@@@@@@@@@@@@@@@@@$1_||||}==, + $2*@@@@@@@@@@@@@@@@@@@@@@@@@p$1||||==, + $1`'||LLL{{""$2@$B@@@@@@@@@@@@@@@p$1|| + $1`~=|||||||||||L"$2$@@@@@@@@@@@ + $1 +)ART", + {} + }}, + + { "slackel", { + R"ART( + _aawmmmmmwwaaaaas,,,_. + .ammmmm###mmmmmmm###BQmm##mws + .am###mmBmBmBmBmBmBmmmmm#mmmm#2 + 7'$2ZZZZ$1,%" + /7'$2ZZZZ$1/>' + ,//$2ZZZZ$1,// + ,%<$2ZZZZ$1,%< + >%^$2ZZZZ$1x%^_____ +4>'$2ZZZZ$1---------9b +H$2EEEEEEEEEEEEEEEE$1H +H$2EEEEEEEEEEEEEEEE$1H +Yq$2^************^$1pY + +)ART", + {} + }}, + + { "sleeperos_small", { + R"ART( + _____ +[$2BBBBB$1] +`^^7$2&$1/` + ,/$2&$1/` +,/$2&$1Z__ +[$2BBBBB$1] +`^^^^^` +)ART", + {} + }}, + + { "slitaz", { + R"ART( + @ @( @ + @@ @@ @ @/ + @@ @@ @@ @@ + @@ %@@ @@ @@ + @@ %@@@ @@@@@. @@@@ @@ + @@@ @@@@ @@@@@@@ &@@@ @@@ + @@@@@@@ %@@@@@@@@@@@@ &@@@% @@@@@@@/ + ,@@@@@@@@@@@@@@@@@@@@@@@@@ + .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ +@@@@@@. @@@@@@@@@@@@@@@@@@@@@ /@@@@@@ +@@ @@@@@ @@@@@@@@@@@@, @@@@@ @@@ +@@ @@@@. @@@@@@@@@@@@@% #@@@@ @@. +@@ ,@@ @@@@@@@@@@@@@ @@@ @@ +@ @@. @@@@@@@@@@@@@ @@@ *@ +@ @@ @@@@@@@@@@@@ @@ @ + @ @@@@@@@@@. #@ + @ ,@@@@@ @ +)ART", + {} + }}, + + { "smartos", { + R"ART( +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyys oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyy syyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy syyyyyyyyy syyyy +yyyyyyyyyyyyyyyy oyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy oyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy syyyyyyyyy syyyy +yyyyyyyyyyyyyyyy yyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +)ART", + {} + }}, + + { "snigdhaos", { + R"ART( + WK0OO0X + WKOxk0XWNXkxN + WXOxk0N kk + WKkxOXW NxO + NX0ddk00OOOOkkkkkkkkk0 + WKkxO0dOXXNNNNWWW WXKK +NxkN kxW XOxxdN +KoX WkxX WkxK Xd0 +WxkW XkkX kkW NkxX + W0dK XxOWkkW XxkN + NkxX XoKWkxK Kd0 + XkkN WOdN NkxX NxO + OxNKxOW XdO kk + kdk0W XoK WXkxN + WNNXKXXXXKKKK000OOdxkk0X + KdOO000KKKKXXXXX0xx0W + XoK N0kx0N + Nd0 NKOxOKW + Nkk0K0kxOKN + WXXXN +)ART", + {} + }}, + + { "soda", { + R"ART( + $2@&&&&$1 *'*, + $2@@@@@@@&&&$1 ** '*, + $2@@@@@@@@@@@&&&& + @&@@@@@@@@@@@@@@@&&& + $1******$2@@@@@@@@@@@@@@@&&&& + $1************$2@@@@@@@@@@@@@@ + $1*****************$2@@@@@@@@@ + $1**********************$2@@@ + @@@@@$1******************** + $2@@@@@@@@@$1*************** +$2@@@@@@@@@@@@@@@$1********* +$2@@@@@@@@@@@@@@@@@@$1**** + $2@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@ + @@@@@@@ +)ART", + {} + }}, + + { "solaris", { + R"ART( + `- ` + `-- `+- .: + .+: `++: -/+- . + `.::` -++/``:::`./+/ `.-/. + `++/-`.` ` /++:` + `` ./:` .: `..`.- +``./+/:- -+++:- + -/+` :. +)ART", + {} + }}, + + { "solaris_small", { + R"ART( + . .; . + . :; :: ;: . + .;. .. .. .;. +.. .. .. .. + .;, ,;. +)ART", + {} + }}, + + { "solus", { + R"ART( +$2 - +)ART", + {} + }}, + + { "source_mage", { + R"ART( + :ymNMNho. +.+sdmNMMMMMMMMMMy` +.-::/yMMMMMMMMMMMm- + sMMMMMMMMMMMm/ + /NMMMMMMMMMMMMMm: + .MMMMMMMMMMMMMMMMM: + `MMMMMMMMMMMMMMMMMN. + NMMMMMMMMMMMMMMMMMd + mMMMMMMMMMMMMMMMMMMo + hhMMMMMMMMMMMMMMMMMM. + .`/MMMMMMMMMMMMMMMMMs + :mMMMMMMMMMMMMMMMN` + `sMMMMMMMMMMMMMMM+ + /NMMMMMMMMMMMMMN` + oMMMMMMMMMMMMM+ + ./sd.-hMMMMMMMMmmN` + ./+oyyyh- `MMMMMMMMMmNh + sMMMMMMMMMmmo + `NMMMMMMMMMd: + -dMMMMMMMMMo + -shmNMMms. +)ART", + {} + }}, + + { "sparky", { + R"ART( + . `-:-` + .o` .-///-` + `oo` .:/++:. + os+` -/+++:` ``......... +)ART", + {} + }}, + + { "spoinkos", { + R"ART( + @..@ + (----) + ( >__< ) + ^^ ~~ ^^ +| Spoink! | +)ART", + {} + }}, + + { "star", { + R"ART( + ./ + `yy- + `y.`y` + `` s- .y ` + +h//:..` +/ /o ``..:/so + /o``.-::/:/+ o/://::-.`+o` + :s` `. .` `s/ + .y. .s- + `y- :s` + .-//. /+:. + .:/:. .:/:. +-+o:. .:+:. +-///++///:::` .-::::///+so- + ``..o/ d-.... +)ART", + {} + }}, + + { "steamdeck", { + R"ART( +$2 .xXK0kdc'.. + .OMMMMWNK0Odc'. + .OMMMMMMMMMMWNOl'. + .OMMMMMMMMMMMMMWXx;. + .:ddk0XWMMMMMMMMMMNx' + ..;oxONMMMMMMMWKc. +$1 ..,;::::;,'.$2 .;xXMMMMMMMNo. +$1 .':looooooooool:,..$2 .;OWMMMMMMNl. +$1 .:oooooooooooooooooc'$2 .xWMMMMMMK: +$1 'coooooooooooooooooool,$2 'OMMMMMMWx. +$1.coooooooooooooooooooool.$2 cNMMMMMM0, +$1'loooooooooooooooooooooo,$2 ,KMMMMMMX: +$1'loooooooooooooooooooooo,$2 ,KMMMMMMX: +$1.:oooooooooooooooooooooc.$2 lNMMMMMM0, +$1 .coooooooooooooooooool'$2 ,0MMMMMMWd. +$1 .:looooooooooooooolc.$2 'OWMMMMMMK; +$1 ..;cloooooooooc;'..$2 .c0WMMMMMMXc. +$1 ..',;;;;,'..$2 ..cONMMMMMMMXc. + ..,cxOKWMMMMMMMW0;. + .cxk0KNWMMMMMMMMMWXo. + .OMMMMMMMMMMMMMWKo' + .OMMMMMMMMMMWKx:. + .OMMMWNX0Oxl;. + .o0Oxoc,.. +)ART", + {} + }}, + + { "steamdeck_small", { + R"ART( + $2__ + \ +$1## $2\ +$1## $2/ + __/ +)ART", + {} + }}, + + { "steamos", { + R"ART( +$1 .,,,,. + .,'onNMMMMMNNnn',. + .'oNMANKMMMMMMMMMMMNNn'. + .'ANMMMMMMMXKNNWWWPFFWNNMNn. + ;NNMMMMMMMMMMNWW'' ,.., 'WMMM, + ;NMMMMV+##+VNWWW' .+;'':+, 'WMW, +,VNNWP+$2######$1+WW, $2+: $1:+, +MMM, +'$2+#############, +. ,+' $1+NMMM +$2 '*#########*' '*,,*' $1.+NMMMM. +$2 `'*###*' ,.,;###$1+WNM, +$2 .,;;, .;##########$1+W +$2,',. '; ,+##############' + '###+. :,. .,; ,###############' + '####.. `'' .,###############' + '#####+++################' + '*##################*' + ''*##########*'' + '''''' +)ART", + {} + }}, + + { "stock_linux", { + R"ART( + #G5J5G# + &BPYJJJJJJJYPB& + &#G5JJJJJJY5YJJJJJJ5G#& + #G5YJJJJJY5G#& &#G5YJJJJJY5G# +BPYJJJJJJJ5B& &BPYJJJJJJYPB +JJJJJJJJJJY5G#& &BPYJJJJJ +JJJJJJJJJJJJJJY5G# &JJJJJ +PYJJJJJJJJJJJJJJJJYPB& GYJJJ + &BPYJJJJJJJJJJJJJJJJ5PB& &BP + #G5YJJJJJJJJJJJJJJJY5G# +PB& &BP5JJJJJJJJJJJJJJJJYPB& +JJJYG &BPYJJJJJJJJJJJJJJJJYP +JJJJJ& #G5YJJJJJJJJJJJJJJ +JJJJJYPB& &#G5YJJJJJJJJJJ +BPYJJJJJJYPB& &B5JJJJJJJYPB + #G5YJJJJJY5G#& &#G5YJJJJJY5G# + &#G5JJJJJJY5YJJJJJJ5G#& + &BPYJJJJJJJYPB& + #G5J5G# +)ART", + {} + }}, + + { "sulin", { + R"ART( + /\ /\ + ( \\ // ) + \ \\ // / + \_\\||||//_/ + \/ _ _ \ + \/|(O)(O)| + \/ | | + ___________________\/ \ / + // // |____| + // || / \ + //| \| \ 0 0 / + // \ ) V / \____/ +// \ / ( / + \ /_________| |_/ + / /\ / | || + / / / / \ || + | | | | | || + | | | | | || + |_| |_| |_|| + \_\ \_\ \_\ +)ART", + {} + }}, + + { "summitos", { + R"ART( + :~^ + ~5PPJ + :5555P7 + .Y55555P~ + ?P5555555^ + 7P55555555Y. + ~5555555555PJ$2 7YJ^ + $1^555555555555P7$2 7GGGP^ + $1.Y5555555555555P!$2 ~PPPPP5. + $1JP555555555555555^$2 ^PPPPPPGY + $17P5555555555555555Y$2^5PPPPPPPG? + $1~P55555555555555555$2^PPPPPPPPPPP! + $1^555555555555555555$2^PPPPPPPPPPPPP^ + $1.Y555555555555P$3G$1P55$2^PPPPPPPPPPPPPP5: + $1JP55555555555P$3GGG$1P$2^PPPPPPPPPPPPPPPGY + $17P555555555555$3GGGGG$2PPPPPPPPPPPPPPPPPG? + $1!P555555555555$3GGGGGGG$2PPPPPPPPPPPPPPPPPG! + $1^5555555555555$3PGGGGGGGG$2PPPPPPPPPPPPPPPPPP^ + $1:Y555555555555$3PGGGGGGGGGG$2PPPPPPPPPPPPPPPPP5: +$1.JP55555555555$3PGGGGGGGGGGGG$2PPPPPPPPPPPPPPPPGY. +$1?PPPPPPPPPPPP$3GGBBBBBBBBBBBBB$2GGGGGGGGGGGGGGGGGJ +$1^~~~~~~~~~~~$3!!!!!!!!!!!!!!!!!$2!!!!!!!!!!!!!!!!~ +)ART", + {} + }}, + + { "suse", { + R"ART( + kKKKKKd' Okxol:;,. +kKKKKKKK0kOKKKKKKKKKKOxo:, +KKKKKKKKKKKKKKKKKKK0P^,,,^dx: +KKKKKKKKKKKKKKKKKKk'.oOPPb.'0k. +KKKKKKKKKKKKKKKKKK: kKx..dd lKd +KKKKKKKKKKKKOx0KKKd ^0KKKO' kKKc +KKKKKKKKKKKKK;.;oOKx,..^..;kKKK0. +KKKKKKKKKKKKK0o;...^cdxxOK0O/^^' +KKKKKKKKKKKKKKKKK0x;,,......,;od +kKKKKKKKKKKKKKKKKKKKKKKK00KKOo^ + kKKKKKOxddxkOO00000Okxoc;'' +)ART", + {} + }}, + + { "swagarch", { + R"ART( +$2 .;ldkOKXXNNNNXXK0Oxoc,. + ,lkXMMNK0OkkxkkOKWMMMMMMMMMM; + 'K0xo ..,;:c:. `'lKMMMMM0 + .lONMMMMMM' `lNMk' +$2 ;WMMMMMMMMMO. $1....::... +$2 OMMMMMMMMMMMMKl. $1.,;;;;;ccccccc, +$2 `0MMMMMMMMMMMMMM0: $1.. .ccccccc. +$2 'kWMMMMMMMMMMMMMNo. $1.,:' .ccccccc. +$2 `c0MMMMMMMMMMMMMN,$1,:c; :cccccc: +$2 ckl. `lXMMMMMMMMMX$1occcc:.. ;ccccccc. +$2dMMMMXd, `OMMMMMMWk$1ccc;:''` ,ccccccc: +$2XMMMMMMMWKkxxOWMMMMMNo$1ccc; .cccccccc. +$2 `':ldxO0KXXXXXK0Okdo$1cccc. :cccccccc. + :ccc:' `cccccccc:, + '' +)ART", + {} + }}, + + { "t2", { + R"ART( + $3//$2 +$1TTTTTTTTTTTTTTT$2 $3//$2 +$1TTTTTTTTTTTTTTT$2 $3//$2 $1..::$2 $4:-:.$2 + $4ttt$2 $3//$2 $1.::.$2 $4.:-:$2 + $4ttt$2 $3//$2 $1.:.$2 $4--$2 + $4ttt$2 $3//$2 $4:-:$2 + $4ttt$2 $3//$2 $4.:-:$2 + $4ttt$2 $3//$2 $4:-:.$2 + $4ttt$2 $3//$2 $4.--.$2 + $4ttt$2 $3//$2 $4.:-:$2 + $4ttt$2 $3//$2 $4...$2 + $4ttt$2 $3//$2 + $3//$2 $3.:::::::::::.$2 + $3//$2 +)ART", + {} + }}, + + { "t2_small", { + R"ART( +$2TTTTTTTTTT + tt $1222$2 + tt $12 2$2 + tt $12$2 + tt $12$2 + tt $122222$2 +)ART", + {} + }}, + + { "tails", { + R"ART( + `` + ./yhNh +syy/Nshh `:o/ +N:dsNshh █ `ohNMMd +N-/+Nshh `yMMMMd +N-yhMshh yMMMMd +N-s:hshh █ yMMMMd so//. +N-oyNsyh yMMMMd d Mms. +N:hohhhd:. yMMMMd syMMM+ +Nsyh+-..+y+- yMMMMd :mMM+ ++hy- -ss/`yMMMM `+d+ + :sy/. ./yNMMMMm `` + .+ys- `:+hNMMMMMMy/` + `hNmmMMMMMMMMMMMMdo. + dMMMMMMMMMMMMMMMMMNh: + +hMMMMMMMMMMMMMMMMMmy. + -oNMMMMMMMMMMmy+.` + `:yNMMMds/.` + .//` +)ART", + {} + }}, + + { "tatra", { + R"ART( + . .:. . .:. + .^^.!.:::. .^!?J?^ + .:^.^!!!~:~^. .7??77!~~^. + .~^.!??77?!.^~: ..:^^7JJJ7~~^. + .^~.^7???7~.~~. .7??????????! + .:^:^^~^^:!^ ^: .......^!:... + .!7~.::.!.::. ~BG~ :^ ^~: + :!!~ ~. ?BBBB! ^?J!. .!~. + :!. .JBY. .Y#BBBY?~!???J7. :^^. + .. :5#B#P~P#BBP?7?55J?J7: + ^P#BBBBBBBB5?7J5555J!..... + !BBBBBBGBBGJ77::Y555J?77777^ + ?BBBBG5JJ5PJ?!: .?Y??????77?~. + .YBGPYJ??????Y?^^^^~7?????????7?!. + .^^:..::::::::.....:::::::::::..:. +)ART", + {} + }}, + + { "tearch", { + R"ART( + @@@@@@@@@@@@@@ + @@@@@@@@@ @@@@@@ + @@@@@ @@@@@ + @@ @@ + @% @@ + @ @ + @@@@@@@@@@@@@@@@@@@@@@@@ @@ + .@@@@@@@@@@@@/@@@@@@@@@@@@ + @@@@@@@@@@@@///@@@@@@@@@@@@ + @@@@@@@@@@@@@((((@@@@@@@@@@@@ + @@@@@@@@@@@#(((((((#@@@@@@@@@@@ + @@@@@@@@@@@#//////////@@@@@@@@@@& + @@@@@@@@@@////@@@@@////@@@@@@@@@@ + @@@@@@@@//////@@@@@/////@@@@@@@@@ + @@@@@@@//@@@@@@@@@@@@@@@//@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@ .@@@@@@@@@@@@@@@@@@@@@@@@@ @ + @@@@@@ @@@. @@@@@@@ + @@@@@@@&@@@@@@@# #@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@ +)ART", + {} + }}, + + { "templeos", { + R"ART( + $1aooooo$2, + $1aooooo$2`` + $1aooooo$2`` + $3(((((( $1aooooo$2``$3(((((( + $1oooo$3@@ @C@*;,./k@@ @@ @$1oooo$2 + $1oooooo$3@@ @@@@@@@@ @@k$1oooooo$2`` + $1oooooooo$3\@ @/@@ @@$1ooooooooo$2`` + +)ART", + {} + }}, + + { "tileos", { + R"ART( +$2 ,. +$2 ########## +$2 ###################. +$2 ############################ +$2 #################################### +$2 ###################################### +$1,(/$2 *############################( $3.%$1 +$1((((((($2 (#################### $3%%####$1 +$1(((((((((((/$2 ############ $3%#########$1 +$1(((((((((((((((($2 ##/ $3(##############$1 +$1(((((((((((((((((((($2 $3###################$1 +$1((((((((((((((((((((($2 $3####################$1 +$1((((((((((((((((((((($2 $3####################$1 +$1((((((((((((((((((((($2 $3####################$1 +$1((((((((((((((((((((($2 $3####################$1 +$1 (((((((((((((((((((($2 $3###################%$1 +$1 (((((((((((((((($2 $3################/$1 +$1 (((((((((((($2 $3###########%$1 +$1 ((((((($2 $3#######*$1 +$1 ((($2 $3##%*$1 +)ART", + {} + }}, + + { "torizoncore", { + R"ART( +$2 `.::-. + `-://////:-. + `:////////////:. + `.-.` `-:///////-. ` + `.://///:.` `-::-. `-://:.` + .:///////////:. `-:////////:.` + `.://///////:-` .:////////////:` + `.-/:-` `.:///:-` $3`-+o/.$2 `.://////-. `.` + `.:///////:-` `.` $3`-+sssssso/.$2 `.--. `-:///:-` +-/////////////: $3`+sssssssssssso-$2 `-://///////:-` + .-///////:.` `` $3-/sssssssso/.$2 ` .:///////////-. + .-::.` `-://:-. $3-/sso/.$2 `.:/:-. `.://///-. + `-:////////:-. $3`$2 `.:////////-. `.-. +$1o-$2 -:///////////:` .:////////////:` $1-o$2 +$1hdho-$2 `-://///:.` `..` `-://////:.` $1-ohdh$2 +$1/ydddho-$2 `--.` `.:////:.` `-::.` $1-ohdddy/$2 + $1./ydddho:`$2 `.://////////:. $1`:ohdddy/.$2 +` $1`/shddho:`$2 `.://////////:. $1`:ohddds/`$2 ` +::-` $1`/shddhs:`$2 `.:////:.` $1`:shddhs/`$2 `-:: +:///:-` $1`:shddhs/`$2 `..` $1`/shddhs:`$2 `-:///- + `.:///:-` $1`:ohddhs/`$2 $1`/shddho:`$2 `-:///:.` + `.:///:-. $1-ohdddy/.$2 $1./ydddho-$2 .-:///-.` + `.:///:-. $1-+hdddy+//+ydddh+-$2 .-://:-. + `.-///:-. $1-+yddddddy+-$2 .-://:-. + .-://:-. $1./++/.$2 .-///:-. + .-:///:.` `.:///:-` + `-:///:. +)ART", + {} + }}, + + { "trisquel", { + R"ART( + ,o$$$$$$o. + ,o$$$$Y"""Y$$$$b + ,o$$$$$$$$$$$$o. ,$$$$' , Y$$$$b + ,o$$$$$$$$$$$$$$$$$$$$$$$$o. :$$ b Y$$$$. +,$$$$"' "Y$$$$$$$$o. 'b. ,b d$$$$$$ +$$$$' .d$$$$$$$$b '$$$$$$$$o 'Y$$$$$$Y d$$$$$$' +$$$$' q' 'b '$$$$$$$$$$o._ _.o$$$$$$$$' +.$$$$,_ _,d$$ ,$$$$$$$$$$$$$$$$$$$$$$$$$2$$$$$$$$Y' +$1 '$$$$$$$$aaa$$$$$$' .$$$$$$$$$$$$$2$$$$$$$$$$$$$$$$' +$1 """" $2d$$$$$$$$"' + d$$$$$$' .d$$$$b. + $$$$$$$$ .$$" 'a$$. + $$$$$$$$ $$b $$$$. + '$$$$$$. '$$b,,. $$$$$$ + '$$$$$$. .$$$$' + 'a$$$$$$o._.o$$$$a' + 'a$$$$$$$$a' +)ART", + {} + }}, + + { "truenas_scale", { + R"ART( + ++ $2++ + $1++++++ $2++++++ + $1+++++++++ $2+++++++++ + $1+++++++ $2+++++++ + $1+++ $2+++ $1+ $3--------$1 $2+ $1+++ $2+++ + $1++++++ $2++++++ $3------$1 ++++++ $2++++++ + $1++++++++ $2++++++++++ $1++++++++++ $2++++++++ + $1+++++++ $3--$1 $2+++++++ $1+++++++ $3--$1 $2+++++++ +$2+++ $1+ $3--------$1 $2+ $1+++ $2+++ $1+ $3--------$1 $2+ $1+++ +$2++++++ $3--------$1 ++++++ $2++++++ $3--------$1 ++++++ +$2++++++++++ $1+++++++++ $2+++++++++ $1++++++++++ + $2+++++++++ $1+++++++ $3--$1 $2+++++++ $1+++++++++ + $2+++++ +++ $3--------$1 +++ +++++ + $2++ +++++++ $3------$1 +++++++ ++ + $2++++++++++ $1++++++++++ + $2++++++++ $1++++++++ + $2+++++ $1+++++ + $2++ $1++ +)ART", + {} + }}, + + { "turkish", { + R"ART( + @@@@@@@@@ + @@@@@@ @@ + @@@@@ + @@@@@ +@@@@@@ + @@@@@ @@@@@ + @@@@@@ @@@@@@@@@@@@@ + @@@@@@@ @@ @@@@@@ @ + @@@@@@@@@@@ @@@@@ + @@@@ + @@@@ + @@@@@@@@@@ @@@@@ + @@@@@@@ @@ @@@@@@ @ + @@@@@@ @@@@@@@@@@@@@ + @@@@@ @@@@@@@ +@@@@@@ + @@@@@ + @@@@@ + @@@@@@ @@ + @@@@@@@@@@ +)ART", + {} + }}, + + { "tuxedo_os", { + R"ART( + #############################+ +.%#######################%@@@+ + . :#@%- + .#@%%%- =@@#. + *@%@@= +@@+ + =@@%@+.#@%- + -@@%@@@#: + .#@%%@- + :#@@%@@= + =@@+=@@%@+ + .#@@= -@@%@# + -%@#: :%@%@%: + *@@+ .#%%%%- + :%@%- . + +@@@%#%%%%%%%%%%%%%%%%%%%%%%%. + +######################******* +)ART", + {} + }}, + + { "twister", { + R"ART( +$3.......................$4.......$5.,:ccllllcc:.$4... +$3.......................$5.,;cldxkO0KXNNNWNNNX0x: +$3.................$5.,:ldkOOKK0OkkkkkOKWMMMMMMMNo +$3.............$5,;coxO0Oxo::'$4.........$5,oXMMMMMM0' +$3.........$5,:ldkOOkc;'$3...$4.............$5;OMMMMW0:$4. +$3.......$5;ldkOxol:'$3......$4............$5,dNMMX0''$4.. +$3....$5;:oxkxl:'$3..........$4..........$5,lOWWXx:.,'$4.. +$3..$5,ldxkkd:'$3............$5.:c$4....$5':lkNMNOc,cdl'$4.. +$3.$5;oxxkkkc'$3.........$5.:clc;'.';lkKNNKk;;ck00l$4... +$5.lxxxkkkxoooooddxkOOko'..cok0KOd':::o0NXd;'$4... +$3.$5:odxxkkOOOOOOOkdoi'..:ddxdoc:::od0NWW0c'$4..... +$3...$5':;gggggg;::''.......::::x0XWMMMNO.::'$4..... +$3..............$5;......,;od0KNWMWNK0O:::do'$4..... +$3...............$5'cclgggggggxdll":::'XKoo,$4...... +$3.................$5',,,,,,,::::;ooNWMWOc'$4....... +$3..................$5,:loxxxO0KXNNXK0ko:'$4........ +$3..................$5';::;oTcoggcoF":::'$4......... +$3..................$5':o,.:::::::::,p'$4........... +$3..................$5;'ccdxkOOOdxlf'$4............. +$3.................$5,l;;XgggggXP:'$4............... +$3................$5;lco;::::::'$4.................. +$3..............$5.';ggggol'`$4..................... +$3.............$5':oo:''$3...$4....................... +)ART", + {} + }}, + + { "ublinux", { + R"ART( +$1 UUU +$1 UUUUUUUUUUU +$1 UUUUUUUUUUUUUUUUU +$1 UUUUUUUUUUUUUUUUUUUUUUUUU +$1UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU$3#. +$1UU$2BBBBB$1UUUUUU$2BBBBBBBBBBB.$1UUUUUU$3## +$1UU$2BBBBB$1UUUUUU$2BBBBBBBBBBBBB:$1UUUU$3## +$1UU$2BBBBB$1UUUUUU$2BBBBB$1UUUU$2BBBBB$1UUUU$3## +$1UU$2BBBBB$1UUUUUU$2BBBBB$1UUUU$2BBBBB$1UUUU$3## +$1UU$2BBBBB$1UUUUUU$2BBBBBBBBBBBB$1UUUUUU$3## +$1UU$2BBBBB$1UUUUUU$2BBBBB$1UUUU,$2BBBB.$1UUU$3## +$1UUU$2BBBBB$1UUUUU$2BBBBB$1UUUUU$2BBBBB$1UUU$3## +$1UUU$2BBBBB$1UUUUU$2BBBBB$1UUUUU$2BBBBB$1UUU$3## +$1UUU#$2BBBBBBBBBBBBBBBBBBBBBBB$1UUUU$3## +$1UUUUUU$2'BBBBBBBBBBBBBBBB'$1UUUUUUU$3## +$1 UUUUUUUUUUUUUUUUUUUUUUUUU$3##' +$1 UUUUUUUUUUUUUUUUU$3###' +$1 UUUUUUUUUUU$3###' +$1 UUU$3###' +)ART", + {} + }}, + + { "ublinux_small", { + R"ART( +$1 UUUU +$1 UUUUUUUUUU +$1 $2BBB$1UUUU$2BBBBBB$1UU$3# +$1U$2BBB$1UUUU$2BBB$1UUU$2B$1UU$3# +$1U$2BBB$1UUUU$2BBB$1UUU$2B$1UU$3# +$1U$2BBB$1UUUU$2BBBBBB$1UUU$3# +$1U$2BBB$1UUUU$2BBB$1UUU$2BB$1U$3# +$1UU$2BBB$1UUU$2BBB$1UUU$2BB$1U$3# +$1 UU$2BBBBBBBBBBB$1UU$3# +$1 UUUUUUUUU$3# +$1 UUU$3# +)ART", + {} + }}, + + { "ubuntu", { + R"ART( + .... + $2.',:clooo: $1.:looooo:. + $2.;looooooooc $1.oooooooooo' + $2.;looooool:,''. $1:ooooooooooc + $2;looool;. $1'oooooooooo, + $2;clool' $1.cooooooc. $2,, + $2... $1...... $2.:oo, + $1.;clol:,. $2.loooo' + $1:ooooooooo, $2'ooool +$1'ooooooooooo. $2loooo. +$1'ooooooooool $2coooo. + $1,loooooooc. $2.loooo. + $1.,;;;'. $2;ooooc + $2... $2,ooool. + $2.cooooc. $1..',,'. $2.cooo. + $2;ooooo:. $1;oooooooc. $2:l. + $2.coooooc,.. $1coooooooooo. + $2.:ooooooolc:. $1.ooooooooooo' + $2.':loooooo; $1,oooooooooc + $2..';::c' $1.;loooo:' +)ART", + {"ubuntu-desktop", "ubuntu-server"} + }}, + + { "ubuntu_budgie", { + R"ART( + ./oydmMMMMMMmdyo/. + :smMMMMMMMMMMMhs+:++yhs: + `omMMMMMMMMMMMN+` `odo` + /NMMMMMMMMMMMMN- `sN/ + `hMMMMmhhmMMMMMMh sMh` + .mMmo- /yMMMMm` `MMm. + mN/ yMMMMMMMd- MMMm +oN- oMMMMMMMMMms+//+o+: :MMMMo +m/ +NMMMMMMMMMMMMMMMMm. :NMMMMm +M` .NMMMMMMMMMMMMMMMNodMMMMMMM +M- sMMMMMMMMMMMMMMMMMMMMMMMMM +mm` mMMMMMMMMMNdhhdNMMMMMMMMMm +oMm/ .dMMMMMMMMh: :dMMMMMMMo + mMMNyo/:/sdMMMMMMMMM+ sMMMMMm + .mMMMMMMMMMMMMMMMMMs `NMMMm. + `hMMMMMMMMMMM.oo+. `MMMh` + /NMMMMMMMMMo sMN/ + `omMMMMMMMMy. :dmo` + :smMMMMMMMh+-` `.:ohs: + ./oydmMMMMMMdhyo/. +)ART", + {} + }}, + + { "ubuntu_cinnamon", { + R"ART( + .-/+oooooooo+/-. + `:+oooooooooooooooooo+:` + -+oooooooooooooooooooooooo+- + .ooooooooooooooooooo$2:ohNd$1oooooo. + /oooooooooooo$2:/+oo++:/ohNd$1ooooooo/ + +oooooooooo$2:osNdhyyhdNNh+:+$1oooooooo+ + /ooooooooo$2/dN/$1ooooooooo$2/sNNo$1ooooooooo/ +.ooooooooo$2oMd:$1oooooooooooo$2:yMy$1ooooooooo. ++ooooo$2:+o/Md$1oooooo$2:sm/$1oo/ooo$2yMo$1oooooooo+ +ooo$2:sdMdosMo$1ooooo$2oNMd$1//$2dMd+$1o$2:so$1ooooooooo +oooo$2+ymdosMo$1ooo$2+mMm$1+/$2hMMMMMh+hs$1ooooooooo ++oooooo$2:$1:$2/Nm:$1/$2hMNo$1:y$2MMMMMMMMMM+$1oooooooo+ +.ooooooooo$2/NNMNy$1:o$2NMMMMMMMMMMo$1ooooooooo. +/oooooooooo$2:yh:$1+m$2MMMMMMMMMMd/$1ooooooooo/ + +oooooooooo$2+$1/h$2mMMMMMMNds//o$1oooooooo+ + /oooooooooooo$2+:////:o/ymMd$1ooooooo/ + .oooooooooooooooooooo$2/sdh$1oooooo. + -+oooooooooooooooooooooooo+- + `:+oooooooooooooooooo+:` + .-/+oooooooo+/-. +)ART", + {} + }}, + + { "ubuntu_gnome", { + R"ART( +$3 ./o. + .oooooooo + .oooo +)ART", + {} + }}, + + { "ubuntu_kylin", { + R"ART( +$1 .__=liiiiiii=__, + ._=liiliii|i|i|iiilii=_. + _=iiiii|ii|i|ii|i|inwwwzii=, + .=liiii|ii|ii|wwww|i$23QWWWW$1ziii=, + =lii|i|ii|i|$2QQQWWWWWm]QWWQD$1||iiii= + =lii|iiivw$2Qm$1>3$2WWWWWQWQQwwQw$1cii|i|ii= + =lii|ii|n$2QWWWQ$1|)i$2|i$1%i|]$2TQWWWWm$1|ii|i|i= +.li|i|i|m$2WWWQV$1|ii$2wmD$1|iiii|$2TWWWWm$1|i|iiii, +=iii$2www|$WQWk$1|i$2aWWWD$1|i|i|ii]$2QQWQk$1|ii|i|= +iii$2QWWWQz$WW$1|i$2jQQWQm$1w|ii$2wW$1k|$2TTTTY$1i|i|iii +iiI$2QWQWWtyQQ$1|i|$2$WWWWWQWk$1||i|i|ii||i|ii|i +<|i|$2TTT|mQQWz$1|i$23D$1]C|$2nD$W$1|ii$2vWWWWk$1||ii|i> +-|ii|i|i$2WWWQw$1|$2Tt$1|i3$2T$1|$2T$1|i|$2nQWQWDk$1|ii|ii` + <|i|iii|$2VWQWWQ$1|i|i|||ii$2wmWWQWD$1||ii|ii+ + <|ii|i|i]$2$W@$1tv$2QQQWQQQWWTTHT$11|iii|i|> + <|i|ii|ii||v$2QWWWQWWW@vmWWWm$1|i|i|i> + -<|i|ii|ii|i|$2TTTTTT$1|]$2QQWWWC$1|ii>` + -<|i|ii|i|ii|i|i|ii3$2TTT$1t|i>` + ~<|ii|ii|iiiii|i|||i>~ + -~~<|ii|i||i>~~` +)ART", + {} + }}, + + { "ubuntu_mate", { + R"ART( +$1 .:/+oossssoo+/:.` + `:+ssssssssssssssssss+:` + -+sssssssssssssss$2y$1ssssssss+- + .osssssssssssss$2yy$1ss$2mMmh$1ssssssso. + /sssssssss$2ydmNNNmmd$1s$2mMMMMNdy$1sssss/ + `+ssssssss$2hNNdy$1sssssss$2mMMMMNdy$1ssssss+` + +sssssss$2yNNh$1ss$2hmNNNNm$1s$2mMmh$1s$2ydy$1sssssss+ +-sssss$2y$1ss$2Nm$1ss$2hNNh$1ssssss$2y$1s$2hh$1ss$2mMy$1sssssss- ++ssss$2yMNdy$1ss$2hMd$1ssssssssss$2hMd$1ss$2NN$1sssssss+ +sssss$2yMMMMMmh$1sssssssssssss$2NM$1ss$2dMy$1sssssss +sssss$2yMMMMMmhy$1ssssssssssss$2NM$1ss$2dMy$1sssssss ++ssss$2yMNdy$1ss$2hMd$1ssssssssss$2hMd$1ss$2NN$1sssssss+ +-sssss$2y$1ss$2Nm$1ss$2hNNh$1ssssssss$2dh$1ss$2mMy$1sssssss- + +sssssss$2yNNh$1ss$2hmNNNNm$1s$2mNmh$1s$2ymy$1sssssss+ + +ssssssss$2hNNdy$1sssssss$2mMMMMmhy$1ssssss+ + /sssssssss$2ydmNNNNmd$1s$2mMMMMNdh$1sssss/ + .osssssssssssss$2yy$1ss$2mMmdy$1sssssso. + -+sssssssssssssss$2y$1ssssssss+- + `:+ssssssssssssssssss+:` + .:/+oossssoo+/:. +)ART", + {} + }}, + + { "ubuntu_old", { + R"ART( + --+oossssssoo+-- + .:+ssssssssssssssssss+:. + -+ssssssssssssssssssyyssss+- + .ossssssssssssssssssd$2MMMNy$1sssso. + /sssssssssss$2hdmmNNmmyNMMMMh$1ssssss/ + +sssssssss$2hm$1yd$2MMMMMMMNddddy$1ssssssss+ + /ssssssss$2hNMMM$1yh$2hyyyyhmNMMMNh$1ssssssss/ +.ssssssss$2dMMMNh$1ssssssssss$2hNMMMd$1ssssssss. ++ssss$2hhhyNMMNy$1ssssssssssss$2yNMMMy$1sssssss+ +oss$2yNMMMNyMMh$1ssssssssssssss$2hmmmh$1ssssssso +oss$2yNMMMNyMMh$1sssssssssssssshmmmhssssssso ++ssss$2hhhyNMMNy$1ssssssssssss$2yNMMMy$1sssssss+ +.ssssssss$2dMMMNh$1ssssssssss$2hNMMMd$1ssssssss. + /ssssssss$2hNMMM$1yh$2hyyyyhdNMMMNh$1ssssssss/ + +sssssssss$2dm$1yd$2MMMMMMMMddddy$1ssssssss+ + /sssssssssss$2hdmNNNNmyNMMMMh$1ssssss/ + .ossssssssssssssssss$2dMMMNy$1sssso. + -+sssssssssssssssss$2yyy$1ssss+- + `:+ssssssssssssssssss+:´ + --+oossssssoo+-- +)ART", + {} + }}, + + { "ubuntu_old2", { + R"ART( + ./+o+- +$2 yyyyy- $1-yyyyyy+ +$2 $2://+//////$1-yyyyyyo +$3 .++ $2.:/++++++/-$1.+sss/` +$3 .:++o: $2/++++++++/:--:/- +$3 o:+o+:++.$2`.. +)ART", + {} + }}, + + { "ubuntu_old2_small", { + R"ART( + _ + ---(_) + _/ --- \ +(_) | | + \ --- _/ + ---(_) +)ART", + {} + }}, + + { "ubuntu_small", { + R"ART( + $2..;,; $1.,;,. + $2.,lool: $1.ooooo, + $2;oo;: $1.coool. + $1.... $1''' $2,l; +$1:oooo, $2'oo. +$1looooc $2:oo' + $1'::' $2,oo: + $2,., $1.... $2co, + $2lo:;. $1:oooo; $2. + $2':ooo; $1cooooc + $2''' $1'''' +)ART", + {} + }}, + + { "ubuntu_studio", { + R"ART( + ..-::::::-.` + `.:+++++++++++$2ooo$1++:.` + ./+++++++++++++$2sMMMNdyo$1+/. + .++++++++++++++++$2oyhmMMMMms$1++. + `/+++++++++$2osyhddddhys$1+$2osdMMMh$1++/` + `+++++++++$2ydMMMMNNNMMMMNds$1+$2oyyo$1++++` + +++++++++$2dMMNhso$1++++$2oydNMMmo$1++++++++` + :+$2odmy$1+++$2ooysoohmNMMNmyoohMMNs$1+++++++: + ++$2dMMm$1+$2oNMd$1++$2yMMMmhhmMMNs+yMMNo$1+++++++ +`++$2NMMy$1+$2hMMd$1+$2oMMMs$1++++$2sMMN$1++$2NMMs$1+++++++. +`++$2NMMy$1+$2hMMd$1+$2oMMMo$1++++$2sMMN$1++$2mMMs$1+++++++. + ++$2dMMd$1+$2oNMm$1++$2yMMNdhhdMMMs$1+y$2MMNo$1+++++++ + :+$2odmy$1++$2oo$1+$2ss$1+$2ohNMMMMmho$1+$2yMMMs$1+++++++: + +++++++++$2hMMmhs+ooo+oshNMMms$1++++++++ + `++++++++$2oymMMMMNmmNMMMMmy+oys$1+++++` + `/+++++++++$2oyhdmmmmdhso+sdMMMs$1++/ + ./+++++++++++++++$2oyhdNMMMms$1++. + ./+++++++++++++$2hMMMNdyo$1+/. + `.:+++++++++++$2sso$1++:. + ..-::::::-.. +)ART", + {} + }}, + + { "ubuntu_sway", { + R"ART( + .-/+oossssoo+\-. + ´:+ssssssssssssssssss+:` + -+ssssssssssssssssss$2yy$1ssss+- + .ossssssssssssssssss$2dMMMNyy$1ssso. + /sssssssssss$2hdmmNNmmyNMMMMh$1ssssss\ + +sssssssss$2hm$1ydMMMMMMMNdd$2ddy$1ssssssss+ + /ssssssss$2hN$1MM$2M$1yh$2hyyyyhmNM$1MM$2Nh$1ssssssss\ +.ssssssss$2dM$1MM$2Nh$1ssssssssss$2hN$1MM$2Md$1ssssssss. ++sss$2yyyyyN$1MM$2Ny$1ssssssssssss$2yN$1MM$2My$1sssssss+ +ossy$2NMMMNy$1MM$2h$1ssssssssssssss$2hm$1mm$2h$1ssssssso +ossy$2NMMMNy$1MM$2h$1sssssssssssssshmmmh$1ssssssso ++sss$2yyyyyN$1MM$2Ny$1ssssssssssss$2yN$1MM$2My$1sssssss+ +.ssssssss$2dM$1MM$2Nh$1ssssssssss$2hN$1MM$2Md$1ssssssss. + \ssssssss$2hN$1MM$2M$1yh$2hyyyyhdNM$1M$2MNh$1ssssssss/ + +sssssssss$2dm$1ydMMMMMMMMdd$2ddy$1ssssssss+ + \sssssssssss$2hdmNNNNmyNMMMMh$1ssssss/ + .ossssssssssssssssss$2dMMMNyy$1ssso. + -+sssssssssssssssss$2yy$1sss+- + `:+ssssssssssssssssss+:` + .-\+oossssoo+/-. +)ART", + {} + }}, + + { "ubuntu_touch", { + R"ART( + ############### + ## ## +## $2##$1 $2##$1 ## +## $2##$1 $2#$1 $2#$1 $2##$1 ## +## $2###$1 ## + ## ## + ############### +)ART", + {} + }}, + + { "ubuntu_unity", { + R"ART( + .-/+ooosssssssooo+\-. + ,:+sssssssssssssssssssss+:. + -+ssssssssssssssssssss$2.....$1ssss+- + .ssssss$2,$1ss$2:cloooooo:$1ss$2.:loooo.$1ssssss. + .ssssssss$2loo$1ss$2oooooooc$1ss$2.ooooooooo$1ssssss. + .ssssss$2.;looooool:,''.$1ss$2:ooooooooooc$1ssssss. + +ssssss$2;loooool;.$1ssssssssss$2ooooooooo$1ssssssss+ + /ssssss$2;clool'$1sssssssssssssss$2ooooooc$1ssss$2,,$1sssss. +.sssssssssssssssssssssssssssssssssssss$2.:oo,$1sssss. +.sssss$2.;clol:,.$1ssssssssssssssssssssss$2.loooo'$1ssss. ++ssss$2:ooooooooo,$1ssssssssssssssssssssss$2'ooool$1ssss+ +osss$2'ooooooooooo.$1ssssssssssssssssssssss$2loooo.$1ssso +osss$2'ooooooooool$1sssssssssssssssssssssss$2co$1ssssssso +ossss$2,looooooc.$1sssssssssssssssssssssss$2.loooo.$1ssso ++ssssss$2.,;;;'.$1ssssssssssssssssssssssss$2;ooooc$1ssss+ +.ssssssssssssssssssssssssssssssssssss$2,ooool.$1ssss. +.sssssss$2.cooooc.$1sssssssssssss$2.,,,,.$1ss$2.cooo.$1sssss. + `sssssss$2ooooo:.$1ssssssssssss$2oooooooc.$1ss$2:l.$1sssss' + +ssssss$2.coooooc,..$1sssssss$2cooooooooo.$1ssssssss+ + `sssssss$2.:oo$1s$2ooooolc:.$1s$2.ooooooooooo'$1ssssss' + .sssssss$2.o$1ss$2`:loooo;$1sss$2,ooooooooc$1sssssss. + `sssssssss$2;oooo';:c'$1ssss$2`:ooo:'$1sssssss' + -+sssssssssssssssssssssssssssssss+- + `:+sssssssssssssssssssssss+:' + `-\+ooosssssssooo+/-' +)ART", + {} + }}, + + { "ultramarine", { + R"ART( + .cd0NNNNNNNXOdc. + .:xKNNNNNNNNNNNNNNNNKd;. + ,dXNNNNNNNNNNNNNNNNNNNNNNNd, + 'ONNNNNNNNNNNNNNNNNNNNNNNNNNNNO' + .xNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNk. + .0NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0. +.0NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0. +dNNNNNNNNNNNNWWWWWWWWNNNNNNNNNNNNNNNNNNd +NNNNNNNNNNNNNW$2MMMMMMMM$1WWNNNNNNNNNNNNNNNN +NNNNNNNNNNNNNNW$2MMMMMMMMM$1WWNNNNNNNNNNNNNN +NNNNNNNNNNNNNNW$2MMMMMMMMMMMM$1WNNNNNNNNNNNN +NNNNNNNNNNWWW$2MMMMMMMMMMMMMMMM$1WWWNNNNNNNX +oNWWWW$2MMMMMMMMMMMMMMMMMMMMMMMMMMMM$1WWWNNo + OW$2MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$1WO + .OW$2MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$1WO. + lNW$2MMMMMMMMMMMMMMMMMMMMMMMMMMMM$1WNl + .dNW$2MMMMMMMMMMMMMMMMMMMMMMMM$1WNd. + .cKW$2MMMMMMMMMMMMMMMMMMMM$1WKc. + 'oOXWWW$2MMMMMMMM$1WWWXOl. + ;lkXNNNNNNXkl' +)ART", + {} + }}, + + { "ultramarine_small", { + R"ART( + @@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@@@@@@@*=+*%@@@@@@@@@@@@ +@@@@@@@@@@: :#@@@@@@@@@@ +@@@@@@@@@# -#@@@@@@@@ +@@%###*=. :=*#@@@@ +@@= =@@ + @@= -@@ + @@*: :*@@ + @%*=: :=*@@ + @@@%%##%%@@@ +)ART", + {} + }}, + + { "unifi", { + R"ART( + ___ ___ .__________.__ + | | |____ |__\_ ____/__| + | | / \| || __) | | + | | | | \ || \ | | + |______|___| /__||__/ |__| + |_/ +)ART", + {} + }}, + + { "univalent", { + R"ART( +UUUUUUU UUUUUUU +UUUUUUU UUUUUUU +UUUUUUU A UUUUUUU +UUUUUUU A|A UUUUUUU +UUUUUUU A | A UUUUUUU +UUUUUUU A | A UUUUUUU +UUUUUUU A| | |A UUUUUUU +UUUUUUU A | | | A UUUUUUU +UUUUUUU A | | | A UUUUUUU +UUUUUUU A | | | A UUUUUUU +UUUUUUU A | | | A UUUUUUU +UUUUUUU A | | | A UUUUUUU +UUUUUUU A | | | A UUUUUUU + UUUUUUU A | | | A UUUUUUU + UUUUUUU A | | | A UUUUUUU + UUUUUUUAAAAAAAAAAAUUUUUUU + UUUUUUUUUUUUUUUUUUU + UUUUUUUUUUUUU +)ART", + {} + }}, + + { "univention", { + R"ART( + ./osssssssssssssssssssssso+- + `ohhhhhhhhhhhhhhhhhhhhhhhhhhhhy: + shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh- + `-//$2sssss$1/hhhhhhhhhhhhhh+$2s$1.hhhhhhhhh+ + .ohhhy$2sssss$1.hhhhhhhhhhhhhh.$2sss$1+hhhhhhh+ +.yhhhhy$2sssss$1.hhhhhhhhhhhhhh.$2ssss$1:hhhhhh+ ++hhhhhy$2sssss$1.hhhhhhhhhhhhhh.$2sssss$1yhhhhh+ ++hhhhhy$2sssss$1.hhhhhhhhhhhhhh.$2sssss$1yhhhhh+ ++hhhhhy$2sssss$1.hhhhhhhhhhhhhh.$2sssss$1yhhhhh+ ++hhhhhy$2sssss$1.hhhhhhhhhhhhhh.$2sssss$1yhhhhh+ ++hhhhhy$2sssss$1.hhhhhhhhhhhhhh.$2sssss$1yhhhhh+ ++hhhhhy$2sssss$1.hhhhhhhhhhhhhh.$2sssss$1yhhhhh+ ++hhhhhy$2sssss$1.hhhhhhhhhhhhhh.$2sssss$1yhhhhh+ ++hhhhhy$2ssssss$1+yhhhhhhhhhhy/$2ssssss$1yhhhhh+ ++hhhhhh:$2sssssss$1:hhhhhhh+$2.ssssssss$1yhhhhy. ++hhhhhhh+`$2ssssssssssssssss$1hh$2sssss$1yhhho` ++hhhhhhhhhs+$2ssssssssssss$1+hh+$2sssss$1/:-` +-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho + :yhhhhhhhhhhhhhhhhhhhhhhhhhhhh+` + -+ossssssssssssssssssssss+:` +)ART", + {} + }}, + + { "unknown", { + R"ART( + ________ + _jgN########Ngg_ + _N##N@@"" ""9NN##Np_ +d###P N####p +"^^" T#### + d###P + _g###@F + _gN##@P + gN###F" + d###F + 0###F + 0###F + 0###F + "NN@' + + ___ + q###r + "" +)ART", + {} + }}, + + { "uos", { + R"ART( + ....... + .............. + ...................... + ............................. +uuuuuu uuuuuu ooooooooooo ssssssssss +u::::u u::::u oo:::::::::::oo ss::::::::::s +u::::u u::::u o:::::::::::::::oss:::::::::::::s +u::::u u::::u o:::::ooooo:::::os::::::ssss:::::s +u::::u u::::u o::::o o::::o s:::::s ssssss +u::::u u::::u o::::o o::::o s::::::s +u::::u u::::u o::::o o::::o s::::::s +u:::::uuuu:::::u o::::o o::::ossssss s:::::s +u:::::::::::::::uuo:::::ooooo:::::os:::::ssss::::::s +u:::::::::::::::uo:::::::::::::::os::::::::::::::s +uu::::::::uu:::u oo:::::::::::oo s:::::::::::ss + uuuuuuuu uuuu ooooooooooo sssssssssss + ............................. + ..................... + ............. + ...... +)ART", + {} + }}, + + { "urukos", { + R"ART( + $3:$4:::::::::::::: $5. + $3=#$4*============. $5:#: + $3=##%$4+----------. $5.###: + $3=####. $5.####: + $3=####. $5.####: + $3=###*. .=$4--------. $5####: + $3=####. .*#+$4======- $5####: + $3=###*. .*###+$4====- $5####: + $3=###*. .*#####+$4==- $5####: +$3=###*. .*#######+$4: $5####: +$3=###*. .*#######+$4: $5####: + $3=###*. .*#####+$4==- $5####: + $3=###*. .*###+$4====- $5####: + $3=####. .*#+$4======- $5####: + $3=###*. .=$4--------. $5.####: + $3=####. $5.####: + $3=####. $5.####: + $3=###+$4--------------$5####: + $3=#+$4=================-$5: + $3:$4::::::::::::::::::. +)ART", + {} + }}, + + { "uwuntu", { + R"ART( + && + &&&&&&&& + , *&&&&&& &&&&&&&&( + &%%%%&&&& &&&&&&&&&&&& ,&&&&& + %%$2%%%%&&$1&&& ,&&&&&&&&&&&&&, %&&&$&&&%%$%%%. + &%%%$2%&&&&&$1&&# &, &&&&&&$2&&&&&&&%%%$1%% + &%%&&$2&&&&$1&&&( &&&$2&&&&&&%$1%%% + &&&&&$2&&&$1&% *&&$2&&&&&$1&&% + &&&/ &&&&$3\$1& ,$3/$1*.** + %&&&&&&&& &&&$3⟩$1., *.$3⟨$1 + %&&&&&&&& &&$3/$1.. $3/ \$1 ..$3\$1(&&&&&& + #&&&#%%%%.%%%( $3\_/\_/$1 (%%%.%%%%/ + /%%%%%%%&&* ,&&&%%%%%%& + &&&&&&&& &&&&&&&&&&& + (&&&&& &&&&&&&&&&& + $2%%$1 & &&&&&&&&&&&& &&&&&&& + $2%%%$1 #&&&&&&# &&&&&&&&& + $2%%%%% %%$1 #&&&&&( +$2&%. %%%$1 + $2%%%%%%% +)ART", + {} + }}, + + { "uzbek", { + R"ART( + *++++++++++++++* +*=:-::-::-::-::-::=* ++============. ===+ ++===========. ====+ ++++++++++++ +++++* +*+++ =+++ ++++++* +*++++ .+ +++++++* +*+++++ ++++++++* +*++++++ =+++++++++* +*++++++++++++++++++* + *++++++++++++++* +)ART", + {} + }}, + + { "valhalla", { + R"ART( + .:~: + !55P&#: + ^@G?G!&Y + !GYYGP55P: Y5J777!^:. +.GY?J#G!Y?5. ....P#7Y!##Y??57 +.5JY5PPY5GBBBPYYPBBGBYYP5PJP5: +^#J?Y@5?J5@@&!GG!&@@YJ?5@PJ7B? +5PY55G5YY5P!55YY5P7P5JJY5YYJ5Y +#G?J5@PJJP@~&55Y5@7@5JJG@5J?GB + .:.^:^^:!.!:!!:!:!:^^:^.:. +)ART", + {} + }}, + + { "vanilla", { + R"ART( + .----: + .-------. + :---::----: + .----::-----. + ......... :----::-----: ..:::-::::.. +.-----------------::------------------: + ----::-----------::----------::::---: + -----:::--------::-------:::------- + :------::::--::...:::::---------: + .---------::.. ..:---------. + .::-----::.. .::----::. + .:------:.......:-------: + .--------::::::::-:::-------. + .-------::-----.:-----::------. + -----::------: :------::----- + :--::--------: .-------::---: + :----------:: .:---------- + :--------: :--------: +)ART", + {} + }}, + + { "vanilla2", { + R"ART( + . + x/A\x + Z#@#?P`. + /@$R/.:.', + _ ($@`.:::.) _ +_-=t'''`-.g$(.::::.!-aZ#$#Kko, +V$#6..::::.~l.::.<&#p***q##$p' +'9#$b,:::::::::.%P~'.:::.`~v' + "<#$&b,.':::'./'.:::::::.>' + `~*q@#&b+=- -=+x.,''_.' + z+'.:::',).:.`~q@6x, + /.:::::',Z!.:::.`*q&x + i'.:::', +$2 _j>!vC1,, + $4,$2 ,CY$3O$2t$3O$21(l;" +`$4~-{r(1I$2 ^$1/zmwJuc:$2I^ +'$4?)|$1U$4/}-$2 ^$3f$1OCLLOw$3_$2,; + ,$4i,``. $2",$3k%ooW@$d"$2I,' + ' ;^$3u$$$$$$$$$$$$$$$$^<$2:^ + ` .>>$3($$$$$5$@@@@$$$$$3$nl$2[:: + `!}?$3B$$$5%&WMMW&%$$$3$1}-$2}": + ^?j$3Z$$$5WMMWWWWMMW$$$3ofc$2;;` + <~x&$3$$$5&MWWWWWWWWp$3-$5l>[< +$1 'ljmwn$2~tk8$5MWWWWM8O$2X$1r$2+]nC$1[ +!JZqwwdX$2:^C8$5#MMMM@$2X$1Odpdpq0< + ^x00J(" + ^" +)ART", + {} + }}, + + { "void", { + R"ART( + __.;=====;.__ + _.=+==++=++=+=+===;. + -=+++=+===+=+=+++++=_ + . -=:`` `--==+=++==. + _vi, ` --+=++++: + .uvnvi. _._ -==+==+. + .vvnvnI` .;==|==;. :|=||=|. +$2+QmQQm$1pvvnv;$2 _yYsyQQWUUQQQm #QmQ#$1:$2QQQWUV$QQm. + $2-QQWQW$1pvvo$2wZ?.wQQQE$1==<$2QWWQ/QWQW.QQWW$1(:$2 jQWQE + $2-$QQQQmmU' jQQQ$1@+=<$2QWQQ)mQQQ.mQQQC$1+;$2jWQQ@' + $2-$WQ8Y$1nI:$2 QWQQwgQQWV$1`$2mWQQ.jQWQQgyyWW@! + $1-1vvnvv. `~+++` ++|+++ + +vnvnnv, `-|=== + +vnvnvns. . :=- + -Invnvvnsi..___..=sv=. ` + +Invnvnvnnnnnnnnvvnn;. + ~|Invnvnvvnvvvnnv}+` + -~|{*l}*|~ +)ART", + {} + }}, + + { "void2", { + R"ART( + .......... + .::::::::::::::::::.. + ..:::::::::::::::::::::::::. + '::::::::::::::::::::::::::::. + ':::::'' '':::::::::::::. +$3 .. $1' '':::::::::. +$3 .||. $1'::::::::: +$3 .|||||. $1':::::::: +$3 .|||||||: $1:::::::: +$3 |||||||: $1.::::::::. :::::::: +$2 ######$3||||||' $2##^ v##########v$1::. $2##### #############v +$2 ######$3||||| $2##^ v####$1::::::$2####v$1::$2##### #####$1:::::$2##### +$2 ######$3||$2##^ #####$1::::::$2#####$1::$2##### #####$1:::::$2###### +$2 ######^$3|| $2#####$1:::::$2####^$1::$2##### #####$1:::::$2#####^ +$2 ##^$3||||| $2^###########^$1:::$2##### ##############^ +$3 |||||||: $1'::::::::' .:::::::: +$3 '|||||||: $1.::::::::' +$3 '|||||||:. $1':::::: +$3 '||||||||:. $1'::: +$3 ':|||||||||. . $1' +$3 '|||||||||||:... ...:||||. + ':||||||||||||||||||||||||||. + ':|||||||||||||||||||||||'' + '':||||||||||||||:'' + '''''' +)ART", + {} + }}, + + { "void2_small", { + R"ART( + _______ + _ \______ - +| \ ___ \ | +| | / \ | | +| | \___/ | | +| \______ \_| + -_______\ +)ART", + {} + }}, + + { "void_small", { + R"ART( + ____ + 'pfPfp.% +// _._ \\ +UU |===| UU +\\ ^~^ // + `0PpppP' + +)ART", + {} + }}, + + { "vzlinux", { + R"ART( + $1.::::::::.$2 +`/////` $1:zzzzzzzz$2 ://///- + VVVVVu` $1-zzz`$2 /VVVVV. + `dVVVVV $1.zzz`$2 :VVVVV: + `VVVVVo $1zzz$2 -VVVVV/ + .VVVVV\ $1zzz/$2 .VVVVV+ + -VVVVV: $1zzzzzzzzz$2 .dVVVVs + \VVVVV- $1 +)ART", + {} + }}, + + { "wii_linux", { + R"ART( +''''''' `~;:` -'''''' ~kQ@@g\ ,EQ@@g/ +h@@@@@@' o@@@@@9` `@@@@@@D `@@@@@@@= @@@@@@@? +'@@@@@@X o@@@@@@@D v@@@@@@: R@@@@@@, D@@@@@@_ + t@@@@@@' _@@@@@@@@@; `Q@@@@@U ;fmo/- ;fmo/- + `Q@@@@@m d@@@@@@@@@N 7@@@@@@' + L@@@@@@' :@@@@@&@@@@@| `Q@@@@@Z :]]]]]v :]]]]]v + Q@@@@@X R@@@@Q`g@@@@Q f@@@@@Q- z@@@@@Q v@@@@@Q + r@@@@@@~ ;@@@@@/ ;@@@@@L `@@@@@@/ z@@@@@Q v@@@@@Q + d@@@@@q M@@@@# H@@@@Q ]@@@@@Q z@@@@@Q v@@@@@Q + ,@@@@@@, >@@@@@; _@@@@@c `@@@@@@> z@@@@@Q v@@@@@Q + X@@@@@U Q@@@@R Z@@@@Q`{@@@@@N z@@@@@Q v@@@@@Q + .@@@@@@S@@@@@: -@@@@@e@@@@@@: z@@@@@Q v@@@@@Q + {@@@@@@@@@@U t@@@@@@@@@@e z@@@@@Q v@@@@@Q + `Q@@@@@@@@@' `Q@@@@@@@@@- z@@@@@Q v@@@@@Q + :@@@@@@@@| ;@@@@@@@@= z@@@@@Q v@@@@@Q + '2#@@Q6: ,eQ@@QZ~ /QQQQQg \QQQQQN +)ART", + {} + }}, + + { "windows", { + R"ART( +$1 ,.=:!!t3Z3z., + :tt:::tt333EE3 +$1 Et:::ztt33EEEL$2 @Ee., .., +$1 ;tt:::tt333EE7$2 ;EEEEEEttttt33# +$1 :Et:::zt333EEQ.$2 $EEEEEttttt33QL +$1 it::::tt333EEF$2 @EEEEEEttttt33F +$1 ;3=*^ +)ART", + {} + }}, + + { "windows", { + R"ART( +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<<< + +>>>>>>>>>>>>>>>>>>>>> $1 ###################### +>>>>>>>>>>>>>>>>>>>>> $1 ###################### +>>>>>>>>>>>>>>>>>>>>> $1 ###################### +>>>>>>>>>>>>>>>>>>>>> $1 ###################### +>>>>>>>>>>>>>>>>>>>>> $1 ###################### +>>>>>>>>>>>>>>>>>>>>> $1 ###################### +>>>>>>>>>>>>>>>>>>>>> $1 ###################### +>>>>>>>>>>>>>>>>>>>>> $1 ###################### +>>>>>>>>>>>>>>>>>>>>> $1 ###################### +>>>>>>>>>>>>>>>>>>>>> $1 ###################### + + +)ART", + {} + }}, + + { "windows_11", { + R"ART( +$1///////////////// $2///////////////// +$1///////////////// $2///////////////// +$1///////////////// $2///////////////// +$1///////////////// $2///////////////// +$1///////////////// $2///////////////// +$1///////////////// $2///////////////// +$1///////////////// $2///////////////// +$1///////////////// $2///////////////// + +$3///////////////// $4///////////////// +$3///////////////// $4///////////////// +$3///////////////// $4///////////////// +$3///////////////// $4///////////////// +$3///////////////// $4///////////////// +$3///////////////// $4///////////////// +$3///////////////// $4///////////////// +$3///////////////// $4///////////////// +)ART", + {} + }}, + + { "windows_11_small", { + R"ART( +$1lllllll $2lllllll +$1lllllll $2lllllll +$1lllllll $2lllllll + +$3lllllll $4lllllll +$3lllllll $4lllllll +$3lllllll $4lllllll +)ART", + {} + }}, + + { "windows_2025", { + R"ART( +$1 ##%%%%%%%%% $2%%%%%%%%%## +$1 ###%%%%%%%%%% $2%%%%%%%%%%### +$1 ####%%%%%%%%%%% $2%%%%%%%%%%%#### +$1 ##%%%%%%%%%%%%%% $2%%%%%%%%%%%%%%## +$1#%%%%%%%%%%%%%%%% $2%%%%%%%%%%%%%%%%# +$1%%%%%%%%%%%%%%%%% $2%%%%%%%%%%%%%%%%% +$1%%%%%%%%%%%%%%%%% $2%%%%%%%%%%%%%%%%% +$1%%%%%%%%%%%%%%%%% $2#%%%%%%%%%%%%%%%% + +$3%%%%%%%%%%%%%%%%% $4#%%%%%%%%%%%%%%%% +$3%%%%%%%%%%%%%%%%% $4%%%%%%%%%%%%%%%%% +$3%%%%%%%%%%%%%%%%% $4%%%%%%%%%%%%%%%%% +$3%%%%%%%%%%%%%%%%% $4%%%%%%%%%%%%%%%%# +$3 ###%%%%%%%%%%%%% $4%%%%%%%%%%%%%%%## +$3 ####%%%%%%%%%%% $4%%%%%%%%%%%#%#### +$3 ##%#%%%%%%%%% $4%%%%%%%%%%%###### +$3 ##%%%%%%%%% $4%%%%%%%%%######## +)ART", + {} + }}, + + { "windows_8", { + R"ART( + $2.., + ....,,:;+ccllll +$1 ...,,+:; $2cllllllllllllllllll +$1,cclllllllllll $2lllllllllllllllllll +$1llllllllllllll $2lllllllllllllllllll +$1llllllllllllll $2lllllllllllllllllll +$1llllllllllllll $2lllllllllllllllllll +$1llllllllllllll $2lllllllllllllllllll +$1llllllllllllll $2lllllllllllllllllll + +$3llllllllllllll $4lllllllllllllllllll +$3llllllllllllll $4lllllllllllllllllll +$3llllllllllllll $4lllllllllllllllllll +$3llllllllllllll $4lllllllllllllllllll +$3llllllllllllll $4lllllllllllllllllll +$3`'ccllllllllll $4lllllllllllllllllll +$3 `' \*:: $4:ccllllllllllllllll + +)ART", + {} + }}, + + { "windows_95", { + R"ART( +$6 ___ + .--=+++++=-:. +. _ *%@@@@@@@@@@@@@@* + *:+:.__ :+* @@@ @"$5_*&%$6@@$4%&&&*$6"@@@ + "+.-#+ +%* " _ $5++&&&%$6@@$4%&&&&&#$6@@ +$5" , $6%@@ $5&&&&&%$6@@$4%&&&&&#$6@@ +$5 * oo *# $6" _ $5&&&&&%$6@@$4%&&&&&#$6@@ +$5" , $6%@@ $5&&&&"$6@@@@#*$4"&&&$6@@ +.$5 * oo *# $6" _ %@@@@@@@@@@@@@@@@ + *:+:.__ :=* %@@ @"$1**&%$6@@$3%&&&*$6"@@@ + "+.-#+ +%* " _ $1&&&&&%$6@@$3%&&&&&#$6@@ +$1" , $6%@@ $1&&&&&%$6@@$3%&&&&&#$6@@ +$1 * oo *# $6" _ $1&&&&&%$6@@$3%&&&&&#$6@@ +$1" , $6%@@ $1&&*"$6%@@@@@@$3"*%&$6@@ +.$1 * oo *# $6" _ @@@@@@@@@@@@@@@@@ + *:+:.__ :+# @@@ @%#=+""""""+==%#@ + "+.-#+ +%* %+" " ":@ + " " +)ART", + {} + }}, + + { "wolfos", { + R"ART( +__ __ _ __ ___ ____ +\ \ / /__ | |/ _|/ _ \/ ___| + \ \ /\ / / _ \| | |_| | | \___ \ + \ V V / (_) | | _| |_| |___) | + \_/\_/ \___/|_|_| \___/|____/ +)ART", + {} + }}, + + { "xcp_ng", { + R"ART( + $3%$4# + $1(((($3%%%%%$4&& + $1#(((((((((($4&&&& + $1((((((((((($2#####$4&& + $1((((($5%.....$2%####### + $1(((( (((((($5%.......$2%####, + $1%((((((& (((((((($5%.....$2%#### + $1(((((((((((((($2########### + $1(((( ((((((($2########### + $1( /(((($2########### + $6,,*..$2########## + $6,,,******$2## ###### + $6,,,*,,,, $2## ###### +$6. .,,,, $2### ## + $6... +)ART", + {} + }}, + + { "xenia", { + R"ART( + ** + * ** */ + $2@$1///// / *** *** **** ***/ + //////////////**** ** * ** *** **/ + ,, ,,//////////* ****** ** ** ** / + , , ,,, /////******* ********* / + , ,,,,, ** ** *********** + ., ,,,**** ******* *** /// + ,, *********** ** //// + ,,,,, ******* //// // + ,,,,,,. ///// // + ,,, , /////// + ,,,, ///// + ,, / / + / +)ART", + {} + }}, + + { "xenia_old", { + R"ART( +$2 ,c. .c; +$2 .$1KMMMk$2.... ....$1kMMMK$2. +$2 .$1WMMMMMX$2..... .....$1KMMMMMW. +$1 XMMMMMMM0$2..... ....$1OMMMMMMMN +$1 dMMMMMMMMM;$2.... ..... ....,$1MMMMMMMMMd +$1 WMMMMMMMMMl;$3okKKKKKKKKKOo$1;cMMMMMMMMMM +$1 'MMMMMMMNX$2K0$3KKKKKKKKKKKKKKK$20K$1XNMMMMMMM; +$1 oMMMMMMM$2Oxo$3KKKKKKKKKKKKKKKKK$2oxO$1MMMMMMMd +$1 dMMMMMMM$2dxxx$3KKKKKKKKKKKKKKK$2xxxd$1NMMMMMMk +$1 :MMMMX0$2xxxxxx$30KKKKKKKK0KK0$2xxxxxx0$1XMMMMc +$1 MMMO$2xxxxxxxxdx$3kdd$20x0$3ddk$2xdxxxxxxxx$1OMMM +$1 ;$2xxkxddxxxxdodxxxxdxdxxxxdodxxxxddxkxx$1; +$1dxd$2KMMMWXo$1'.....'$2cdxxxdc$1'.....'$2lXWMMMX$1dxd +$1cxd$2XMMMN$1,..........$2dxd$1'.........'$2XMMMN$1dxl +$1 .xx$2WMMl$1...''....'.;k:.'....''...$2lMMW$1xx. +$1..:kXMMx..'....''..kMk..''....'..xMMXkc.. +$1 dMMMMMMd.....'...xMMMx...''....dMMMMMMx +$1 kMMMMWOoc:coOkolllokOoc:coOWMMMMO +$1 .MMMMMMMMl$2...$1lNMMMMMMM. +$1 KMMMMMMX$2l$1KMMMMMMX +$1 .MMMMMMMMM. +)ART", + {} + }}, + + { "xeroarch", { + R"ART( +$5 ████ +$5 ███$2▓▓$5███ +$5 ███$2▓▓▓▓$5███ +$5 ███$2▓▓▓▓▓▓$5███ +$5 ███$2▓▓▓▓▓▓▓▓$5███ +$5 ███$2▓▓▓▓▓▓▓▓▓▓$5███ +$5 ███$2▓▓▓▓▓▓▓▓▓▓▓▓$5███ +$5 ███$2▓▓▓▓▓▓$5██$2▓▓▓▓▓▓$5▓██ +$5 ███$2▓▓▓▓▓▓$5████$2▓▓▓▓▓▓$5▓██ +$5 ██▓$2▓▓▓▓▓▓$5█▓$3▓▓$5▓█$2▓▓▓▓▓▓$5▓██ +$5 █████▓▒▒▒██$3▓$4▒▒$3▓$5██▒▒▒▓█████ +$5 ███$6▓▓▓▓▓$5████$3▓$4▒▒▒▒$3▓$5▓███$6▓▓▓▓▓$5███ +$5 ███$6▓▓▓▓▓▓▓▓▓$5███▓▓███$6▓▓▓▓▓▓▓▓▓$5███ +$5 ███$6▓▓▓▓▓▓▓$2▓▓$6▓▓▓▓▓$5█$6▓▓▓▓▓▓▓▓▓▓▓▓▓$5███ +$5 ███$6▓▓▓▓▓▓$2▓▓$5▒▒$6$2▓▓$6▓▓▓$5▓$6▓▓▓▓$4()$6▓▓▓▓▓▓▓▓$5███ +$5 ███$6▓▓▓▓▓$2▓▓$5▒▒▒▒▒▒$6$2▓▓$6▓$5▓$6▓▓$3()$6▓▓$3()$6▓▓▓▓▓▓▓$5███ +$5███$6▓▓▓▓▓▓▓▓$2▓▓$5▒▒$6$2▓▓$6▓▓▓$5▓$6▓▓▓▓$4()$6▓▓▓▓▓▓▓▓▓▓$5███ +$5██$6▓▓▓▓▓▓▓▓▓▓▓$2▓▓$6▓▓▓▓▓$5▓$6▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓$5██ +$5████████████████████████████████████████ +)ART", + {} + }}, + + { "xferience", { + R"ART( + ``--:::::::-.` + .-/+++ooooooooo+++:-` + `-/+oooooooooooooooooo++:. + -/+oooooo/+ooooooooo+/ooo++:` + `/+oo++oo. .+oooooo+.-: +:-o+- + `/+o/. -o. :oooooo+ +)ART", + {} + }}, + + { "ximper", { + R"ART( +$1 ⡹⣶⣄⡀ $2 $3 $4 ⣠⣶⠏⡀ +$1 ⣷⡘⣿⣿⣶⣤⣀ $2 $3 $4⢀⣠⣶⣿⣿⢋⣼⠁ +$1 ⣿⣷⡌⢿⣿⣿⣿⣷⣦⣄$2 $3 ⣠⣴⣾$4⣿⣿⣿⡿⢃⣾⣿ +$1 ⣿⣿⣿⣎⢻⣿⣿⣿⣿⣿$2⣿⣶⡄ ⢠⣶$3⣿⣿⣿⣿$4⣿⣿⡟⢡⣿⣿⣿ +$1 ⢸⣿⣿⣿⣦⠻⣿⣿⣿⣿$2⠟⣩⣾⡇⣷⣍$3⠻⣿⣿⣿$4⣿⠟⣰⣿⣿⣿⡏ +$1 ⠸⠟⣛⣋⣭⣦⡙⣿⢟⣵$2⣿⣿⣿⠇⣿⣿$3⣷⣬⡛⢿$4⢏⣴⣬⣝⣛⡻⠇ +$1 ⣠⣍⠻⠟⠛⠉⠁ ⠻⣿$2⣿⣿⣿⠤⣿⣿$3⣿⣿⠟ $4⠈⠉⠛⠻⠟⣫⣤ +$1 ⢀⣼⡿⡋⣠⠠⡀ ⠈$2⢛⣫⡇⣤⠨⣝$3⡛⠁ $4 ⣀⡄⣤⠙⠿⣧⡀ +$1 ⢀⠞⣡⠞⣼⣿⣧⢹⣶⡄⣤⣶⣾$2⣿⠋⣼⣿⣧⠙$3⣿⣷⣶⣄$4⢠⣾⡟⣼⣿⣧⠳⣌⠳⡀ +$1⢀⣡⠾⢋⣾⣿⠿⣋⣤⢻⡇⢿⣿⡟$2⣱⠑⠟⠛⠻⠂$3⣎⢻⣿⣿$4⢸⡟⣠⣙⠿⣿⣷⡙⠷⣌ +$1 ⢠⡾⢟⣡⣾⣿⣿⣆⠇⢸⢋⣾$2⣿⣷⣄ ⣠⣴$3⣿⣷⡹⣿$4⠸⣰⣿⣿⣷⣌⡛⢷⡄ +$1 ⠐⣫⣴⣿⠿⠿⠿⠿⠛⠂⠰⢿⣿$2⣿⠟⠁ ⠈⠛$3⢿⣿⣿⠆$4⠐⠛⠻⠿⠿⠿⣿⣦⣍ +$1 ⠉$2 $3 ⠉ $4 +)ART", + {} + }}, + + { "xinux", { + R"ART( +$1 * $2======= ===== ======= $1* +$1 **** $2======= ======= ======= $1*** +$1 ****** $2======= ======= ======= $1****** +$1 ******* $2======== ======= ======= $1******* +$1 ******* $2======== ============= $1******* +$1 ******* $2======== ========== $1******* +$1 ******* $2======== ======== $1******* +$1 ******** $2======= ======= $1********* +$1 *********** $2==== ======= $1*********** +$1 ************* $2== ======= $1************* +$1 ******* ******* $2======== $1******* ******* +$1 ******* ******* $2====== $1******* ******* +$1******* ******* $2==== $1******* ******* +$1 ***** ******* $2== $1******* ***** +)ART", + {} + }}, + + { "xj380", { + R"ART( + % + *++++++% + *+++++++++++++% + *++++++++++++++++++++% + *++++++++++++++++++++++++++% + *++++++*++++++++++$2%%$1+++++++++++++% + *+++++++++++$2*%%*$1+++++++++++$2%$1+++++++++++% + *++++++++++++++++$2%%%%$1+++++++++++++$2%$1+++++++++% +*++++++++++++++++++$2*%*$1+$2%%%%%%%%%$1++++++$2%$1++++++++% +*++++++++++++++$2**$2%%%%%**$2%*$1++$2%%$1++++++++$2%%$1+++++++% +*+++++++++++$2%%%*$1++$2*%$1++++$2%%%%*$1++++++++$2%%%%$1++++++% +*+++++$2%%%*$1++++$2%%%$1+$2%%$1++++$2%%%$1++++++++++$2*%%*$1++++++% +*+++++$2%%%%$1+++++++$2%%*$1++$2*%%*%*$1+++++++++++++++++++% +*++++++$2%$1+++++++++$2%%%%%%$1+++$2%%$1+++++++++++++++++++% +*++++++$2%*$1+++++++$2*%+%%*%%*$1++$2%%$1++++++++++++++++++% +*+++++++$2%$1+++++++$2%%%*$1++++$2*%%*%*$1+++++++++++++++++% +*++++++++$2*%*$1+++$2%%*$1+++++++++$2%%%$1+++++++++++++++++% +*++++++++++++$2%%$1++++++++++++++$2%$1+++++++++++++++++% +*++++++++++++++++++++++++++++++++++++++++++++++% +)ART", + {} + }}, + + { "xray_os", { + R"ART( + $1rrrrrraaaaaaaaaaaayyyy + $1xxrrrrrrrraaaaaaaaaaaayyyyyyyyy + $1xxxxxrrrrrrrraaaaaaaaaaaayyyyyyy$3yyyyy$2yyyyyyyyyy + $1xxxxxxxrrrrrrrraaaaa $2aaaaayyyyyyyyyyyyyyyyyyy + $1xxxxxx$3xxx$1rrrrrrrraaaa $2aaaaaaayyyyyyyyyyyyyyyyy + $1xxxxxx$3xxxxxr$1rrrrrrraa $2aaaaaaaaay$3yyyyyyyyy$2yyyy $1yy + $1xxxxxxx$3xxx$1xxrrrrrrrra $2aaaaaaaaa$3ayyyyyyyyyyyy$1yyyyyy + $1xxxxxxxxxxxxrrrrrrrr $2aaaaaaaaaaa$3yyyyyyyyyyyy$1yyyyyyy +$1xxxxxxxxxxxxxrrrrrr $2raaaaaaaaaaaayyy$3yyyyyyyy$1yyyyyy$1yyy +$1xxxxxxxxxxxxxrrrrr $2rraaaaaaaaaaaayyyyy$3yy$2yyyyyy $1yyyyyy +$1xxxxxxxx$3xxxx$1xrrrrr$2rr$3raaaaaaa$2aaaaayyyyyyyyyy $1yyyyyyyyy +$1xxxxxxx$3xxxx$1xxrrrrrrr$3raaaaaa$2aaaaaayyyyyyy $1yyyyyyyyyyyy +$1xxxxxxx$3xxx$1xxxrrrrrrrr$3aaaaaa$2aaaaaayyyy $1yyyyyyyyyyyyyy + $1xxxxxxxxxxxxrrrrrrrra $2aaaaaaaaaay $1yyyyyyyyyyyyyyyy + $1xxxxxxxxxxxrrrrrrr $2aaaaaaaaaaaayyyy$1yyyyyyyyyyyyy + $1xxxxxxx$3xxxrr$1rrrr $2raaaaaaaaaaaa $1yyyyyyyyyyyyyyy + $1xxxxxxxxrrrr $2rrraaaaaaaaa $1aayyyyyyyyyyyyyy + $1xxxxxxrrrrrrr $2aaaaaa $1aaaayyyyyyyyyyyy + $1xxxrrrrrr $2raaa $1aaaaaaayyyyyyyyy + $1rrrr $2rr $1aaaaaaaaaayyyyyy + $2r $1aaaaaaaaaa +)ART", + {} + }}, + + { "xubuntu", { + R"ART( + __ygg@@@@@@@@@ggy__ + _yg@@@@@@@@@@@@@@@@@@@@@gy_ + _a@@@@@@@@@@@@@@@@@@@@@@@@@@@@@y_ + _a@@@@@@@@@@@@@@@@@@@@@@@$2#$1@@@@@@@@@g_ + a@@@@@@@@@@@@@$2###$1@@@@@@@@$2##$1@@@@$2##$1@@@@@k + g@@@@@@@$2###$1@@@$2#####$1@@@@@@@$2##$1@@$2###$1@@@@@@@k + a@@@@@@@@$2#####$1@$2#####$1@@@@@@$2##$1@@$2###$1@@@@@@@@@k +j@@@@@@@@@$2############$1@@@@@$2##$1@$2###$1@@@@@@@@@@@k +g@@@@@@@@@$2#####################$1@@@@@@@@@@@@@@ +@@@@@@@@@$2##########################$1@@@@@@@@@@ +0@@@@@@@@$2###########################$1@@@@@@@@@ +~@@@@@@@$2############################$1@@@@@@@@F + 9@@@@@@$2##########################$1@@@@@@@@@P + 4@@@@@@$2######################$1@@@@@@@@@@@P + ~@@@@@@$2################$1@@@@@@@@@@@@@@@F + `4@@@@@@$2#######$1@@@@@@@@@@@@@@@@@@@@P` + `~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F` + ~~4@@@@@@@@@@@@@@@@@@@@@P~~ + `~~=R@@@@@@@@@P=~~~ +)ART", + {} + }}, + + { "yiffos", { + R"ART( + NK + NxKXW + WOlcoXW + 0olccloxNW + XxllllllloxOKNW + Nklllllllllllodk0XWW + N0dllllllllllllllodxOKNW + WKxlllllllllllllllllllooxOKN + WKdllllllllllllllooooooooooooo + Nxllllllllllllllloooooooooo$2oooo +$1 XXNOolllllllllllloooooooooo$2oooooo +$1 WX0xolllllllllllooooooooooo$2oooooooo +$1XWN0xolllllllllloooooooo$2ooooooooooooo +$1 Kkdolllllllooooddddd$2doooooooooooddo +$1 K00XNW$2 WX0xdooooooddddddd + WXOxdoooooodddd + WXOxdddddddd + NX0ddd + WN0d +)ART", + {} + }}, + + { "zerene", { + R"ART( + MMM + MMMM + MMMMM + MMMMMM + MMMMMMa + MMMMMMMa + MMMMMMM + MMMMMM + MMMM + M + oxdo aMa + aMd aMMMMMMMMM + aMMMMM MMMMMMMMMMMMMMa + MMMMMMMa MMMMMMMMMMMMMMMa + MMMMMMMMa + MMMMMMMMa + MMMMMMM +MMMM +)ART", + {} + }}, + + { "zorin", { + R"ART( + `osssssssssssssssssssso` + .osssssssssssssssssssssso. + .+oooooooooooooooooooooooo+. + + + `::::::::::::::::::::::. .:` + `+ssssssssssssssssss+:.` `.:+ssso` +.ossssssssssssssso/. `-+ossssssso. +ssssssssssssso/-` `-/osssssssssssss +.ossssssso/-` .-/ossssssssssssssso. + `+sss+:. `.:+ssssssssssssssssss+` + `:. .::::::::::::::::::::::` + + + .+oooooooooooooooooooooooo+. + -osssssssssssssssssssssso- + `osssssssssssssssssssso` +)ART", + {} + }}, + + { "zos", { + R"ART( + // OOOOOOO SSSSSSS + // OO OO SS + zzzzzz // OO OO SS + zz // OO OO SSSS + zz // OO OO SS + zz // OO OO SS +zzzzzz // OOOOOOO SSSSSSS +)ART", + {} + }}, + + { "zraxyl", { + R"ART( + __________ + / __________ \ + / / \ \ + / / .-" +)ART", + {} + }}, + +}; + +const std::map& getDistroArtDatabase() { + return kDistroArtDB; +} + +const std::string& getDistroArt(const std::string& distroId) { + if (auto it = kDistroArtDB.find(distroId); it != kDistroArtDB.end()) { + return it->second.art; + } + for (const auto& [key, entry] : kDistroArtDB) { + for (const auto& alias : entry.aliases) { + if (alias == distroId) return entry.art; + } + } + return kDistroArtDB.at("linux").art; +} diff --git a/src/BinaryFetch/cpp/Linux/detailed/MemoryInfo.cpp b/src/BinaryFetch/cpp/Linux/detailed/MemoryInfo.cpp index 0d12706..6c7c386 100644 --- a/src/BinaryFetch/cpp/Linux/detailed/MemoryInfo.cpp +++ b/src/BinaryFetch/cpp/Linux/detailed/MemoryInfo.cpp @@ -14,11 +14,21 @@ #include using namespace std; +// Set to true only when debugging module-detection issues. +// Wire this up to a CLI flag (e.g. --verbose) via setVerboseLogging(). +static bool g_verbose = false; + +#define LOG_WARN(x) do { if (g_verbose) cerr << x; } while (0) + MemoryInfo::MemoryInfo() { fetchSystemMemory(); fetchModulesInfo(); } +void MemoryInfo::setVerboseLogging(bool v) { + g_verbose = v; +} + // ---------- helpers ---------- static string trim(const string& s) { size_t start = s.find_first_not_of(" \t\r\n"); @@ -57,7 +67,7 @@ void MemoryInfo::fetchSystemMemory() { ifstream meminfo("/proc/meminfo"); if (!meminfo.is_open()) { - cerr << "[MemoryInfo] ERROR: could not open /proc/meminfo\n"; + LOG_WARN("[MemoryInfo] ERROR: could not open /proc/meminfo\n"); return; } @@ -111,18 +121,18 @@ static bool fetchModulesViaDmidecode(vector& outModules) { } if (!ran) { - cerr << "[MemoryInfo] dmidecode: popen() failed entirely (shell unavailable?)\n"; + LOG_WARN("[MemoryInfo] dmidecode: popen() failed entirely (shell unavailable?)\n"); return false; } if (exitCode != 0) { - cerr << "[MemoryInfo] dmidecode exited with code " << exitCode - << ". Output was:\n" << output << "\n"; + LOG_WARN("[MemoryInfo] dmidecode exited with code " << exitCode + << ". Output was:\n" << output << "\n"); if (output.find("Permission denied") != string::npos || !isRoot()) { - cerr << "[MemoryInfo] Likely cause: not running as root. Try: sudo ./yourprogram\n"; + LOG_WARN("[MemoryInfo] Likely cause: not running as root. Try: sudo ./yourprogram\n"); } else if (output.find("not found") != string::npos) { - cerr << "[MemoryInfo] Likely cause: dmidecode is not installed. Try: sudo apt install dmidecode\n"; + LOG_WARN("[MemoryInfo] Likely cause: dmidecode is not installed. Try: sudo apt install dmidecode\n"); } return false; } @@ -189,7 +199,7 @@ static bool fetchModulesViaDmidecode(vector& outModules) { flush(); if (outModules.empty()) { - cerr << "[MemoryInfo] dmidecode ran successfully but reported no populated memory slots.\n"; + LOG_WARN("[MemoryInfo] dmidecode ran successfully but reported no populated memory slots.\n"); } return !outModules.empty(); } @@ -216,8 +226,8 @@ static bool fetchModulesViaSysfsDMI(vector& outModules) { const char* path = "/sys/firmware/dmi/tables/DMI"; ifstream file(path, ios::binary); if (!file.is_open()) { - cerr << "[MemoryInfo] Could not open " << path - << " (need root, or kernel does not expose it on this system)\n"; + LOG_WARN("[MemoryInfo] Could not open " << path + << " (need root, or kernel does not expose it on this system)\n"); return false; } @@ -228,7 +238,7 @@ static bool fetchModulesViaSysfsDMI(vector& outModules) { file.close(); if (data.empty()) { - cerr << "[MemoryInfo] " << path << " was empty (likely no read permission)\n"; + LOG_WARN("[MemoryInfo] " << path << " was empty (likely no read permission)\n"); return false; } @@ -254,10 +264,6 @@ static bool fetchModulesViaSysfsDMI(vector& outModules) { break; } pos += 1; - if (pos < data.size() && data[pos - 1] == 0 && - (strings.empty() || true)) { - // check for double-null terminator - } if (pos < data.size() && data[pos] == 0) { pos += 1; break; @@ -335,7 +341,7 @@ static bool fetchModulesViaSysfsDMI(vector& outModules) { } if (outModules.empty()) { - cerr << "[MemoryInfo] Parsed SMBIOS table but found no populated memory slots.\n"; + LOG_WARN("[MemoryInfo] Parsed SMBIOS table but found no populated memory slots.\n"); } return !outModules.empty(); } @@ -345,24 +351,24 @@ void MemoryInfo::fetchModulesInfo() { modules.clear(); if (!isRoot()) { - cerr << "[MemoryInfo] WARNING: not running as root. " + LOG_WARN("[MemoryInfo] WARNING: not running as root. " "Memory module details require root (SMBIOS/DMI tables are protected). " - "Re-run with sudo.\n"; + "Re-run with sudo.\n"); } if (fetchModulesViaDmidecode(modules)) { return; } - cerr << "[MemoryInfo] Falling back to direct SMBIOS table parsing...\n"; + LOG_WARN("[MemoryInfo] Falling back to direct SMBIOS table parsing...\n"); if (fetchModulesViaSysfsDMI(modules)) { return; } - cerr << "[MemoryInfo] Both methods failed. No module data available. " + LOG_WARN("[MemoryInfo] Both methods failed. No module data available. " "Make sure you are running as root (sudo) and that either dmidecode " - "is installed or /sys/firmware/dmi/tables/DMI is readable.\n"; + "is installed or /sys/firmware/dmi/tables/DMI is readable.\n"); } // ---------- accessors ---------- diff --git a/src/BinaryFetch/cpp/main.cpp b/src/BinaryFetch/cpp/main.cpp index e60f1fd..3d0824f 100644 --- a/src/BinaryFetch/cpp/main.cpp +++ b/src/BinaryFetch/cpp/main.cpp @@ -22,10 +22,12 @@ #include // WMI (Windows Management Instrumentation) interfaces #endif -// ASCII Art & image functionality +// ASCII Art,image & gif functionality #include "AsciiArt.h" #include "core/config_management.h" #include "Image.h" +#include "Gif.h" +#include "Video.h" // ------------------ Full System Info Modules ------------------ @@ -154,12 +156,19 @@ void runOrderedFields(const std::vector& order, -enum class ArtMode { ASCII, IMAGE, NONE }; +enum class ArtMode { ASCII, IMAGE, GIF, VIDEO, NONE }; class LivePrinter { public: - LivePrinter(const AsciiArt& artRef, const TerminalImage& imageRef, ArtMode m) - : art(artRef), image(imageRef), mode(m), index(0), imageDrawn(false) {} + LivePrinter(const AsciiArt& artRef, const TerminalImage& imageRef, + const TerminalGif& gifRef, ArtMode m) + : art(artRef), image(imageRef), gif(gifRef), mode(m), index(0), + imageDrawn(false), gifFrame0Drawn(false) {} + + // Rows printed so far — used by main() after finish() to compute + // how far the final cursor position is from the top of the art + // block, so the GIF animation loop can hop back up to it. + int getCursorRow() const { return index; } void push(const std::string& infoLine) { printAndPad(); @@ -181,20 +190,24 @@ class LivePrinter { std::cout << "\033[K" << '\n'; index++; } - if (mode == ArtMode::IMAGE) drawImageIfDue(); // safety net if info was shorter than the art + if (mode == ArtMode::IMAGE) drawImageIfDue(); // safety net if info was shorter than the art + else if (mode == ArtMode::GIF) drawGifFrame0IfDue(); // same safety net, GIF's first frame } private: const AsciiArt& art; const TerminalImage& image; + const TerminalGif& gif; ArtMode mode; int index; bool imageDrawn; + bool gifFrame0Drawn; int artHeight() const { switch (mode) { case ArtMode::ASCII: return art.getPaddingUp() + art.getHeight(); case ArtMode::IMAGE: return image.getPaddingUp() + image.getRowSpan(); + case ArtMode::GIF: return gif.getPaddingUp() + gif.getRowSpan(); default: return 0; } } @@ -202,6 +215,7 @@ class LivePrinter { void printAndPad() { if (mode == ArtMode::ASCII) printAsciiAndPad(); else if (mode == ArtMode::IMAGE) printImageAndPad(); + else if (mode == ArtMode::GIF) printGifAndPad(); } void printAsciiAndPad() { @@ -309,8 +323,362 @@ class LivePrinter { std::cout << "\0338"; // DECRC: restore cursor std::cout.flush(); } + + // Identical layout mechanics to printImageAndPad() — same gap-width + // reasoning applies (GIF frames are rasterized to an exact pixel + // width, so no extra spacing term beyond padding/colSpan). + void printGifAndPad() { + int upPad = gif.getPaddingUp(); + int rows = gif.getRowSpan(); + int gapEnd = upPad + rows; + int gapWidth = gif.getPaddingLeft() + gif.getColSpan() + + gif.getPaddingRight(); + + if (index >= gapEnd) { + drawGifFrame0IfDue(); + } + + if (gapWidth > 0) std::cout << std::string(gapWidth, ' '); + } + + // Draws only frame 0 — this is the static placeholder shown while + // info text prints. The real animation loop (in main(), after + // finish()) takes over afterwards and redraws subsequent frames + // at this exact same screen position. + void drawGifFrame0IfDue() { + if (gifFrame0Drawn || !gif.isLoaded()) return; + gifFrame0Drawn = true; + + int rows = gif.getRowSpan(); + if (rows <= 0) return; + + std::cout << "\0337"; + std::cout << "\033[" << rows << "A" << '\r'; + int leftPad = gif.getPaddingLeft(); + if (leftPad > 0) std::cout << std::string(leftPad, ' '); + gif.drawFrame(0); + std::cout << "\0338"; + std::cout.flush(); + } }; +#ifdef _WIN32 +// Reads whatever is waiting in the console input queue WITHOUT ever blocking. +// A console input handle becomes "ready" for any event (resize, focus, mouse), +// not just key presses, and ReadFile() would then block until a real key +// arrives. Reading the event records directly avoids that: non-character +// events are discarded and 'out' simply stays empty. +static bool drainConsoleInput(HANDLE hIn, std::string& out) { + out.clear(); + DWORD avail = 0; + if (!GetNumberOfConsoleInputEvents(hIn, &avail)) return false; + if (avail == 0) return true; + + INPUT_RECORD recs[64]; + DWORD got = 0; + DWORD want = (avail < 64) ? avail : 64; + if (!ReadConsoleInputW(hIn, recs, want, &got)) return false; + + for (DWORD i = 0; i < got; ++i) { + if (recs[i].EventType != KEY_EVENT) continue; + const KEY_EVENT_RECORD& k = recs[i].Event.KeyEvent; + if (!k.bKeyDown) continue; + wchar_t wc = k.uChar.UnicodeChar; + if (wc == 0) continue; + + if (wc < 0x80) { + out.push_back((char)wc); + } else { + char u8[8]; + int len = WideCharToMultiByte(CP_UTF8, 0, &wc, 1, u8, sizeof(u8), nullptr, nullptr); + if (len > 0) out.append(u8, (size_t)len); + } + } + return true; +} + +// Full-screen viewer: alternate screen (no scrollback), GIF pinned at the +// top-left and always animating, info text scrollable beside it. +// Keys: q / Esc / Ctrl+C = quit, Up/Down, PgUp/PgDn, Home/End, mouse wheel. +static void runGifViewer(const std::string& captured, const TerminalGif& gif, + const ConfigManager& config) +{ + // ---- split the captured info output into lines ---- + std::vector lines; + { + std::istringstream in(captured); + std::string ln; + while (std::getline(in, ln)) { + if (!ln.empty() && ln.back() == '\r') ln.pop_back(); + size_t k; + while ((k = ln.find("\033[K")) != std::string::npos) ln.erase(k, 3); + lines.push_back(ln); + } + while (!lines.empty() && lines.back().empty()) lines.pop_back(); + } + + // ---- GIF settings (same keys the normal loop uses) ---- + bool loop = config.getNestedBool("art", "Gif.loop", true); + double speed = 1.0; + try { speed = std::stod(config.getNestedString("art", "Gif.speed_multiplier", "1.0")); } + catch (...) { speed = 1.0; } + if (speed <= 0.0) speed = 1.0; + + int maxFrames = config.getNestedInt("art", "Gif.max_frames", 0); + size_t frameLimit = (maxFrames > 0 && (size_t)maxFrames < gif.getFrameCount()) + ? (size_t)maxFrames : gif.getFrameCount(); + + int padUp = gif.getPaddingUp(); + int padLeft = gif.getPaddingLeft(); + int gapWidth = padLeft + gif.getColSpan() + gif.getPaddingRight(); + + // ---- console setup ---- + HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD oldIn = 0; + bool haveIn = GetConsoleMode(hIn, &oldIn) != 0; + if (haveIn) SetConsoleMode(hIn, ENABLE_VIRTUAL_TERMINAL_INPUT); + FlushConsoleInputBuffer(hIn); + + // alt screen, hide cursor, no auto-wrap, mouse wheel reporting (SGR) + std::cout << "\033[?1049h\033[?25l\033[?7l\033[?1000h\033[?1006h\033[2J"; + std::cout.flush(); + + auto countOf = [](const std::string& s, const std::string& pat) { + long n = 0; size_t p = 0; + while ((p = s.find(pat, p)) != std::string::npos) { ++n; p += pat.size(); } + return n; + }; + + int rows = 0, cols = 0; + long scroll = 0, maxScroll = 0; + bool dirty = true, quit = false; + size_t f = 0; + bool playing = true; + + while (!quit) { + // window size (handles resize) + CONSOLE_SCREEN_BUFFER_INFO csbi{}; + if (GetConsoleScreenBufferInfo(hOut, &csbi)) { + int r = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; + int c = csbi.srWindow.Right - csbi.srWindow.Left + 1; + if (r != rows || c != cols) { + rows = r; cols = c; dirty = true; + std::cout << "\033[2J"; + } + } + if (rows <= 0) rows = 24; + + maxScroll = (long)lines.size() - rows; + if (maxScroll < 0) maxScroll = 0; + if (scroll > maxScroll) scroll = maxScroll; + if (scroll < 0) scroll = 0; + + // info text (only redrawn when scrolled/resized) + if (dirty) { + for (int row = 0; row < rows; ++row) { + std::cout << "\033[" << (row + 1) << ';' << (gapWidth + 1) << 'H'; + size_t idx = (size_t)(scroll + row); + if (idx < lines.size()) std::cout << lines[idx]; + std::cout << "\033[0m\033[K"; + } + dirty = false; + } + + // GIF frame, pinned at the top-left + std::cout << "\033[" << (padUp + 1) << ';' << (padLeft + 1) << 'H'; + gif.drawFrame(f); + std::cout.flush(); + + int delay = playing ? (int)(gif.getFrameDelayMs(f) / speed) : 100; + if (delay < 1) delay = 1; + + if (playing) { + ++f; + if (f >= frameLimit) { + if (loop) f = 0; + else { f = frameLimit - 1; playing = false; } + } + } + + // wait for the next frame, but wake up immediately on a key press + ULONGLONG end = GetTickCount64() + (ULONGLONG)delay; + while (!quit) { + ULONGLONG now = GetTickCount64(); + if (now >= end) break; + if (WaitForSingleObject(hIn, (DWORD)(end - now)) != WAIT_OBJECT_0) break; + + std::string in; + if (!drainConsoleInput(hIn, in)) break; + if (in.empty()) continue; // resize/focus/mouse event: ignore, keep waiting + + if (in == "\033" || in.find('q') != std::string::npos || + in.find('Q') != std::string::npos || in.find('\x03') != std::string::npos) { + quit = true; break; + } + + long target = scroll; + target += 3 * (countOf(in, "\033[<65;") - countOf(in, "\033[<64;")); + target += countOf(in, "\033[B") - countOf(in, "\033[A"); + target += (long)rows * (countOf(in, "\033[6~") - countOf(in, "\033[5~")); + if (in.find("\033[H") != std::string::npos || in.find("\033[1~") != std::string::npos) target = 0; + if (in.find("\033[F") != std::string::npos || in.find("\033[4~") != std::string::npos) target = maxScroll; + if (target < 0) target = 0; + if (target > maxScroll) target = maxScroll; + + if (target != scroll) { scroll = target; dirty = true; break; } + } + } + + // ---- restore the normal screen ---- + std::cout << "\033[?1006l\033[?1000l\033[?7h\033[?25h\033[?1049l"; + std::cout.flush(); + if (haveIn) SetConsoleMode(hIn, oldIn); +} + +// Same full-screen viewer, but frames are streamed from ffmpeg and +// Sixel-encoded one at a time, paced to the configured fps. +static void runVideoViewer(const std::string& captured, TerminalVideo& video, + const ConfigManager& config) +{ + std::vector lines; + { + std::istringstream in(captured); + std::string ln; + while (std::getline(in, ln)) { + if (!ln.empty() && ln.back() == '\r') ln.pop_back(); + size_t k; + while ((k = ln.find("\033[K")) != std::string::npos) ln.erase(k, 3); + lines.push_back(ln); + } + while (!lines.empty() && lines.back().empty()) lines.pop_back(); + } + + bool loop = config.getNestedBool("art", "Video.loop", true); + int padUp = video.getPaddingUp(); + int padLeft = video.getPaddingLeft(); + int gapWidth = padLeft + video.getColSpan() + video.getPaddingRight(); + const ULONGLONG frameMs = (ULONGLONG)std::max(1, 1000 / std::max(1, video.getFps())); + + HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD oldIn = 0; + bool haveIn = GetConsoleMode(hIn, &oldIn) != 0; + if (haveIn) SetConsoleMode(hIn, ENABLE_VIRTUAL_TERMINAL_INPUT); + FlushConsoleInputBuffer(hIn); + + std::cout << "\033[?1049h\033[?25l\033[?7l\033[?1000h\033[?1006h\033[2J"; + std::cout.flush(); + + auto countOf = [](const std::string& s, const std::string& pat) { + long n = 0; size_t p = 0; + while ((p = s.find(pat, p)) != std::string::npos) { ++n; p += pat.size(); } + return n; + }; + + int rows = 0, cols = 0; + long scroll = 0, maxScroll = 0; + bool dirty = true, quit = false; + bool playing = true, haveFrame = false; + std::string current; + ULONGLONG nextTick = GetTickCount64(); + + while (!quit) { + CONSOLE_SCREEN_BUFFER_INFO csbi{}; + if (GetConsoleScreenBufferInfo(hOut, &csbi)) { + int r = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; + int c = csbi.srWindow.Right - csbi.srWindow.Left + 1; + if (r != rows || c != cols) { + rows = r; cols = c; dirty = true; + std::cout << "\033[2J"; + } + } + if (rows <= 0) rows = 24; + + maxScroll = (long)lines.size() - rows; + if (maxScroll < 0) maxScroll = 0; + if (scroll > maxScroll) scroll = maxScroll; + if (scroll < 0) scroll = 0; + + bool textDrawn = false; + if (dirty) { + for (int row = 0; row < rows; ++row) { + std::cout << "\033[" << (row + 1) << ';' << (gapWidth + 1) << 'H'; + size_t idx = (size_t)(scroll + row); + if (idx < lines.size()) std::cout << lines[idx]; + std::cout << "\033[0m\033[K"; + } + dirty = false; + textDrawn = true; + } + + // Fetch the next frame only when it is due, so scrolling + // doesn't speed the video up. + bool newFrame = false; + ULONGLONG now = GetTickCount64(); + if (playing && now >= nextTick) { + if (video.nextFrame(current) || + (loop && video.restart() && video.nextFrame(current))) { + haveFrame = true; + newFrame = true; + } else { + playing = false; // ended and not looping: hold last frame + } + nextTick += frameMs; + now = GetTickCount64(); + if (nextTick < now) nextTick = now; // behind: don't catch up + } + + if (haveFrame && (newFrame || textDrawn)) { + std::cout << "\033[" << (padUp + 1) << ';' << (padLeft + 1) << 'H'; + std::cout << current; + std::cout.flush(); + } + + ULONGLONG waitUntil = playing ? nextTick : now + 100; + while (!quit) { + now = GetTickCount64(); + if (now >= waitUntil) break; + if (WaitForSingleObject(hIn, (DWORD)(waitUntil - now)) != WAIT_OBJECT_0) break; + + std::string in; + if (!drainConsoleInput(hIn, in)) break; + if (in.empty()) continue; // resize/focus/mouse event: ignore, keep waiting + + if (in == "\033" || in.find('q') != std::string::npos || + in.find('Q') != std::string::npos || in.find('\x03') != std::string::npos) { + quit = true; break; + } + + long target = scroll; + target += 3 * (countOf(in, "\033[<65;") - countOf(in, "\033[<64;")); + target += countOf(in, "\033[B") - countOf(in, "\033[A"); + target += (long)rows * (countOf(in, "\033[6~") - countOf(in, "\033[5~")); + if (in.find("\033[H") != std::string::npos || in.find("\033[1~") != std::string::npos) target = 0; + if (in.find("\033[F") != std::string::npos || in.find("\033[4~") != std::string::npos) target = maxScroll; + if (target < 0) target = 0; + if (target > maxScroll) target = maxScroll; + + if (target != scroll) { scroll = target; dirty = true; break; } + } + } + + video.close(); + std::cout << "\033[?1006l\033[?1000l\033[?7h\033[?25h\033[?1049l"; + std::cout.flush(); + if (haveIn) SetConsoleMode(hIn, oldIn); +} +#endif + +#ifdef _WIN32 +// Rows between the top of the visible window and the cursor (-1 if unknown). +static int rowsAboveCursorInViewport() { + HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbi{}; + if (!GetConsoleScreenBufferInfo(h, &csbi)) return -1; + return csbi.dwCursorPosition.Y - csbi.srWindow.Top; +} +#endif // ███╗ ███╗ █████╗ ██╗███╗ ██╗ ██████╗██████╗ ██████╗ // ████╗ ████║██╔══██╗██║████╗ ██║ ██╔════╝██╔══██╗██╔══██╗ @@ -348,7 +716,7 @@ int main(){ // (self-heals from embedded EXE resource 101 if missing. // NEVER overwrites an existing user config.) - ConfigMode CONFIG_MODE = ConfigMode::ReleaseSource; // ← switch as needed, set to Production before shipping + ConfigMode CONFIG_MODE = ConfigMode::Production; // ← switch as needed, set to Production before shipping ConfigManager config(CONFIG_MODE); @@ -360,17 +728,66 @@ int main(){ // cout << u8"😄 ❤️ 🎉 🚀 ⭐ 🐱 🍕 🎮 😭 🌈\n"; - // ART / IMAGE LOADING: - // Image mode is tried first (if enabled); ASCII is the fallback, - // both for a failed image load and for anyone who hasn't opted in. + // ART LOADING, priority order: Video > GIF > Image > ASCII. + // If more than one of Gif/Image/Ascii_Art is enabled in JSON, only + // the highest-priority one that successfully loads is used — the + // others are never even attempted, matching the existing + // Image-then-ASCII fallback chain already in place below. AsciiArt art; TerminalImage image; + TerminalGif gif; + TerminalVideo video; ArtMode mode = ArtMode::NONE; + bool videoEnabled = config.getNestedBool("art", "Video.enabled", false); + bool gifEnabled = config.getNestedBool("art", "Gif.enabled", false); + + // Priority: Video > Gif > Image > ASCII + if (videoEnabled) { + video.setPadding( + config.getNestedInt("art", "Video.padding_up", 0), + config.getNestedInt("art", "Video.padding_left", 0), + config.getNestedInt("art", "Video.padding_right", 0)); + + video.setCellWidthPx(config.getNestedInt("art", "Video.cell_width_px", 0)); + video.setCellHeightPx(config.getNestedInt("art", "Video.cell_height_px", 0)); + video.setFps(config.getNestedInt("art", "Video.fps", 60)); + video.setFlipVertical(config.getNestedBool("art", "Video.flip_vertical", false)); + + bool ok = video.load( + config.getNestedString("art", "Video.video_path", ""), + config.getNestedInt("art", "Video.image_size_percentage", 100)); + + if (ok) { + mode = ArtMode::VIDEO; + } else { + cout << "Warning: video could not be loaded. Falling back.\n"; + } + } bool imageEnabled = config.getNestedBool("art", "Image.enabled", false); bool asciiEnabled = config.getNestedBool("art", "Ascii_Art.enabled", true); - if (imageEnabled) { + if (mode == ArtMode::NONE && gifEnabled) { + gif.setPadding( + config.getNestedInt("art", "Gif.padding_up", 0), + config.getNestedInt("art", "Gif.padding_left", 0), + config.getNestedInt("art", "Gif.padding_right", 0)); + + gif.setCellWidthPx(config.getNestedInt("art", "Gif.cell_width_px", 0)); + gif.setCellHeightPx(config.getNestedInt("art", "Gif.cell_height_px", 0)); + + bool ok = gif.load( + config.getNestedString("art", "Gif.gif_path", ""), + config.getNestedInt("art", "Gif.image_size_percentage", 100)); + + if (ok) { + mode = ArtMode::GIF; + } else { + cout << "Warning: GIF could not be loaded. Falling back.\n"; + } + } + + if (mode == ArtMode::NONE && imageEnabled) { image.setPadding( config.getNestedInt("art", "Image.padding_up", 0), config.getNestedInt("art", "Image.padding_left", 0), @@ -406,8 +823,20 @@ int main(){ } } - // Create LivePrinter - LivePrinter lp(art, image, mode); + // Viewer mode: only for animated GIFs, opt-in via art.Gif.viewer_mode + bool videoMode = (mode == ArtMode::VIDEO) && video.isLoaded(); + bool viewerMode = videoMode || + ((mode == ArtMode::GIF) && gif.isLoaded() && + gif.getFrameCount() > 1 && + config.getNestedBool("art", "Gif.viewer_mode", false)); + + // In viewer mode the printer lays out no art (the viewer places the GIF + // itself) and all info output is captured instead of printed. + LivePrinter lp(art, image, gif, viewerMode ? ArtMode::NONE : mode); + + std::ostringstream viewerCapture; + std::streambuf* savedCoutBuf = nullptr; + if (viewerMode) savedCoutBuf = cout.rdbuf(viewerCapture.rdbuf()); // create objects of all classes here @@ -3045,16 +3474,66 @@ for (const auto& key : config.getLayoutOrder()) { + if (viewerMode) { + cout.rdbuf(savedCoutBuf); // stop capturing + if (videoMode) runVideoViewer(viewerCapture.str(), video, config); + else runGifViewer(viewerCapture.str(), gif, config); + return 0; + } // Print remaining ASCII art lines (if art is taller than info) lp.finish(); cout << endl; + // GIF ANIMATION LOOP — only runs when GIF mode actually won the + // priority fallback above and has more than a single frame. Does + // not touch anything printed by the info sections; it only redraws + // the same reserved image block repeatedly, using the same relative + // DECSC/hop/DECRC trick drawGifFrame0IfDue() already used once. + if (mode == ArtMode::GIF && gif.isLoaded() && gif.getFrameCount() > 1) { + bool loop = config.getNestedBool("art", "Gif.loop", true); + double speedMultiplier = 1.0; + { + // getNestedInt truncates to int; pull the raw JSON value as + // a string path fallback would be overkill here — a plain + // double isn't exposed by ConfigManager, so we read it as + // an int-friendly approximation via two int reads is wrong + // for e.g. 0.5. Simplest safe option: treat the configured + // value as a string and parse it, falling back to 1.0. + std::string raw = config.getNestedString("art", "Gif.speed_multiplier", "1.0"); + try { speedMultiplier = std::stod(raw); } catch (...) { speedMultiplier = 1.0; } + if (speedMultiplier <= 0.0) speedMultiplier = 1.0; + } - - - + int maxFrames = config.getNestedInt("art", "Gif.max_frames", 0); + size_t frameLimit = (maxFrames > 0) + ? std::min((size_t)maxFrames, gif.getFrameCount()) + : gif.getFrameCount(); + + int hopAmount = lp.getCursorRow() + 1 - gif.getPaddingUp(); + int leftPad = gif.getPaddingLeft(); + + // Animate only if the GIF block is still on screen. Otherwise keep + // the static frame 0 (same as fastfetch's static logo). + int reachable = rowsAboveCursorInViewport(); + bool fits = (hopAmount > 0) && (reachable < 0 || hopAmount <= reachable); + + if (fits) do { + for (size_t f = 0; f < frameLimit; ++f) { + std::cout << "\0337"; + if (hopAmount > 0) std::cout << "\033[" << hopAmount << "A\r"; + if (leftPad > 0) std::cout << std::string(leftPad, ' '); + gif.drawFrame(f); + std::cout << "\0338"; + std::cout.flush(); + + int delay = (int)(gif.getFrameDelayMs(f) / speedMultiplier); + if (delay < 1) delay = 1; + Sleep((DWORD)delay); + } + } while (loop); + } return 0; } diff --git a/src/BinaryFetch/cpp/windows/core/AsciiArt.cpp b/src/BinaryFetch/cpp/windows/core/AsciiArt.cpp index cc6e052..70b51e7 100644 --- a/src/BinaryFetch/cpp/windows/core/AsciiArt.cpp +++ b/src/BinaryFetch/cpp/windows/core/AsciiArt.cpp @@ -266,27 +266,27 @@ This exact ascii art will be pasted on the "C:\Users\Public\BinaryFetch\BinaryAr BinaryFetch will load it from "C:\Users\Public\BinaryFetch\BinaryArt.txt" */ static const std::string kDefaultAsciiArt = -R"ASCIIART($1##################### $15 <<<<<<<<<<<<<<<<<<<< -$1##################### $15 <<<<<<<<<<<<<<<<<<<< -$1##################### $15 <<<<<<<<<<<<<<<<<<<< -$1##################### $15 <<<<<<<<<<<<<<<<<<<< -$1##################### $15 <<<<<<<<<<<<<<<<<<<< -$1##################### $15 <<<<<<<<<<<<<<<<<<<< -$1##################### $15 <<<<<<<<<<<<<<<<<<<< -$1##################### $15 <<<<<<<<<<<<<<<<<<<< -$1##################### $15 <<<<<<<<<<<<<<<<<<<< -$1##################### $15 <<<<<<<<<<<<<<<<<<<< - ->>>>>>>>>>>>>>>>>>>>> $1 ###################### ->>>>>>>>>>>>>>>>>>>>> $1 ###################### ->>>>>>>>>>>>>>>>>>>>> $1 ###################### ->>>>>>>>>>>>>>>>>>>>> $1 ###################### ->>>>>>>>>>>>>>>>>>>>> $1 ###################### ->>>>>>>>>>>>>>>>>>>>> $1 ###################### ->>>>>>>>>>>>>>>>>>>>> $1 ###################### ->>>>>>>>>>>>>>>>>>>>> $1 ###################### ->>>>>>>>>>>>>>>>>>>>> $1 ###################### ->>>>>>>>>>>>>>>>>>>>> $1 ###################### +R"ASCIIART($1##################### $15 <<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<< +$1##################### $15 <<<<<<<<<<<<<<<<<<<<< + +>>>>>>>>>>>>>>>>>>>>> $1 ##################### +>>>>>>>>>>>>>>>>>>>>> $1 ##################### +>>>>>>>>>>>>>>>>>>>>> $1 ##################### +>>>>>>>>>>>>>>>>>>>>> $1 ##################### +>>>>>>>>>>>>>>>>>>>>> $1 ##################### +>>>>>>>>>>>>>>>>>>>>> $1 ##################### +>>>>>>>>>>>>>>>>>>>>> $1 ##################### +>>>>>>>>>>>>>>>>>>>>> $1 ##################### +>>>>>>>>>>>>>>>>>>>>> $1 ##################### +>>>>>>>>>>>>>>>>>>>>> $1 ##################### )ASCIIART"; // ---------------- Utility Functions ---------------- diff --git a/src/BinaryFetch/cpp/windows/core/Gif.cpp b/src/BinaryFetch/cpp/windows/core/Gif.cpp new file mode 100644 index 0000000..b414f45 --- /dev/null +++ b/src/BinaryFetch/cpp/windows/core/Gif.cpp @@ -0,0 +1,348 @@ +// Gif.cpp +// Windows-only. Mirrors Image.cpp's private Sixel-encoding internals +// (duplicated here, not shared) so Image.cpp/Image.h remain untouched. + +#include "Gif.h" +#include "stb_image.h" // STB_IMAGE_IMPLEMENTATION already defined in Image.cpp + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include + +TerminalGif::TerminalGif() + : rowSpan(0), colSpan(0), + paddingUp(0), paddingLeft(0), paddingRight(0), + cellHeightPx(0), cellWidthPx(0), loaded(false) {} + +void TerminalGif::setPadding(int up, int left, int right) { + paddingUp = up; paddingLeft = left; paddingRight = right; +} +int TerminalGif::getPaddingUp() const { return paddingUp; } +int TerminalGif::getPaddingLeft() const { return paddingLeft; } +int TerminalGif::getPaddingRight() const { return paddingRight; } +int TerminalGif::getRowSpan() const { return rowSpan; } +int TerminalGif::getColSpan() const { return colSpan; } +bool TerminalGif::isLoaded() const { return loaded; } +size_t TerminalGif::getFrameCount() const { return frameEncoded.size(); } + +void TerminalGif::setCellHeightPx(int px) { cellHeightPx = px; } +int TerminalGif::getCellHeightPx() const { return cellHeightPx; } +void TerminalGif::setCellWidthPx(int px) { cellWidthPx = px; } +int TerminalGif::getCellWidthPx() const { return cellWidthPx; } + +int TerminalGif::getFrameDelayMs(size_t index) const { + if (index >= frameDelaysMs.size()) return 100; // sane default + int d = frameDelaysMs[index]; + return (d > 0) ? d : 100; // some GIFs encode 0ms delays; treat as 100ms +} + +namespace { + +constexpr int PALETTE_SIZE = 256; +constexpr uint8_t ALPHA_THRESHOLD = 128; + +struct RGB { uint8_t r, g, b; }; + +bool queryCellSizeFromTerminalGif(int& outW, int& outH) { + HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + if (hIn == INVALID_HANDLE_VALUE || hOut == INVALID_HANDLE_VALUE) return false; + if (hIn == nullptr || hOut == nullptr) return false; + + DWORD oldMode = 0; + if (!GetConsoleMode(hIn, &oldMode)) return false; + + SetConsoleMode(hIn, ENABLE_VIRTUAL_TERMINAL_INPUT); + FlushConsoleInputBuffer(hIn); + + const char* query = "\033[16t"; + DWORD written = 0; + BOOL wrote = WriteFile(hOut, query, (DWORD)strlen(query), &written, nullptr); + + std::string response; + if (wrote) { + char buf[64]; + for (int tries = 0; tries < 10; ++tries) { + if (WaitForSingleObject(hIn, 20) != WAIT_OBJECT_0) { + if (!response.empty()) break; + continue; + } + DWORD read = 0; + if (!ReadFile(hIn, buf, sizeof(buf) - 1, &read, nullptr) || read == 0) break; + buf[read] = '\0'; + response += buf; + if (response.find('t') != std::string::npos) break; + } + } + + SetConsoleMode(hIn, oldMode); + + int h = 0, w = 0; + size_t pos = response.find("[6;"); + if (pos != std::string::npos && + sscanf(response.c_str() + pos, "[6;%d;%dt", &h, &w) == 2 && + h > 0 && w > 0) { + outW = w; + outH = h; + return true; + } + return false; +} + +COORD getTerminalCellSizeGif() { + int qw = 0, qh = 0; + if (queryCellSizeFromTerminalGif(qw, qh) && + qw >= 4 && qw <= 64 && qh >= 8 && qh <= 128) { + return { (SHORT)qw, (SHORT)qh }; + } + + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_FONT_INFOEX fi{}; + fi.cbSize = sizeof(fi); + if (GetCurrentConsoleFontEx(hOut, FALSE, &fi)) { + int w = fi.dwFontSize.X, h = fi.dwFontSize.Y; + if (w >= 4 && w <= 64 && h >= 8 && h <= 128) return { (SHORT)w, (SHORT)h }; + } + return { 8, 16 }; +} + +std::array createPalette() { + std::array palette{}; + int index = 0; + for (int r = 0; r < 6; ++r) + for (int g = 0; g < 6; ++g) + for (int b = 0; b < 6; ++b) + palette[index++] = { (uint8_t)(r * 51), (uint8_t)(g * 51), (uint8_t)(b * 51) }; + for (int i = 216; i < 256; ++i) { + int gray = static_cast(((i - 216) * 255.0) / 39.0); + palette[i] = { (uint8_t)gray, (uint8_t)gray, (uint8_t)gray }; + } + return palette; +} + +inline int colorDistance(const RGB& a, const RGB& b) { + int dr = (int)a.r - b.r, dg = (int)a.g - b.g, db = (int)a.b - b.b; + return dr * dr + dg * dg + db * db; +} + +std::vector buildColorLookup(const std::array& palette) { + constexpr int SIZE = 32; + std::vector lookup(SIZE * SIZE * SIZE); + for (int r = 0; r < SIZE; ++r) + for (int g = 0; g < SIZE; ++g) + for (int b = 0; b < SIZE; ++b) { + RGB color{ (uint8_t)(r * 255 / 31), (uint8_t)(g * 255 / 31), (uint8_t)(b * 255 / 31) }; + int bestIndex = 0, bestDistance = INT32_MAX; + for (int p = 0; p < PALETTE_SIZE; ++p) { + int d = colorDistance(color, palette[p]); + if (d < bestDistance) { bestDistance = d; bestIndex = p; } + } + lookup[(r * SIZE * SIZE) + (g * SIZE) + b] = (uint8_t)bestIndex; + } + return lookup; +} + +const std::array& getSharedPaletteGif() { + static const std::array palette = createPalette(); + return palette; +} +const std::vector& getSharedLookupGif() { + static const std::vector lookup = buildColorLookup(getSharedPaletteGif()); + return lookup; +} + +inline uint8_t getPaletteIndex(uint8_t r, uint8_t g, uint8_t b, const std::vector& lookup) { + int rr = r >> 3, gg = g >> 3, bb = b >> 3; + return lookup[(rr * 32 * 32) + (gg * 32) + bb]; +} + +void writePalette(std::ostringstream& out, const std::array& palette) { + for (int i = 0; i < PALETTE_SIZE; ++i) { + const RGB& c = palette[i]; + out << '#' << i << ";2;" << (c.r * 100 / 255) << ';' << (c.g * 100 / 255) << ';' << (c.b * 100 / 255); + } +} + +inline void writeRun(std::ostringstream& out, char value, int count) { + if (count <= 0) return; + if (count >= 4) out << '!' << count << value; + else for (int i = 0; i < count; ++i) out << value; +} + +void encodeBand(std::ostringstream& out, + const std::vector& indexed, + const std::vector& opaque, + int width, int height, int startY) { + const int bandHeight = std::min(6, height - startY); + std::vector masks((size_t)PALETTE_SIZE * width, 0); + std::array used{}; + + for (int x = 0; x < width; ++x) { + for (int dy = 0; dy < bandHeight; ++dy) { + int y = startY + dy; + size_t idx = (size_t)y * width + x; + if (!opaque[idx]) continue; + uint8_t color = indexed[idx]; + masks[(size_t)color * width + x] |= (uint8_t)(1 << dy); + used[color] = true; + } + } + + for (int color = 0; color < PALETTE_SIZE; ++color) { + if (!used[color]) continue; + out << '#' << color; + const uint8_t* row = masks.data() + (size_t)color * width; + + int first = 0; + while (first < width && row[first] == 0) ++first; + int last = width - 1; + while (last >= first && row[last] == 0) --last; + if (first > last) continue; + + if (first > 0) writeRun(out, '?', first); + int x = first; + while (x <= last) { + char sixel = (char)(63 + row[x]); + int runLength = 1; + while (x + runLength <= last && row[x + runLength] == row[x]) ++runLength; + writeRun(out, sixel, runLength); + x += runLength; + } + out << '$'; + } + out << '-'; +} + +bool encodeOneFrame(const unsigned char* pixels, int width, int height, std::string& outEncoded) { + if (!pixels || width <= 0 || height <= 0) return false; + + const auto& palette = getSharedPaletteGif(); + const auto& lookup = getSharedLookupGif(); + + std::vector indexed((size_t)width * height, 0); + std::vector opaque ((size_t)width * height, 0); + for (int y = 0; y < height; ++y) { + const unsigned char* row = pixels + (size_t)y * width * 4; + for (int x = 0; x < width; ++x) { + const unsigned char* p = row + (size_t)x * 4; + if (p[3] < ALPHA_THRESHOLD) continue; + indexed[(size_t)y * width + x] = getPaletteIndex(p[0], p[1], p[2], lookup); + opaque [(size_t)y * width + x] = 1; + } + } + + std::ostringstream out; + out << "\033P0;1;0q"; + out << '"' << "1;1;" << width << ';' << height; + writePalette(out, palette); + for (int y = 0; y < height; y += 6) + encodeBand(out, indexed, opaque, width, height, y); + out << "\033\\"; + + outEncoded = out.str(); + return true; +} + +std::vector scaleFrame(const unsigned char* src, int srcW, int srcH, + int dstW, int dstH) { + std::vector dst((size_t)dstW * dstH * 4); + for (int y = 0; y < dstH; ++y) { + int srcY = y * srcH / dstH; + for (int x = 0; x < dstW; ++x) { + int srcX = x * srcW / dstW; + const unsigned char* s = src + ((size_t)srcY * srcW + srcX) * 4; + unsigned char* d = dst.data() + ((size_t)y * dstW + x) * 4; + d[0] = s[0]; d[1] = s[1]; d[2] = s[2]; d[3] = s[3]; + } + } + return dst; +} + +} // anonymous namespace + +bool TerminalGif::load(const std::string& path, int sizePercent) { + loaded = false; + frameEncoded.clear(); + frameDelaysMs.clear(); + + std::ifstream file(path, std::ios::binary); + if (!file.is_open()) { + std::cerr << "Warning: could not open GIF: " << path << "\n"; + return false; + } + std::vector buffer((std::istreambuf_iterator(file)), + std::istreambuf_iterator()); + if (buffer.empty()) return false; + + int width = 0, height = 0, frameCount = 0, channels = 0; + int* delays = nullptr; + + unsigned char* pixels = stbi_load_gif_from_memory( + buffer.data(), (int)buffer.size(), + &delays, &width, &height, &frameCount, &channels, 4); + + if (!pixels || frameCount <= 0) { + std::cerr << "Warning: could not decode GIF: " << path + << " (" << stbi_failure_reason() << ")\n"; + if (pixels) stbi_image_free(pixels); + if (delays) free(delays); + return false; + } + + int targetW = width, targetH = height; + if (sizePercent > 0 && sizePercent != 100) { + targetW = std::max(1, static_cast(width * (sizePercent / 100.0))); + targetH = std::max(1, static_cast(height * (sizePercent / 100.0))); + } + + const size_t frameBytes = (size_t)width * height * 4; + frameEncoded.reserve(frameCount); + frameDelaysMs.reserve(frameCount); + + for (int f = 0; f < frameCount; ++f) { + const unsigned char* framePtr = pixels + (size_t)f * frameBytes; + std::string encoded; + + if (targetW != width || targetH != height) { + std::vector scaled = scaleFrame(framePtr, width, height, targetW, targetH); + encodeOneFrame(scaled.data(), targetW, targetH, encoded); + } else { + encodeOneFrame(framePtr, width, height, encoded); + } + + frameEncoded.push_back(std::move(encoded)); + frameDelaysMs.push_back(delays[f]); + } + + stbi_image_free(pixels); + free(delays); + + COORD cell = getTerminalCellSizeGif(); + int effectiveCellW = (cellWidthPx > 0) ? cellWidthPx : cell.X; + if (effectiveCellW <= 0) effectiveCellW = 8; + colSpan = (targetW + effectiveCellW - 1) / effectiveCellW; + + int effectiveCellH = (cellHeightPx > 0) ? cellHeightPx : cell.Y; + if (effectiveCellH <= 0) effectiveCellH = 16; + rowSpan = (targetH + effectiveCellH - 1) / effectiveCellH; + + loaded = !frameEncoded.empty(); + return loaded; +} + +void TerminalGif::drawFrame(size_t index) const { + if (!loaded || index >= frameEncoded.size()) return; + std::cout << frameEncoded[index]; + std::cout.flush(); +} \ No newline at end of file diff --git a/src/BinaryFetch/cpp/windows/core/Image.cpp b/src/BinaryFetch/cpp/windows/core/Image.cpp index b7c6e51..c3b67c7 100644 --- a/src/BinaryFetch/cpp/windows/core/Image.cpp +++ b/src/BinaryFetch/cpp/windows/core/Image.cpp @@ -222,18 +222,18 @@ COORD getTerminalCellSize() { return { 8, 16 }; } -// ---- 256-color palette: 6x6x6 cube + 40 grayscale steps ---- +// ---- 6x7x6 = 252-colour cube, used with ordered dithering ---- +// Green gets the extra level because the eye is most sensitive to it. +// Index = (r * 7 + g) * 6 + b. The last 4 entries are unused. std::array createPalette() { std::array palette{}; int index = 0; for (int r = 0; r < 6; ++r) - for (int g = 0; g < 6; ++g) + for (int g = 0; g < 7; ++g) for (int b = 0; b < 6; ++b) - palette[index++] = { (uint8_t)(r * 51), (uint8_t)(g * 51), (uint8_t)(b * 51) }; - for (int i = 216; i < 256; ++i) { - int gray = static_cast(((i - 216) * 255.0) / 39.0); - palette[i] = { (uint8_t)gray, (uint8_t)gray, (uint8_t)gray }; - } + palette[index++] = { (uint8_t)(r * 255 / 5), + (uint8_t)(g * 255 / 6), + (uint8_t)(b * 255 / 5) }; return palette; } @@ -394,7 +394,20 @@ bool encodePixelsForTerminal(const unsigned char* pixels, int width, int height, if (!pixels || width <= 0 || height <= 0) return false; const auto& palette = getSharedPalette(); - const auto& lookup = getSharedLookup(); + + // 8x8 ordered (Bayer) dithering against the 6x7x6 cube. + // DITHER: 1.0 = full strength, 0.0 = off (plain rounding, banding returns). + constexpr float DITHER = 1.0f; + static const uint8_t bayer[64] = { + 0, 32, 8, 40, 2, 34, 10, 42, + 48, 16, 56, 24, 50, 18, 58, 26, + 12, 44, 4, 36, 14, 46, 6, 38, + 60, 28, 52, 20, 62, 30, 54, 22, + 3, 35, 11, 43, 1, 33, 9, 41, + 51, 19, 59, 27, 49, 17, 57, 25, + 15, 47, 7, 39, 13, 45, 5, 37, + 63, 31, 55, 23, 61, 29, 53, 21 + }; std::vector indexed((size_t)width * height, 0); std::vector opaque ((size_t)width * height, 0); @@ -403,7 +416,11 @@ bool encodePixelsForTerminal(const unsigned char* pixels, int width, int height, for (int x = 0; x < width; ++x) { const unsigned char* p = row + (size_t)x * 4; if (p[3] < ALPHA_THRESHOLD) continue; // leave transparent - indexed[(size_t)y * width + x] = getPaletteIndex(p[0], p[1], p[2], lookup); + float t = 0.5f + (((bayer[((y & 7) << 3) | (x & 7)] + 0.5f) / 64.0f) - 0.5f) * DITHER; + int r = std::min(5, (int)(p[0] * (5.0f / 255.0f) + t)); + int g = std::min(6, (int)(p[1] * (6.0f / 255.0f) + t)); + int b = std::min(5, (int)(p[2] * (5.0f / 255.0f) + t)); + indexed[(size_t)y * width + x] = (uint8_t)((r * 7 + g) * 6 + b); opaque [(size_t)y * width + x] = 1; } } diff --git a/src/BinaryFetch/cpp/windows/core/Video.cpp b/src/BinaryFetch/cpp/windows/core/Video.cpp new file mode 100644 index 0000000..5707d9c --- /dev/null +++ b/src/BinaryFetch/cpp/windows/core/Video.cpp @@ -0,0 +1,570 @@ +// Video.cpp +// Windows-only. Windows Media Foundation source reader -> scale -> Sixel. + +#include "Video.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include +#include +#include +#include +#include +#include + +#pragma comment(lib, "mfplat.lib") +#pragma comment(lib, "mfreadwrite.lib") +#pragma comment(lib, "mfuuid.lib") +#pragma comment(lib, "ole32.lib") + +using Microsoft::WRL::ComPtr; + +namespace { + +constexpr int PALETTE_SIZE = 256; +struct RGB { uint8_t r, g, b; }; + +// cell size: ask the terminal (CSI 16 t), fall back to Win32 +bool queryCellSizeFromTerminalVideo(int& outW, int& outH) { + HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + if (hIn == INVALID_HANDLE_VALUE || hOut == INVALID_HANDLE_VALUE) return false; + if (hIn == nullptr || hOut == nullptr) return false; + + DWORD oldMode = 0; + if (!GetConsoleMode(hIn, &oldMode)) return false; + SetConsoleMode(hIn, ENABLE_VIRTUAL_TERMINAL_INPUT); + FlushConsoleInputBuffer(hIn); + + const char* query = "\033[16t"; + DWORD written = 0; + BOOL wrote = WriteFile(hOut, query, (DWORD)strlen(query), &written, nullptr); + + std::string response; + if (wrote) { + char buf[64]; + for (int tries = 0; tries < 10; ++tries) { + if (WaitForSingleObject(hIn, 20) != WAIT_OBJECT_0) { + if (!response.empty()) break; + continue; + } + DWORD read = 0; + if (!ReadFile(hIn, buf, sizeof(buf) - 1, &read, nullptr) || read == 0) break; + buf[read] = '\0'; + response += buf; + if (response.find('t') != std::string::npos) break; + } + } + SetConsoleMode(hIn, oldMode); + + int h = 0, w = 0; + size_t pos = response.find("[6;"); + if (pos != std::string::npos && + sscanf(response.c_str() + pos, "[6;%d;%dt", &h, &w) == 2 && h > 0 && w > 0) { + outW = w; outH = h; + return true; + } + return false; +} + +COORD getTerminalCellSizeVideo() { + int qw = 0, qh = 0; + if (queryCellSizeFromTerminalVideo(qw, qh) && + qw >= 4 && qw <= 64 && qh >= 8 && qh <= 128) { + return { (SHORT)qw, (SHORT)qh }; + } + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_FONT_INFOEX fi{}; + fi.cbSize = sizeof(fi); + if (GetCurrentConsoleFontEx(hOut, FALSE, &fi)) { + int w = fi.dwFontSize.X, h = fi.dwFontSize.Y; + if (w >= 4 && w <= 64 && h >= 8 && h <= 128) return { (SHORT)w, (SHORT)h }; + } + return { 8, 16 }; +} + +// 6 x 7 x 6 = 252-colour cube (green gets the extra level because the eye +// is most sensitive to it). Index = (r * 7 + g) * 6 + b. The last 4 entries +// are unused. No separate gray ramp: dithering handles grays fine, and a +// mixed palette would make the dither noisy on gray areas. +std::array createPalette() { + std::array palette{}; + int index = 0; + for (int r = 0; r < 6; ++r) + for (int g = 0; g < 7; ++g) + for (int b = 0; b < 6; ++b) + palette[index++] = { (uint8_t)(r * 255 / 5), + (uint8_t)(g * 255 / 6), + (uint8_t)(b * 255 / 5) }; + return palette; +} + +inline int colorDistance(const RGB& a, const RGB& b) { + int dr = (int)a.r - b.r, dg = (int)a.g - b.g, db = (int)a.b - b.b; + return dr * dr + dg * dg + db * db; +} + +std::vector buildColorLookup(const std::array& palette) { + constexpr int SIZE = 32; + std::vector lookup(SIZE * SIZE * SIZE); + for (int r = 0; r < SIZE; ++r) + for (int g = 0; g < SIZE; ++g) + for (int b = 0; b < SIZE; ++b) { + RGB color{ (uint8_t)(r * 255 / 31), (uint8_t)(g * 255 / 31), (uint8_t)(b * 255 / 31) }; + int bestIndex = 0, bestDistance = INT32_MAX; + for (int p = 0; p < PALETTE_SIZE; ++p) { + int d = colorDistance(color, palette[p]); + if (d < bestDistance) { bestDistance = d; bestIndex = p; } + } + lookup[(r * SIZE * SIZE) + (g * SIZE) + b] = (uint8_t)bestIndex; + } + return lookup; +} + +const std::array& getSharedPalette() { + static const std::array palette = createPalette(); + return palette; +} +const std::vector& getSharedLookup() { + static const std::vector lookup = buildColorLookup(getSharedPalette()); + return lookup; +} + +inline uint8_t getPaletteIndex(uint8_t r, uint8_t g, uint8_t b, const std::vector& lookup) { + return lookup[((r >> 3) * 32 * 32) + ((g >> 3) * 32) + (b >> 3)]; +} + +void writePalette(std::ostringstream& out, const std::array& palette) { + for (int i = 0; i < PALETTE_SIZE; ++i) { + const RGB& c = palette[i]; + out << '#' << i << ";2;" << (c.r * 100 / 255) << ';' << (c.g * 100 / 255) << ';' << (c.b * 100 / 255); + } +} + +inline void writeRun(std::ostringstream& out, char value, int count) { + if (count <= 0) return; + if (count >= 4) out << '!' << count << value; + else for (int i = 0; i < count; ++i) out << value; +} + +void encodeBand(std::ostringstream& out, const std::vector& indexed, + int width, int height, int startY) { + const int bandHeight = std::min(6, height - startY); + std::vector masks((size_t)PALETTE_SIZE * width, 0); + std::array used{}; + + for (int x = 0; x < width; ++x) { + for (int dy = 0; dy < bandHeight; ++dy) { + uint8_t color = indexed[(size_t)(startY + dy) * width + x]; + masks[(size_t)color * width + x] |= (uint8_t)(1 << dy); + used[color] = true; + } + } + + for (int color = 0; color < PALETTE_SIZE; ++color) { + if (!used[color]) continue; + out << '#' << color; + const uint8_t* row = masks.data() + (size_t)color * width; + + int first = 0; + while (first < width && row[first] == 0) ++first; + int last = width - 1; + while (last >= first && row[last] == 0) --last; + if (first > last) continue; + + if (first > 0) writeRun(out, '?', first); + int x = first; + while (x <= last) { + char sixel = (char)(63 + row[x]); + int runLength = 1; + while (x + runLength <= last && row[x + runLength] == row[x]) ++runLength; + writeRun(out, sixel, runLength); + x += runLength; + } + out << '$'; + } + out << '-'; +} + +bool encodeFrame(const unsigned char* pixels, int width, int height, std::string& outEncoded) { + if (!pixels || width <= 0 || height <= 0) return false; + const auto& palette = getSharedPalette(); + + // 8x8 ordered (Bayer) dithering against the 6x7x6 cube. The pattern is + // fixed to screen position, so it doesn't shimmer between video frames. + // DITHER: 1.0 = full strength, 0.0 = off (plain rounding, banding returns). + constexpr float DITHER = 1.0f; + static const uint8_t bayer[64] = { + 0, 32, 8, 40, 2, 34, 10, 42, + 48, 16, 56, 24, 50, 18, 58, 26, + 12, 44, 4, 36, 14, 46, 6, 38, + 60, 28, 52, 20, 62, 30, 54, 22, + 3, 35, 11, 43, 1, 33, 9, 41, + 51, 19, 59, 27, 49, 17, 57, 25, + 15, 47, 7, 39, 13, 45, 5, 37, + 63, 31, 55, 23, 61, 29, 53, 21 + }; + + std::vector indexed((size_t)width * height); + for (int y = 0; y < height; ++y) { + const unsigned char* row = pixels + (size_t)y * width * 4; + for (int x = 0; x < width; ++x) { + const unsigned char* p = row + (size_t)x * 4; + float t = 0.5f + (((bayer[((y & 7) << 3) | (x & 7)] + 0.5f) / 64.0f) - 0.5f) * DITHER; + int r = std::min(5, (int)(p[0] * (5.0f / 255.0f) + t)); + int g = std::min(6, (int)(p[1] * (6.0f / 255.0f) + t)); + int b = std::min(5, (int)(p[2] * (5.0f / 255.0f) + t)); + indexed[(size_t)y * width + x] = (uint8_t)((r * 7 + g) * 6 + b); + } + } + + std::ostringstream out; + out << "\033P0;1;0q"; + out << '"' << "1;1;" << width << ';' << height; + writePalette(out, palette); + for (int y = 0; y < height; y += 6) + encodeBand(out, indexed, width, height, y); + out << "\033\\"; + + outEncoded = out.str(); + return true; +} + +} // anonymous namespace + +// Media Foundation state (private to this file) + +struct TerminalVideo::MFState { + ComPtr reader; + bool mfStarted = false; + bool comInited = false; + int srcW = 0, srcH = 0; + LONG stride = 0; // bytes per row; negative = bottom-up in memory + double nativeFps = 0.0; + LONGLONG targetTime = 0; // 100 ns units + bool needAnchor = true; + HRESULT lastHr = S_OK; + std::vector xmap; // dest x -> source x + + // Visible picture area inside the decoded frame (see computeCrop). + int cropX = 0, cropY = 0, cropW = 0, cropH = 0; + + // Fade-in from black on launch. fadeInMs = 0 turns it off. + // framesShown is reset in load() but NOT in restart(), so looping the + // video never fades again. + int fadeInMs = 800; + int fadeFrames = 0; + int framesShown = 0; + + // Decoders pad frames to block sizes; the padding can hold garbage that + // shows up as a green line. Use the display aperture if the decoder gives + // one, then also stay EDGE_TRIM pixels away from the right/bottom edge. + // Set EDGE_TRIM to 0 to disable the extra margin. + void computeCrop(IMFMediaType* t) { + cropX = 0; cropY = 0; cropW = srcW; cropH = srcH; + MFVideoArea area{}; + if (SUCCEEDED(t->GetBlob(MF_MT_MINIMUM_DISPLAY_APERTURE, + reinterpret_cast(&area), sizeof(area), nullptr))) { + int x = (int)area.OffsetX.value, y = (int)area.OffsetY.value; + int w = (int)area.Area.cx, h = (int)area.Area.cy; + if (w > 0 && h > 0 && x >= 0 && y >= 0 && x + w <= srcW && y + h <= srcH) { + cropX = x; cropY = y; cropW = w; cropH = h; + } + } + constexpr int EDGE_TRIM = 2; + if (cropW > EDGE_TRIM * 4) cropW -= EDGE_TRIM; + if (cropH > EDGE_TRIM * 4) cropH -= EDGE_TRIM; + } + + // Re-reads frame size and stride from the reader's current output type. + bool refresh() { + ComPtr t; + if (FAILED(reader->GetCurrentMediaType(MF_SOURCE_READER_FIRST_VIDEO_STREAM, &t))) return false; + UINT32 w = 0, h = 0; + if (FAILED(MFGetAttributeSize(t.Get(), MF_MT_FRAME_SIZE, &w, &h)) || w == 0 || h == 0) return false; + UINT32 st = 0; + LONG s = SUCCEEDED(t->GetUINT32(MF_MT_DEFAULT_STRIDE, &st)) ? (LONG)st : (LONG)(w * 4); + if (s == 0) s = (LONG)(w * 4); + srcW = (int)w; srcH = (int)h; stride = s; + computeCrop(t.Get()); + return true; + } +}; + +// TerminalVideo + +TerminalVideo::TerminalVideo() + : rowSpan(0), colSpan(0), paddingUp(0), paddingLeft(0), paddingRight(0), + cellHeightPx(0), cellWidthPx(0), fps(15), outW(0), outH(0), + loaded(false), flipVertical(false), mf(new MFState()) {} + +TerminalVideo::~TerminalVideo() { + close(); + if (mf->mfStarted) MFShutdown(); + if (mf->comInited) CoUninitialize(); + delete mf; +} + +void TerminalVideo::setPadding(int up, int left, int right) { + paddingUp = up; paddingLeft = left; paddingRight = right; +} +int TerminalVideo::getPaddingUp() const { return paddingUp; } +int TerminalVideo::getPaddingLeft() const { return paddingLeft; } +int TerminalVideo::getPaddingRight() const { return paddingRight; } +int TerminalVideo::getRowSpan() const { return rowSpan; } +int TerminalVideo::getColSpan() const { return colSpan; } +bool TerminalVideo::isLoaded() const { return loaded; } +void TerminalVideo::setCellHeightPx(int px) { cellHeightPx = px; } +void TerminalVideo::setCellWidthPx(int px) { cellWidthPx = px; } +void TerminalVideo::setFps(int f) { fps = std::clamp(f, 1, 60); } +int TerminalVideo::getFps() const { return fps; } +void TerminalVideo::setFlipVertical(bool f) { flipVertical = f; } +void TerminalVideo::setFadeInMs(int ms) { mf->fadeInMs = std::clamp(ms, 0, 5000); } + +void TerminalVideo::close() { + mf->reader.Reset(); +} + +bool TerminalVideo::openReader() { + mf->reader.Reset(); + + int n = MultiByteToWideChar(CP_UTF8, 0, videoPath.c_str(), -1, nullptr, 0); + if (n <= 0) { mf->lastHr = E_INVALIDARG; return false; } + std::wstring wpath((size_t)n, L'\0'); + MultiByteToWideChar(CP_UTF8, 0, videoPath.c_str(), -1, &wpath[0], n); + + HRESULT hr; + ComPtr attrs; + hr = MFCreateAttributes(&attrs, 1); + if (FAILED(hr)) { mf->lastHr = hr; return false; } + attrs->SetUINT32(MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING, TRUE); + + ComPtr reader; + hr = MFCreateSourceReaderFromURL(wpath.c_str(), attrs.Get(), &reader); + if (FAILED(hr)) { mf->lastHr = hr; return false; } + + // Video only: audio streams are never selected, so never decoded. + reader->SetStreamSelection(MF_SOURCE_READER_ALL_STREAMS, FALSE); + hr = reader->SetStreamSelection(MF_SOURCE_READER_FIRST_VIDEO_STREAM, TRUE); + if (FAILED(hr)) { mf->lastHr = hr; return false; } + + ComPtr want; + hr = MFCreateMediaType(&want); + if (FAILED(hr)) { mf->lastHr = hr; return false; } + want->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video); + want->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_RGB32); + hr = reader->SetCurrentMediaType(MF_SOURCE_READER_FIRST_VIDEO_STREAM, nullptr, want.Get()); + if (FAILED(hr)) { mf->lastHr = hr; return false; } + + ComPtr got; + hr = reader->GetCurrentMediaType(MF_SOURCE_READER_FIRST_VIDEO_STREAM, &got); + if (FAILED(hr)) { mf->lastHr = hr; return false; } + + UINT32 w = 0, h = 0; + hr = MFGetAttributeSize(got.Get(), MF_MT_FRAME_SIZE, &w, &h); + if (FAILED(hr) || w == 0 || h == 0) { mf->lastHr = FAILED(hr) ? hr : E_FAIL; return false; } + + UINT32 st = 0; + LONG stride = SUCCEEDED(got->GetUINT32(MF_MT_DEFAULT_STRIDE, &st)) ? (LONG)st : (LONG)(w * 4); + if (stride == 0) stride = (LONG)(w * 4); + + UINT32 num = 0, den = 0; + double nativeFps = 0.0; + if (SUCCEEDED(MFGetAttributeRatio(got.Get(), MF_MT_FRAME_RATE, &num, &den)) && den != 0) + nativeFps = (double)num / (double)den; + + mf->reader = reader; + mf->srcW = (int)w; + mf->srcH = (int)h; + mf->stride = stride; + mf->nativeFps = nativeFps; + mf->targetTime = 0; + mf->needAnchor = true; + mf->computeCrop(got.Get()); + return true; +} + +bool TerminalVideo::load(const std::string& path, int sizePercent) { + loaded = false; + close(); + videoPath = path; + + if (!mf->mfStarted) { + HRESULT hrc = CoInitializeEx(nullptr, COINIT_MULTITHREADED); + mf->comInited = SUCCEEDED(hrc); // RPC_E_CHANGED_MODE: COM already up, fine + HRESULT hr = MFStartup(MF_VERSION); + if (FAILED(hr)) { + std::cerr << "Warning: Media Foundation could not start (0x" + << std::hex << (unsigned long)hr << std::dec << ").\n"; + return false; + } + mf->mfStarted = true; + } + + if (!openReader()) { + std::cerr << "Warning: could not open video: " << path << " (HRESULT 0x" + << std::hex << (unsigned long)mf->lastHr << std::dec << ")\n" + << " Check the path, and that Windows can play this format " + "(MP4/H.264 is the safe choice).\n"; + return false; + } + + outW = mf->srcW; + outH = mf->srcH; + if (sizePercent > 0 && sizePercent != 100) { + outW = std::max(1, (int)(mf->srcW * (sizePercent / 100.0))); + outH = std::max(1, (int)(mf->srcH * (sizePercent / 100.0))); + } + rgba.assign((size_t)outW * outH * 4, 0); + + mf->xmap.assign((size_t)outW, 0); + for (int x = 0; x < outW; ++x) + mf->xmap[(size_t)x] = mf->cropX + (int)((long long)x * mf->cropW / outW); + + // fps can't exceed the video's own frame rate + if (mf->nativeFps > 0.5) + fps = std::max(1, std::min(fps, (int)std::floor(mf->nativeFps + 0.5))); + + mf->fadeFrames = (mf->fadeInMs > 0) ? std::max(1, fps * mf->fadeInMs / 1000) : 0; + mf->framesShown = 0; + + COORD cell = getTerminalCellSizeVideo(); + int cw = (cellWidthPx > 0) ? cellWidthPx : cell.X; + if (cw <= 0) cw = 8; + int ch = (cellHeightPx > 0) ? cellHeightPx : cell.Y; + if (ch <= 0) ch = 16; + colSpan = (outW + cw - 1) / cw; + rowSpan = (outH + ch - 1) / ch; + + loaded = true; + return true; +} + +bool TerminalVideo::nextFrame(std::string& out) { + if (!mf->reader) return false; + + const LONGLONG interval = 10000000LL / std::max(1, fps); + LONGLONG target = mf->targetTime; + + for (;;) { + DWORD flags = 0; + LONGLONG ts = 0; + ComPtr sample; + HRESULT hr = mf->reader->ReadSample(MF_SOURCE_READER_FIRST_VIDEO_STREAM, 0, + nullptr, &flags, &ts, &sample); + if (FAILED(hr)) return false; + if (flags & (MF_SOURCE_READERF_ENDOFSTREAM | MF_SOURCE_READERF_ERROR)) return false; + + // The decoder can change frame size / stride mid-stream. Re-read them, + // otherwise rows are read with the wrong width and the picture shears. + if (flags & MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED) { + if (!mf->refresh()) return false; + mf->xmap.assign((size_t)outW, 0); + for (int x = 0; x < outW; ++x) + mf->xmap[(size_t)x] = mf->cropX + (int)((long long)x * mf->cropW / outW); + } + if (!sample) continue; + + if (mf->needAnchor) { // first frame after open/seek sets the clock + target = ts; + mf->needAnchor = false; + } + if (ts + interval / 2 < target) continue; // running behind: drop this frame + + ComPtr buf; + if (FAILED(sample->ConvertToContiguousBuffer(&buf))) return false; + + const int srcW = mf->srcW, srcH = mf->srcH; + + // Ask the buffer for its REAL row pitch. 'top' is the first image row + // (top-down order) and 'pitch' is the signed byte distance between rows. + const BYTE* top = nullptr; + LONG pitch = 0; + bool ok = false; + bool locked2d = false; + + ComPtr buf2d; + if (SUCCEEDED(buf.As(&buf2d))) { + BYTE* scan0 = nullptr; + LONG p = 0; + if (SUCCEEDED(buf2d->Lock2D(&scan0, &p))) { + locked2d = true; + top = scan0; + pitch = p; + ok = (scan0 != nullptr && p != 0); + } + } + + if (!locked2d) { + // Fallback: plain buffer, trust the media type's stride. + BYTE* data = nullptr; + DWORD maxLen = 0, curLen = 0; + if (FAILED(buf->Lock(&data, &maxLen, &curLen))) return false; + LONG rowBytes = std::abs(mf->stride); + if (rowBytes < srcW * 4) rowBytes = srcW * 4; + ok = (size_t)curLen >= (size_t)rowBytes * (srcH - 1) + (size_t)srcW * 4; + if (mf->stride < 0) { top = data + (size_t)(srcH - 1) * rowBytes; pitch = -rowBytes; } + else { top = data; pitch = rowBytes; } + } + + // Fade-in brightness, 0..256 (256 = full). Smoothstep curve so it + // eases in and out instead of ramping linearly. + int mul = 256; + if (mf->fadeFrames > 0 && mf->framesShown < mf->fadeFrames) { + float t = (float)(mf->framesShown + 1) / (float)mf->fadeFrames; + mul = (int)(t * t * (3.0f - 2.0f * t) * 256.0f); + } + + if (ok) { + // RGB32 in memory is B,G,R,X. top/pitch are already top-down. + for (int y = 0; y < outH; ++y) { + int sy = (int)((long long)y * mf->cropH / outH); + int row = mf->cropY + (flipVertical ? (mf->cropH - 1 - sy) : sy); + const BYTE* srow = top + (ptrdiff_t)row * pitch; + unsigned char* d = rgba.data() + (size_t)y * outW * 4; + for (int x = 0; x < outW; ++x) { + const BYTE* s = srow + (size_t)mf->xmap[(size_t)x] * 4; + d[0] = (unsigned char)((s[2] * mul) >> 8); + d[1] = (unsigned char)((s[1] * mul) >> 8); + d[2] = (unsigned char)((s[0] * mul) >> 8); + d[3] = 255; + d += 4; + } + } + } + if (locked2d) buf2d->Unlock2D(); else buf->Unlock(); + if (!ok) return false; + + mf->targetTime = target + interval; + mf->framesShown++; + return encodeFrame(rgba.data(), outW, outH, out); + } +} + +bool TerminalVideo::restart() { + if (!mf->reader) return openReader(); + + const GUID nullGuid = { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } }; + PROPVARIANT v; + PropVariantInit(&v); + v.vt = VT_I8; + v.hVal.QuadPart = 0; + HRESULT hr = mf->reader->SetCurrentPosition(nullGuid, v); + PropVariantClear(&v); + + if (FAILED(hr)) return openReader(); // can't seek: reopen from the start + mf->needAnchor = true; + return true; +} \ No newline at end of file diff --git a/src/BinaryFetch/include/core/Gif.h b/src/BinaryFetch/include/core/Gif.h new file mode 100644 index 0000000..1b3bee8 --- /dev/null +++ b/src/BinaryFetch/include/core/Gif.h @@ -0,0 +1,51 @@ +#pragma once +#include +#include + +// TerminalGif — Windows Sixel GIF player. +// +// Mirrors TerminalImage's contract (load/draw/getRowSpan/getColSpan/ +// padding/cell-size overrides) but holds EVERY frame, pre-encoded, so +// playback never re-quantizes live. Unlike TerminalImage, frames are +// NOT individually cropped to their opaque bounds — all frames share +// one canvas size, because per-frame cropping would shift each frame's +// anchor point and make the animation visibly jitter/drift in place. +class TerminalGif { +public: + TerminalGif(); + + // Decodes every frame of the GIF at `path`, optionally scaled to + // `sizePercent` of original size (100 = no scaling). Returns false + // (isLoaded() == false) on any decode failure or if the file has + // zero frames. + bool load(const std::string& path, int sizePercent); + + // Draws frame `index` at the CURRENT cursor position. Same contract + // as TerminalImage::draw() — caller handles all cursor positioning. + void drawFrame(size_t index) const; + + bool isLoaded() const; + size_t getFrameCount() const; + int getFrameDelayMs(size_t index) const; // raw per-frame delay, ms + + int getRowSpan() const; + int getColSpan() const; + + void setPadding(int up, int left, int right); + int getPaddingUp() const; + int getPaddingLeft() const; + int getPaddingRight() const; + + void setCellHeightPx(int px); + int getCellHeightPx() const; + void setCellWidthPx(int px); + int getCellWidthPx() const; + +private: + std::vector frameEncoded; + std::vector frameDelaysMs; + int rowSpan, colSpan; + int paddingUp, paddingLeft, paddingRight; + int cellHeightPx, cellWidthPx; + bool loaded; +}; \ No newline at end of file diff --git a/src/BinaryFetch/include/core/Video.h b/src/BinaryFetch/include/core/Video.h new file mode 100644 index 0000000..10ed315 --- /dev/null +++ b/src/BinaryFetch/include/core/Video.h @@ -0,0 +1,50 @@ +// Video.h +// Windows-only. Decodes via Windows Media Foundation (built into Windows, +// no external dependency) and Sixel-encodes one frame at a time. +#pragma once +#include +#include + +class TerminalVideo { +public: + TerminalVideo(); + ~TerminalVideo(); + TerminalVideo(const TerminalVideo&) = delete; + TerminalVideo& operator=(const TerminalVideo&) = delete; + + void setPadding(int up, int left, int right); + int getPaddingUp() const; + int getPaddingLeft() const; + int getPaddingRight() const; + int getRowSpan() const; + int getColSpan() const; + bool isLoaded() const; + + void setCellHeightPx(int px); + void setCellWidthPx(int px); + + void setFps(int fps); // clamped to 1..60 (and to the video's own fps) + int getFps() const; + void setFlipVertical(bool f); // use if the video appears upside down + void setFadeInMs(int ms); // fade-in from black on launch; 0 = off. Call before load() + + bool load(const std::string& path, int sizePercent); + bool nextFrame(std::string& outEncoded); // false at end of video + bool restart(); // back to the start (looping) + void close(); + +private: + struct MFState; + bool openReader(); + + int rowSpan, colSpan; + int paddingUp, paddingLeft, paddingRight; + int cellHeightPx, cellWidthPx; + int fps; + int outW, outH; + bool loaded; + bool flipVertical; + std::string videoPath; + std::vector rgba; + MFState* mf; +}; \ No newline at end of file diff --git a/src/BinaryFetch/include/core/linux_ascii_database.h b/src/BinaryFetch/include/core/linux_ascii_database.h new file mode 100644 index 0000000..6077740 --- /dev/null +++ b/src/BinaryFetch/include/core/linux_ascii_database.h @@ -0,0 +1,16 @@ +#ifndef LINUX_ASCII_DATABASE_H +#define LINUX_ASCII_DATABASE_H + +#include +#include +#include + +struct DistroArt { + std::string art; + std::vector aliases; +}; + +const std::map& getDistroArtDatabase(); +const std::string& getDistroArt(const std::string& distroId); + +#endif // LINUX_ASCII_DATABASE_H \ No newline at end of file diff --git a/src/BinaryFetch/include/detailed/MemoryInfo.h b/src/BinaryFetch/include/detailed/MemoryInfo.h index 2ebc111..4fc4274 100644 --- a/src/BinaryFetch/include/detailed/MemoryInfo.h +++ b/src/BinaryFetch/include/detailed/MemoryInfo.h @@ -22,6 +22,8 @@ class MemoryInfo { public: MemoryInfo(); + void setVerboseLogging(bool v); // enable/disable [MemoryInfo] debug warnings + int getTotal() const; int getFree() const; int getUsedPercentage() const; @@ -29,4 +31,4 @@ class MemoryInfo { const vector& getModules() const; }; -#endif +#endif \ No newline at end of file diff --git a/src/BinaryFetch/resources/Default_JSON_theme_windows_RC/Default_BinaryFetch_Config.jsonc b/src/BinaryFetch/resources/Default_JSON_theme_windows_RC/Default_BinaryFetch_Config.jsonc index b020ddc..474fbc2 100644 --- a/src/BinaryFetch/resources/Default_JSON_theme_windows_RC/Default_BinaryFetch_Config.jsonc +++ b/src/BinaryFetch/resources/Default_JSON_theme_windows_RC/Default_BinaryFetch_Config.jsonc @@ -21,9 +21,9 @@ "compact_user_account", "compact_network_connection", "compact_disk_storage", - "detailed_resource_usage", + "detailed_resource_usage" //"detailed_system_memory", - "detailed_disk_storage" + //"detailed_disk_storage" //"detailed_operating_system", //"detailed_processor", //"detailed_graphics_card", @@ -95,28 +95,59 @@ "style": "color" }, "art": { + + //Note: till v1.8, Linux doesn't support image\video\gif + + //Note: if you enable all three of them (gif,image,ascii) together + // it won't work, BinaryFetch will render them based on priority + // priority: (Video > Gif > Image > Ascii Art) "Ascii_Art": { - "enabled": true, - "padding_up": 0, - "padding_left": 0, - "padding_right": 0 - }, + "enabled": true, + "padding_up": 0, + "padding_left": 0, + "padding_right": 0 + }, + // Windows paths need DOUBLE backslashes ("\\") because a single + // backslash is a JSON escape character. Forward slashes ("/") + // This rule applies for both Image & Gif + // "G:/screenshot/sky.jpg" -> valid + // "G:\\screenshot\\sky.jpg" -> valid + // "G:\screenshot\sky.jpg" -> invalid "Image": { - "enabled": false, - // Windows paths need DOUBLE backslashes ("\\") because a single - // backslash is a JSON escape character. Forward slashes ("/") - // "G:/screenshot/sky.jpg" -> valid - // "G:\\screenshot\\sky.jpg" -> valid - // "G:\screenshot\sky.jpg" -> invalid - "image_path":"G:\\screenshot\\hisky.jpg", - "image_size_percentage": 47, - "padding_up": 1, - "padding_left": 0, - "padding_right": 1 + "enabled": false, + "image_path": "G:\\screenshot\\hisky.jpg", + "image_size_percentage": 47, + "padding_up": 1, + "padding_left": 0, + "padding_right": 1 + }, + "Video": { + "enabled": false, + "video_path": "H:\\H_downloads\\test.mkv", + "flip_vertical": false, + "fps": 60, + "image_size_percentage": 100, + "padding_up": 1, + "padding_left": 0, + "padding_right": 1, + "loop": true, + "cell_width_px": 0, + "cell_height_px": 0 + }, + "Gif": { + // Gif uses Live render, use Ctrl + c to escape + "enabled": false, + "gif_path": "G:\\gif\\test.gif", + "image_size_percentage": 200, + "padding_up": 1, + "padding_left": 0, + "padding_right": 1, + "loop": true, + "viewer_mode": true, + "speed_multiplier": 1.0, + "max_frames": 0 } -}, - - + }, // Config schema — read this once, it applies everywhere below. // // It might look big and messy at first glance, but it's actually @@ -349,7 +380,7 @@ "compact_processor": { "enabled": true, "top_line_spacing": 0, - "order": ["cores", "threads", " ", "name", " ", "clock"], + "order": [ "name"," ","cores", "threads", " ", "clock"], "prefix": "│⚙️ ", "prefix_color": "red", @@ -2153,8 +2184,8 @@ "width": 43, "filled": "█", "filled_color": "red", - "empty": "░", - "empty_color": "white", + "empty": "█", + "empty_color": "muted_2", "left": "[", "left_color": "muted_2", "right": "]", @@ -2177,8 +2208,8 @@ "width": 43, "filled": "█", "filled_color": "green", - "empty": "░", - "empty_color": "white", + "empty": "█", + "empty_color": "muted_2", "left": "[", "left_color": "muted_2", "right": "]", @@ -2201,8 +2232,8 @@ "width": 43, "filled": "█", "filled_color": "purple", - "empty": "░", - "empty_color": "white", + "empty": "█", + "empty_color": "muted_2", "left": "[", "left_color": "muted_2", "right": "]", @@ -2225,8 +2256,8 @@ "width": 43, "filled": "█", "filled_color": "blue", - "empty": "░", - "empty_color": "white", + "empty": "█", + "empty_color": "muted_2", "left": "[", "left_color": "muted_2", "right": "]", diff --git a/src/BinaryFetch/resources/Dev_jsonc/Dev_BinaryFetch_Config.jsonc b/src/BinaryFetch/resources/Dev_jsonc/Dev_BinaryFetch_Config.jsonc index 031566f..873880b 100644 --- a/src/BinaryFetch/resources/Dev_jsonc/Dev_BinaryFetch_Config.jsonc +++ b/src/BinaryFetch/resources/Dev_jsonc/Dev_BinaryFetch_Config.jsonc @@ -89,24 +89,57 @@ "style": "color" }, "art": { + + //Note: till v1.8, Linux doesn't support image\video\gif + + //Note: if you enable all three of them (gif,image,ascii) together + // it won't work, BinaryFetch will render them based on priority + // priority: (Video > Gif > Image > Ascii Art) "Ascii_Art": { - "enabled": true, + "enabled": false, "padding_up": 0, "padding_left": 0, "padding_right": 0 }, + // Windows paths need DOUBLE backslashes ("\\") because a single + // backslash is a JSON escape character. Forward slashes ("/") + // This rule applies for both Image & Gif + // "G:/screenshot/sky.jpg" -> valid + // "G:\\screenshot\\sky.jpg" -> valid + // "G:\screenshot\sky.jpg" -> invalid "Image": { "enabled": false, - // Windows paths need DOUBLE backslashes ("\\") because a single - // backslash is a JSON escape character. Forward slashes ("/") - // "G:/screenshot/sky.jpg" -> valid - // "G:\\screenshot\\sky.jpg" -> valid - // "G:\screenshot\sky.jpg" -> invalid "image_path": "G:\\screenshot\\hisky.jpg", "image_size_percentage": 47, "padding_up": 1, "padding_left": 0, "padding_right": 1 + }, + "Video": { + "enabled": true, + "video_path": "C:\\Users\\OBITO\\Downloads\\test.mp4", + "flip_vertical": false, + "fps": 60, + "image_size_percentage": 70, + "padding_up": 1, + "padding_left": 0, + "padding_right": 1, + "loop": true, + "cell_width_px": 0, + "cell_height_px": 0 + }, + "Gif": { + // Gif uses Live render, use Ctrl + c to escape + "enabled": false, + "gif_path": "G:\\gif\\tong.gif", + "image_size_percentage": 200, + "padding_up": 1, + "padding_left": 0, + "padding_right": 1, + "loop": true, + "viewer_mode": true, + "speed_multiplier": 1.0, + "max_frames": 0 } }, // Config schema — read this once, it applies everywhere below.