First commit

This commit is contained in:
Patrick Großmann 2023-01-21 17:30:50 +01:00
commit 52f703ac70
Signed by: patrick
GPG key ID: 451F95EFB8BECD0F
35 changed files with 2718 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
iwd

197
configuration.nix Normal file
View file

@ -0,0 +1,197 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
config,
pkgs,
...
}: {
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
#user home configuration
./users
];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "patricknix"; # Define your hostname.
networking.hostId = "68438432";
# Pick only one of the below networking options.
networking.wireless.iwd.enable = true;
# I would advise against pushing your secrets
#system.activationScripts.getIWD.text = ''
# cp -r /etc/nixos/iwd /var/lib/
#'';
networking.useNetworkd = true;
networking.dhcpcd.enable = false;
systemd.network.wait-online.anyInterface = true;
services.resolved = {
enable = true;
};
# Set your time zone.
time.timeZone = "Europe/Berlin";
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Select internationalisation properties.
i18n.defaultLocale = "C.UTF-8";
console = {
font = "ter-v28n";
packages = with pkgs; [terminus_font];
useXkbConfig = true; # use xkbOptions in tty.
};
# Configure keymap in X11
services.xserver = {
enable = true;
displayManager.startx.enable = true;
layout = "de";
xkbVariant = "bone";
videoDrivers = ["modesetting" "nvidia"];
};
#TODO sollte nur bestimmte packages sein nicht alle
nixpkgs.config.allowUnfree = true;
# services.xserver.xkbOptions = {
# "eurosign:e";
# "caps:escape" # map caps to escape.
# };
# Enable CUPS to print documents.
# services.printing.enable = true;
# Enable sound.
# sound.enable = true;
# hardware.pulseaudio.enable = true;
# Enable touchpad support (enabled default in most desktopManager).
services.xserver.libinput.enable = true;
# Define a user account. Don't forget to set a password with passwd.
users.users.patrick = {
isNormalUser = true;
uid = 1000;
createHome = true;
extraGroups = ["wheel" "audio" "video" "input"]; # Enable sudo for the user.
group = "patrick";
shell = pkgs.zsh;
};
users.groups.patrick.gid = 1000;
users.users.root = {
initialPassword = "ctie";
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDZixkix0KfKuq7Q19whS5FQQg51/AJGB5BiNF/7h/LM"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJSXqbGLOeTVFRgeafkCJ1IRMyxl3/VcpLRdAJ7Br3CW"
];
shell = pkgs.zsh;
};
security.sudo.enable = false;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
xterm
wget
htop
gcc
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = false;
KbdInteractiveAuthentication = false;
PermitRootLogin = "yes";
};
hostKeys = [
{
path = "/etc/ssh/ssh_host_ed25519_key";
type = "ed25519";
}
];
};
services.thermald.enable = true;
services.pcscd.enable = true;
services.fstrim.enable = true;
hardware.cpu.intel.updateMicrocode = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
networking.firewall.enable = false;
services.udev.packages = with pkgs; [yubikey-personalization libu2f-host];
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
environment.shellInit = ''
gpg-connect-agent /bye
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
'';
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
system.copySystemConfiguration = true;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
nix = {
settings = {
auto-optimise-store = true;
allowed-users = ["@wheel"];
trusted-users = ["root" "@wheel"];
system-features = ["recursive-nix"];
substituters = [
"https://nix-config.cachix.org"
"https://nix-community.cachix.org"
];
trusted-public-keys = [
"nix-config.cachix.org-1:Vd6raEuldeIZpttVQfrUbLvXJHzzzkS0pezXCVVjDG4="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
cores = 0;
max-jobs = "auto";
};
daemonCPUSchedPolicy = "batch";
daemonIOSchedPriority = 5;
distributedBuilds = true;
extraOptions = ''
builders-use-substitutes = true
experimental-features = nix-command flakes recursive-nix
flake-registry = /etc/nix/registry.json
'';
optimise.automatic = true;
gc.automatic = true;
};
}

View file

@ -0,0 +1,90 @@
MOD: TAGS:
{
# ${MOD} will be set to the main modifier key
# General
"${MOD}-q" = " close";
#"${MOD}-Shift-Escape" = " spawn ${HOME}/.config/rofi/powermenu/powermenu.sh";
# Moving
"${MOD}-Shift-Left" = " shift left";
"${MOD}-Shift-Down" = " shift down";
"${MOD}-Shift-Up" = " shift up";
"${MOD}-Shift-Right" = " shift right";
"${MOD}-Shift-n" = " shift left";
"${MOD}-Shift-r" = " shift down";
"${MOD}-Shift-l" = " shift up";
"${MOD}-Shift-s" = " shift right";
# Resizing
"${MOD}-Control-Left" = " resize left +$RESIZE_STEP";
"${MOD}-Control-Down" = " resize down +$RESIZE_STEP";
"${MOD}-Control-Up" = " resize up +$RESIZE_STEP";
"${MOD}-Control-Right" = " resize right +$RESIZE_STEP";
"${MOD}-Control-n" = " resize left +$RESIZE_STEP";
"${MOD}-Control-r" = " resize down +$RESIZE_STEP";
"${MOD}-Control-l" = " resize up +$RESIZE_STEP";
"${MOD}-Control-s" = " resize right +$RESIZE_STEP";
"${MOD}-Shift-Control-Left" = " resize right -$RESIZE_STEP";
"${MOD}-Shift-Control-Down" = " resize up -$RESIZE_STEP";
"${MOD}-Shift-Control-Up" = " resize down -$RESIZE_STEP";
"${MOD}-Shift-Control-Right" = " resize left -$RESIZE_STEP";
"${MOD}-Shift-Control-s" = " resize right -$RESIZE_STEP";
"${MOD}-Shift-Control-l" = " resize up -$RESIZE_STEP";
"${MOD}-Shift-Control-r" = " resize down -$RESIZE_STEP";
"${MOD}-Shift-Control-n" = " resize left -$RESIZE_STEP";
# Focusing
"${MOD}-Left" = " focus left";
"${MOD}-Down" = " focus down";
"${MOD}-Up" = " focus up";
"${MOD}-Right" = " focus right";
# Focusing
"${MOD}-n" = " focus left";
"${MOD}-r" = " focus down";
"${MOD}-l" = " focus up";
"${MOD}-s" = " focus right";
"${MOD}-BackSpace" = " cycle_monitor";
"${MOD}-c" = " cycle";
"${MOD}-i" = " jumpto urgent";
"${MOD}-Tab" = " cycle_all +1";
"${MOD}-Shift-Tab" = " cycle_all -1";
# Tag cycle
"${MOD}-period" = " use_index +1 ";
"${MOD}-comma" = " use_index -1 ";
# Splitting frames
"${MOD}-x" = " split bottom";
"${MOD}-v" = " split right";
"${MOD}-Control-space" = " split explode";
# Layouting
"${MOD}-Return" = " fullscreen toggle";
"${MOD}-shift-x" = " remove";
"${MOD}-f" = " floating toggle";
"${MOD}-p" = " pseudotile toggle";
"${MOD}-space" = " cycle_layout +1";
"${MOD}-Shift-space" = " cycle_layout -1";
"${MOD}-t " = "spawn kitty";
"${MOD}-b " = "spawn firefox";
"${MOD}-m " = "spawn thunderbird";
"${MOD}-Shift-l " = "spawn systemctl suspend";
"${MOD}-Shift-f " = "spawn /home/patrick/scripts/fix_shit.sh";
}
// builtins.listToAttrs (map (x: {
name = "${MOD}-${x}";
value = "use_index ${x}";
})
TAGS)
// builtins.listToAttrs (map (x: {
name = "${MOD}-Shift-${x}";
value = "move_index ${x}";
})
TAGS)

23
data/herbstluftwm/xinitrc Executable file
View file

@ -0,0 +1,23 @@
#!/bin/bash
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)
xrdb load "${HOME}/.Xresources"
xset r rate 235 60
xset m 1 0
# numlockx on
syndaemon -d -i 1.2 -t -K
xsetroot -solid '#000000'
#setxkbmap de bone
#autorandr -c
#xgamma -gamma 1
#echo disabled > /sys/bus/usb/devices/1-1/power/wakeup
#
#touchegg &
#
#gpg-connect-agent "\bye" &
#dunst &
exec dbus-launch --sh-syntax --exit-with-session -- herbstluftwm --locked
# exec icewm-session

27
data/newpubkey.gpg Normal file
View file

@ -0,0 +1,27 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEY8fw7xYJKwYBBAHaRw8BAQdA9SnRTn6kCb127eI39inOEc8hcYszo8wRXyyR
ravT5My0KVBhdHJpY2sgR3Jvc3NtYW5uIDxwYXRyaWNrZGdyb0BnbWFpbC5jb20+
iJEEExYKADkCGwEECwkIBwQVCgkIBRYCAwEAAh4FAheAFiEE3g3oaTKsDpGOpSP/
vYrbqlwC1QwFAmPH9HUCGQEACgkQvYrbqlwC1QwN/QD+LnPY7A7y7fgaI80S51Bw
GcwNTlW5LaPmi3ou3tEehQAA/i8go9rYG8WxLpQlQErn4Q6BbB4494kUhp9piI6k
K0gLtCxQYXRyaWNrIEdyb3NzbWFubiA8cGF0cmljay5ncm9zc21hbm5AdHVtLmRl
PoiOBBMWCgA2FiEE3g3oaTKsDpGOpSP/vYrbqlwC1QwFAmPH9BICGwEECwkIBwQV
CgkIBRYCAwEAAh4FAheAAAoJEL2K26pcAtUM534BAN32iy4ssjGm5DuwSCIc/UDz
3gks29aKWi/eqlhqspbeAP4yhJcIyl9HY4eAsOargkrPxLcA2z7A6k23tTn9byAB
DLgzBGPH80MWCSsGAQQB2kcPAQEHQJNT1azcNatyc0LmeTpMo/Oi2LddMaNoWGv/
oqvutWgNiO8EGBYKACAWIQTeDehpMqwOkY6lI/+9ituqXALVDAUCY8fzQwIbAgCB
CRC9ituqXALVDHYgBBkWCgAdFiEE0A2EcgdFZgLCQgnEU+drLzc8zRMFAmPH80MA
CgkQU+drLzc8zRPKfAEAkp5bVwq7Kv6SaXHj4oL8YaFTbtLD5SiWgw6vLnSbB40B
AKHG2DWbIFdQsNjSizk+IP1cQC4auKlIK6aKPLf82ZACctABAIRQoBKYQG7+GIr7
W2O4n/deZMOgqwoygPyGGgS6fUAbAP4rxNaVgTdyLfdVo3WXE67+4GbwPuEJ6N/r
vxVXAX4VCrg4BGPH86USCisGAQQBl1UBBQEBB0CFKCVr4/vXBMnSdgiaQceXwjuu
/nzgue6a9QjIcI2ZcwMBCAeIeAQYFgoAIBYhBN4N6GkyrA6RjqUj/72K26pcAtUM
BQJjx/OlAhsMAAoJEL2K26pcAtUMmYMBAKSUJe4fj3pC8YbQXW2hE/2bIn7+XjOn
2ufbPHQP9ePwAQDBsyY8n5KfXMm8w4Icr/yQoTVjC+M/YiroUQHLGaV+C7gzBGPH
874WCSsGAQQB2kcPAQEHQHxD4GOrwrBTG4/qQhm5hoSB2CP7W9g1LPWP11oLGOjQ
iHgEGBYKACAWIQTeDehpMqwOkY6lI/+9ituqXALVDAUCY8fzvgIbIAAKCRC9ituq
XALVDN/qAPwPSJLiQ9FclH991/SooSiyA8Pt4OC8Qgg4aNjAzeC1VgD+OjRvb8i6
0C+noricZRLXpo/XOSU8oJeFanpvDjwj8gg=
=kdCQ
-----END PGP PUBLIC KEY BLOCK-----

15
data/nvim/init.lua Normal file
View file

@ -0,0 +1,15 @@
-- required programs
-- ripgrep
-- git
-- general settings
require "core"
--Plugins
require "plugins"
-- Lua config lets go

View file

@ -0,0 +1,81 @@
local opt = vim.opt
-- Set maximum undo levels
opt.undolevels = 1000000
-- Persistent Undo
opt.undofile = true
opt.undodir = vim.fn.stdpath("cache") .. "/undo"
-- swap file save interval
opt.updatetime = 300
-- Ignore *.o and *~ files in wildmenu
opt.wildignore = "*.o,*~"
-- Only complete the longest common prefix and list all results.
-- You can use the cursor keys to select an item in this list
opt.wildmode = {"list", "full"}
-- set case handling
opt.ignorecase = true
opt.smartcase = true
-- ╓──────────────────╖
-- ║ Editor visuals ║
-- ╙──────────────────╜
-- Enable true color in terminals
opt.termguicolors = true
-- set font
opt.guifont = "FiraCode Nerd Font Mono:h10.5"
-- full mouse support
opt.mouse = "a"
-- Do not wrap text longer than the window's width
opt.wrap = false
-- Show line numbers
opt.number = true
opt.relativenumber = false
-- Keep 2 lines around the cursor.
opt.scrolloff = 2
opt.sidescrolloff = 2
-- Set indentation of tabs to be equal to 4 spaces.
opt.tabstop = 4
opt.shiftwidth = 4
opt.softtabstop = 4
--round indentation to shifwidth
opt.shiftround = true
-- ╓────────────────────╖
-- ║ Editing behavior ║
-- ╙────────────────────╜
-- r = insert comment leader when hitting <Enter> in insert mode
-- q = allow explicit formatting with gq
-- j = remove comment leaders when joining lines if it makes sense
opt.formatoptions = "rqj"
-- Allow the curser to be positioned on cells that have no actual character;
-- Like moving beyond EOL or on any visual 'space' of a tab character
opt.virtualedit = "all"
-- Do not include line ends in past the-line selections
opt.selection = "old"
-- Use smart auto indenting for all file types
opt.smartindent = true
-- Only wait 20 milliseconds for characters to arrive (see :help timeout)
opt.timeoutlen = 20
opt.ttimeoutlen = 20
-- Disable timeout, set ttimeout (only timeout on keycodes)
opt.timeout = false
opt.ttimeout = true
-- replace grep with ripgrep
opt.grepprg = "rg --vimgrep --smartcase --follow"

View file

@ -0,0 +1,18 @@
--required programs
--ripgrep
--fd
--?pynvim
--git
--nvim
--basic global settings
require "core.config"
require "core.keybinds"
require "core.lsp"
--set venv
vim.g.python3_host_prog=vim.fn.stdpath("data").."/venv/bin/python3"

View file

@ -0,0 +1,42 @@
-- global keybinds
vim.g.mapleader = " "
local map = vim.api.nvim_set_keymap
local opts = {noremap = true, silent = true}
-- change window with alt
map("", "<M-down>" , "<down>" , { noremap = true, silent = true })
map("", "<M-up>" , "<up>" , { noremap = true, silent = true })
map("", "<M-left>" , "<left>" , { noremap = true, silent = true })
map("", "<M-right>", "<right>", { noremap = true, silent = true })
-- scroll with cursor loch
map("" , "<S-down>" , "" , { noremap = true, silent = true })
map("" , "<S-up>" , "" , { noremap = true, silent = true })
map("i", "<S-down>" , "a", { noremap = true, silent = true })
map("i", "<S-up>" , "a", { noremap = true, silent = true })
-- Plugin: LSP
map("n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
map("n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
map("n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
map("n", "gI", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
map("n", "gk", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
map("n", "<leader>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>", opts)
map("n", "<leader>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>", opts)
map("n", "<leader>wl", "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>", opts)
map("n", "gt", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts)
map("n", "<leader>r", "<cmd>lua vim.lsp.buf.rename()<CR>", opts)
map("n", "<leader>A", "<cmd>lua vim.lsp.buf.code_action()<CR>", opts)
map("n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
map("n", "gl", "<cmd>lua vim.diagnostic.open_float()<CR>", opts)
map("n", "gp", "<cmd>lua vim.diagnostic.goto_prev()<CR>", opts)
map("n", "gn", "<cmd>lua vim.diagnostic.goto_next()<CR>", opts)
map("n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
map("n", "<leader>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
-- Plugin: EasyAlign
map("n", "<leader>a", "<Plug>(EasyAlign)", {silent = true})
map("v", "<leader>a", "<Plug>(EasyAlign)", {silent = true})

View file

@ -0,0 +1,8 @@
local lsp_symbol = function(name, icon)
vim.fn.sign_define("DiagnosticSign" .. name, { text = icon, texthl = "Diagnostic" .. name })
end
lsp_symbol("Error", "E")
lsp_symbol("Warn", "W")
lsp_symbol("Info" ,"I")
lsp_symbol("Hint", "H")

View file

@ -0,0 +1,23 @@
local A = require('plugins.utils.alpha')
local images = require("plugins.data.alpha")
math.randomseed(os.time())
local header = images[math.random(#images)]
local separator = '╼═╾────────────────────────────────────────────╼═╾'
require('alpha').setup {
layout = {
A.pad(2), A.text(header, 'Type'),
A.pad(2), A.text(separator, 'Number'),
A.pad(1), A.buttons {
A.button("e", " New file", ":enew<CR>"),
},
A.pad(2), A.buttons {
A.button("u", " Update plugins", ":PackerSync<CR>"),
A.button("c", " Check health", ":checkhealth<CR>"),
A.button("q", " Quit", ":qa<CR>"),
},
A.text(separator, 'Number'),
},
opts = { margin = 5 },
}

View file

@ -0,0 +1,15 @@
local map = vim.api.nvim_set_keymap
local opts = {noremap = true, silent = true}
function _G.whitespace_visibility()
if vim.api.nvim_eval("&buftype") == "nofile" then
vim.cmd('execute "DisableWhitespace"')
else
vim.cmd('execute "EnableWhitespace"')
end
end
vim.cmd("autocmd BufEnter * lua whitespace_visibility()")
-- Strip whitespace
map('n', '<leader>$', ':StripWhitespace<CR>', opts)

View file

@ -0,0 +1 @@
require("Comment").setup()

View file

@ -0,0 +1,4 @@
require("indent_blankline").setup {
buftype_exclude = { "help", "terminal", "packer", "nofile" },
filetype_exclude = { "terminal", "lsp-info" },
}

View file

@ -0,0 +1 @@
vim.cmd [[autocmd CursorHold,CursorHoldI * lua require("nvim-lightbulb").update_lightbulb()]]

View file

@ -0,0 +1,6 @@
require "lualine".setup {
options = {
theme = "auto"
},
extensions = {"nvim-tree", "quickfix"},
}

View file

@ -0,0 +1,4 @@
local map = vim.api.nvim_set_keymap
local opts = {noremap = true, silent = true}
map("n", "<leader>u", ":MundoToggle<CR>", opts)

View file

@ -0,0 +1,105 @@
vim.cmd [[let g:neo_tree_remove_legacy_commands = 1]]
local map = vim.api.nvim_set_keymap
local opts = {noremap = true, silent = true}
map("n", "<leader>t", ":Neotree toggle<CR>", opts)
local notify = function(message, level)
vim.notify(message, level, { title = "NeoTree" })
end
require("neo-tree").setup {
sort_case_insensitive = true,
use_popups_for_input = false,
popup_border_style = "rounded",
-- source_selector = {
-- winbar = true,
-- separator = { left = "", right= "" },
-- },
win_options = {
winblend = 0,
},
default_component_configs = {
modified = {
symbol = "~ ",
},
indent = {
with_expanders = true,
},
name = {
trailing_slash = true,
},
git_status = {
symbols = {
added = "+",
deleted = "",
modified = "",
renamed = "",
untracked = "?",
ignored = "",
unstaged = "",
staged = "",
conflict = "",
},
},
},
window = {
width = 34,
position = "left",
mappings = {
["<CR>"] = "open_with_window_picker",
["s"] = "split_with_window_picker",
["v"] = "vsplit_with_window_picker",
["t"] = "open_tabnew",
["z"] = "close_all_nodes",
["Z"] = "expand_all_nodes",
["a"] = { "add", config = { show_path = "relative" } },
["A"] = { "add_directory", config = { show_path = "relative" } },
["c"] = { "copy", config = { show_path = "relative" } },
["m"] = { "move", config = { show_path = "relative" } },
},
},
filesystem = {
window = {
mappings = {
["gA"] = "git_add_all",
["ga"] = "git_add_file",
["gu"] = "git_unstage_file",
},
},
group_empty_dirs = true,
follow_current_file = true,
use_libuv_file_watcher = true,
filtered_items = {
hide_dotfiles = false,
hide_by_name = { ".git" },
},
},
event_handlers = {
{
event = "file_added",
handler = function(arg)
notify("Added: " .. arg, "info")
end,
},
{
event = "file_deleted",
handler = function(arg)
notify("Deleted: " .. arg, "info")
end,
},
{
event = "file_renamed",
handler = function(args)
notify("Renamed: " .. args.source .. " -> " .. args.destination, "info")
end,
},
{
event = "file_moved",
handler = function(args)
notify("Moved: " .. args.source .. " -> " .. args.destination, "info")
end,
},
},
}

View file

@ -0,0 +1,143 @@
local present, cmp = pcall(require, "cmp")
if not present then
return
end
local lspkind = require('lspkind')
function format(opts)
if opts == nil then
opts = {}
end
return function(entry, vim_item)
vim_item.kind = lspkind.symbolic(vim_item.kind, opts)
if opts.menu ~= nil then
vim_item.menu = opts.menu[entry.source.name]
end
if entry.source.name == 'cmp_tabnine' then
if entry.completion_item.data ~= nil and entry.completion_item.data.detail ~= nil then
vim_item.menu = entry.completion_item.data.detail .. ' ' .. vim_item.menu
end
vim_item.kind = ''
end
if opts.maxwidth ~= nil then
vim_item.abbr = string.sub(vim_item.abbr, 1, opts.maxwidth)
end
return vim_item
end
end
cmp.setup({
-- Integrate luasnip
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
-- Add pictograms from lspkind
formatting = {
format = format({
with_text = false,
maxwidth = 50,
menu = {
buffer = "[Buf]",
calc = "[Calc]",
cmp_git = "[Git]",
cmp_tabnine = "[TN]",
emoji = "[Emoji]",
luasnip = "[Snip]",
nvim_lsp = "[LSP]",
nvim_lua = "[Lua]",
path = "[Path]",
}
})
},
mapping = {
['<C-d>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c'}),
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c'}),
['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c'}),
['<C-e>'] = cmp.mapping(cmp.mapping.close(), { 'i', 'c'} ),
['<CR>'] = cmp.mapping.confirm({ select = false }),
["<Tab>"] = function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif require("luasnip").expand_or_jumpable() then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes("<Plug>luasnip-expand-or-jump", true, true, true), "")
else
fallback()
end
end,
["<S-Tab>"] = function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif require("luasnip").jumpable(-1) then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes("<Plug>luasnip-jump-prev", true, true, true), "")
else
fallback()
end
end,
},
sources = {
{ name = 'luasnip' },
{ name = 'buffer' },
{ name = 'path' },
{ name = 'nvim_lsp' },
{ name = 'nvim_lua' },
{ name = 'cmp_git' },
{ name = 'emoji' },
{ name = 'calc' },
{ name = 'cmp_tabnine' },
}
})
-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline('/', {
sources = {
{ name = 'buffer' }
}
})
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(':', {
sources = {
{ name = 'path' },
{ name = 'cmdline' }
}
})
-- language servers
local sumneko_root_path = vim.fn.stdpath("data").."/lua-language-server"
local sumneko_binary = sumneko_root_path.."/bin/lua-language-server"
require("lspconfig").sumneko_lua.setup { -- lua: https://github.com/sumneko/lua-language-server
cmd = { sumneko_binary, "-E", sumneko_root_path .. "/main.lua" },
settings = {
Lua = {
diagnostics = {
-- Get the language server to recognize the `vim` global
globals = {'vim'},
},
workspace = {
-- Make the server aware of Neovim runtime files
library = vim.api.nvim_get_runtime_file("", true),
},
-- Do not send telemetry data containing a randomized but unique identifier
telemetry = { enable = false, },
},
},
}
require('lspconfig').clangd.setup {} --needs clang
require('lspconfig').rust_analyzer.setup {} --still needs rust analyzer installed
require('lspconfig').bashls.setup {} --needs bash-language-server from npm
require('lspconfig').cmake.setup {} --still needs cmake language servers
require('lspconfig').html.setup {} --needs npm vscode-langservers-extracted
require('lspconfig').hls.setup {} --still needs github: haskell-language-server
-- maybe use jdtls ??? require('lspconfig').java_language_server.setup {} --still needs github java-language-server
require('lspconfig').pyright.setup {} -- needs npm pyright
require('lspconfig').texlab.setup {} -- needs github texlab
require'lspconfig'.gopls.setup{} -- needs gopls installed
require'lspconfig'.zls.setup{}

View file

@ -0,0 +1,6 @@
-- setup onedark
require("onedark").setup{
toggle_style_key = "<nop>",
}
require("onedark").load()

View file

@ -0,0 +1,34 @@
require('telescope').setup{
defaults = {
-- Default configuration for telescope goes here:
-- config_key = value,
mappings = {
i = {
-- map actions.which_key to <C-h> (default: <C-/>)
-- actions.which_key shows the mappings for your picker,
-- e.g. git_{create, delete, ...}_branch for the git_branches picker
["<C-h>"] = "which_key"
}
}
},
pickers = {
-- Default configuration for builtin pickers goes here:
-- picker_name = {
-- picker_config_key = value,
-- ...
-- }
-- Now the picker_config_key will be applied every time you call this
-- builtin picker
},
extensions = {
-- Your extension configuration goes here:
-- extension_name = {
-- extension_config_key = value,
-- }
-- please take a look at the readme of the extension you want to configure
}
}
require('telescope').load_extension('fzf')
require('telescope').load_extension('cheatsheet')

View file

@ -0,0 +1,7 @@
require "nvim-treesitter.configs" .setup {
ensure_installed = "all",
highlight = {
enable = true,
use_languagetree = true
}
}

View file

@ -0,0 +1,2 @@
local map = vim.api.nvim_set_keymap
local opts = {noremap = true, silent = true}

View file

@ -0,0 +1,746 @@
return { {
"⬛⬛🔴🔴🔴🔴⬛🔴⬛⬛🔴⬛🔴🔴🔴🔴⬛⬛",
"⬛⬛🔴⬛⬛⬛⬛🔴⬛⬛🔴⬛🔴⬛⬛⬛⬛⬛",
"⬛⬛🔴🔴🔴🔴⬛🔴⬛⬛🔴⬛🔴🔴🔴🔴⬛⬛",
"⬛⬛⬛⬛⬛🔴⬛🔴⬛⬛🔴⬛⬛⬛⬛🔴⬛⬛",
"⬛⬛🔴🔴🔴🔴⬛⬛🔴🔴⬛⬛🔴🔴🔴🔴⬛⬛",
"⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⢿⣻⣫⢯⣗⣗⣗⣗⣗⡷⡽⣝⡯⣟⢿⢿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⢿⢝⣞⣗⢷⡽⣽⣺⣳⢯⣾⣺⡽⣽⣳⢯⢯⢯⢯⢞⢿⢿⣿⣿⣿⣿",
"⣿⣿⣿⢿⣕⡯⣟⣞⡾⣽⢽⣳⣟⣾⣻⣞⣷⣻⣽⣞⣯⢿⡽⣽⢽⢽⢵⣻⣿⣿⣿",
"⣿⣿⢯⣳⣳⢽⣳⢯⡯⣿⣽⣻⡾⣷⢿⣞⣿⣞⣷⣟⣾⢯⣯⢷⣻⡽⣳⢧⡻⣿⣿",
"⣿⣏⣗⢷⢽⡽⣞⣯⣿⣳⢟⣷⢿⣻⣽⣟⣾⣻⣾⣻⢾⢿⣞⣯⣷⣻⢽⣳⣝⣝⣿",
"⣿⣺⣪⢿⢽⡽⣯⢷⡯⢐⠄⠄⣻⣟⣷⢿⣽⣻⡞⠠⡂⠄⢻⣗⣷⢯⣟⣞⡮⣖⣿",
"⣿⡺⣺⢽⢯⣻⣽⢯⣧⠐⠐⡀⣺⣽⣾⢿⣽⣯⣇⢐⠠⠈⣼⣟⣾⣻⣺⣵⡻⡮⣿",
"⣿⡺⡽⡽⡯⣷⣻⣻⣽⣾⣲⢾⣽⢷⣟⣿⣳⣯⡿⣶⢶⣽⣻⣾⣳⡯⣷⡳⣯⡳⣻",
"⣿⡺⣝⡯⡿⡽⣞⣯⣷⢿⣽⢿⣽⢿⣽⢷⣟⣷⢿⣻⡿⣽⢷⣻⢾⣽⣳⢯⣗⢝⣿",
"⣿⣝⣞⡽⡽⡯⣟⣷⠉⡁⠅⠡⠁⠅⠡⠁⠅⠡⢉⠨⠈⠌⡉⣿⢽⣞⣞⣗⡗⣽⣿",
"⣿⣿⡼⣺⢽⢯⣟⣞⡷⡶⡾⡶⣷⢾⡶⣷⢾⣶⢶⣶⢷⡶⡾⣽⢽⣺⢞⡞⣼⣿⣿",
"⣿⣿⣿⣮⢯⣳⡳⡯⡯⣟⣟⣯⢿⡽⣯⣟⣿⣺⡯⣯⡯⣯⢿⢽⢽⡺⡹⣼⣿⣿⣿",
"⣿⣿⣿⣿⣷⣧⡫⡯⡯⣗⣟⡾⣽⢽⣳⢯⢾⣺⢽⣳⢯⢯⢯⢏⢇⣿⣾⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣾⣽⣕⡳⡫⣗⢟⢾⣝⢯⢯⢻⢪⡫⣽⣼⣾⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
}, {
"⡏⠉⠉⠉⠉⠉⠉⠋⠉⠉⠉⠉⠉⠉⠋⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠙⠉⠉⠉⠹",
"⡇⢸⣿⡟⠛⢿⣷⠀⢸⣿⡟⠛⢿⣷⡄⢸⣿⡇⠀⢸⣿⡇⢸⣿⡇⠀⢸⣿⡇⢸",
"⡇⢸⣿⣧⣤⣾⠿⠀⢸⣿⣇⣀⣸⡿⠃⢸⣿⡇⠀⢸⣿⡇⢸⣿⣇⣀⣸⣿⡇⢸",
"⡇⢸⣿⡏⠉⢹⣿⡆⢸⣿⡟⠛⢻⣷⡄⢸⣿⡇⠀⢸⣿⡇⢸⣿⡏⠉⢹⣿⡇⢸",
"⡇⢸⣿⣧⣤⣼⡿⠃⢸⣿⡇⠀⢸⣿⡇⠸⣿⣧⣤⣼⡿⠁⢸⣿⡇⠀⢸⣿⡇⢸",
"⣇⣀⣀⣀⣀⣀⣀⣄⣀⣀⣀⣀⣀⣀⣀⣠⣀⡈⠉⣁⣀⣄⣀⣀⣀⣠⣀⣀⣀⣰",
}, {
"⣿⣿⣿⡇⠄⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⡇⠄⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⡇⠄⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⡇⠄⣿⣿⣿⡿⠟⠋⣉⣉⣉⡙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⠃⠄⠹⠟⣡⣶⡿⢟⣛⣛⡻⢿⣦⣩⣤⣤⣤⣬⡉⢻⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⠄⢀⢤⣾⣿⣿⣿⣿⡿⠿⠿⠿⢮⡃⣛⣛⡻⠿⢿⠈⣿⣿⣿⣿⣿⣿⣿",
"⣿⡟⢡⣴⣯⣿⣿⣿⣉⠤⣤⣭⣶⣶⣶⣮⣔⡈⠛⠛⠛⢓⠦⠈⢻⣿⣿⣿⣿⣿",
"⠏⣠⣿⣿⣿⣿⣿⣿⣿⣯⡪⢛⠿⢿⣿⣿⣿⡿⣼⣿⣿⣿⣶⣮⣄⠙⣿⣿⣿⣿",
"⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣾⡭⠴⣶⣶⣽⣽⣛⡿⠿⠿⠿⠿⠇⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣝⣛⢛⡛⢋⣥⣴⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⢿⠱⣿⣿⣛⠾⣭⣛⡿⢿⣿⣿⣿⣿⣿⣿⣿⡀⣿⣿⣿⣿⣿⣿⣿",
"⠑⠽⡻⢿⣿⣮⣽⣷⣶⣯⣽⣳⠮⣽⣟⣲⠯⢭⣿⣛⣛⣿⡇⢸⣿⣿⣿⣿⣿⣿",
"⠄⠄⠈⠑⠊⠉⠟⣻⠿⣿⣿⣿⣿⣷⣾⣭⣿⣛⠷⠶⠶⠂⣴⣿⣿⣿⣿⣿⣿⣿",
"⠄⠄⠄⠄⠄⠄⠄⠄⠁⠙⠒⠙⠯⠍⠙⢉⣉⣡⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
}, {
"⢀⡴⠑⡄⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣤⣤⣀⡀⠀⠀⠀⠀ ",
"⠸⡇⠀⠿⡀⠀⠀⠀⣀⡴⢿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀",
"⠀⠀⠀⠀⠑⢄⣠⠾⠁⣀⣄⡈⠙⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀",
"⠀⠀⠀⠀⢀⡀⠁⠀⠀⠈⠙⠛⠂⠈⣿⣿⣿⣿⣿⠿⡿⢿⣆⠀",
"⠀⠀⠀⢀⡾⣁⣀⠀⠴⠂⠙⣗⡀⠀⢻⣿⣿⠭⢤⣴⣦⣤⣹⠀",
"⠀⠀⢀⣾⣿⣿⣿⣷⣮⣽⣾⣿⣥⣴⣿⣿⡿⢂⠔⢚⡿⢿⣿⣦",
"⠀⢀⡞⠁⠙⠻⠿⠟⠉⠀⠛⢹⣿⣿⣿⣿⣿⣌⢤⣼⣿⣾⣿⡟",
"⠀⣾⣷⣶⠇⠀⠀⣤⣄⣀⡀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇",
"⠀⠉⠈⠉⠀⠀⢦⡈⢻⣿⣿⣿⣶⣶⣶⣶⣤⣽⡹⣿⣿⣿⣿⡇",
"⠀⠀⠀⠀⠀⠀⠀⠉⠲⣽⡻⢿⣿⣿⣿⣿⣿⣿⣷⣜⣿⣿⣿⡇",
"⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣷⣶⣮⣭⣽⣿⣿⣿⣿⣿⣿⣿⠀",
"⠀⠀⠀⠀⠀⠀⣀⣀⣈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀",
"⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀⠀",
}, {
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠋⠉⠉⠉⠙⠛⠻⢶⣤⡀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⡆⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣠⣴⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡟⠁⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⠶⠟⠛⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣴⠾⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠁⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡶⠛⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠞⠋⠀⠀⠀⠀⣠⣴⠶⠶⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣄⣀⣀⣤⡴⠟⠋⠀⠀⠀⠘⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣟⠉⠙⢷⣄⠀⠀⠀⠀⠀⠀⠘⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣷⡀⠀⠹⣧⡀⠀⠀⠀⠀⠀⣼⠃⠀⠀⠀⠀⠀⠀⠀⢀⣾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣷⡀⠀⠈⠛⣷⣤⣴⠶⠟⠃⠀⠀⠀⠀⠀⠀⠀⢀⣾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣷⡀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠻⠟⠛⣻⡿⠀⠀⠀⠀⠀⢀⣤⡾⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠋⠀⠀⠀⠀⢀⣴⠟⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠟⠀⠀⠀⠀⣠⣾⡿⠁⢀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠏⠀⠀⠀⢀⡾⢫⣿⠁⠀⣼⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠃⠀⠀⢀⣴⠟⢡⡟⣿⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠟⠁⠀⠀⣰⠟⠁⢠⡿⠀⢿⡄⢰⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠏⠀⠀⢠⣾⠋⠀⢀⡿⠁⠀⠈⠛⠿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡏⠀⠀⣴⢿⡟⠀⠀⣾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⣄⣾⠋⠘⣧⡀⢰⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠀⠀⠈⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
}, {
"⣿⣿⣿⣿⣿⣿⣧⠻⣿⣿⠿⠿⠿⢿⣿⠟⣼⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⠟⠃⠁⠀⠀⠀⠀⠀⠀⠘⠻⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⡿⠃⠀⣴⡄⠀⠀⠀⠀⠀⣴⡆⠀⠘⢿⣿⣿⣿⣿",
"⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿",
"⣿⠿⢿⣿⠶⠶⠶⠶⠶⠶⠶⠶⠶⠶⠶⠶⠶⠶⠶⣿⡿⠿⣿",
"⡇⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⢸",
"⡇⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⢸",
"⡇⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⢸",
"⡇⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⢸",
"⣧⣤⣤⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣤⣤⣼",
"⣿⣿⣿⣿⣶⣤⡄⠀⠀⠀⣤⣤⣤⠀⠀⠀⢠⣤⣴⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⣿⣿⣿⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣤⣤⣴⣿⣿⣿⣦⣤⣤⣾⣿⣿⣿⣿⣿⣿",
}, {
"⠀⠀⠀⠀⠀⠀⢀⣠⡶⠖⠛⠉⠉⠉⠉⠉⠛⠲⣦⣄⠀⠀⠀",
"⠀⠀⠀⠀⣤⠖⠋⠁⠀⠀⠀⠀⢀⣴⣿⠛⠙⠛⢷⣤⣈⢿⠀⠀",
"⠀⠀⣴⠋⠀⠀⠀⠀⣀⣤⣶⠶⠚⠛⠁⠀⠀⠀⠀⠀⠀⠀⣿⠀",
"⢀⡟⣠⣶⠖⠛⠉⢁⣠⣴⣶⢶⡄⠀⠺⣯⣭⣭⣭⣿⠿⠗⢸⡆",
"⣾⠀⠀⠀⣴⣞⣉⣈⣿⡿⠛⠁⠀⠀⠀⠀⣻⣦⠶⠛⠉⠙⢿⡇",
"⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⠶⠛⠉⠀⠀⠀⠀⠀⡶⢻⠁",
"⣿⠀⠀⠀⠀⠀⠛⠛⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡇⣿⠀",
"⠘⣆⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡟⣼⠃⠀",
"⠀⠹⣄⠀⠀⠀⠀⠀⠀⠀⠛⣦⣀⠀⠀⠀⠀⣠⡶⠋⣼⠃⠀⠀",
"⠀⠀⠈⠛⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠋⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠈⠉⠛⠛⠶⣤⣿⣿⣴⣶⠛⠉⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⢸⠀⠙⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⣾⠁⠀⢸⠀⠀⠀⠈⢷⡀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⢠⡟⠀⠀⠀⢸⡆⠀⠀⠀⠀⠘⢶⡀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⣾⠃⠀⠀⠀⠀⠀⣇⠀⠀⠀⠀⠀⠀⠻⡄⠀⠀⠀",
"⠀⠀⠀⢀⡿⠀⠀⠀⠀⠀⠀⣀⣿⣀⣀⣀⣀⣀⣀⡀⢹⣦⣤⠄",
"⢀⣤⣶⣿⣿⣷⣶⠟⠛⠉⠀⠀⢸⡄⠀⠀⠉⠙⠛⠿⣿⣿⣦⢻",
"⠀⣸⠃⢿⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠘⣿⠀⠀",
}, {
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡤⠶⢶⣶⣦⣄⡀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⡄⠒⠪⢝⠻⣿⣿⣦⡀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⡿⢉⡀⠀⠈⠐⠄⢿⣿⣿⣷",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⡇⠀⠀⠈⡄⠤⢀⠈⣾⣿⣿⣿",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⣿⣟⣕⡤⡠⠘⠀⠀⠀⢱⣿⣿⣿⣿",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣾⣿⣞⣄⠮⠔⠈⡢⠄⣠⣾⣿⣿⣿⣿",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⢿⣿⢽⡻⣿⣿⣿⣽⣵⣾⡽⣿⣿⣿⣿⣿⡏",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣗⣿⡟⠈⠉⠚⢽⣻⢷⡝⣿⡿⣿⣿⣿⣿⡿⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⠇⠀⠀⠀⠀⠀⢩⣯⣭⣾⣿⣿⣿⣿⠁⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⠃⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⡿⠃⠀⠀⠀⠀⣠⣼⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢞⣿⣿⡿⠁⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣾⣿⠏⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⡟⣿⣿⠏⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⠃⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣟⣷⣾⣿⠏⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⠃⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⡰⢿⣿⣿⣯⡶⠁⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⢀⣼⣟⣿⣿⡿⠃⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⢀⣾⣿⣿⡯⣿⠀⠀⢠⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⣾⣿⣿⣿⣿⣿⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠛⠀⠈⠀⠻⣿⣿⣿⣿⣿⣟⣛⣿⣿⡭⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠢⡀⠀⠀⠀⠀⠻⣿⣿⣿⣿⣿⣭⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠈⠐⠤⢀⡀⠀⢀⣙⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
" ",
}, {
"⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿",
"⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣿",
"⡇⠀⠀⠀⠀⣤⣤⣀⣀⣠⣤⣤⣷⣦⣤⣤⣤⣤⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⢸⣿",
"⡇⠀⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣶⣄⠀⠀⢸⣿",
"⣷⠀⠀⠈⠨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⢸⣿",
"⣿⡄⠀⠀⣈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⢸⣿",
"⣿⡇⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⢸⣿",
"⡇⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠿⡿⢀⡀⠀⣔⣿",
"⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠛⣿⣿⣿⠿⠛⠛⠛⠋⠈⠀⠀⠀⠀⠘⡇⢠⣾⣿",
"⣇⠇⠀⣠⣄⠀⠀⠀⠀⣀⣀⣀⡀⢸⣿⣿⣇⣀⣀⢠⣀⢀⠀⠀⣀⣠⣶⡇⣾⣿⣿",
"⣿⡄⠀⢸⣿⣶⣤⣀⣀⣠⣽⣿⠁⣼⣿⣿⣿⣿⣿⣼⣬⣭⣶⣶⣿⣿⣿⠀⣿⣿⣿",
"⣿⡇⠀⠀⢹⣿⣿⣿⣿⣿⣿⡿⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⣿⣿⣿",
"⣿⣷⡄⠀⠈⢿⣿⣿⣿⣿⣿⠁⢬⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠀⢠⣿⣿⣿",
"⣿⣿⣇⠀⠀⠘⠿⣿⣿⣿⣿⠀⠈⠛⠿⠟⠙⠛⣻⣿⣿⣿⣿⣿⣯⠀⠀⣼⣿⣿⣿",
"⣿⣿⣿⡄⠀⠀⠀⠙⢿⣿⣿⣖⣄⣀⠀⢰⣿⣿⢿⣿⢿⣿⣿⡿⠀⠀⠸⢿⣿⣿⣿",
"⠛⠋⠉⠀⠀⠀⠀⠀⢀⣄⡀⠈⢈⠙⠛⢟⣋⢁⢁⣠⣤⣼⡿⠀⠀⠀⠀⠀⠀⠈⠙",
"⠀⠀⠀⠀⠀⠀⠀⠀⠹⠟⢀⢀⠚⠚⠛⠙⠛⢛⣿⣿⡟⠛⠁⠀⡀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠨⢿⣷⣿⣾⣿⣿⣿⣿⠇⠂⠀⠀⢠⡇⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⢐⠀⠀⠀⠀⠈⠛⠯⠿⡹⠛⠟⠉⠀⠀⠀⢀⣾⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⡟⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠸⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢿⠁⠀⠀⠀⠀⠀ ",
}, {
"⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⡀⠠⠤⠀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⣀⢤⡒⠉⠁⠀⠒⢂⡀⠀⠀⠀⠈⠉⣒⠤⣀⠀⠀⠀⠀",
"⠀⠀⣠⠾⠅⠈⠀⠙⠀⠀⠀⠈⠀⠀⢀⣀⣓⡀⠉⠀⠬⠕⢄⠀⠀",
"⠀⣰⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡤⠶⢦⡀⠑⠀⠀⠀⠀⠈⢧⠀",
"⠀⡇⠀⠀⠀⠀⠀⢤⣀⣀⣀⣀⡀⢀⣀⣀⠙⠀⠀⠀⠀⠀⠀⢸⡄",
"⠀⢹⡀⠀⠀⠀⠀⡜⠁⠀⠀⠙⡴⠁⠀⠀⠱⡄⠀⠀⠀⠀⠀⣸⠀",
"⠀⠀⠱⢄⡀⠀⢰⣁⣒⣒⣂⣰⣃⣀⣒⣒⣂⢣⠀⠀⠀⢀⡴⠁⠀",
"⠀⠀⠀⠀⠙⠲⢼⡀⠀⠙⠀⢠⡇⠀⠛⠀⠀⣌⣀⡤⠖⠉⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⢸⡗⢄⣀⡠⠊⠈⢦⣀⣀⠔⡏⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠈⡇⠀⢰⠁⠀⠀⠀⢣⠀⠀⣷⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⣠⠔⠊⠉⠁⡏⠀⠀⠀⠀⠘⡆⠤⠿⣄⣀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⣧⠸⠒⣚⡩⡇⠀⠀⠀⠀⠀⣏⣙⠒⢴⠈⡇⠀⠀⠀⠀",
"⠀⠀⠀⠀⠈⠋⠉⠀⠀⢳⡀⠀⠀⠀⣸⠁⠈⠉⠓⠚⠁⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⠛⠛",
}, {
"",
"⠀⠀⠀⠀⣠⠞⠉⢉⠩⢍⡙⠛⠋⣉⠉⠍⢉⣉⣉⣉⠩⢉⠉⠛⠲⣄⠀⠀⠀⠀",
"⠀⠀⠀⡴⠁⠀⠂⡠⠑⠀⠀⠀⠂⠀⠀⠀⠀⠠⠀⠀⠐⠁⢊⠀⠄⠈⢦⠀⠀⠀",
"⠀⣠⡾⠁⠀⠀⠄⣴⡪⠽⣿⡓⢦⠀⠀⡀⠀⣠⢖⣻⣿⣒⣦⠀⡀⢀⣈⢦⡀⠀",
"⣰⠑⢰⠋⢩⡙⠒⠦⠖⠋⠀⠈⠁⠀⠀⠀⠀⠈⠉⠀⠘⠦⠤⠴⠒⡟⠲⡌⠛⣆",
"⢹⡰⡸⠈⢻⣈⠓⡦⢤⣀⡀⢾⠩⠤⠀⠀⠤⠌⡳⠐⣒⣠⣤⠖⢋⡟⠒⡏⡄⡟",
"⠀⠙⢆⠀⠀⠻⡙⡿⢦⣄⣹⠙⠒⢲⠦⠴⡖⠒⠚⣏⣁⣤⣾⢚⡝⠁⠀⣨⠞⠀",
"⠀⠀⠈⢧⠀⠀⠙⢧⡀⠈⡟⠛⠷⡾⣶⣾⣷⠾⠛⢻⠉⢀⡽⠋⠀⠀⣰⠃⠀⠀",
"⠀⠀⠀⠀⠑⢤⡠⢂⠌⡛⠦⠤⣄⣇⣀⣀⣸⣀⡤⠼⠚⡉⢄⠠⣠⠞⠁⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠉⠓⠮⣔⡁⠦⠀⣤⠤⠤⣤⠄⠰⠌⣂⡬⠖⠋⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠒⠤⢤⣀⣀⡤⠴⠒⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
}, {
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠠⣀⣠⣤⣤⣤⣤⣤⣄⡠⠤⠄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠄⠒⠒⠒⠂⠂⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠈⠳⠤⢀⡀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⣠⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠈⠳⡄⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⡠⠒⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠘⣄⠀⠀⠀",
"⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀",
"⠀⠀⠀⢀⢖⣿⡷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀",
"⠀⠀⠀⢸⡾⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢇⠀",
"⠀⠀⠀⣴⣛⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢺⣿⣿⣿⣿⣿⣿⣿⢥⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡸⠀",
"⠀⠀⣾⣾⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⠽⠿⠿⠿⠿⠿⣧⣄⡈⠛⠛⠛⣛⣛⣳⣶⣶⣦⣄⡀⠀⠀⠀⠀⡎⠀⠀",
"⠀⠘⡿⣿⣿⣿⣿⣿⣦⣄⠀⠀⣀⣠⠤⠤⣤⣖⡺⢟⣩⠥⢒⡊⠭⠭⠝⢑⣒⠲⠤⢭⢖⣪⠭⠜⠓⢒⣒⠒⠒⢒⣛⢷⣄⠀⢀⡇⠀⠀",
"⠀⢀⣽⣿⣿⣿⣿⣿⣿⣿⣠⠞⠉⢀⣤⣿⡭⠷⡺⠚⠉⢩⣾⣩⡿⠻⣦⡀⠀⠀⠀⠁⠲⡠⠒⠁⠀⣴⣈⡿⠷⣦⠀⠈⠈⠙⠻⣄⠀⠀",
"⠀⢸⣿⣿⣿⣿⣿⡭⠟⠉⠁⠀⠀⠘⠓⠒⠲⡉⠀⠀⠀⢸⣿⣬⣷⣶⣿⡇⠀⠀⠀⠀⠈⠀⠀⠀⢸⣿⣧⣿⣶⣿⠇⠀⠀⠀⠀⣸⠀⠀",
"⠀⠀⠈⠓⣿⠶⠟⠁⠀⠀⠀⠀⠀⠘⠛⠂⠀⠈⠑⠠⢀⠈⢛⣿⣿⠛⠋⣀⡀⣀⠠⠐⠂⠀⢀⣀⠀⠙⠻⠿⢿⣍⡀⠤⠤⠒⢊⡍⠀⠀",
"⠀⠀⠀⡴⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⢠⣄⣤⣾⣿⣷⣤⠀⠀⠀⠀⠀⠀⣀⡤⡎⠀⠀⠀",
"⠀⠀⡸⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡤⠤⠶⠦⢤⣤⣀⠀⠀⢠⣿⣿⣿⣤⣿⣿⣿⣿⣇⣀⣀⣤⢶⠛⠁⢀⡏⠀⠀⠀",
"⠀⢰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣅⡀⠐⠦⣤⣤⣀⣈⠉⠙⠻⣿⣿⣿⣿⣿⣿⣿⡿⠉⠀⢀⣀⣠⣤⠴⢻⠀⠀⠀⠀",
"⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠳⠶⢤⣄⣉⠉⠛⠛⠛⠻⠻⣿⣿⣿⠿⠿⠿⠛⠛⠋⠉⠁⣀⣴⠏⠀⠀⠀⠀",
"⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⢦⣀⠀⠀⠀⠀⠀⠀⠈⠉⠓⠒⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠶⠒⠋⠉⡘⠀⠀⠀⠀⠀",
"⢀⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡇⠀⠀⠀⠀⠀",
"⢸⠀⠙⠦⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡔⠑⠒⠦⢤⣄⠀⠀⠀⠀⠀⠀⠀⣀⠤⠤⠤⢤⣀⣀⣀⠴⠚⠉⠀⢸⠀⠀⠀⠀⠀",
"⢸⠀⠀⠀⠈⠉⠛⠒⠦⠤⢤⣀⣀⣀⣀⣀⣀⣀⣰⠁⠀⠀⠀⠀⠈⠑⡤⠒⠒⢢⠖⣉⠀⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀",
"⠸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠩⠇⠀⠀⠀⠧⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⢦⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⡀⠜⠒⠤⠀⠐⠒⠤⡀⠀⠀⠀⡰⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡄",
}, {
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⣀⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢀⣴⣿⣿⣿⣿⣷⣄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⣸⣿⣿⠋⠉⠹⣿⣿⡆⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⢹⣿⣿⣄⡀⣰⣿⣿⠃⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⢀⣤⣶⣶⣶⣦⣄⡙⢿⡿⣱⣿⣿⠋⣠⣤⣤⣤⣤⡀⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⢠⣿⣿⡿⠛⠛⢿⣿⣿⣷⣾⣿⣿⢣⣾⣿⡿⠿⢿⣿⣿⣆⠄⠄⠄⠄",
"⠄⠄⠄⠄⢸⣿⣿⣄⠄⢀⣴⣮⣝⠻⢿⣿⣿⣷⣭⣛⠄⠄⠄⣽⣿⣿⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠻⣿⣿⣿⣿⣿⡿⠃⠄⠄⠈⠙⠻⢿⣿⣿⣶⣿⣿⣿⠃⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠉⠉⠉⠁⠄⠄⠄⠄⠄⠄⠄⠄⠈⠙⠛⠛⠉⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⢰⡿⠛⠿⢸⡇⢀⡾⠛⣿⣾⣿⠀⣿⢸⡏⠻⣦⢰⡟⢻⣷⠄⠄⠄⠄",
"⠄⠄⠄⠄⠘⠿⠶⠟⠸⠷⠆⠻⠶⠿⠛⠿⠶⠿⠸⠷⠾⠏⠘⢷⣾⠏⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠾⠋⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⡿⠟⠿⣿⣿⣿⣿⣿⣿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⡟⠁⠀⠀⠀⠈⠉⠻⣻⣻⠁⠀⡄⠬⠍⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⠀⠀⡔⠛⠛⠒⠦⠀⠈⠛⢄⣈⣧⠤⣀⠀⠘⣾⢛⡿⠿⣿⣿⣿⣿⣿⣿⣿⣿",
"⡏⠀⠘⣇⠀⠀⠀⠀⠀⠀⠀⠈⢉⠔⠉⡈⠉⠛⡷⠁⣤⡀⠈⢻⣿⣿⣿⣿⣿⣿",
"⣷⠀⠀⠈⠳⢄⠀⠀⠀⠀⠀⠀⡜⠀⣸⠻⡆⠀⠈⠀⣿⣩⠀⠀⢻⣿⣿⣿⣿⣿",
"⣿⣷⡶⣾⠂⠀⠀⠀⠀⠀⠀⠀⢳⡀⠿⠞⠀⠀⠀⡦⣈⣁⣠⣔⣽⣿⣿⣿⣿⣿",
"⣿⣿⣹⠃⠀⠀⣀⡀⡀⠀⢰⡀⠸⣑⢤⣀⣠⡤⠎⠙⠲⠯⣭⡋⠛⠿⣿⣿⣟⣿",
"⣿⣿⠃⠀⠀⢉⠟⠉⠛⢯⣛⠉⠛⠛⠛⠋⠙⠛⠋⠀⠀⠀⠀⠀⠀⣀⣠⣄⣀⣹",
"⣿⡏⠈⠉⠉⢹⠉⠙⣭⣉⠉⠙⠛⠛⠿⠿⠿⠿⠶⠒⠒⣒⣚⣫⣿⣿⣿⣿⣿⣿",
"⣿⡇⠀⠀⠀⠈⢧⣀⡀⠉⠙⠓⠒⠒⠒⠒⠒⠛⢛⣉⣉⣭⣴⣿⣿⣿⣿⣿⣿⣿",
"⠋⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠓⠖⠲⠒⠒⣛⣭⣿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⠀⠀⠀⠀⠀⠀⠀⠀⠠⠤⠤⠴⠶⠖⠚⠉⠉⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠉⠉⠉⠉⠛⠿⠿⣿⣿⣿⣿⣿⡿⣟⠟⠉⠋⠉⠛⠛⠻⢿⢿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⠟⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠹⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠿⣿⣿⣿⣿⣿",
"⣿⣿⡿⠟⠁⠀⢀⡤⠖⠒⠛⠛⠒⠒⠲⠤⣄⣀⠀⠀⠀⠀⢀⣀⣤⣤⣤⣤⣤⣤⣀⠀⠀⠀⠀⠙⢿⣿⣿⣿",
"⣿⡿⠃⠀⠀⡔⣁⡤⠖⠒⠛⠛⠛⠛⠒⠒⠤⣉⠳⣆⣠⠞⢉⣁⡤⠤⠤⠤⣀⣀⡉⠛⢶⣄⠀⠀⠘⣿⣿⣿",
"⣿⡅⠀⠀⢸⠏⠁⠀⠀⢀⣀⣤⣄⣀⠀⠀⠀⠈⠳⣼⡧⠞⠁⠀⠀⠀⠀⠀⠀⠈⠉⠓⠦⣙⢦⠀⠀⢰⣿⣿",
"⡏⡇⠀⠀⡎⠀⠀⢀⣾⣟⢙⣿⠿⢿⣷⡄⠀⠀⠀⢸⠁⠀⠀⢠⣴⡾⣿⡿⢻⣷⣦⡀⠀⠈⢻⡇⠀⠐⠛⣿",
"⠟⠁⠀⠀⢱⠀⠀⣾⣿⣿⣿⣧⣀⣠⣿⣿⠄⠀⠀⢸⠀⠀⢠⣿⣇⣀⣼⣷⣾⣿⣿⣧⠀⠀⢠⠃⠀⠈⠛⣿",
"⠀⠀⠀⠀⠀⠱⣤⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⣠⣾⣆⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⢀⡴⠃⠀⠀⠀⠀⠙",
"⣰⠞⠛⠲⢄⡀⠀⠉⠛⠿⢿⣿⣿⣿⣿⠶⠖⠚⠁⠀⠙⠷⣌⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠀⠀⠀⣀⡤⢤⡀",
"⣿⠀⠀⠀⠀⠙⠢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⣠⠴⠛⠁⠀⠀⢻",
"⠹⣇⠀⢳⣄⡀⠀⠈⠙⠦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⠖⠋⠀⠀⣀⣤⠀⠀⡼",
"⠀⠘⣦⠀⠹⣍⠒⠤⣀⡀⠀⠉⠓⠶⠤⣤⣄⣀⣀⣀⣀⣀⣀⣀⣤⠤⠴⠖⠛⠉⠀⣀⠤⠒⢉⡴⠁⢀⠞⠁",
"⠄⠀⠈⠳⣄⠈⠓⢤⡀⠉⠁⠒⠤⢤⣀⡀⠀⠀⠉⠁⠀⠀⠀⠀⠀⢀⣀⡠⠤⠒⠉⢁⣠⠖⠁⢀⡴⠋⠀⢀",
"⣯⣆⠀⠀⠈⠳⢤⣀⠙⠲⢤⣀⡀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠉⠉⠀⠀⢀⣀⠴⠒⠉⢀⣤⠞⠁⠀⠀⠠⣾",
"⣿⣿⣧⣄⠀⠀⠀⠉⠓⠦⣄⣀⠉⠙⠒⠒⠲⠤⠤⠤⠤⠤⠤⠔⠒⠒⠋⠉⣀⣠⠴⠚⠉⠀⠀⠀⠀⢀⣾⣿",
"⣿⣿⣿⣿⣧⡦⣶⠤⣤⣀⡀⠈⠙⠓⠒⠶⠤⠤⠤⣤⠤⠤⠤⠴⠶⠖⠛⠋⠁⠀⠀⢀⣀⠤⠶⣶⣴⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠉⠉⠁⠒⠒⠒⠶⠦⠤⠤⠤⠤⠤⠤⠤⠴⠶⠖⠒⠊⠉⠉⠀⠀⠀⢻⣿⣿⣿⣿",
"⣿⣿⣿⣿⡿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡆⠀⠀⠀⠀⢸⣿⣿⣿⣿",
}, {
"⠄⠰⠛⠋⢉⣡⣤⣄⡉⠓⢦⣀⠙⠉⠡⠔⠒⠛⠛⠛⠶⢶⣄⠘⢿⣷⣤⡈⠻⣧",
"⢀⡔⠄⠄⠄⠙⣿⣿⣿⣷⣤⠉⠁⡀⠐⠒⢿⣿⣿⣿⣶⣄⡈⠳⢄⣹⣿⣿⣾⣿",
"⣼⠁⢠⡄⠄⠄⣿⣿⣿⣿⡟⠄⡐⠁⡀⠄⠈⣿⣿⣿⣿⣿⣷⣤⡈⠻⣿⣿⣿⣿",
"⢻⡀⠈⠄⠄⣀⣿⣿⣿⡿⠃⠄⡇⠈⠛⠄⠄⣿⣿⣿⣿⣿⣿⠟⠋⣠⣶⣿⣿⣿",
"⠄⢉⡓⠚⠛⠛⠋⣉⣩⣤⣤⣀⠑⠤⣤⣤⣾⣿⣿⣿⡿⠛⢁⣤⣾⣿⣿⣿⣿⣿",
"⠄⠈⠙⠛⠋⣭⣭⣶⣾⣿⣿⣿⣷⣦⢠⡍⠉⠉⢠⣤⣴⠚⢩⣴⣿⣿⣿⣿⣿⣿",
"⠄⢴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣭⣭⣭⣥⣴⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⠄⣴⣶⡶⠶⠶⠶⠶⠶⠶⠶⠶⣮⣭⣝⣛⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⠄⠙⣿⡄⠄⠄⢀⡤⠬⢭⣝⣒⢂⠭⣉⠻⠿⣷⣶⣦⣭⡛⣿⣿⣿⣿⣿⣿⣿⣿",
"⠄⠄⠸⣿⡇⠄⠸⣎⣁⣾⠿⠉⢀⠇⣸⣿⣿⢆⡉⠹⣿⣿⢸⣿⣿⣿⣿⣿⣿⣿",
"⠄⠄⠄⣿⡇⠄⢀⡶⠶⠶⠾⠿⠮⠭⠭⢭⣥⣿⣿⣷⢸⣿⢸⣿⣿⣿⣿⣿⣿⣿",
"⠄⠄⠄⣿⡇⠄⠈⣷⠄⠄⠄⣭⣙⣹⢙⣰⡎⣿⢏⣡⣾⢏⣾⣿⣿⣿⣿⣿⣿⣿",
"⠄⠄⢰⣿⡇⠄⠄⢿⠄⠄⠈⣿⠉⠉⣻⣿⡷⣰⣿⡿⣡⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⠄⠄⢸⣿⡇⠄⠄⠘⠿⠤⠤⠿⠿⠿⢤⣤⣤⡿⣃⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⠄⠄⠘⢿⣷⣤⣄⣀⣀⣀⣀⣀⣠⣴⣾⡿⢋⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠁⠄⠄⠄⠄⠄⠄⠄⠄⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⡟⠁⠄⠄⠄⠄⣠⣤⣴⣶⣶⣶⣶⣤⡀⠈⠙⢿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⡟⠄⠄⠄⠄⠄⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠄⠈⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⠁⠄⠄⠄⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠄⠄⢺⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⡄⠄⠄⠄⠙⠻⠿⣿⣿⣿⣿⠿⠿⠛⠛⠻⣿⡄⠄⣾⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⡇⠄⠄⠁ ⠄⢹⣿⡗⠄ ⢄⡀⣾⢀⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⡇⠘⠄⠄⠄⢀⡀⠄⣿⣿⣷⣤⣤⣾⣿⣿⣿⣧⢸⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⡇⠄⣰⣿⡿⠟⠃⠄⣿⣿⣿⣿⣿⡛⠿⢿⣿⣷⣾⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⡄⠈⠁⠄⠄⠄⠄⠻⠿⢛⣿⣿⠿⠂⠄⢹⢹⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⡐⠐⠄⠄⣠⣀⣀⣚⣯⣵⣶⠆⣰⠄⠞⣾⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣷⡄⠄⠄⠈⠛⠿⠿⠿⣻⡏⢠⣿⣎⣾⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⡿⠟⠛⠄⠄⠄⠄⠙⣛⣿⣿⣵⣿⡿⢹⡟⣿⣿⣿⣿⣿⣿⣿",
"⣿⠿⠿⠋⠉⠄⠄⠄⠄⠄⠄⠄⣀⣠⣾⣿⣿⣿⡟⠁⠹⡇⣸⣿⣿⣿⣿⣿⣿",
"⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠙⠿⠿⠛⠋⠄⣸⣦⣠⣿⣿⣿⣿⣿⣿⣿",
}, {
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠔⠊⠉⠉⠉⠉⠉⠐⢦⡄⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⡐⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠘⣆⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠄⢀⠖⠁⢀⣾⣆⡰⠶⡷⠶⣀⣾⣄⠄⠈⣆⠄⠄⠄⠄⠄⠄",
"⠄⠄⡄⠄⠠⢤⣤⠔⠃⠄⠄⠄⠄⠘⢧⣤⢣⣤⠋⠄⠄⠄⠄⠈⠣⢤⡠⠄⠄⠄",
"⠄⠄⠘⠦⡀⠄⠄⠄⠄⠄⠄⠄⢻⡟⠻⣿⣿⡿⠻⡟⠃⠄⠄⠄⠄⠄⠄⠄⡀⠞",
"⠄⠄⠄⠄⠉⢢⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⡠⠊⠄⠄",
"⠄⠄⠄⠄⠄⠄⠈⠢⣤⣤⣴⣶⡶⢶⣶⣶⣶⣆⢒⣤⣤⠄⢠⠤⠤⠚⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⢀⣠⣾⣿⣿⣿⣿⣎⢻⣿⠁⡀⣿⡎⣿⣿⣀⣃⠧⡀⠄⠄⠄⠄⠄",
"⠄⠄⣠⣶⣾⣿⣿⣿⣿⣿⣿⣿⡹⡼⢿⣠⠵⠿⣑⢿⣟⣛⠤⣩⡁⠄⠄⠄⠄⠄",
"⢠⣿⣿⣿⢏⡜⡻⣷⡽⣿⣷⣭⣿⣮⣽⣯⣽⣿⣿⣷⣤⣾⡿⠟⠃⠄⠄⠄⠄⠄",
"⠻⣿⣿⣿⣌⢷⣙⠾⠯⣒⡿⠭⣝⣛⣛⣛⣛⠛⠭⠭⠟⢣⠌⠄⠄⠄⠄⠄⠄⠄",
"⠄⠻⣿⣿⣿⣮⣟⠷⣦⣤⣝⣛⠲⠶⠶⠒⢂⣀⠠⠄⠐⠁⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠙⠿⠿⢿⣿⡷⠶⠭⠭⠭⠵⠶⠒⠋⠉⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
}, {
"⠀⠀⠉⠛⠛⠻⢿⣿⣿⣿⣿⣿⣿⣶⣶⣶⣶⣶⣶⣶⣶⣦⣤⣄⡀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠚⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠘⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⠟⠛⠋⠉⠉⠉⠙⣿⣿⣿⣿⣶⣀⠀",
"⠀⠀⠀⠰⠶⠿⢰⣿⣶⣦⠀⠀⢸⣿⣿⣦⡄⠀⢀⣴⣾⣿⣿⣿⡿⠿⣿⣿⣿⠇",
"⠀⠀⠀⠀⠀⠀⠀⠻⠿⠃⠀⠀⠀⣿⣿⣿⣧⠀⠀⠉⣉⣉⣩⣥⡶⠀⠀⠀⣿⡇",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣿⣿⣿⣿⠀⠀⣻⣿⣿⣿⠃⠀⠀⢠⣿⠃",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠁⣴⣿⣿⣿⠟⠃⡀⠀⢠⣿⠟⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣄⠀⣤⣤⣤⢰⣿⡦⣿⠀⣿⣿⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠛⠛⠀⠛⠛⠋⠈⠉⠀⠀⢀⣿⣿⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢴⡆⣤⣤⣄⡄⢀⣀⣀⢀⣀⢀⡄⠀⢨⣿⣿⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠃⣿⣿⣿⠇⣿⣿⡋⣿⠏⠛⣃⣤⣾⣿⣿⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣤⣄⣠⣤⣠⣴⣶⣾⣿⣿⣿⣿⣿⣿⡀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠺⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁",
}, {
"⠄⠄⠄⠄⠄⠄⠄⠄⢀⢀⣴⣿⣿⣷⣶⣤⣄⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⢀⣤⡶⠿⢘⣥⠢⠐⠗⣹⣿⣿⣿⣤⡀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠘⣅⣂⠹⣪⣭⣥⣶⣿⡿⠿⢭⡻⣿⣷⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⢀⣤⣤⡀⠄⣭⣧⣾⡿⠿⡋⢅⡪⠅⣢⣿⡿⠟⢁⣶⣶⣶⣤⣠⣄⡀⠄⠄",
"⢠⣴⣿⣿⣟⣤⣤⡉⠭⣑⡨⢔⣊⣵⣶⡿⠛⢉⣴⡾⠿⠿⣿⣿⣿⣎⠻⣿⣦⡀",
"⣼⣧⢻⣿⣿⣿⡈⣿⢰⢰⠌⣻⣭⣭⣶⡷⣠⡤⠶⠾⠛⢓⣒⣮⣝⡻⠸⣼⣿⣿",
"⣿⣝⢶⣿⣿⣿⡃⠄⢏⣸⡄⢻⡿⣿⣟⣵⠶⢛⣛⣛⣛⡒⠦⣝⠿⣿⣦⡙⣿⡿",
"⠻⣿⣿⣿⣿⣿⣷⣦⣜⡿⣿⣄⢓⡘⠃⣴⣾⣿⣿⣿⣿⢹⣯⣶⣅⢺⣿⡇⠻⠁",
"⠄⠈⠛⠻⣿⣿⣿⣿⣿⣿⣿⡾⣿⣷⣾⣝⣻⢿⣿⣿⣿⠸⣛⣿⡟⣢⢻⣿⠄⠄",
"⠄⠄⠄⠄⠘⢿⣿⣿⣿⣿⣿⣷⣦⣭⣿⣿⣿⣦⣵⡾⢃⣾⣿⣿⢱⡿⣸⠋⠄⠄",
"⠄⠄⠄⠄⠄⠄⢻⣿⢿⣿⣿⠻⣿⣿⡿⠿⣟⣛⣉⣰⣿⣿⣿⠇⠛⠃⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠉⠲⣝⣫⣓⡙⣿⣜⣛⣛⣛⣻⡯⠹⠛⠁⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⠙⠛⢻⡈⢿⡿⠟⠛⠁⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⡿⠟⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣾⣿⠿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣽⣿⣿⠏⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣩⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⡟⣽⣿⡏⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣿⣿⣾⣿⣿⣿⣿",
"⣿⡿⢃⣾⡿⠏⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿",
"⣿⣇⣾⣿⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢽⣿⣿⣿⣿",
"⣿⣿⣿⡗⠀⠀⠀⠀⠀⠀⢀⣸⣿⣿⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⣿⣧⣤⣄⡀⠀⠀⠀⠀⠀⠘⣿⣿⡿⢿",
"⣿⣿⣿⠀⠀⠀⠀⣠⣴⡿⠟⠛⠛⠿⢿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⡿⠛⠉⠉⠉⠙⠻⣷⣄⠀⠀⠀⠀⣻⣿⡆⢸",
"⣰⣿⡷⠀⠀⠀⣼⠟⠁⠀⢀⣀⡀⠀⠀⠙⢿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⢠⣿⣿⡟⣻⠏⠀⠀⢀⣤⣤⡀⠀⠈⢻⡄⠀⠀⠀⢸⣿⣧⢠",
"⢻⣿⠇⠀⠀⢰⡟⠀⠀⢠⣿⣿⣿⡆⠀⠀⠘⡧⠙⢿⣿⠀⠀⠀⠀⠀⠀⣾⡿⠋⠀⣿⠀⠀⠀⣿⣿⣿⡿⠀⠀⠈⡗⠀⠀⠀⠘⣿⣿⢸",
"⣼⣿⡆⠀⠀⠀⣧⠀⠀⠀⠙⠿⠟⠁⠀⠀⣸⣇⡀⠀⠁⠀⠀⠀⠀⠀⠀⠈⠀⣠⣶⣿⡄⠀⠀⠉⠛⠛⠁⠀⠀⣸⠇⠀⠀⠀⢠⣿⣿⢸",
"⡿⣿⣷⠀⠀⠀⠘⢷⣀⠀⠀⠀⠀⠀⢀⡴⠋⠻⣿⣶⣄⠀⠀⠀⠀⠀⣀⣴⣾⠟⠁⠀⠙⣦⡀⠀⠀⠀⠀⣀⡴⠋⠀⠀⠀⠀⢨⣿⡟⢸",
"⣿⣿⣿⣷⣧⣤⠤⠶⠿⠷⠶⢶⣶⣾⣯⣀⣀⣀⣈⣛⣿⣿⣶⣤⣤⣤⡟⠋⠁⠀⠀⠀⢠⣿⣿⣿⣶⣿⣿⣷⣶⣤⣤⣤⣼⣿⣿⣿⣿⣿",
"⣿⣿⣿⡿⠛⠀⠀⠀⠀⠀⠀⢸⣿⠉⠉⠉⠉⠙⠛⠛⠛⠛⠛⠛⠛⠛⠀⠀⠀⠀⠀⠀⠘⠛⠈⠉⠉⣭⡍⠛⠛⠛⠛⠛⠛⠉⠻⣿⣿⣿",
"⣿⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣦⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣠⣤⣶⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿",
"⣿⣿⡁⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿",
"⣿⣿⣷⡄⠀⠀⠀⠀⠀⢀⣼⡿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⣿⣷⡀⠀⠀⠀⠀⠀⣠⣿⣿⣿",
"⣿⣿⣿⣿⣶⣤⣤⣤⣶⣿⡟⠁⠀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠀⠀⠈⠹⣿⣷⣶⣤⣶⣾⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⡄⠀⠀⠀⠀⠀⠉⠛⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠋⠀⠀⠀⠀⠀⢀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⢀⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣠⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣶⣶⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
}, {
"⣿⣿⣿⣿⣿⠿⠿⠛⠛⠻⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⠃⣠⣴⣶⣾⣿⣿⣷⣶⣦⣤⣈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⡇⢰⣿⣿⡿⠟⠛⠛⠛⠻⢿⣿⣿⣶⠀⠿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⡇⢸⣿⡇⠀⠀⠀⠀⠀⣶⡀⠹⣿⣿⡇⢀⣶⣶⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⠃⣼⣿⣷⣄⣀⠀⠀⠀⠛⠃⣀⣿⣿⣧⠀⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⠀⣿⣿⣿⣿⣿⣿⣿⣶⣾⣿⣿⣿⣿⣿⠀⣿⣿⠃⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⡟⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠐⠋⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣆⠀⠀⠀⠤⠄⠀⠀⠀⠀⠈⠉⠉⠙⠃⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⠇⠀⢠⡆⠀⠀⠐⣶⠀⢠⣦⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⠀⠀⣿⡇⠀⠀⠛⠛⠀⣠⡇⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⡇⠀⠀⣿⡟⠁⢰⡟⠀⠾⠿⠛⠀⠀⠛⠋⠉⠉⠉⠉⠉⠉⠉⠙⠛⠿⢿⣿⣿⣿",
"⣿⣿⣿⣦⡀⠘⠀⠾⣿⣧⣤⣤⣶⡶⠀⠀⣿⣿⣿⣿⡀⢀⠉⠉⠁⢲⣦⣤⡄⢹⣿⣿",
"⣿⣿⣉⠉⠁⢠⠀⠐⠀⠌⠙⠛⠛⠋⠀⠀⣈⣉⣁⣀⣄⠈⠛⠻⠿⠿⠿⠟⢁⣼⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣶⣶⣾⣶⣶⣶⣿⣿⣿⣿⣿⣷⣶⣶⣶⣶⣶⣶⣿⣿⣿⣿",
}, {
"⠄⠄⠄⠄⠄⢀⣴⣾⣿⣿⣿⣶⣶⣤⣄⡀⠄⢀⣤⣴⣶⣶⣶⣦⡀⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⣾⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠄⠄⠄",
"⠄⠄⢀⣼⣿⣿⠿⣛⣛⣛⣛⣛⠿⣿⣯⣼⣿⡿⠟⣛⣛⣛⣛⣛⠿⢿⣿⣄⠄⠄",
"⠄⢠⣿⢿⡫⢞⣫⣥⣴⣶⣶⣦⣭⡲⣝⣟⡥⣚⣭⣥⣶⣶⣬⣭⣟⡳⣼⣻⣧⡀",
"⠄⣿⠛⣮⠗⠉⠁⠐⠶⠄⠰⠶⠭⢉⣿⣿⣃⠉⠵⠶⠄⠰⠖⠂⠉⠓⢮⣟⠻⡇",
"⢸⣿⣿⣁⣰⣿⡭⠵⠶⠟⣛⣉⠴⠿⣣⣇⡿⠶⣍⣑⠻⠷⠾⢭⣤⣷⣈⣹⣿⡇",
"⠄⠻⣿⣟⣻⢯⣍⣛⣛⣿⢭⣐⣭⣿⣿⣿⣿⣧⣗⣨⢿⣛⣛⣛⣭⡿⣟⣿⡿⠄",
"⠄⠄⣀⣍⡛⠿⠿⢿⣿⣿⣿⣿⠿⠿⣿⣿⣿⣟⠿⣿⣿⣿⣿⣿⣿⣿⡿⣛⠄⠄",
"⠄⣾⣿⣿⣿⣿⣶⣶⣦⣬⣥⣴⣶⣿⣿⣿⣿⣿⣷⣬⣛⣛⣛⣛⣭⣭⣶⣿⣦⠄",
"⠄⣿⡈⠿⠟⠁⣀⣤⣄⣀⣐⡲⠶⠶⠶⠶⠶⠶⠶⠶⠶⠶⠶⣶⠉⣿⢻⣿⣿⠄",
"⢀⣈⣤⣾⣏⣿⣿⣿⣿⢛⡭⠭⠤⡘⠸⢸⠃⣿⡇⣿⡇⡿⢇⠜⣠⢧⠞⣽⣿⠄",
"⣾⡿⢹⣿⡿⠉⣿⣿⡟⡜⣢⣭⡒⢉⢠⢸⡄⣭⡅⠗⣢⠖⣡⡞⣥⣾⣾⠟⠁⠄",
"⣿⡇⣾⣿⡇⣴⣿⣿⣇⢶⣿⡷⠚⣬⣬⣬⣷⣶⡾⢛⣽⣾⣿⣿⡿⠛⠁⠄⠄⠄",
"⢟⡇⠿⠿⠇⣛⣭⣭⣍⢰⢆⣺⢨⣭⣭⣭⣥⣶⣿⡿⠿⠟⠋⠉⠄⠄⠄⠄⠄⠄",
"⠈⠛⠈⠿⠿⣙⣭⣥⣤⣤⣴⣾⡇⣛⣛⣛⣛⣩⣥⣴⣿⣿⣿⣷⣦⣤⣄⣀⠄⠄",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠟⠛⠛⠛⠛⠛⠛⠛⡛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠛⠉⠁⠀⠀⠀⠀⠀⠀⠈⠒⠀⠀⠀⠈⠑⠂⠈⠙⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠷⠤⣄⠈⠛⠦⣀⠀⠑⠂⠀⠀⠀⠀⠀⠐⠂⠀⠀⠀⠀⠀⠀⠙⠒⠤⣘⣯⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⡿⠓⠢⢤⣀⠀⠀⠙⢦⡀⠈⠓⢤⡀⠀⠀⠉⠐⠠⢀⠀⠀⠈⠐⠄⡀⠈⠢⡀⠀⠀⠹⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⡷⡶⠤⣄⡈⠳⣤⡀⠀⠙⠲⣄⡀⠈⠓⠤⣀⡀⠀⠀⠑⠂⠀⠀⠀⢀⡐⠀⣈⣁⣠⡀⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⡿⠉⠻⣷⣤⡙⢦⣤⣍⣓⣦⣰⣶⡽⣷⣶⡟⠛⠿⠿⠶⠟⠛⠛⠛⠛⠋⠉⠉⠋⠈⠉⠙⠉⠉⠛⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⠃⠀⠀⠀⠉⠛⢦⣙⡄⠀⠉⠉⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⠏⠀⢀⡀⠀⣀⣀⠀⠈⠏⠀⠀⠀⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⢹⡄⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⡀⣦⣀⣤⣶⣒⣶⣤⣀⠀⠀⠀⠀⠀⠀⢿⠀⢀⣠⡶⠛⠉⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⠙⠚⠛⣦⠤⡤⠬⡙⠓⠦⠀⠀⠀⠀⢸⡇⢿⡉⠀⠒⠢⡄⢹⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⠇⠀⠆⠀⣻⣛⣂⣤⠜⠀⠀⠀⠀⠀⠀⠘⣏⠳⣽⣤⡴⠦⡌⡄⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿",
"⣿⣿⠏⠀⡌⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡏⠳⡄⢸⡇⠀⢀⠇⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿",
"⣿⡟⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣴⡋⠹⣗⡙⠻⡇⠀⠈⣰⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⠁⠀⠀⠀⠀⠤⢄⠀⠀⠀⠀⠀⠀⠀⡜⢿⠀⠹⢦⡀⢨⡁⣇⢀⣼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣦⣤⣤⣶⣤⣤⡨⠀⢰⠖⠒⢤⡀⡼⡇⠈⠳⡀⠀⠀⠀⠙⣿⡏⠘⠦⠤⠤⠤⠴⠶⠦⠴⠖⠒⠋⢙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⡇⢠⡀⢨⡙⠦⢤⣸⠟⡆⢠⢻⠃⢷⠀⠀⠘⠦⠀⠀⠁⠈⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣷⣦⣵⣄⠉⡀⠀⠈⢿⠁⢴⡾⠀⠈⢧⡀⠀⠀⠀⠀⠀⠈⢹⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣷⣿⣿⣿⣿⡟⠚⣿⠿⠶⠶⠶⣦⠃⡴⠶⠶⠶⠶⣶⠾⠷⠶⠶⠶⠶⠶⠶⣦⠀⣠⡴⠶⠛⠛⠛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⡟⠉⠁⠀⣿⠉⠄⢻⡀⠀⠀⠀⢸⣿⡇⠀⠀⠀⢀⣿⠀⠀⠀⠀⠀⠀⠀⠀⣿⣼⠋⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⢯⠇⠀⠀⠀⣼⠀⠈⢸⣧⠀⠀⠀⠈⣿⠀⠀⠀⠀⣼⣿⠀⠀⠀⠀⠀⣀⣀⣀⣿⡏⠀⠀⠀⠀⣴⣆⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿",
"⣿⣿⣿⡾⢀⠀⠀⢠⠏⠀⠀⢀⣿⡄⠀⠀⠀⠟⠀⠀⠀⢰⣏⣽⠀⠀⠀⠀⠀⣿⠀⠀⠸⡇⠀⠀⠀⠀⠻⣿⣀⣀⣀⣀⣼⣿⣿⣿⣿⣿",
"⣿⣿⣿⣄⣸⣤⣴⠋⠄⠀⡄⠈⡻⣧⠀⠀⠀⠀⠀⠀⠀⣾⠁⢸⠀⠀⠀⠀⠀⠛⠛⠛⣷⣷⡀⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⡇⠙⠋⠈⣷⠀⠀⠀⠈⠀⠁⢹⡄⠀⠀⠀⠀⠀⢸⠇⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣷⣄⡀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⡀⡀⠄⠀⠀⠆⠀⠀⡀⢀⣬⣷⠀⠀⠀⠀⢀⡟⠀⠀⢸⠀⠀⠀⠀⠀⣴⣶⣶⣿⣿⣿⣿⣿⣶⣄⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣄⣠⣄⣀⣀⣠⣿⣿⣿⣿⠀⠀⠀⠀⢸⡇⣀⣠⣼⠀⠀⠀⠀⠀⣿⣿⣿⣿⡇⠀⠀⠀⠀⣿⣷⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⢸⣿⣿⣿⣿⠀⠀⠀⠀⠀⠛⠛⠛⢻⣷⠀⠀⠀⠀⢻⡿⠀⠀⠀⠀⢸⡟⠛⠛⠛⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⢸⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⡇⠀⠀⠀⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣤⣤⣤⣼⣿⣿⣿⣿⣦⣤⣤⣤⣤⣤⣤⣤⣼⣿⣿⣷⣦⣤⣤⣤⣤⣤⣶⣿⣿⣷⣤⣤⣤⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
}, {
"",
"",
"",
"",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡖⠋⠉⠉⠙⢲⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⡿⠀⠀⠀⠀⠀⠀⠃⠀⣤⡄⠀⠠⣤⠀⠀⢤⡄⡠⠤⣤⡀⡠⠤⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⣿⠀⠀⢸⡏⠀⠀⢸⡇⠀⠀⢹⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣄⠀⠀⠀⠀⢀⠄⠀⢿⡇⠀⢀⣿⡀⠀⢸⡇⠀⠀⢸⡇⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠓⠒⠒⠊⠁⠀⠀⠈⠛⠒⠁⠛⠃⠐⠚⠛⠂⠐⠚⠓⠂⠐⠛⠓⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"",
"",
"",
"",
}, {
"",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣴⣶⣿⠿⣿⣿⠿⠿⠿⠿⠿⢿⣿⣷⣶⣶⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣭⣤⣤⠤⠤⢤⣀⣀⣀⣀⣀⣀⣀⡈⠉⢙⣿⣿⣿⣶⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⢀⣤⣾⠟⠋⠀⠀⣀⣤⣴⣿⡿⠿⢲⣤⣤⣄⣀⣀⠀⡀⠀⠀⣠⡾⠿⠟⠛⠛⠿⢿⣿⣿⣶⣤⣤⣀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⣰⣾⠟⠁⢀⣤⣾⣿⠟⠋⣉⣀⣀⣀⣈⣉⣩⠭⠭⠭⠭⠭⠭⠭⠤⠤⠀⠀⠀⣠⣶⠿⠿⠿⠿⣿⣿⣿⣿⣶⠀⠀⠀⠀",
"⠀⠀⠀⠀⢠⣾⡟⠁⣠⣾⣿⡿⠋⠀⣠⡾⠛⠋⠉⠉⠙⠛⠿⣦⡀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡿⠋⠀⠀⠀⣠⣾⣿⡟⢻⣿⠀⠀⠀⠀⠀",
"⠀⠀⠀⢠⣿⠏⠠⠞⠛⠛⠋⠀⢀⣾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠸⣷⠀⠀⠀⠀⠀⠀⠀⣾⠏⠀⠀⠀⠀⠀⠙⠻⠿⠁⢸⣿⠀⠀⠀⠀⠀",
"⠀⠀⠀⣾⡿⠀⠀⠀⠀⠀⠀⠀⣸⡏⠀⣀⣤⣤⡀⠀⠀⠀⠀⠀⣿⡄⠀⠀⠀⠀⠀⠠⣏⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⠀⠀⠀⠀⠀",
"⠀⠀⢠⣿⠃⠀⠀⠀⠀⠀⢰⣶⣿⡇⠀⣿⣿⣿⡿⠂⠀⠀⠀⠀⣿⠃⠀⠀⠀⠀⠀⠀⢿⣄⠀⠀⠀⠀⠀⠀⠀⣀⣼⠏⣿⡇⠀⠀⠀⠀",
"⠀⠀⢸⣿⠀⠀⠀⠀⠀⠚⠛⢛⣿⣿⣤⡙⠛⠋⠀⠀⠀⠀⢀⣼⠟⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠳⣶⣶⠿⠛⠛⠛⠿⣦⣿⣿⠀⠀⠀⠀",
"⠀⠀⣾⡇⠀⠀⠀⠀⠀⠀⠀⠞⠉⠀⠈⠛⠿⠶⣦⣤⣴⡾⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⠟⠁⢀⣀⣤⣀⡀⠀⠙⢿⣧⠀⠀⠀",
"⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⢤⣤⣤⣤⣤⡤⠴⠖⢻⣿⠃⢀⣴⡿⠉⠉⠉⠻⣦⠀⠀⢿⣧⠀⠀",
"⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣤⣤⣤⣤⣤⣤⠤⠖⠀⣠⣿⠃⠀⣼⡿⣿⡟⢲⡶⣤⣿⣆⠀⢸⣿⠀⠀",
"⠀⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠻⠿⢯⣥⣤⣤⣤⠖⠀⣿⡏⠀⢰⣿⣀⣿⣀⣸⣀⣿⣉⣿⠀⢸⣿⠀⠀",
"⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⣤⣤⣤⣤⣤⣄⣀⣀⠀⣿⡇⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⣿⠂⣼⡇⠀⠀",
"⠀⠀⢸⣇⠀⢠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣧⠀⢸⡇⠀⠀⠀⠀⠀⠀⢰⡿⢠⣿⠁⠀⠀",
"⠀⠀⠘⣿⡀⠈⣧⠀⠸⡆⠀⢤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⢸⡇⠀⠀⠀⠀⠀⢠⣿⠁⣾⡇⠀⠀⠀",
"⠀⠀⠀⢸⣧⠀⠸⣧⠀⣷⠀⠀⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⢸⡇⠀⠀⠀⠀⠀⣾⡇⠀⣿⠀⠀⠀⠀",
"⠀⠀⠀⠀⢿⡄⠀⠘⣷⣻⡇⠀⠀⠙⢦⠀⠀⠀⠀⠀⠤⣤⣤⣤⣀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⣾⡇⠀⠀⠀⠀⠀⣿⡇⠀⣿⡇⠀⠀⠀",
"⠀⠀⠀⠀⠘⣿⡀⠀⠘⣿⣿⡀⠀⠀⠈⣷⠀⠀⠀⠀⠀⠐⠒⠾⠿⣷⣦⡀⠀⠀⠀⠀⣸⡏⢀⣿⠀⠀⠀⠀⠀⠀⢿⡇⠀⠸⣷⠀⠀⠀",
"⠀⠀⠀⠀⠀⠹⣧⠀⠀⢸⣿⣷⠀⠀⠀⢻⠀⠀⠀⠀⠀⠀⠐⠲⢶⣬⡙⠻⣦⠀⠀⢀⡿⠁⢸⡟⠉⠙⠓⠲⣄⠀⢸⣷⠀⠀⡇⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⢹⣇⠀⠀⢻⡟⣧⠀⠀⠸⣄⠀⠀⠀⠀⢀⣀⣀⠀⠈⠻⢦⣄⠀⠀⣾⡇⠀⣿⡇⠀⠀⠀⠀⠈⢷⡀⣿⠀⠀⡇⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⢿⣆⠀⠈⢷⡘⣧⠀⠀⠈⠳⣄⠀⠀⠀⠉⠉⠛⠲⣦⡀⠙⠷⠀⣿⠀⠀⣿⠶⠶⡶⠶⡶⢶⠶⢿⣿⠀⠀⡇⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠈⢿⣆⠀⠀⠻⣿⡷⣤⣀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠙⠷⣄⠀⣿⠀⠀⢿⣧⣸⣧⣤⡇⢸⣆⣼⡏⠀⢀⡇⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣧⡀⠀⠈⠳⣄⠉⠓⢦⣀⠈⠻⢦⡀⠀⠀⠀⠀⠀⠈⢷⣿⠀⠀⠘⣿⣅⠀⠈⠉⢙⣻⡟⠀⠀⣼⡇⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣦⡀⠀⠈⠙⠶⣤⣽⣿⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⢿⣇⠀⠀⠈⠙⠻⠿⠿⠟⠋⠀⠀⣼⡿⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⢷⣦⣀⠀⠀⠈⠙⠻⠿⢿⣿⣶⣶⡶⠶⠶⣤⣼⣿⣷⣄⣀⠀⠀⠀⠀⢀⣀⣤⡾⠋⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣶⣤⣄⡀⠀⠀⠈⠉⠙⠛⠓⠶⠶⠶⠆⠀⠉⠛⠛⢻⣾⣿⡿⠟⠋⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠿⢿⣶⣦⣄⡀⠀⠀⠀⠀⠀⢀⣶⣶⣶⡶⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠻⢷⣶⣶⣶⣶⠾⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"",
}, {
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣤⣤⣤⣤⣶⣦⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⡿⠛⠉⠙⠛⠛⠛⠛⠻⢿⣿⣷⣤⡀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠋⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠈⢻⣿⣿⡄⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⣸⣿⡏⠀⠀⠀⣠⣶⣾⣿⣿⣿⠿⠿⠿⢿⣿⣿⣿⣄⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⣿⣿⠁⠀⠀⢰⣿⣿⣯⠁⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣷⡄⠀",
"⠀⠀⣀⣤⣴⣶⣶⣿⡟⠀⠀⠀⢸⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⣿⣷⠀ ",
"⠀⢰⣿⡟⠋⠉⣹⣿⡇⠀⠀⠀⠘⣿⣿⣿⣿⣷⣦⣤⣤⣤⣶⣶⣶⣶⣿⣿⣿⠀",
"⠀⢸⣿⡇⠀⠀⣿⣿⡇⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀",
"⠀⣸⣿⡇⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠉⠻⠿⣿⣿⣿⣿⡿⠿⠿⠛⢻⣿⡇⠀⠀",
"⠀⣿⣿⠁⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣧⠀⠀",
"⠀⣿⣿⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀",
"⠀⣿⣿⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀",
"⠀⢿⣿⡆⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡇⠀⠀",
"⠀⠸⣿⣧⡀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠃⠀⠀",
"⠀⠀⠛⢿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⣰⣿⣿⣷⣶⣶⣶⣶⠶⠀⢠⣿⣿⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⣿⣿⡇⠀⣽⣿⡏⠁⠀⠀⢸⣿⡇⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⣿⣿⡇⠀⢹⣿⡆⠀⠀⠀⣸⣿⠇⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⢿⣿⣦⣄⣀⣠⣴⣿⣿⠁⠀⠈⠻⣿⣿⣿⣿⡿⠏⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠈⠛⠻⠿⠿⠿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
}, {
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣴⣆⣠⣤⠀⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣻⣿⣯⣘⠹⣧⣤⡀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠿⢿⣿⣷⣾⣯⠉⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⠜⣿⡍⠀⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⠁⠀⠘⣿⣆⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⡟⠃⡄⠀⠘⢿⣆⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣁⣋⣈ ⣤⣮⣿⣧⡀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣤⣤⣤⣤⣶⣦⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⡿⠛⠉⠙⠛⠛⠛⠛⠻⢿⣿⣷⣤⡀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠋⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠈⢻⣿⣿⡄⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⣸⣿⡏⠀⠀⠀⣠⣶⣾⣿⣿⣿⠿⠿⠿⢿⣿⣿⣿⣄⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⣿⣿⠁⠀⠀⢰⣿⣿⣯⠁⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣷⡄⠀",
"⠀⠀⣀⣤⣴⣶⣶⣿⡟⠀⠀⠀⢸⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣷⠀",
"⠀⢰⣿⡟⠋⠉⣹⣿⡇⠀⠀⠀⠘⣿⣿⣿⣿⣷⣦⣤⣤⣤⣶⣶⣶⣶⣿⣿⣿⠀",
"⠀⢸⣿⡇⠀⠀⣿⣿⡇⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀",
"⠀⣸⣿⡇⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠉⠻⠿⣿⣿⣿⣿⡿⠿⠿⠛⢻⣿⡇⠀⠀",
"⠀⣿⣿⠁⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣧⠀⠀",
"⠀⣿⣿⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀",
"⠀⣿⣿⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀",
"⠀⢿⣿⡆⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡇⠀⠀",
"⠀⠸⣿⣧⡀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠃⠀⠀",
"⠀⠀⠛⢿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⣰⣿⣿⣷⣶⣶⣶⣶⠶⠀⢠⣿⣿⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⣿⣿⡇⠀⣽⣿⡏⠁⠀⠀⢸⣿⡇⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⣿⣿⡇⠀⢹⣿⡆⠀⠀⠀⣸⣿⠇⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⢿⣿⣦⣄⣀⣠⣴⣿⣿⠁⠀⠈⠻⣿⣿⣿⣿⡿⠏⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠈⠛⠻⠿⠿⠿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⣵⣶⣬⣉⡻⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⠿⠿⠛⣃⣸⣿⣿⣿⣿⣿⣿⣷⣦⢸⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⢡⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣭⣙⠿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⡿⠿⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⢸⣿⣿⣿⣿",
"⣿⣿⣿⠋⣴⣾⣿⣿⣿⡟⠁⠄⠙⣿⣿⣿⣿⠁⠄⠈⣿⣿⣿⣿⣈⠛⢿⣿⣿",
"⣿⣿⣇⢸⣿⣿⣿⣿⣿⣿⣦⣤⣾⣿⣿⣿⣿⣦⣤⣴⣿⣿⣿⣿⣿⣷⡄⢿⣿",
"⣿⠟⣋⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢸⣿",
"⢁⣾⣿⣿⣿⣿⣿⡉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⣹⣿⣿⣿⣦⠙",
"⣾⣿⣿⣿⣿⣿⣿⣿⣦⣄⣤⣶⣿⣿⣿⣿⣿⣿⣷⣦⣄⣤⣾⣿⣿⣿⣿⣿⣧",
"⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏",
"⣷⣦⣙⠛⠿⢿⣿⣿⡿⠿⠿⠟⢛⣛⣛⡛⠻⠿⠿⠿⣿⣿⣿⣿⠿⠟⢛⣡⣾",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⣠⣤⣤⣤⣤⣤⣀⣀⠉⠻⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠄⣾⣬⣽⣿⣿⣿⣿⡿⢿⣿⣆⠈⢻⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⡿⢀⣞⡉⢩⣙⣿⡿⠉⠄⣠⣤⠤⠉⠄⠄⢿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⠁⣼⣿⣿⣯⣿⣿⠁⢰⣾⣦⡤⠄⢀⣶⡀⠸⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⡏⢀⣿⣿⣿⣿⣿⠟⠁⠄⠈⢿⣿⣿⣿⣿⡇⠄⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⠇⢸⣿⣿⡟⠛⠃⡠⠄⠄⠄⠈⣿⣿⣿⣿⡇⠄⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⠄⣿⣿⣿⣶⣾⣿⣿⣿⣤⣤⣄⣘⣿⣿⠁⡀⠄⢻⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⡇⢰⣿⣿⣿⣿⣿⣏⣉⣽⣿⣿⣿⣿⣿⣿⣿⣿⠄⢸⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⠄⣼⣿⣁⣸⣿⣿⣿⣿⣿⡿⠟⠉⠙⠋⠹⠟⠁⠄⢸⣿⣿⣿",
"⣿⣿⣿⣿⣿⡏⢀⣿⣿⣿⣿⠋⢠⣤⣤⣤⣤⠈⢿⣿⣷⣦⣄⠄⠄⢸⣿⣿⣿",
"⣿⠋⣀⣤⣄⣠⣼⣿⣿⣿⣿⡀⢹⣿⣿⣿⣿⠄⢸⣿⣿⣿⣿⣿⠄⢸⣿⣿⣿",
"⣧⠄⢿⣿⣿⣿⣿⣿⣿⣿⡿⠃⢸⠿⠛⠉⣁⣠⣿⣿⣿⣿⣿⣿⠄⣼⣿⣿⣿",
"⣿⣷⣄⣉⠉⠉⢉⣉⣉⣁⣤⣾⡏⠄⣾⣿⣿⣿⣿⣿⣿⣿⣿⡟⠄⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣈⠙⠛⠛⠟⠛⠛⢉⣁⣤⣾⣿⣿⣿⣿",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠛⠛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠘⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⣿⠀⠀⣄⣀⣈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⢀⣤⣿⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⢿⣿⡿⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠉⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⡛⠛⣻⣛⡏⢹⣿⣿⣛⠛⣛⣿⠿⢿⣿⠉⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⣿⠀⡇⢈⠰⣿⣿⠀⣿⠀⣶⡆⢹⠀⡁⢾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣤⣿⣤⣧⣼⣦⣼⣿⣤⣿⣦⣤⣴⣿⣤⣷⣤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
}, {
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠤⠲⠦⠉⠉⠉⠏⠉⠒⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠲⠃⢀⣤⠀⠀⠀⠲⠂⠀⠠⠆⠀⠙⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⢀⡔⠁⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⢀⠊⠁⠀⢁⡴⠚⠉⣉⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠠⠤⠔⠒⡄⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⡆⢰⠆⠀⠋⣠⠔⠉⠁⣀⡠⠄⠒⠂⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠔⠊⠁⠀⠀⠀⠀⠀⣠⡴⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⢠⡆⠀⠀⠀⡜⠁⣠⠔⠋⢁⡔⠒⠒⠤⡀⠀⠀⠀⠀⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠎⠀⠀⠀⢀⣀⣤⣶⡾⠋⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⡆⡶⠀⠀⢀⡜⠁⢀⣀⢸⠀⠀⠀⠀⠈⢆⠀⠀⡜⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠤⠊⠁⠀⢀⡀⣴⡿⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠰⡀⠀⠀⠘⠀⡞⠁⠀⠉⢇⠀⣿⣄⠀⠈⡆⠀⠕⠒⠉⣉⡒⡄⠀⠀⠀⠀⢀⠤⠊⠁⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⡀⠀⠀⢇⠀⣤⡄⠈⢢⡈⠻⡖⢀⡞⣀⠔⠊⠁⠀⠀⠉⠐⠒⠠⢎⢁⡠⠔⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⢂⠘⢿⣦⡇⠉⠓⢶⡫⠞⠁⣀⣤⣤⣤⣤⣤⣤⣤⠴⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢡⠦⠭⡇⠀⡠⠊⠀⣠⣮⣬⣿⣿⣿⣿⣿⣯⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠁⢀⠔⡧⠊⠀⢀⡜⠁⠙⣿⣿⣿⡿⠟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣀⣡⠎⠀⠀⢠⠊⠀⠀⠀⣸⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠃⠀⠀⣰⣧⣀⣀⡠⣴⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢧⣤⣤⣾⡿⠿⠋⠁⠀⢹⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠿⠛⠛⠛⠛⠻⢿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠁⡰⢤⣀⣀⡄⢠⠞⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
}, {
"",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠠⠤⠐⠒⠀⠉⠉⠉⠉⠉⠁⠒⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠄⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡴⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠢⠤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠲⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠙⣵⡀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⠖⣒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡖⠋⠉⠉⠙⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⢀⣠⡔⡆⠀⠀⠀⢀⢔⣒⠢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⣴⡿⡏⠀⡇⠀⠀⠀⠘⣼⣿⡇⡇⠀⠀⢀⡠⠤⢤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡁⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⣸⣿⣽⠣⠀⡇⠀⠀⠀⠐⠮⠭⠚⠀⠀⢠⡏⣶⣿⣧⢳⠀⢀⡀⠀⠀⠀⠀⠀⠀⠀⠠⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠃⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⢿⣯⢗⠀⠀⣱⠀⠀⠀⠀⠐⢗⠀⡄⡀⢎⢣⡹⠿⣣⠏⠀⠀⠉⠉⠉⠂⠀⠀⠀⠀⠀⠀⢜⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⢸⣗⡁⠀⡀⣿⣷⡀⠀⠀⠀⠀⠀⠀⠋⠀⠁⠈⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢑⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡎⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⢠⡿⠛⢳⢸⠏⠙⠿⢿⡦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡁⣿⡄⠀⠀⠀⠀⠀⢀⠀⠀⣠⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠉⠀⠀⠀⠫⠂⠀⠀⠈⠻⣮⣝⢦⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠄⠂⣡⡾⠟⠀⠀⠀⠀⠀⠄⠀⣠⣾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢷⣧⣈⠉⠑⠲⠒⠠⠤⠤⠤⠄⠂⠀⠒⠒⠀⠉⠀⠀⣐⡧⠡⠤⠤⡀⠀⠀⢀⣠⣴⣾⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠻⢿⣷⣶⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠟⣁⠀⠀⠀⠀⢸⣴⡾⠿⠟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠛⠻⠿⣿⣶⣶⣴⣮⣿⣾⣿⣿⡴⠋⠀⠀⠀⢀⡾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⣻⣿⠟⠀⠀⠀⠀⠀⠌⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⢄⡒⠶⠮⠸⠛⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⠇⣠⠄⢀⠠⠤⠄⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠴⠔⠊⠹⡔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"",
}, {
" lニヽ ",
"    |= | ",
"    |_ | ",
"  /⌒|~ |⌒i-、",
"  /| | | | ",
" ( ( ( ( ",
"       ",
"       /",
"       |",
}, {
"░░░░░░░░░░▀▀▀██████▄▄▄░░░░░░░░░░",
"░░░░░░░░░░░░░░░░░▀▀▀████▄░░░░░░░",
"░░░░░░░░░░▄███████▀░░░▀███▄░░░░░",
"░░░░░░░░▄███████▀░░░░░░░▀███▄░░░",
"░░░░░░▄████████░░░░░░░░░░░███▄░░",
"░░░░░██████████▄░░░░░░░░░░░███▌░",
"░░░░░▀█████▀░▀███▄░░░░░░░░░▐███░",
"░░░░░░░▀█▀░░░░░▀███▄░░░░░░░▐███░",
"░░░░░░░░░░░░░░░░░▀███▄░░░░░███▌░",
"░░░░▄██▄░░░░░░░░░░░▀███▄░░▐███░░",
"░░▄██████▄░░░░░░░░░░░▀███▄███░░░",
"░█████▀▀████▄▄░░░░░░░░▄█████░░░░",
"░████▀░░░▀▀█████▄▄▄▄█████████▄░░",
"░░▀▀░░░░░░░░░▀▀██████▀▀░░░▀▀██░░",
}, {
"⢀⡴⠑⡄⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
"⠸⡇⠀⠿⡀⠀⠀⠀⣀⡴⢿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠑⢄⣠⠾⠁⣀⣄⡈⠙⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⢀⡀⠁⠀⠀⠈⠙⠛⠂⠈⣿⣿⣿⣿⣿⠿⡿⢿⣆⠀⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⢀⡾⣁⣀⠀⠴⠂⠙⣗⡀⠀⢻⣿⣿⠭⢤⣴⣦⣤⣹⠀⠀⠀⢀⢴⣶⣆ ",
"⠀⠀⢀⣾⣿⣿⣿⣷⣮⣽⣾⣿⣥⣴⣿⣿⡿⢂⠔⢚⡿⢿⣿⣦⣴⣾⠁⠸⣼⡿ ",
"⠀⢀⡞⠁⠙⠻⠿⠟⠉⠀⠛⢹⣿⣿⣿⣿⣿⣌⢤⣼⣿⣾⣿⡟⠉⠀⠀⠀⠀⠀ ",
"⠀⣾⣷⣶⠇⠀⠀⣤⣄⣀⡀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀ ",
"⠀⠉⠈⠉⠀⠀⢦⡈⢻⣿⣿⣿⣶⣶⣶⣶⣤⣽⡹⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠉⠲⣽⡻⢿⣿⣿⣿⣿⣿⣿⣷⣜⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣷⣶⣮⣭⣽⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⣀⣀⣈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠻⠿⠿⠿⠿⠛⠉",
}, {
"⠀⠀⢀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⠀⠀⠀",
"⢠⣾⡿⠿⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀",
"⢸⣿⢠⠞⣩⡄⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠉⠉⠀⠀⠀⠀⠉⠛⢿⡆",
"⢸⣿⣄⣈⣉⣴⣿⣿⣿⣿⣿⣿⣿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⢸⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⢸⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⢸⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⢸⣿⣿⣿⡟⠁⠀⠀⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀",
"⢸⣿⣿⡏⠀⠀⢀⣴⣿⣿⣿⣿⣿⠿⠿⠿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀",
"⢸⣿⠏⠀⠀⢠⣿⣿⣿⣿⠟⠁⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀",
"⢸⡟⠀⠀⢠⣿⣿⣿⡟⠁⠀⢀⣠⣾⣿⣿⣿⡿⠋⣿⣿⣿⡇⠀⠀⠀⠀⠀",
"⠘⠀⠀⠀⢸⣿⣿⣿⠁⢀⣴⣿⣿⢿⣿⠿⠋⠀⢀⣿⣿⣿⠇⠀⠀⠀⣼⠀",
"⠀⠀⠀⠀⢸⣿⣿⣿⣶⣿⣿⣿⣿⠟⠁⠀⠀⢠⣾⣿⣿⡿⠀⠀⠀⣼⣿⠀",
"⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⠟⠁⠀⣀⣠⣶⣿⣿⣿⡿⠁⠀⠀⣼⣿⣿⠀",
"⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⢀⣾⣿⣿⣿⠀",
"⠀⠀⠀⠀⠀⠀⠀⠙⠻⠿⣿⣿⣿⣿⣿⠿⠟⠋⠀⠀⠀⣠⣾⣿⣿⣿⣿⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀",
"⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⠟⣋⠛⢿⣿⠀",
"⢸⣷⣤⣀⡀⠀⠀⠀⣀⣠⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠞⣡⡼⢸⣿⠀",
"⠈⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣥⣴⣿⠟⠀",
}, {
"",
"⠀⠀⠀⠀⣠⣶⡾⠏⠉⠙⠳⢦⡀⠀⠀⠀⢠⠞⠉⠙⠲⡀⠀",
"⠀⠀⠀⣴⠿⠏⠀⠀⠀⠀⠀⠀⢳⡀⠀⡏⠀⠀⠀⠀⠀⢷ ",
"⠀⠀⢠⣟⣋⡀⢀⣀⣀⡀⠀⣀⡀⣧⠀⢸⠀⠀⠀⠀⠀ ⡇",
"⢸⣯⡭⠁⠸⣛⣟⠆⡴⣻⡲⣿OK",
"⠀⠀⣟⣿⡭⠀⠀⠀⠀⠀⢱⠀⠀⣿⠀⢹⠀⠀⠀⠀⠀ ⡇",
"⠀⠀⠙⢿⣯⠄⠀⠀⠀⢀⡀⠀⠀⡿⠀⠀⡇⠀⠀⠀⠀⡼ ",
"⠀⠀⠀⠀⠹⣶⠆⠀⠀⠀⠀⠀⡴⠃⠀⠀⠘⠤⣄⣠⠞⠀ ",
"⠀⠀⠀⠀⠀⢸⣷⡦⢤⡤⢤⣞⣁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⢀⣤⣴⣿⣏⠁⠀⠀⠸⣏⢯⣷⣖⣦⡀⠀⠀⠀⠀⠀⠀",
"⢀⣾⣽⣿⣿⣿⣿⠛⢲⣶⣾⢉⡷⣿⣿⠵⣿⠀⠀⠀⠀⠀⠀",
"⣼⣿⠍⠉⣿⡭⠉⠙⢺⣇⣼⡏⠀⠀⠀⣄⢸⠀⠀⠀⠀⠀⠀",
"⣿⣿⣧⣀⣿.........⣀⣰⣏⣘⣆⣀⠀⠀ ",
}, {
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠰⠛⠻⢿⣿⠿⠿⠟⡿⠿⢿⣿⠿⠿⣿⠃⠀⠟⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⣴⡄⠀⠘⡇⠀⣤⣤⡇⠀⣼⣿⠀⢠⡏⠀⢠⣦⠀⠀⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠛⠃⠀⡼⠀⠀⣿⣿⠀⠀⠛⠃⠀⢸⠁⠀⣼⡏⠀⢠⡟⠉⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣶⣶⣶⣾⣷⣶⣾⣿⣿⣷⣶⣶⣶⣶⣿⣶⣶⣿⣷⣶⣾⣷⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿",
}, {
"⠄⠄⠄⠄⠄⠄⢀⣠⣤⣶⣶⣶⣤⣄⠄⠄⢀⣠⣤⣤⣤⣤⣀⠄⠄⠄⠄⠄⠄⠄",
"⠄⠄⠄⠄⢠⣾⣿⣿⣿⣿⠿⠿⢿⣿⣿⡆⣿⣿⣿⣿⣿⣿⣿⣷⡄⠄⠄⠄⠄⠄",
"⠄⠄⠄⣴⣿⣿⡟⣩⣵⣶⣾⣿⣷⣶⣮⣅⢛⣫⣭⣭⣭⣭⣭⣭⣛⣂⠄⠄⠄⠄",
"⠄⠄⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣭⠛⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠄",
"⣠⡄⣿⣿⣿⣿⣿⣿⣿⠿⢟⣛⣫⣭⠉⠍⠉⣛⠿⡘⣿⠿⢟⣛⡛⠉⠙⠻⢿⡄",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣶⣶⣶⣶⣶⣶⣭⣍⠄⣡⣬⣭⣭⣅⣈⣀⣉⣁⠄",
"⣿⣿⣿⣿⣿⣿⣿⣿⣶⣭⣛⡻⠿⠿⢿⣿⡿⢛⣥⣾⣿⣿⣿⣿⣿⣿⣿⠿⠋⠄",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⣩⣵⣾⣿⣿⣯⣙⠟⣋⣉⣩⣍⡁⠄⠄⠄",
"⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣷⡄⠄⠄",
"⣿⣿⣿⣿⣿⣿⡿⢟⣛⣛⣛⣛⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⡀⠄",
"⣿⣿⣿⣿⣿⡟⢼⣿⣯⣭⣛⣛⣛⡻⠷⠶⢶⣬⣭⣭⣭⡭⠭⢉⡄⠶⠾⠟⠁⠄",
"⣿⣿⣿⣿⣟⠻⣦⣤⣭⣭⣭⣭⣛⣛⡻⠿⠷⠶⢶⣶⠞⣼⡟⡸⣸⡸⠿⠄⠄⠄",
"⣛⠿⢿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠷⡆⣾⠟⡴⣱⢏⡜⠆⠄⠄⠄",
"⣭⣙⡒⠦⠭⣭⣛⣛⣛⡻⠿⠿⠟⣛⣛⣛⣛⡋⣶⡜⣟⣸⣠⡿⣸⠇⣧⡀⠄⠄",
"⣿⣿⣿⣿⣷⣶⣦⣭⣭⣭⣭⣭⣭⣥⣶⣶⣶⡆⣿⣾⣿⣿⣿⣷⣿⣸⠉⣷⠄⠄",
},{
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣶⣶⠀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⢸⣄⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠛⠀⠀⠹⣧⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⢠⠀⡄⠀⣿⠀⢀⣤⣤⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⢰⡏⠚⠀⠃⠀⣿⣴⠞⠉⢹⠀⠀",
"⠀⣀⡀⠀⠀⠀⠀⢀⣸⠇⠀⠀⠀⠀⠈⠀⠀⣀⡿⠀⠀",
"⢸⣟⠛⢳⣤⣤⡶⠛⠃⠀⣠⠀⠀⠀⠚⣶⡾⠟⠀⠀⠀",
"⠀⠉⢷⣤⣀⣀⣀⣀⣠⡾⠻⣧⡀⠀⠀⢘⣷⣄⣀⣤⣄",
"⠀⠀⠀⠈⠉⠉⠉⠉⠉⠀⠀⠘⠻⣦⣤⣈⣁⣀⣠⣾⠋",
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠀⠀",
} }

View file

@ -0,0 +1,173 @@
local fn = vim.fn
-- clone package manager if not existant
local intall_path = fn.stdpath("data").."/site/pack/packer/start/packer.nvim"
if fn.empty(fn.glob(intall_path)) > 0 then
fn.system({"git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", intall_path})
vim.cmd "packadd packer.nvim"
end
local function conf(module)
return "require('plugins.config." .. module .. "')"
end
return require("packer").startup(function(use)
--packer managing itself
use "wbthomason/packer.nvim"
-- Appereance ---------------------------------------------------
-- Lelegs -------------------------------------------------------
--statusline
use { "nvim-lualine/lualine.nvim",
requires = {"kyazdani42/nvim-web-devicons", opt = true},
config = function() require("plugins.config.lualine") end
}
--colorscheme
use { "navarasu/onedark.nvim", config = function() require("plugins.config.onedark") end}
-- nice line before lines
use { "lukas-reineke/indent-blankline.nvim", config = conf("indent-blankline")}
-- make spaces red
use { "ntpeters/vim-better-whitespace", config = conf("better-whitespace")}
-- signale für git
use { "lewis6991/gitsigns.nvim",
requires = {
'nvim-lua/plenary.nvim'
},
config = function()
require("gitsigns").setup {
}
end
}
use { 'kosayoda/nvim-lightbulb', config = conf("lightbulb") }
-- dressing macht refactoring fenster schöner
use { 'stevearc/dressing.nvim' }
-- Language Support ---------------------------------------------
-- leligs -------------------------------------------------------
--treesitter
use {
"nvim-treesitter/nvim-treesitter",
event = "BufRead",
config = conf("treesitter"),
}
--sane(I hope) default configs for a number of lsps ------------
use { "neovim/nvim-lspconfig" }
use { "ziglang/zig.vim" }
-- autocomplete wuhu -------------------------------------------
use {
"hrsh7th/nvim-cmp",
requires = { { "hrsh7th/cmp-buffer" },
{ "hrsh7th/cmp-path" },
{ "hrsh7th/cmp-cmdline" },
{ "petertriho/cmp-git" },
{ "hrsh7th/cmp-calc" },
{ "hrsh7th/cmp-nvim-lsp" },
{ "hrsh7th/cmp-nvim-lua" },
{ "hrsh7th/cmp-emoji" },
},
config = function() require("plugins.config.nvim-cmp") end
}
--snippet engine required for nvim cmp
use { "L3MON4D3/LuaSnip", after = "nvim-cmp" }
use { "saadparwaiz1/cmp_luasnip", after = "LuaSnip" }
--additional functionality for nvim cmp
-- function signature on hover
use { "ray-x/lsp_signature.nvim", after = "nvim-lspconfig",
config = function() require("lsp_signature").setup() end }
--pictograms in lsp completion
use { "onsails/lspkind-nvim" }
-- Addons ------------------------------------------------------
-- Lelugs ------------------------------------------------------
--file browser
use {
"nvim-neo-tree/neo-tree.nvim",
branch = "v2.x",
requires = {
"nvim-lua/plenary.nvim",
"kyazdani42/nvim-web-devicons", -- not strictly required, but recommended
"MunifTanjim/nui.nvim",
},
config = conf("neotree")
}
-- window picker to use with neotree
use {
's1n7ax/nvim-window-picker',
tag = 'v1.*',
config = function()
require'window-picker'.setup()
end,
}
--startup page
use {
"goolord/alpha-nvim",
requires = "kyazdani42/nvim-web-devicons",
config = function() require("plugins.config.alpha") end
}
--finder lel
use {
'nvim-telescope/telescope.nvim',
requires = { {"nvim-lua/plenary.nvim"},
{"nvim-treesitter/nvim-treesitter", opt =true},
{"kyazdani42/nvim-web-devicons", opt = true},
{"sudormrfbin/cheatsheet.nvim"},
{"nvim-telescope/telescope-fzf-native.nvim", run = 'make'} },
cmd = "Telescope",
config = conf("telescope")
}
-- make notification
use {
"rcarriga/nvim-notify"
}
-- undo tree weil badly needed
use { "simnalamburt/vim-mundo", config = conf("mundo") }
-- vim multi cursor witl malze meint es wäre gut
use { "mg979/vim-visual-multi", config = conf("vim-visual-multi") }
-- git in vim für die die es brauchen
use { "tpope/vim-fugitive" }
-- Plugins for editing wuhu
-- Surround shit pls
use { "tpope/vim-surround" }
-- Commenting
use { "numToStr/Comment.nvim", config = conf("comment") }
-- align thing according to shit
use { "junegunn/vim-easy-align" }
-- gpg edit in vim
use { "jamessan/vim-gnupg"}
end)

View file

@ -0,0 +1,55 @@
local M = {}
local if_nil = vim.F.if_nil
M.button = function(shortcut, txt, keybind, keybind_opts)
local opts = {
position = "center",
shortcut = shortcut,
cursor = 5,
width = 50,
align_shortcut = "right",
hl_shortcut = "Keyword",
}
if keybind then
keybind_opts = if_nil(keybind_opts, {noremap = true, silent = true})
opts.keymap = { "n", shortcut, keybind, keybind_opts }
end
local function on_press()
local key = vim.api.nvim_replace_termcodes(shortcut .. '<Ignore>', true, false, true)
vim.api.nvim_feedkeys(key, "normal", false)
end
return {
type = "button",
val = txt,
on_press = on_press,
opts = opts,
}
end
M.buttons = function(xs, spacing)
return {
type = "group",
val = xs,
opts = { spacing = if_nil(spacing, 1) }
}
end
M.text = function(value, hl)
return {
type = "text",
val = value,
opts = {
position = "center",
hl = hl,
}
}
end
M.pad = function(lines)
return { type = "padding", val = lines }
end
return M

27
data/pubkey.gpg Normal file
View file

@ -0,0 +1,27 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEYUOD7hYJKwYBBAHaRw8BAQdAZEmQrmzXN4nBaWWyVtI+xMbqPeX+XsPIkoHC
DEi5oj20KVBhdHJpY2sgR3Jvc3NtYW5uIDxwYXRyaWNrZGdyb0BnbWFpbC5jb20+
iJAEExYIADgWIQReTD10gMI1/i8L0j991qcuyJlhfQUCYUOD7gIbAQULCQgHAgYV
CgkICwIEFgIDAQIeAQIXgAAKCRB91qcuyJlhfZRdAQDaKEvbf3/V5fOipZrrJwGz
6uyFcweI3YL+GTMMTO5L1gD/fLJvcbll5hoGvMSLr/Be3dh+9jzap8Nvm8rwW+R8
qQy0NlBhdHJpY2sgR3Jvc3NtYW5uIChUVU0gS0VZKSA8cGF0cmljay5ncm9zc21h
bm5AdHVtLmRlPoiQBBMWCAA4FiEEXkw9dIDCNf4vC9I/fdanLsiZYX0FAmFDhYoC
GwEFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQfdanLsiZYX2HBgD+N2qb6mfJ
5yPuuDXxR2Khufrqxm/brRvOZA27lIJsxVsBAJrkgZ+9odKPXZNFkVqHPTJlhBz/
eWLYpAdujOQveg4BuDMEYUOEUxYJKwYBBAHaRw8BAQdAZRvIGN45HGNjFPCJk8M3
llPlTi3S8ke5SKD4dvYigcOI7wQYFggAIBYhBF5MPXSAwjX+LwvSP33Wpy7ImWF9
BQJhQ4RTAhsCAIEJEH3Wpy7ImWF9diAEGRYIAB0WIQQmAxoloW2M95H4rTRFH5Xv
uL7NDwUCYUOEUwAKCRBFH5XvuL7ND2RzAP9az8cD5ywv3Kcus/X3DYEC8b+bck8P
T7gWhI+JZkDyewEAj9rS4vJy8Un7F1j80D+5eb5wfXvJNHjKABjNjLxdiw98nAEA
kVABsZMvNdL8oEdKCiudFxGmVyPGvrhRQeOiuX5tnioA/j2hHplcNPYu1aTtaq/X
slL6KnKtFgeGdgO6t6zkewMPuDMEYUOEtxYJKwYBBAHaRw8BAQdANmLGSLHQp8q6
rtDX3CFLkVBCDnX8AkYHkGI0X/uH8syIeAQYFggAIBYhBF5MPXSAwjX+LwvSP33W
py7ImWF9BQJhQ4S3AhsgAAoJEH3Wpy7ImWF9qx4BAIAdDCSY260Xw8setwJUxTpD
4xu0pR8GQtb+svs4aDj7APsHhAJPrUpIN3SnCUD+e+N04OJwF5+aPCz2KhEEg343
D7g4BGFDhOASCisGAQQBl1UBBQEBB0CZAILTjqhibKl57jUo6Iy2dIffYDfSmvcW
yHA84y+IZgMBCAeIeAQYFggAIBYhBF5MPXSAwjX+LwvSP33Wpy7ImWF9BQJhQ4Tg
AhsMAAoJEH3Wpy7ImWF9fwwBALZ9WQjp62H4IclkwiHyDig2h++dmf8xWRNF+C/v
whwYAQCkvCIDKXpFMKP+dCNT8LbP/HQ4F1f8DFC48nHWIXCaAw==
=l8kc
-----END PGP PUBLIC KEY BLOCK-----

515
data/zshrc Normal file
View file

@ -0,0 +1,515 @@
# REQUIRES (execute as root):
# umask 022
source ${HOME}/.zsh/plugins//powerlevel10k/share/zsh-powerlevel10k/config/p10k-lean-8colors.zsh
# zsh histdb
typeset -g HISTDB_FILE="$HOME/.zsh_history.db"
# Use emacs-like key bindings by default:
bindkey -e
# Autoloading
autoload colors && colors
autoload add-zsh-hook
autoload zmv
autoload zed
if autoload history-search-end; then
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
fi
function bind2maps() {
local i sequence widget
local -a maps
while [[ "$1" != "--" ]]; do
maps+=( "$1" )
shift
done
shift
if [[ "$1" == "-s" ]]; then
shift
sequence="$1"
else
sequence="${key[$1]}"
fi
widget="$2"
[[ -z "$sequence" ]] && return 1
for i in "${maps[@]}"; do
bindkey -M "$i" "$sequence" "$widget"
done
}
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
function zle-smkx() {
emulate -L zsh
printf '%s' ${terminfo[smkx]}
}
function zle-rmkx() {
emulate -L zsh
printf '%s' ${terminfo[rmkx]}
}
function zle-line-init() {
zle-smkx
}
function zle-line-finish() {
zle-rmkx
}
zle -N zle-line-init
zle -N zle-line-finish
fi
typeset -A key
key=(
Home "${terminfo[khome]}"
End "${terminfo[kend]}"
Insert "${terminfo[kich1]}"
Delete "${terminfo[kdch1]}"
Up "${terminfo[kcuu1]}"
Down "${terminfo[kcud1]}"
Left "${terminfo[kcub1]}"
Right "${terminfo[kcuf1]}"
PageUp "${terminfo[kpp]}"
PageDown "${terminfo[knp]}"
BackTab "${terminfo[kcbt]}"
)
bind2maps emacs -- Home beginning-of-line
bind2maps emacs -- End end-of-line
bind2maps viins vicmd -- Home vi-beginning-of-line
bind2maps viins vicmd -- End vi-end-of-line
bind2maps emacs viins -- Insert overwrite-mode
bind2maps vicmd -- Insert vi-insert
bind2maps emacs -- Delete delete-char
bind2maps viins vicmd -- Delete vi-delete-char
bind2maps emacs viins vicmd -- Up up-line-or-search
bind2maps emacs viins vicmd -- Down down-line-or-search
bind2maps emacs -- Left backward-char
bind2maps viins vicmd -- Left vi-backward-char
bind2maps emacs -- Right forward-char
bind2maps viins vicmd -- Right vi-forward-char
bind2maps emacs viins -- -s '^xp' history-beginning-search-backward-end
bind2maps emacs viins -- -s '^xP' history-beginning-search-forward-end
bind2maps emacs viins -- PageUp history-beginning-search-backward-end
bind2maps emacs viins -- PageDown history-beginning-search-forward-end
bind2maps emacs viins -- -s ' ' magic-space
# Use Ctrl-left-arrow and Ctrl-right-arrow for jumping to word-beginnings on
# the command line.
# kitty: Shift-Left/Right
bind2maps emacs viins vicmd -- -s '\e[1;2C' forward-word
bind2maps emacs viins vicmd -- -s '\e[1;2D' backward-word
# kitty: Alt-Left/Right
bind2maps emacs viins vicmd -- -s '\e[1;3C' forward-word
bind2maps emacs viins vicmd -- -s '\e[1;3D' backward-word
# kitty: Ctrl-Del
bind2maps emacs viins vicmd -- -s '\e[3;5~' kill-line
# Key bindings
bind2maps emacs viins vicmd -- -s '^H' backward-kill-line
bind2maps emacs viins vicmd -- -s '^P' expand-or-complete-prefix
# Enable partial search using up and down keys for completion
bind2maps emacs viins vicmd -- -s '^[[A' history-beginning-search-backward-end
bind2maps emacs viins vicmd -- -s '^[[B' history-beginning-search-forward-end
bind2maps emacs viins vicmd -- -s '\eOA' history-beginning-search-backward-end
bind2maps emacs viins vicmd -- -s '\eOB' history-beginning-search-forward-end
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false
typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true
# The list of segments shown on the left. Fill it with the most important segments.
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
# os_icon # os identifier
context # user@hostname
dir # current directory
vcs # git status
prompt_char # prompt symbol
)
# The list of segments shown on the right. Fill it with less important segments.
# Right prompt on the last prompt line (where you are typing your commands) gets
# automatically hidden when the input line reaches it. Right prompt above the
# last prompt line gets hidden if it would overlap with left prompt.
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
status # exit code of the last command
command_execution_time # duration of the last command
background_jobs # presence of background jobs
direnv # direnv status (https://direnv.net/)
asdf # asdf version manager (https://github.com/asdf-vm/asdf)
virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html)
anaconda # conda environment (https://conda.io/)
pyenv # python environment (https://github.com/pyenv/pyenv)
goenv # go environment (https://github.com/syndbg/goenv)
nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv)
nvm # node.js version from nvm (https://github.com/nvm-sh/nvm)
nodeenv # node.js environment (https://github.com/ekalinin/nodeenv)
# node_version # node.js version
# go_version # go version (https://golang.org)
# rust_version # rustc version (https://www.rust-lang.org)
# dotnet_version # .NET version (https://dotnet.microsoft.com)
# php_version # php version (https://www.php.net/)
# laravel_version # laravel php framework version (https://laravel.com/)
# java_version # java version (https://www.java.com/)
# package # name@version from package.json (https://docs.npmjs.com/files/package.json)
rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv)
rvm # ruby version from rvm (https://rvm.io)
fvm # flutter version management (https://github.com/leoafarias/fvm)
luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv)
jenv # java version from jenv (https://github.com/jenv/jenv)
plenv # perl version from plenv (https://github.com/tokuhirom/plenv)
phpenv # php version from phpenv (https://github.com/phpenv/phpenv)
scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv)
haskell_stack # haskell version from stack (https://haskellstack.org/)
kubecontext # current kubernetes context (https://kubernetes.io/)
terraform # terraform workspace (https://www.terraform.io)
aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
azure # azure account name (https://docs.microsoft.com/en-us/cli/azure)
gcloud # google cloud cli account and project (https://cloud.google.com/)
google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production)
#context # user@hostname
nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
ranger # ranger shell (https://github.com/ranger/ranger)
nnn # nnn shell (https://github.com/jarun/nnn)
vim_shell # vim shell indicator (:sh)
midnight_commander # midnight commander shell (https://midnight-commander.org/)
nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
# vpn_ip # virtual private network indicator
# load # CPU load
# disk_usage # disk usage
# ram # free RAM
# swap # used swap
todo # todo items (https://github.com/todotxt/todo.txt-cli)
timewarrior # timewarrior tracking status (https://timewarrior.net/)
# taskwarrior # taskwarrior task count (https://taskwarrior.org/)
time # current time
# ip # ip address and bandwidth usage for a specified network interface
# public_ip # public IP address
# proxy # system-wide http/https/ftp proxy
# battery # internal battery
# wifi # wifi speed
# example # example user-defined segment (see prompt_example function below)
)
# No color prompt symbol
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=
# Default prompt symbol.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='$'
# Prompt symbol in command vi mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION=':'
# Prompt symbol in visual vi mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V'
# Prompt symbol in overwrite vi mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶'
# Default context color without privileges
typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=6
# Context color when running with privileges.
typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1
# Context color in SSH without privileges.
typeset -g POWERLEVEL9K_CONTEXT_REMOTE_FOREGROUND=2
# Context color in SSH with privileges.
typeset -g POWERLEVEL9K_CONTEXT_REMOTE_SUDO_FOREGROUND=1
# Context format when running with privileges: user@(bold)hostname.
typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%n%B@%m'
# Context format when in SSH without privileges: user@hostname.
typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='ssh://%n%B@%m'
# Default context format (no privileges, no SSH): user@hostname.
typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n%B@%m'
# No directory icons
typeset -g POWERLEVEL9K_DIR_{,NOT_WRITABLE_}VISUAL_IDENTIFIER_EXPANSION=""
# Disable instant prompt
typeset -g POWERLEVEL9K_INSTANT_PROMPT=off
# Don't show context unless running with privileges or in SSH.
# Tip: Remove the next line to always show context.
unset POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION
# Completion
autoload -Uz compinit
compinit
# Make sure the completion system is initialised
(( ${+_comps} )) || return 1
# Don't insert tabs when there is no completion (e.g. beginning of line)
zstyle ':completion:*' insert-tab false
# allow one error for every three characters typed in approximate completer
zstyle ':completion:*:approximate:' max-errors 'reply=( $((($#PREFIX+$#SUFFIX)/3 )) numeric )'
# don't complete backup files as executables
zstyle ':completion:*:complete:-command-::commands' ignored-patterns '(aptitude-*|*\~)'
# start menu completion only if it could find no unambiguous initial string
zstyle ':completion:*:correct:*' insert-unambiguous true
zstyle ':completion:*:corrections' format $'%{\e[0;31m%}%d (errors: %e)%{\e[0m%}'
zstyle ':completion:*:correct:*' original true
# activate color-completion
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
# format on completion
zstyle ':completion:*:descriptions' format $'\e[0;31mcompleting \e[1m%d\e[0m'
# insert all expansions for expand completer
zstyle ':completion:*:expand:*' tag-order all-expansions
zstyle ':completion:*:history-words' list false
# activate menu
zstyle ':completion:*:history-words' menu yes
# ignore duplicate entries
zstyle ':completion:*:history-words' remove-all-dups yes
zstyle ':completion:*:history-words' stop yes
# match uppercase from lowercase
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# separate matches into groups
zstyle ':completion:*:matches' group 'yes'
zstyle ':completion:*' group-name ''
if [[ "$NOMENU" -eq 0 ]] ; then
# if there are more than 5 options allow selecting from a menu
zstyle ':completion:*' menu select=5
else
# don't use any menus at all
setopt no_auto_menu
fi
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:options' auto-description '%d'
# describe options in full
zstyle ':completion:*:options' description 'yes'
# on processes completion complete all user processes
zstyle ':completion:*:processes' command 'ps -au$USER'
# offer indexes before parameters in subscripts
zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
# provide verbose completion information
zstyle ':completion:*' verbose true
# recent (as of Dec 2007) zsh versions are able to provide descriptions
# for commands (read: 1st word in the line) that it will list for the user
# to choose from. The following disables that, because it's not exactly fast.
zstyle ':completion:*:-command-:*:' verbose false
# set format for warnings
zstyle ':completion:*:warnings' format $'%{\e[0;31m%}No matches for:%{\e[0m%} %d'
# define files to ignore for zcompile
zstyle ':completion:*:*:zcompile:*' ignored-patterns '(*~|*.zwc)'
zstyle ':completion:correct:' prompt 'correct to: %e'
# Ignore completion functions for commands you don't have:
zstyle ':completion::(^approximate*):*:functions' ignored-patterns '_*'
# Provide more processes in completion of programs like killall:
zstyle ':completion:*:processes-names' command 'ps c -u ${USER} -o command | uniq'
# complete manual by their section
zstyle ':completion:*:manuals' separate-sections true
zstyle ':completion:*:manuals.*' insert-sections true
zstyle ':completion:*:man:*' menu yes select
# Search path for sudo completion
zstyle ':completion:*:sudo:*' command-path \
/usr/local/sbin \
/usr/local/bin \
/usr/sbin \
/usr/bin \
/sbin \
/bin
# provide .. as a completion
zstyle ':completion:*' special-dirs ..
# run rehash on completion so new installed program are found automatically:
function _force_rehash() {
(( CURRENT == 1 )) && rehash
return 1
}
# No correction
zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _files _ignored
# use generic completion system for programs not yet defined; (_gnu_generic works
# with commands that provide a --help option with "standard" gnu-like output.)
for compcom in cp deborphan df feh fetchipac gpasswd head hnb ipacsum mv pal stow uname ; do
[[ -z ${_comps[$compcom]} ]] && compdef _gnu_generic ${compcom}
done; unset compcom
# see upgrade function in this file
compdef _hosts upgrade
# History settings
HISTFILE=~/.zsh_history
HISTSIZE=1000000
SAVEHIST=1005000
# Append history when zsh exits
setopt append_history
# Also save timestamp and duration
setopt extended_history
# Ignore commands beginning with a space
setopt hist_ignore_space
# Remove repeated duplicates
setopt hist_ignore_dups
# Remove trailing whitespace from history
setopt hist_reduce_blanks
# Save history after each command
setopt inc_append_history
# If history is full, delete oldest duplicate commands first
setopt hist_expire_dups_first
# When a history line is selected from expansion, don't execute but fill line buffer
setopt hist_verify
# Emit an error when a glob has no match
setopt nomatch
# Allow extended globbing
setopt extendedglob
# * shouldn't match dotfiles. ever.
setopt noglobdots
# Whenever a command completion is attempted, make sure the entire
# command path is hashed first.
setopt hash_list_all
# Change directory by typing the directory name
setopt auto_cd
# Automatically pushd on cd to have a directory stack
setopt auto_pushd
# Don't push the same dir twice
setopt pushd_ignore_dups
# Display PID when suspending processes as well
setopt longlistjobs
# Don't send SIGHUP to background processes when the shell exits
setopt nohup
# Report the status of background jobs immediately
setopt notify
# Allow comments in interactive shells
setopt interactive_comments
# Don't beep
setopt nobeep
# Don't try to correct inputs
setopt nocorrect
# Allow in-word completion
setopt completeinword
# Don't autocorrect commands
setopt no_correct_all
# Allow completion from within a word/phrase
setopt complete_in_word
# List choices on ambiguous completions
setopt auto_list
# Use menu completion if requested explicitly
setopt auto_menu
# Move cursor to end of word if there was only one match
setopt always_to_end
# Ignore certain commands in history
HISTORY_IGNORE_REGEX='^(.|. |..|.. |rm .*|rmd .*|git fixup.*|git unstash|git stash.*|git checkout -f.*|l .*|ll .*|ls .*)$'
function zshaddhistory() {
emulate -L zsh
[[ ! $1 =~ "$HISTORY_IGNORE_REGEX" ]]
}
# Start ssh-agent if not already running
# if ! pgrep -c -u "$USER" ssh-agent &>/dev/null; then
# ssh-agent -t 4h -s | grep -Fv 'echo' > ~/.ssh/ssh-agent-env \
# && source ~/.ssh/ssh-agent-env
# elif [[ -e ~/.ssh/ssh-agent-env ]]; then
# source ~/.ssh/ssh-agent-env
# else
# echo "error: could not start 'ssh-agent'" >&2
# fi
# Aliases
alias l="ls -lahF --group-directories-first --show-control-chars --quoting-style=escape --color=auto"
alias ll="ls -lahF --group-directories-first --show-control-chars --quoting-style=escape --color=auto"
alias t="tree -F --dirsfirst -L 2"
alias tt="tree -F --dirsfirst -L 3 --filelimit 16"
alias ttt="tree -F --dirsfirst -L 6 --filelimit 16"
alias md="mkdir"
alias rmd="rm -d"
#because 2 less keys is still only half the work
alias ta="task"
alias tat="taskwarrior-tui"
#what the fuck is going on here????
alias cpr="rsync -axHAWXS --numeric-ids --info=progress2"
alias cp="cp -vi"
alias mv="mv -vi"
alias rm="rm -I"
alias chmod="chmod -c --preserve-root"
alias chown="chown -c --preserve-root"
alias -s {md,txt,cpp,hpp,h,c}=vim
alias ip="ip --color"
alias tmux="tmux -2"
alias rg="rg -S"
#tar any number of given filen and compress them
alias comptar="tar -c -f archive.tar.xz -v -I 'pixz -9'"
#random functions
#compress all files in current directory excluding folders and already compressed files
function compressAll() {
for i in $(ls -p | grep -E -v "/|(.xz|.gz|.zip)")
do
echo "compressing: " $i
pixz -9 $i
done
}
#extract random file
function ex () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.tar.xz) tar xfJ $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via ex()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
# Aliases when X is running
if xset q &>/dev/null; then
alias zf="zathura --fork" #pdf viewer
fi
alias vi="nvim"
alias vim="nvim"
# Set umask
umask 077
alias luamake=/home/patrick/.local/share/nvim/lua-language-server/3rd/luamake/luamake

View file

@ -0,0 +1,45 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc"];
boot.initrd.kernelModules = [];
boot.supportedFilesystems = ["ntfs"];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "rpool/ROOT/nixos";
fsType = "zfs";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/BC47-8FB9";
fsType = "vfat";
};
swapDevices = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s20f0u2u4.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
# high-resolution display
hardware.video.hidpi.enable = lib.mkDefault true;
}

71
users/common/default.nix Normal file
View file

@ -0,0 +1,71 @@
{ config, pkgs, ...} :
{
programs.fzf.enable = true;
home.packages = with pkgs; [
sqlite
bat
ripgrep
];
programs.gpg = {
enable = true;
scdaemonSettings.disable-ccid = true;
publicKeys = [
{ source = ../../data/pubkey.gpg;
trust = 5;
}
{ source = ../../data/newpubkey.gpg;
trust = 5;
}
];
};
services.gpg-agent = {
enable = true;
enableSshSupport = true;
};
programs.git.signing = {
key = null;
signByDefault = true;
};
programs.zsh = {
enable = true;
initExtra = builtins.readFile ../../data/zshrc;
plugins = [
{ name = "powerlevel10k";
file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme";
src = pkgs.zsh-powerlevel10k;
}
{ name = "fzf-tab";
file = "share/fzf-tab/fzf-tab.plugin.zsh";
src = pkgs.zsh-fzf-tab;
}
{ name = "fast-syntax-highlighting";
file = "share/zsh/site-functions/fast-syntax-highlighting.plugin.zsh";
src = pkgs.zsh-fast-syntax-highlighting;
}
{ name = "zsh-histdb";
file = "sqlite-history.zsh";
src = pkgs.fetchFromGitHub {
owner = "larkery";
repo = "zsh-histdb";
rev = "30797f0";
sha256 = "PQIFF8kz+baqmZWiSr+wc4EleZ/KD8Y+lxW2NT35/bg=";
};
}
#{ name = "zsh-histdb-skim";
# file = "zsh-histdb-skim.zsh";
# src = pkgs.fetchFromGitHub {
# owner = "m42e";
# repo = "zsh-histdb-skim";
# rev = "v0.8.1";
# sha256 = "pcXSGjOKhN2nrRErggb8JAjw/3/bvTy1rvFhClta1Vs=";
# };
#}
];
};
}

11
users/common/desktop.nix Normal file
View file

@ -0,0 +1,11 @@
{
config,
pkgs,
...}:
{
home.packages = with pkgs; [
zathura
pinentry
arandr
];
}

View file

@ -0,0 +1,85 @@
{
config,
pkgs,
lib,
...
}: let
# set the modifier key to WIN
MOD = "Super";
#set the default resize step for herbstluft
RESIZE_STEP = 0.05;
TAGS = map toString (lib.lists.range 1 9);
in {
home.file.".xinitrc".source = ../../data/herbstluftwm/xinitrc;
xsession.windowManager.herbstluftwm = {
enable = true;
package = pkgs.herbstluftwm.overrideAttrs (finalAttrs: previousAttrs: {
doCheck = false;
});
extraConfig = ''
herbstclient set auto_detect_monitors 1
autorandr -c
herbstclient detect_monitors
herbstclient merge_tag default
herbstclient attr theme.tiling.reset 1
herbstclient attr theme.floating.reset 1
herbstclient attr theme.active.color "#9fbc00"
herbstclient attr theme.normal.color "#454545"
herbstclient attr theme.urgent.color orange
herbstclient attr theme.inner_width 1
herbstclient attr theme.inner_color black
herbstclient attr theme.border_width 3
herbstclient attr theme.floating.border_width 4
herbstclient attr theme.floating.outer_width 1
herbstclient attr theme.floating.outer_color black
herbstclient attr theme.active.inner_color "#3E4A00"
herbstclient attr theme.active.outer_color "#3E4A00"
herbstclient attr theme.background_color "#141414"
'';
tags = TAGS;
mousebinds = {
"${MOD}-Button1" = "move";
"${MOD}-Button2" = "zoom";
"${MOD}-Button3" = "resize";
};
keybinds = import ../../data/herbstluftwm/keybinds.nix MOD TAGS;
settings = {
"default_frame_layout" = 3;
"frame_border_active_color" = "#222222";
"frame_border_normal_color" = "#101010";
"frame_bg_normal_color" = "#565656";
"frame_bg_active_color" = "#345F0C";
"frame_border_width" = 1;
"always_show_frame" = 1;
"frame_bg_transparent" = 1;
"frame_transparent_width" = 5;
"frame_gap" = 4;
"window_gap" = 0;
"frame_padding" = 0;
"smart_window_surroundings" = 0;
"smart_frame_surroundings" = 1;
"mouse_recenter_gap" = 0;
"tree_style" = " ";
};
rules = [
# Focus new clients by default
"focus=on"
# Focus dialogs
"windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on"
# Do not manage windows of type NOTIFICATION, DOCK, DESKTOP
"windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off"
# Use pseudotiles for windows of type DIALOG, UTILITY, SPLASH
"windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' pseudotile=on"
];
};
}

79
users/common/kitty.nix Normal file
View file

@ -0,0 +1,79 @@
{
config,
pkgs,
...
}: {
programs.kitty = {
enable = true;
package = pkgs.kitty.overrideAttrs (finalAttrs: prevAttrs: {
doCheck = false;
});
font = {
package = pkgs.nerdfonts;
name = "FiraCode Nerd Font";
size = 10;
};
settings = {
# Use xterm-256color because copying terminfo-kitty is painful.
term = "xterm-256color";
# Do not wait for inherited child processes.
close_on_child_death = "yes";
# Disable ligatures.
disable_ligatures = "always";
# Modified onehalfdark color scheme
foreground = "#c9d3e5";
background = "#090a0c";
cursor = "#cccccc";
color0 = " #090a0c";
color8 = " #393e48";
color1 = " #b2555d";
color9 = " #e06c75";
color2 = " #81a566";
color10 = "#98c379";
color3 = " #ccab6e";
color11 = "#e6c17c";
color4 = " #5395cc";
color12 = "#61afef";
color5 = " #9378de";
color13 = "#c678dd";
color6 = " #cc9c66";
color14 = "#e5ab69";
color7 = " #979eab";
color15 = "#abb2bf";
selection_foreground = "#282c34";
selection_background = "#979eab";
# Disable cursor blinking
cursor_blink_interval = "0";
# Big fat scrollback buffer
scrollback_lines = "100000";
# Set scrollback buffer for pager in MB
scrollback_pager_history_size = "256";
# Don't copy on select
copy_on_select = "no";
# Set program to open urls with
open_url_with = "xdg-open";
# Fuck the bell
enable_audio_bell = "no";
};
keybindings = {
# Keyboard mappings
"shift+page_up" = "scroll_page_up";
"shift+page_down" = "scroll_page_down";
"ctrl+shift+." = "change_font_size all -2.0";
};
extraConfig = ''
# Use nvim as scrollback pager
scrollback_pager nvim -u NONE -c "set nonumber nolist showtabline=0 foldcolumn=0 laststatus=0" -c "autocmd TermOpen * normal G" -c "silent write! /tmp/kitty_scrollback_buffer | te head -c-1 /tmp/kitty_scrollback_buffer; rm /tmp/kitty_scrollback_buffer; cat"
'';
};
}

22
users/default.nix Normal file
View file

@ -0,0 +1,22 @@
{
config,
pkgs,
...
}: let
home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/master.tar.gz";
in {
imports = [
(import "${home-manager}/nixos")
];
home-manager.users.patrick.imports = [./patrick.nix];
home-manager.users.root = {
imports = [ ./common ];
programs.neovim.enable = true;
programs.git.enable = true;
xdg.configFile.nvim = {
recursive = true;
source = ../data/nvim;
};
home.stateVersion = "23.05";
};
}

36
users/patrick.nix Normal file
View file

@ -0,0 +1,36 @@
{
config,
pkgs,
...
}: {
home = {
stateVersion = "23.05";
packages = with pkgs; [
firefox
thunderbird
discord
];
};
imports = [
common/kitty.nix
common/herbstluftwm.nix
common/desktop.nix
./common ];
nixpkgs.config.allowUnfree = true;
xsession.enable = true;
programs.neovim = {
enable = true;
viAlias = true;
vimAlias = true;
vimdiffAlias = true;
#withNodes = true;
};
programs.git.enable = true;
programs.zsh.enable = true;
xdg.configFile.nvim = {
recursive = true;
source = ../data/nvim;
};
}